FFT para un rango de frecuencia específico.


11

Me gustaría convertir una señal al dominio de frecuencia. El rango de frecuencia deseado es 0.1 Hza 1 Hzy la resolución de frecuencia es 0.01 Hz.

Con la frecuencia de muestreo de 30 Hz, FFT proporciona los componentes de frecuencia de hasta 15 Hz. Elevar la frecuencia de muestreo proporciona una mejor resolución de frecuencia. Sin embargo, FFT ofrece un rango de frecuencia más amplio. En mi caso, sólo quiero 0.1 Hza 1 Hz, FFT da hasta 15 Hz(cálculo extra).

Mi pregunta es, ¿hay alguna forma estándar de calcular el dominio de frecuencia de una señal con un rango de frecuencia específico y alta resolución?


2
suena como si quisieras el Zoom FFT arc.id.au/ZoomFFT.html
endolith

Si solo hace un DFT estándar con una frecuencia de muestreo de 2 Hz y una duración de 100 s, obtendrá una banda de frecuencia de 0 a 1 Hz con una resolución de 0.01 Hz. Solo el 10% de sus muestras estarán fuera de la banda que le interesa. ¿Realmente vale la pena el esfuerzo de resolver los detalles de un algoritmo "no tan estándar" para mejorar la eficiencia de este cálculo relativamente pequeño?
El fotón

La restricción es que la duración debe ser lo más corta posible. 100 es demasiado largo. Necesitamos alrededor de 10+ s
NcJie

Respuestas:


5

Creo que la mejor solución a su problema es usar el chirp-DFT. Es como una lupa para un cierto rango de frecuencia. Es más eficiente que la implementación directa de la DFT (sin FFT), ya que un algoritmo de FFT se puede utilizar con algún procesamiento previo y posterior adecuado. Básicamente, necesita modular su señal con una señal de chirp, luego filtrar usando una FFT y luego nuevamente modular su señal para obtener la respuesta de frecuencia deseada. Consulte aquí y aquí para obtener detalles sobre cómo implementar el chirp-DFT.


2

También existe la posibilidad de utilizar la deformación de frecuencia (también funciona como una lupa ya que obtiene una resolución mejorada en su rango de frecuencia de interés para el mismo tamaño de FFT a expensas de una resolución más baja a frecuencias más altas). Sin embargo, no guarda ningún MIPS ya que el tamaño de FFT no se reduce y la deformación de frecuencia está lejos de ser barata.

Si solo desea calcular ciertos contenedores en la FFT (y, por lo tanto, guardar MIPS), hay un par de métodos para hacerlo. Por ejemplo el DFT deslizante. Las referencias en este documento dan una muy buena explicación http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . También creo que el algo de goertzel hace algo similar, pero no lo sé.

Luego está la opción de reducir la resolución antes de realizar FFT. Eso probablemente también ahorrará algunos MIPS.

Editar: solo para aclarar el comentario sobre el algoritmo de Goertzel que no es útil. Al conectar directamente los valores a la expresión que se encuentra en la parte inferior de esta página wiki http://en.wikipedia.org/wiki/Goertzel_algorithm , el enfoque de Goertzel será más complejo que una FFT cuando el tamaño de la FFT requerida es mayor que 128 (suponiendo que el tamaño de FFT es un factor de 2 y una implementación de radix-2).

Sin embargo, hay otros factores que deben tenerse en cuenta, lo que favorece al Goertzel. Solo para citar la página wiki: "Las implementaciones de FFT y las plataformas de procesamiento tienen un impacto significativo en el rendimiento relativo. Algunas implementaciones de FFT [9] realizan cálculos internos de números complejos para generar coeficientes sobre la marcha, aumentando significativamente su" costo K por unidad de trabajo ". Los algoritmos FFT y DFT pueden usar tablas de valores de coeficientes precalculados para una mejor eficiencia numérica, pero esto requiere más accesos a los valores de coeficientes almacenados en la memoria externa, lo que puede conducir a una mayor contención de caché que contrarresta algunas de las ventajas numéricas ".

"Ambos algoritmos ganan aproximadamente un factor de eficiencia 2 cuando usan datos de entrada de valor real en lugar de valores complejos. Sin embargo, estas ganancias son naturales para el algoritmo de Goertzel pero no se lograrán para el FFT sin usar ciertas variantes de algoritmo especializadas para transformar real -valorados ".


1
El DFT deslizante es realmente útil en el contexto del análisis de espectro en tiempo real, donde la secuencia de entrada es muy larga y el espectro necesita ser recalculado a intervalos regulares. El algoritmo de Goertzel es muy eficiente si solo se necesitan calcular unos pocos valores DFT. No sería útil para resolver el problema dado porque el número deseado de puntos de frecuencia es demasiado grande.
Matt L.

Gracias @MattL. por señalar la debilidad del algoritmo de Goertzel.
NcJie

1

ΔF=Fsnorte
Fsnortenorte

nortes(t)FCFsiX(norte)s(t)X(norte)=s(norte/ /Fs)

X~(norte)=X(norte)mi-j2πk0 0/ /norte
k0 0=FC/ /FsFsiFsi+FCF~sFsiX~(norte)METRO=Fs/ /Fsinorte

s(t)METRO

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.