gauss — Générateur de nombres aléatoires de distribution gaussienne.
Générateur de nombres aléatoires de distribution gaussienne. C'est un générateur de bruit de classe x.
ares gauss krange
ires gauss irange
kres gauss krange
ares gauss kmean, ksdev
ires gauss imean, isdev
kres gauss kmean, ksdev
krange -- l'intervalle des nombres aléatoires (-krange à +krange). Produit des nombres positifs et négatifs.
kmean -- moyenne de la distribution normale.
ksdev -- écart-type de la distribution normale.
La première version de 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).
La seconde version prend la moyenne et l'écart-type en paramètres. Elle utilise l'algorithme de Box-Muller, plus solide mathématiquement, pour calculer la distribution normale.
Pour des explications plus détaillées sur ces distributions, consulter :
C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286
D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Voici un exemple de l'opcode gauss. Il utilise le fichier gauss.csd.
Exemple 408. 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%
seed, betarand, bexprnd, cauchy, exprand, linrand, pcauchy, poisson, trirand, unirand, weibull
Auteur (première version) : Paris Smaragdis |
MIT, Cambridge |
1995 |
Auteur (seconde version) : Victor Lazzarini |
Université de Maynooth, Irelande |
2020 |
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