L'une des meilleures façons de créer une onde sinusoïdale est d'utiliser un phaseur complexe avec une mise à jour récursive. C'est à dire
z[n+1]=z[n]Ω
où z [n] est le phaseur, , avec étant la fréquence angulaire de l'oscillateur en radians et l'indice de l'échantillon. Les parties réelle et imaginaire de sont des ondes sinusoïdales, elles sont déphasées de 90 degrés. Très pratique si vous avez besoin à la fois de sinus et de cosinus. Un seul calcul d'échantillon ne nécessite que 4 multiples et 4 ajouts et est BEAUCOUP moins cher que tout ce qui contient sin () cos () ou tables de recherche. Le problème potentiel est que l'amplitude peut dériver dans le temps en raison de problèmes de précision numérique. Cependant, il est assez simple de réparer cela. Disons que . Nous savons que doit avoir une grandeur unitaire, c'est-à-dire Ω=exp(jω)ωnz[n]z[n]=a+jbz[n]
a⋅a+b⋅b=1
Nous pouvons donc vérifier de temps en temps si c'est toujours le cas et corriger en conséquence. La correction exacte serait
z′[n]=z[n]a⋅a+b⋅b−−−−−−−−−√
C'est un calcul gênant mais comme est très proche de l'unité, vous pouvez approximer les termes avec une expansion de Taylor autour de et nous obtenonsa⋅a+b⋅b1/x−−√x=1
1x−−√≅3−x2
de sorte que la correction se simplifie
z′[n]=z[n]3−a2−b22
L'application de cette simple correction toutes les quelques centaines d'échantillons maintiendra l'oscillateur stable pour toujours.
Pour faire varier la fréquence en continu, le multiplicateur W doit être mis à jour en conséquence. Même un changement non continu du multiplicateur maintiendra une fonction d'oscillateur continue. Si une augmentation de fréquence est nécessaire, la mise à jour peut être décomposée en quelques étapes ou vous pouvez utiliser le même algorithme d'oscillateur pour mettre à jour le multiplicateur lui-même (car il s'agit également d'un phaseur complexe à gain unitaire).