86 votos

¿Cuál es la relación entre la longitud de FFT y la resolución de frecuencia?

Si he muestreado una señal utilizando métodos de muestreo adecuados (Nyquist, filtrado, etc.) ¿cómo relaciono la longitud de mi FFT con la resolución de frecuencia resultante que puedo obtener?

Por ejemplo, si tengo una onda senoidal de 2,000 Hz y otra de 1,999 Hz, ¿cómo determinaría la longitud de la FFT necesaria para diferenciar de manera precisa entre esas dos ondas?

104voto

Jon Ericson Puntos 9703

La resolución de frecuencia depende de la relación entre la longitud de la FFT y la tasa de muestreo de la señal de entrada.

Si recolectamos 8192 muestras para la FFT, entonces tendremos:

$$\frac{8192\ \text{muestras}}{2} = 4096\ \,\text{bins de FFT}$$

Si nuestra tasa de muestreo es de 10 kHz, entonces el teorema de muestreo de Nyquist-Shannon dice que nuestra señal puede contener contenido de frecuencia de hasta 5 kHz. Entonces, nuestra resolución de bin de frecuencia es:

$$\frac{5\ \text{kHz}}{4096\ \,\text{bins de FFT}} \simeq \frac{1.22\ \text{Hz}}{\text{bin}}$$

Esta puede ser la forma más sencilla de explicarlo conceptualmente pero simplificado: tu resolución de bin es simplemente \$\frac{f_{samp}}{N}\$, donde \$f_{samp}\$ es la tasa de muestreo de la señal de entrada y \$N\$ es el número de puntos de FFT utilizados (longitud de muestra).

Podemos ver que para obtener bins de FFT más pequeños podemos correr una FFT más larga (es decir, tomar más muestras a la misma tasa antes de ejecutar la FFT) o disminuir nuestra tasa de muestreo.

La Trampa:

Siempre hay un compromiso entre la resolución temporal y la resolución de frecuencia.

En el ejemplo anterior, necesitamos recolectar 8192 muestras antes de poder ejecutar la FFT, lo cual toma 0.82 segundos al muestrear a 10 kHz.

Si intentáramos obtener bins de FFT más pequeños ejecutando una FFT más larga, tomaría aún más tiempo recolectar las muestras necesarias.

Eso puede estar bien, o puede no estarlo. El punto importante es que, a una tasa de muestreo fija, aumentar la resolución de frecuencia disminuye la resolución temporal. Es decir, cuanto más precisa sea la medición en el dominio de la frecuencia, menos precisa puede ser en el dominio del tiempo. Básicamente, pierdes toda la información temporal dentro de la longitud de la FFT.

En este ejemplo, si una señal de 1999 Hz comienza y termina en la primera mitad de la FFT de 8192 muestras y una señal de 2002 Hz suena en la segunda mitad de la ventana, veríamos ambas, pero parecería que ocurrieron al mismo tiempo.

También debes considerar el tiempo de procesamiento. Una FFT de 8192 puntos requiere cierta potencia de procesamiento decente. Una forma de reducir esta necesidad es reducir la tasa de muestreo, que es la segunda forma de aumentar la resolución de frecuencia.

En tu ejemplo, si reduces tu tasa de muestreo a algo como 4096 Hz, entonces solo necesitas una FFT de 4096 puntos para lograr bins de 1 Hz y aún puedes resolver una señal de 2 kHz. Esto reduce el tamaño del bin de FFT, pero también reduce el ancho de banda de la señal.

En última instancia, con una FFT siempre habrá un compromiso entre la resolución de frecuencia y la resolución temporal. Debes realizar un acto de equilibrio para alcanzar todos los objetivos.

14voto

JP Richardson Puntos 113

La resolución básica de FFT es \$f_s \over N\$, donde \$f_s\$ es la frecuencia de muestreo.

La capacidad de diferenciar dos señales muy cercanas depende fuertemente de las amplitudes relativas y la función de ventana utilizada.

Puede que encuentres que jugar con el analizador de señal Baudline es una buena manera de desarrollar intuición sobre este asunto - y no, correr algunas FFT y trazar un espectro a la vez en Matlab o Python/Numpy realmente no es lo mismo.

EDITAR: También hay un truco para rellenar la entrada con ceros y tomar una FFT más grande. No mejorará tu capacidad de diferenciación pero puede hacer que el espectro sea más legible. Básicamente es un truco similar al antialiasing en gráficos vectoriales.

4voto

ejej Puntos 21

La resolución de frecuencia no depende de la longitud de la FFT, sino de la longitud del tiempo total de muestreo T, es decir, es 1/T, que es también el componente de frecuencia más bajo que obtienes.

Ten en cuenta que el relleno con ceros no aumenta la resolución de frecuencia; la DFT de la señal de relleno con ceros es simplemente una mejor aproximación de la DTFT de la señal original.

4voto

Narasimha Puntos 1907

Voy a intentar explicar esto de otra manera. Números no 2^n pueden ayudar. En primer lugar, es útil recordar lo que hace la FFT (básicamente la DFT): multiplica una señal -en ventana- con el coseno fundamental (y seno) y los siguientes N armónicos de este que el algoritmo crea. En una computadora digital, el algoritmo crea cos(2 pi t n) [+ j sin(2 pi n t) pero vamos a dejar de lado el seno], donde t (y no n - n es el orden armónico) es el número de contenedores. Esta es la parte más importante: en una computadora digital, t, el tiempo, está cuantificado en los contenedores proporcionados. Entonces la computadora calcula el coseno de un valor de tiempo -escalar-, por orden armónico x 2 pi.

Supongamos una frecuencia de muestreo de 1kHz; esto significa que obtienes un valor (voltaje, generalmente) cada 1 ms. Si configuramos el número de contenedores en 200, entonces el más largo coseno que se crea tiene una duración temporal de 200 x 0.001 = 0.2 s, por lo tanto su período es de 0.2 s, por lo tanto su frecuencia es de 5 Hz. Este es el coseno que tiene solo un pico y un valle en todo el conjunto de contenedores; es el f_min. El siguiente armónico tendrá dos picos y dos valles, el siguiente armónico tres de cada uno, etc. Los armónicos serán múltiplos de 5, 10, 15, etc. Hz.

Si, por otro lado, hubiéramos seleccionado 500 contenedores, entonces el coseno fundamental sería más expandido: tendría una duración temporal de 500 x 0.001 = 0.5 s => f_min = 2 Hz. Entonces en este último caso, los cosenos se construyen como una serie de 2,4,6,8... Así, vemos que aumentar el número de contenedores aumentó la resolución del algoritmo.

La resolución se incrementó porque las herramientas de investigación del algoritmo, los coeficientes coseno (y seno), son más densos. La señal de entrada solo se ve afectada por la frecuencia de muestreo.

Si invertimos las multiplicaciones y convertimos los períodos en frecuencias, salen los tipos de la primera publicación.

3voto

Alex Andronov Puntos 178

Vale la pena señalar que realizar una FFT es una alternativa para calcular una serie de pares de sumas separadas. Una FFT calcula la siguiente expresión para cada coeficiente de FFT complejo \$X_k\$: $$X_k=\sum_{n=0}^{N-1} s_n \cdot e^{-2i\pi k n/N} \qquad k = 0,\ldots,N-1$$ O, de manera equivalente: $$ X_k = \sum_{n=0}^{N-1} s_n \cdot \mathrm{refcos}_{k,n} + i \sum_{n=0}^{N-1} s_n \cdot \mathrm{refsin}_{k,n}$$ Con longitud de muestra \$N\$, \$s_n\$ la muestra de señal \$n^{\mathrm{th}}\$, y \$\mathrm{refsin}_{k,n}\$ la muestra \$n^{\mathrm{th}}\$ de una onda sinusoidal de referencia con \$k\$ periodos sobre \$[1,\ldots,N]\$.

Si se necesitan lecturas de amplitud en todas esas frecuencias, una FFT las calculará todas en tiempo \$\mathcal{O}(n\log n)\$, mientras que calcularlas individualmente tomaría tiempo \$\mathcal{O}(n^2)\$. Por otro lado, si solo se necesitan lecturas de amplitud en algunas frecuencias \$X_k\$, a menudo será mejor simplemente calcularlas individualmente, especialmente si se está utilizando un procesador o DSP que puede calcular eficientemente ese tipo de suma.

También vale la pena señalar que mientras una FFT con p. ej. una ventana de muestreo de 20 ms no podrá distinguir entre un tono de 1975Hz único, o una combinación de frecuencias (1975-N)Hz y (1975+N)Hz para N<25, se puede utilizar para medir frecuencias aisladas con una precisión más fina que la ventana de muestreo si no hay otro contenido espectral cercano. Una frecuencia única de 1975Hz se recogerá de manera equitativa en los bins de 1950Hz y 2000Hz, al igual que una combinación de tonos de 1974Hz y 1976Hz. Sin embargo, un tono aislado de 1974Hz se recogería con más fuerza en el bin de 1950Hz que en el de 2000Hz, y un tono de 1976Hz se recogería con más fuerza en el bin de 2000Hz.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X