หนึ่งในวิธีที่ดีที่สุดในการสร้างคลื่นไซน์คือการใช้เฟสเซอร์ที่ซับซ้อนพร้อมการอัพเดตซ้ำ กล่าวคือ
z[n+1]=z[n]Ω
ที่ z [n] คือเฟสเซอร์โดยที่เป็นความถี่เชิงมุมของออสซิลเลเตอร์ในเรเดียนและดัชนีตัวอย่าง ทั้งส่วนจริงและจินตภาพของเป็นคลื่นไซน์พวกมันอยู่นอกช่วง 90 องศา สะดวกมากถ้าคุณต้องการทั้งไซน์และโคไซน์ การคำนวณตัวอย่างเดียวต้องการเพียง 4 ทวีคูณและ 4 เพิ่มเท่านั้นและราคาถูกกว่าสิ่งใด ๆ ที่มี sin () cos () หรือตารางการค้นหา ปัญหาที่อาจเกิดขึ้นคือแอมพลิจูดอาจลอยไปตามกาลเวลาเนื่องจากปัญหาความแม่นยำเชิงตัวเลข อย่างไรก็ตามมีการส่งซ่อมตรงไปตรงมา สมมติว่าJB เรารู้ว่าควรมีขนาดเป็นเอกภาพเช่น Ω=exp(jω)ωnz[n]z[n]=a+jbz[n]
a⋅a+b⋅b=1
ดังนั้นเราสามารถตรวจสอบทุกครั้งในกรณีที่ยังคงเป็นกรณีและแก้ไขให้ถูกต้อง การแก้ไขที่แน่นอนจะเป็น
z′[n]=z[n]a⋅a+b⋅b−−−−−−−−−√
นั่นคือการคำนวณที่น่าอึดอัดใจ แต่เนื่องจากใกล้เคียงกับเอกภาพมากคุณสามารถประมาณเงื่อนไขด้วยการขยายเทย์เลอร์รอบและเราได้a⋅a+b⋅b1/x−−√x=1
1x−−√≅3−x2
ดังนั้นการแก้ไขจึงง่ายขึ้น
z′[n]=z[n]3−a2−b22
การใช้การแก้ไขอย่างง่ายทุก ๆ ร้อยตัวอย่างจะทำให้ออสซิลเลเตอร์เสถียรตลอดไป
หากต้องการเปลี่ยนแปลงความถี่อย่างต่อเนื่องตัวคูณ W จะต้องได้รับการอัปเดตตามลำดับ แม้แต่การเปลี่ยนแปลงแบบไม่ต่อเนื่องในตัวคูณจะยังคงรักษาฟังก์ชันออสซิลเลเตอร์อย่างต่อเนื่อง หากต้องการ ramping ความถี่การอัปเดตอาจแบ่งออกเป็นสองขั้นตอนหรือคุณสามารถใช้อัลกอริทึม oscillator เดียวกันเพื่ออัปเดตตัวทวีคูณตัวเอง