Một trong những cách tốt nhất để tạo ra một sóng hình sin là sử dụng một phasor phức tạp với cập nhật đệ quy. I E
z[n+1]=z[n]Ω
Trong đó z [n] là phasor, , với là tần số góc của bộ dao động tính theo radian và là chỉ số mẫu. Cả phần thực và phần ảo của đều là sóng hình sin, chúng lệch pha 90 độ. Rất thuận tiện nếu bạn cần cả sin và cos. Một phép tính mẫu duy nhất chỉ yêu cầu 4 bội số và 4 phép cộng và rẻ hơn bất kỳ thứ gì có chứa bảng sin () cos () hoặc tra cứu. Vấn đề tiềm ẩn là biên độ có thể trôi theo thời gian do các vấn đề chính xác về số. Tuy nhiên, có một cách khá thẳng về phía trước để sửa chữa điều đó. Hãy nói rằng . Chúng ta biết rằng nên có cường độ thống nhất, nghĩa là Ω=exp(jω)ωnz[n]z[n]=a+jbz[n]
a⋅a+b⋅b=1
Vì vậy, chúng ta có thể kiểm tra từng lần một nếu điều đó vẫn đúng và đúng. Sự điều chỉnh chính xác sẽ là
z′[n]=z[n]a⋅a+b⋅b−−−−−−−−−√
Đó là một phép tính khó xử nhưng vì rất gần với sự thống nhất, bạn có thể tính gần đúng các điều khoản với mở rộng Taylor quanh và chúng tôi nhận đượca⋅a+b⋅b1/x−−√x=1
1x−−√≅3−x2
vì vậy việc hiệu chỉnh đơn giản hóa thành
z′[n]=z[n]3−a2−b22
Áp dụng hiệu chỉnh đơn giản này cứ sau vài trăm mẫu sẽ giữ cho bộ dao động ổn định mãi mãi.
Để thay đổi tần số liên tục, hệ số W cần được cập nhật tương ứng. Ngay cả một sự thay đổi không liên tục trong hệ số nhân sẽ duy trì chức năng dao động liên tục. Nếu yêu cầu tăng tần số, bản cập nhật có thể được chia thành một vài bước hoặc bạn có thể sử dụng cùng một thuật toán dao động để cập nhật hệ số nhân (vì đó cũng là một phasor phức tạp đạt được sự thống nhất).