¿Calculando FFT para solo una parte del rango completo de frecuencias?

5

Anteriormente hice una pregunta aquí sobre realizar FFT en frecuencias más bajas pero aún en frecuencias de muestra altas. Tenía la impresión de que la FFT se calculaba intrínsecamente a cada frecuencia 0- > (Frecuencia de muestreo) / 2 distribuidas en contenedores de ancho Fs / (2 * N). Pero, al observar algunas de las respuestas que recibí, parece que es posible que Fs solo sea útil para determinar la frecuencia máxima, que es Fs / 2, pero que es posible, por ejemplo, muestrear a 640 Hz, pero Solo frecuencias de muestreo 0-64 Hz.

Sin embargo, por lo que he leído hasta ahora en las implementaciones de FFT, parece que la FFT en los ejemplos que estoy viendo se está realizando en todo el rango 0- > Fs / 2, por lo que no estoy completamente seguro de cómo realizar la FFT en solo una parte de la frecuencia máxima.

Ahora, solo para anticiparme a esto, me doy cuenta de que en algún punto a lo largo de la línea hay una alta probabilidad de algún tipo de malentendido por mi parte. No estoy completamente seguro de lo que me estoy perdiendo, pero es por eso que expuse mi entendimiento actual aquí y quizás alguien pueda explicar adecuadamente por qué percibo que la FFT solo se está realizando en una parte del rango, que tengo La sospecha, debido a la contradicción descrita anteriormente, es solo una interpretación incorrecta de mi parte. O tal vez el sobremuestreo requiere algún tipo de lógica diferente que desconocía. En cualquier caso, me quedo un poco confundido por lo que se agradece cualquier ayuda.

    
pregunta Scorch

3 respuestas

6
  

Tenía la impresión de que la FFT se calculó de forma inherente a cada frecuencia 0- > (Frecuencia de muestreo) / 2 distribuidas en contenedores de ancho Fs / (2 * N).

Esto es más o menos correcto. Una transformada discreta de Fourier (DFT) produce una salida para frecuencias entre \ $ - F_s / 2 \ $ y \ $ F_s / 2 \ $. Si los datos de entrada tienen un valor real (en lugar de ser complejo), el espectro de frecuencia negativa solo será el complejo conjugado del espectro de frecuencia positiva, por lo que se puede ahorrar algo de tiempo al no calcular los valores de la bandeja de frecuencia negativa.

El espaciado de las bandejas es \ $ F_s / N \ $, no \ $ F_s / (2N) \ $.

  

No estoy completamente seguro de cómo realizar la FFT solo en una parte de la frecuencia máxima.

Para calcular un pequeño número de contenedores, existe un método llamado algoritmo de Goertzel para calcular un contenedor a la vez. .

Como regla general, normalmente es más eficiente calcular \ $ M \ $ contenedores de una DFT mediante el algoritmo de Goertzel cuando

$$ M \ le \ frac {5 N_2} {6 N} \ log_2 (N_2) $$

donde \ $ N_2 \ $ es la siguiente potencia de dos mayores que \ $ N \ $.

    
respondido por el The Photon
4

Tiene razón en que la FFT calcula muestras de frecuencia equidistantes en todo el rango de frecuencia. Además del algoritmo de Goertzel mencionado en la respuesta del Fotón , también puede usar Chirp Z-transform , que le permite ampliar un determinado rango de frecuencia. Este documento explica el algoritmo y también contiene una implementación de Matlab (que también es incluido en la caja de herramientas de procesamiento de señales de Matlab como czt.m ).

También vea esta respuesta .

    
respondido por el Matt L.
2

La DFT (transformada de Fourier discreta) es un proceso que toma N muestras de datos en el dominio del tiempo y produce N muestras de datos en el dominio de la frecuencia. Requiere del orden de N 2 operaciones (esto se escribe como "O (N 2 )") para completar el cálculo completo. Cada uno de los N valores de salida se calcula de forma independiente, y cada uno toma operaciones O (N) para calcular.

La FFT (transformada rápida de Fourier) es una implementación de la DFT que elimina la gran cantidad de redundancia en el cálculo de DFT burte-force normal, reduciendo el número de operaciones requeridas a O (N log 2 N). Sin embargo, los resultados de N resultados se calculan "en paralelo", y no hay una manera fácil de calcular solo algunos de ellos sin realizar todas las operaciones.

Por lo tanto, si solo necesita un subconjunto de los resultados de N, puede ser más eficiente usar el cálculo de DFT original. Especialmente si solo necesitas el registro 2 N de ellos (o menos). Pero si necesita más, entonces saldrá adelante haciendo el FFT completo y desechando los resultados que no necesita.

El algoritmo de Goertzel es una forma diferente de calcular un resultado único de una DFT. Convierte la fórmula no recursiva en una recursiva, lo que reduce en gran medida la cantidad de almacenamiento intermedio requerido. Es por esto que es popular en aplicaciones como la decodificación DTMF, en las que solo necesita medir los niveles relativos de 8 frecuencias específicas diferentes.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas