Para replantear tu problema, tienes una señal de entrada en el rango de frecuencia de 3960-4040 Hz, y quieres determinar esta frecuencia sobre la marcha. Muchos microcontroladores pueden hacer esto de forma bastante sencilla.
La frecuencia más alta de interés es 4,04 kHz, que tiene un periodo de 248 µs. Es un tiempo "largo" incluso para un micro pequeño y barato. En el otro extremo, 1/3,96kHz = 253 µs, así que quieres determinar el periodo de la señal en un rango de 5 µs. No has dicho qué resolución quieres, así que digamos 1 parte en 50, lo que significa que puedes conseguir lo que quieres si puedes medir el periodo hasta 100 ns.
Todo esto es bastante factible en muchos microcontroladores, que tienen la capacidad de tomar una instantánea de un temporizador de funcionamiento libre en un borde particular de una señal de entrada. En los PICs de 8 bits, esta es una de las cosas que puede hacer el módulo CCP (Compare, Capture, Pulse-width modulation). En los PICs de 16 bits se llama módulo "Input Capture". De cualquier manera, terminas con una instantánea del temporizador de 16 bits cada ciclo de tu señal entrante.
Para determinar el periodo del ciclo anterior, basta con hacer una resta sin signo del nuevo valor de captura menos el anterior. Esto funciona tanto si el temporizador se envolvió durante ese ciclo como si no, siempre que el periodo no exceda el tiempo de envoltura del temporizador. Si usted reloj el temporizador a 10 MHz, entonces usted obtendrá los valores de 2475 a 2525, con la resta de rendimiento el período en unidades de 100 ns.
No dices para qué quieres la frecuencia, pero quizás puedas usar este periodo directamente. Si realmente necesitas la frecuencia (piénsalo bien, puede que no), entonces haces la división. Incluso con el micro funcionando sólo a 10 MHz, tienes más de 2000 ciclos de instrucción por ciclo de entrada, que es mucho para una división. En un PIC de 16 bits, puedes hacer la división en hardware en sólo 18 ciclos.
En cualquier caso, yo haría un pequeño filtrado de paso bajo en los períodos medidos antes de hacer cualquier otro procesamiento. Esto hará que tu sistema sea menos susceptible al jitter e incluso puede reducir un poco el ruido de cuantificación. Ten en cuenta que una señal de banda limitada de 3960-4040 Hz no puede cambiar su frecuencia tan rápido. Los cambios aparentes en la frecuencia por encima de algún límite están garantizados como ruido.
0 votos
Una FFT es una exageración y no te dará una resolución razonable sin muchos ciclos.