¿Cómo se distribuye la energía de las líneas espectrales no resueltas en una FFT?

Por ejemplo, si mi FFT tiene una resolución deficiente de 170 Hz (la longitud de la secuencia de datos es pequeña debido a las limitaciones de latencia) y estoy tratando de detectar una sinusoide en el rango de 150-250 Hz, ¿será esta FFT lo suficientemente buena?

Siento que si la sinusoide está en la vecindad de 170 Hz (150-200 Hz), mi contenedor de frecuencia a 170 Hz mostrará un aumento en la magnitud que puedo usar para detectar. Pero, ¿y si una sinusoide está presente a 250 Hz? ¿Se distribuirá su energía entre el contenedor de 170 Hz y el contenedor de 340 Hz? Y si es así, ¿en qué proporción? (tal vez pueda usar una suma ponderada para detectar en ese caso)

Apuesto a que sqrt (A ^ 2 + B ^ 2) funcionaría
Además, no olvide el componente de fase. Si una sinusoidal está fuera de la frecuencia central del contenedor, tendrá una fase que seguirá cambiando (girando) de una ventana FFT a la siguiente. Creo que al "envolver" la fase y analizarla, puede obtener la frecuencia de la sinusoide con precisión; Simplemente no tengo experiencia práctica en implementación en el área para poder "escupir a ciegas" el código.
Por ejemplo, supongamos que estamos tomando 8 ventanas por segundo y tenemos un contenedor de 100 Hz, y hay una sinusoidal pura en la vecindad de 100 Hz (sin otra sinusoidal cercana que se mezcle en el mismo contenedor). Suponga que el valor bin FFT de 100 Hz tiene una fase que cambia en -45 grados en cada ventana. Entonces, sobre las 8 ventanas en un segundo, esto se acumula a -365 grados. Entonces, ¿qué sugiere eso? La señal se retrasa un ciclo cada segundo con respecto a 100 Hz, por lo que su frecuencia es de 99 Hz.
Esa es una gran información, Kaz, pero afortunadamente no necesito la frecuencia precisa, solo necesito saber si hay una sinusoide o no. Entonces, mi principal preocupación es si monitorear un solo contenedor (a 170 Hz) será suficiente.
La forma en que se propaga la energía está determinada por la función de ventana que está aplicando a sus datos antes de realizar la FFT. Para más información, echa un vistazo aquí: en.wikipedia.org/wiki/Window_function
¿Qué estás tratando de detectar? ¿Solo quiere saber que el componente de 170 Hz está ahí, o quiere medir su amplitud con precisión, o quiere poder resolverlo a partir de otras frecuencias cercanas?
¿En qué estás implementando esto? Si solo está tratando de detectar la presencia de un componente de frecuencia, tendría más sentido usar un algoritmo de Goertzel que FFT. Es menos intensivo desde el punto de vista computacional y podrá obtener una mejor resolución. Independientemente de la ventana, tendrá fugas espectrales, y con un rango deseado que es más estrecho que sus contenedores, no tiene esperanza de obtener resultados significativos con una FFT.
@MattYoung, no he usado el algoritmo de Goertzel, pero según Wikipedia, solo calcula los contenedores individuales de la DFT. OP dijo que la longitud de su secuencia de datos está limitada por problemas de latencia, por lo que no tengo claro cómo Goertzel puede mejorar la resolución; si puede hacer eso, debe agregar una respuesta.

Respuestas (1)

Como dice The Photon, la forma en que se propaga la energía está determinada por la función de ventana que utiliza. Aquí hay un extracto de The Scientist and Engineer's Guide to Digital Signal Processing , capítulo 9 (casi al final):

funciones de ventana

Su elección de la función de ventana dependerá en gran medida de la señal que está tratando de medir. ¿Necesita resolución de alta frecuencia? ¿Necesita una medición de amplitud precisa? No es posible optimizar para todo a la vez.

Según sus comentarios, parece que la ventana plana puede ser la más apropiada. De nuevo, de la guía:

Esto nos lleva a la ventana con la parte superior plana, que se muestra en la figura 9-5d. En algunas aplicaciones, la amplitud de un pico espectral debe medirse con mucha precisión. Dado que el espectro de frecuencia de la DFT se forma a partir de muestras, no hay nada que garantice que una muestra ocurrirá exactamente en la parte superior de un pico. Lo más probable es que la muestra más cercana esté ligeramente descentrada, dando un valor más bajo que la amplitud real. La solución es usar una ventana que produzca un pico espectral con una parte superior plana, asegurando que una o más de las muestras siempre tendrán el valor de pico correcto. Como se muestra en la figura 9-5d, la penalización por esto es un lóbulo principal muy ancho, lo que da como resultado una resolución de frecuencia deficiente.

Espero ver una sinusoide en algún lugar en la región de 150-250 Hz (puede estar en cualquier parte del rango). Sin embargo, mis contenedores fft están en 0, 170, 340... etc. Aumentar mi resolución de frecuencia no es una opción debido a los requisitos de latencia que restringen la longitud de los datos. Solo quería saber si monitorear un contenedor de frecuencia, es decir, el de 170 Hz, es suficiente para la detección. No necesito una medición de amplitud precisa, solo detección de sinusoide usando la regla de decisión de tipo de umbral. La pregunta es si mi sinusoide está a 250 Hz, qué cantidad de energía será aparente en el contenedor de 170 Hz; no quiero lo extraño.
@ankit suena como si quisieras la ventana plana, entonces. Ver ediciones.