gauss

gauss — Générateur de nombres aléatoires de distribution gaussienne.

Description

Générateur de nombres aléatoires de distribution gaussienne. C'est un générateur de bruit de classe x.

Syntaxe

ares gauss krange
ires gauss krange
kres gauss krange

Exécution

krange -- l'intervalle des nombres aléatoires (-krange à +krange). Produit des nombres positifs et négatifs.

gauss retourne des nombres aléatoires suivant une distribution normale centrée sur 0 (mu = 0.0) avec une variance (sigma) de krange / 3.83. Ainsi plus de 99.99% des valeurs aléatoires générées sont comprises entre -krange et +krange. Si l'on veut une valeur moyenne différente de 0.0, il faut ajouter cette valeur moyenne à chaque nombre généré (voir l'exemple ci-dessous).

Pour des explications plus détaillées sur ces distributions, consulter :

  1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286

  2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.

Exemples

Voici un exemple de l'opcode gauss. Il utilise le fichier gauss.csd.

Exemple 360. Exemple de l'opcode gauss.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
  -d -o dac
</CsOptions>
<CsInstruments>
instr 1
irange   = p4
imu      = p5
isamples = p6
indx     = 0
icount   = 1
ix       = 0.0
ix2      = 0.0

loop:
i1       gauss   irange
i1       =       i1 + imu
ix       =       ix + i1
ix2      =       ix2 + i1*i1
if i1 >= -(irange+imu) && i1 <= (irange+imu) then
  icount = icount+1
endif
         loop_lt indx, 1, isamples, loop
        
imean    =       ix / isamples                         ;mean value
istd     =       sqrt(ix2/isamples - imean*imean)      ;standard deviation
         prints "mean = %3.3f, std = %3.3f, ", imean, istd
         prints "samples inside the given range: %3.3f\%\n", icount*100.0/isamples
endin
</CsInstruments>
<CsScore>
i 1 0   0.1 1.0   0   100000  ; range = 1, mu = 0.0, sigma = 1/3.83 = 0.261
i 1 0.1 0.1 3.83  0   100000  ; range = 3.83, mu = 0.0, sigma = 1
i 1 0.2 0.1 5.745 2.7 100000  ; range = 5.745, mu = 2.7, sigma = 5.745/3.83 = 1.5
</CsScore>
</CsoundSynthesizer>


Sa sortie contiendra des ligne comme celles-ci :

mean = 0.000, std = 0.260, samples inside the given range: 99.993%
mean = 0.005, std = 0.999, samples inside the given range: 99.998%
mean = 2.700, std = 1.497, samples inside the given range: 100.000%

Voir aussi

seed, betarand, bexprnd, cauchy, exprand, linrand, pcauchy, poisson, trirand, unirand, weibull

Crédits

Auteur : Paris Smaragdis
MIT, Cambridge
1995

Précisions sur mu et sigma ajoutées par François Pinot après une discussion avec Joachim Heintz sur la liste de Csound, Décembre 2010.

Exemple écrit par François Pinot, adapté d'un fichier csd de Joachim Heintz, Décembre 2010.

Existait dans la version 3.30