Una de las mejores formas de crear una onda sinusoidal es usar un fasor complejo con actualización recursiva. Es decir
z[n+1]=z[n]Ω
donde z [n] es el fasor, , siendo la frecuencia angular del oscilador en radianes el índice de muestra. Tanto la parte real como la imaginaria de son ondas sinusoidales, están desfasadas 90 grados. Muy conveniente si necesita tanto seno como coseno. Un solo cálculo de muestra solo requiere 4 múltiplos y 4 sumas y es MUCHO más barato que cualquier cosa que contenga sin () cos () o tablas de búsqueda. El problema potencial es que la amplitud puede variar con el tiempo debido a problemas de precisión numérica. Sin embargo, hay una manera bastante sencilla de reparar eso. Digamos que . Sabemos que debería tener una magnitud de unidad, es decir Ω=exp(jω)nωnz[n]z[n]=a+jbz[n]
a⋅a+b⋅b=1
Por lo tanto, podemos verificar de vez en cuando si ese es el caso y corregir en consecuencia. La corrección exacta sería
z′[n]=z[n]a⋅a+b⋅b−−−−−−−−−√
Es un cálculo incómodo, pero dado que está muy cerca de la unidad, puede aproximar los términos con una expansión de Taylor alrededor de y obtenemosa⋅a+b⋅b1/x−−√x=1
1x−−√≅3−x2
entonces la corrección se simplifica a
z′[n]=z[n]3−a2−b22
La aplicación de esta simple corrección cada cientos de muestras mantendrá el oscilador estable para siempre.
Para variar la frecuencia continuamente, el multiplicador W debe actualizarse en consecuencia. Incluso un cambio no continuo en el multiplicador mantendrá una función continua del oscilador. Si se requiere una rampa de frecuencia, la actualización puede dividirse en unos pocos pasos o puede usar el mismo algoritmo de oscilador para actualizar el multiplicador (ya que también es un fasor complejo de ganancia unitaria).