Générateur aléatoireIl nous faut maintenant générer un facteur aléatoire compris en n et (n+Δn). Pour l'instant on le prendra uniformément distribué, mais il serait souhaitable dans la suite de modifier le générateur aléatoire pour compenser la dépendance des fréquences en 1/n... Pour générer un nombre pseudo-aléatoire entre n et (n+Δn), on va le générer entre 0 et 1, on le multipliera par Δn, et on ajoutera n. C'est pour cela qu'on parle depuis le début de n et (n+Δn) et non pas de nmin et nmax... La génération d'un nombre pseudo aléatoire compris en 0 et 1 sera fait au moyen d'un LFSR. Ce ne sont pas les meilleurs générateurs aléatoires (ce sont même presque les pires...), mais ils ont le mérite d'être faciles à implémenter, et extrêmement rapides. Il en existe deux formes :
Pour plus de précision sur les LFSR, on pourra se rapporter cette page de New Wave Instruments. Pour nous, nous avons choisi un LFSR de Galois sur 32 bits à 16 taps, correspondant au polynôme générateur suivant : P=x^{32}+x^{31}+x^{28}+x^{27}+x^{24}+x^{23}+x^{20}+x^{19}+x^{18}+x^{15}+x^{12}+x^{11}+x^{8}+x^{7}+x^{3}+x^{2}+1 Le code du LFSR est disponible ici. Le LFSR nous sort un nombre pseudo-aléatoire sur 32 bits. Il faut maintenant en extraire un nombre sur 11 bits (qui sera considéré comme la partie décimale de 0,xxx) et le multiplier par Δn (appelé Pour cela, on utilise une machine à états basique :
Le module réalisant cette fonction est appelé
|
|||||||||




