gauss
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## 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 irange

    kres gauss krange

    ares gauss kmean, ksdev

    ires gauss imean, isdev

    kres gauss kmean, ksdev

## Exécution

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 :

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 403. 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 (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

Précédent | Niveau supérieur | Suivant
gtf | Sommaire | gaussi