Jednym z najlepszych sposobów na utworzenie fali sinusoidalnej jest użycie złożonego fazora z aktualizacją rekurencyjną. To znaczy
z[n+1]=z[n]Ω
gdzie z [n] jest wskaźnikiem, , gdzie jest częstotliwością kątową oscylatora w radianach, a wskaźnikiem próby. Zarówno rzeczywista, jak i wyobrażona część są falami sinusoidalnymi, są o 90 stopni poza fazą. Bardzo wygodne, jeśli potrzebujesz zarówno sinusa, jak i cosinusa. Obliczenie pojedynczej próbki wymaga tylko 4 wielokrotności i 4 dodań i jest DUŻO tańsze niż cokolwiek zawierającego sin () cos () lub tabele odnośników. Potencjalnym problemem jest to, że amplituda może zmieniać się w czasie z powodu problemów z dokładnością numeryczną. Jednak naprawa tego jest dość prosta. Powiedzmy, że . Wiemy, że powinien mieć wielkość jedności, tj Ω=exp(jω)ωnz[n]z[n]=a+jbz[n]
a⋅a+b⋅b=1
Możemy więc od czasu do czasu sprawdzać, czy nadal tak jest, i odpowiednio korygować. Dokładna korekta byłaby
z′[n]=z[n]a⋅a+b⋅b−−−−−−−−−√
Jest to niezręczne obliczenie, ale ponieważ jest bardzo zbliżone do jedności, możesz przybliżać warunki z rozszerzeniem Taylora wokół i otrzymujemy1 / √a⋅a+b⋅b x=11/x−−√x=1
1x−−√≅3−x2
więc korekta upraszcza się
z′[n]=z[n]3−a2−b22
Zastosowanie tej prostej korekty co kilkaset próbek zapewni stabilność oscylatora na zawsze.
Aby ciągle zmieniać częstotliwość, mnożnik W musi zostać odpowiednio zaktualizowany. Nawet nieciągła zmiana mnożnika utrzyma funkcję ciągłego oscylatora. Jeśli wymagane jest zwiększenie częstotliwości, aktualizacja może zostać podzielona na kilka kroków lub można użyć tego samego algorytmu oscylatora, aby zaktualizować sam mnożnik (ponieważ jest to również wskaźnik fazowania zespolonego wzmocnienia jedności).