En una respuesta a una pregunta anterior , se dijo que uno debería
rellene con cero las señales de entrada (agregue ceros al final para que al menos la mitad de la onda esté "en blanco")
¿Cuál es la razón de esto?
fft
zero-padding
Jonas
fuente
fuente
Respuestas:
El relleno cero le permite a uno usar una FFT más larga, lo que producirá un vector de resultado FFT más largo.
Un resultado FFT más largo tiene más intervalos de frecuencia que están más espaciados en frecuencia. Pero esencialmente proporcionarán el mismo resultado que una interpolación Sinc de alta calidad de una FFT más corta sin relleno de cero de los datos originales.
Esto podría dar como resultado un espectro de aspecto más suave cuando se traza sin más interpolación.
Aunque esta interpolación no ayudará con la resolución o la resolución de y / o entre frecuencias adyacentes o cercanas, podría facilitar la resolución visual del pico de una sola frecuencia aislada que no tenga señales adyacentes significativas o ruido en el espectro . Estadísticamente, la mayor densidad de los contenedores de resultados FFT probablemente hará que sea más probable que el bin de magnitud pico esté más cerca de la frecuencia de una frecuencia de entrada aislada aleatoria sinusoide y sin interpolación adicional (parabólico, et.al.).
Pero, esencialmente, el relleno cero antes de un DFT / FFT es un método computacionalmente eficiente de interpolar una gran cantidad de puntos.
El relleno de cero para el filtrado de correlación cruzada, autocorrelación o convolución se utiliza para no mezclar los resultados de convolución (debido a la convolución circular). El resultado completo de una convolución lineal es más largo que cualquiera de los dos vectores de entrada. Si no proporciona un lugar para poner fin a este resultado de convolución más largo, la convolución rápida FFT simplemente lo mezclará y desmenuzará el resultado deseado. El relleno cero proporciona un montón de ceros para mezclar el resultado más largo. Y es mucho más fácil desmezclar algo que solo se ha mezclado / sumado con un vector de ceros.
fuente
Hay algunas cosas a considerar antes de que decidas poner a cero tu señal de dominio de tiempo. ¡Es posible que no necesite poner la señal en cero!
1) Alargue los datos del dominio del tiempo (no relleno de cero) para obtener una mejor resolución en el dominio de la frecuencia.
2) Aumente el número de puntos FFT más allá de la longitud de la señal de su dominio de tiempo (relleno de cero) si desea ver una mejor definición de los contenedores FFT, aunque no le ofrece más resolución verdadera. También puede rellenar para llegar a una potencia de 2 puntos FFT.
Hay algunas figuras agradables que ilustran estos puntos en http://www.bitweenie.com/listings/fft-zero-padding/
Una última cosa para mencionar: si pone a cero la señal en el dominio del tiempo y desea utilizar una función de ventana, asegúrese de abrir la señal antes de poner a cero la almohadilla. Si aplica la función de ventana después del relleno cero, no logrará lo que se supone que debe lograr la ventana. Más específicamente, todavía tendrá una transición brusca de la señal a cero en lugar de una transición suave a cero.
fuente
En general, el relleno cero antes de DFT es equivalente a la interpolación, o al muestreo más frecuente, en el dominio transformado.
Aquí hay una visualización rápida de cómo funciona lo contrario. Si muestreas una señal de banda limitada en el tiempo a una velocidad más alta, obtienes un espectro más 'aplastado', es decir, un espectro con más ceros en ambos extremos. En otras palabras, puede obtener más muestras a tiempo simplemente rellenando con cero la frecuencia después de DFT y luego IDFT haciendo el resultado con relleno de cero.
El mismo efecto se mantiene en reversa cuando el relleno de cero ocurre en el tiempo. Todo esto se debe a que la reconstrucción perfecta de la señal es posible siempre que una señal esté limitada en banda y muestreada al menos a la velocidad de Nyquist.
El término 'resolución' depende de cómo lo defina. Para mí, significa qué tan bien los dos puntos adyacentes de observación en tiempo o frecuencia pueden ser discriminados de manera confiable (estadísticamente). En este caso, la resolución realmente depende del tamaño de DFT debido a la fuga espectral. Es decir, más pequeño el tamaño de la ventana, más borrosa o manchada la señal transformada, y viceversa. Es diferente de la frecuencia con la que toma muestras o de lo que yo llamo "definición". Por ejemplo, puede tener una imagen muy borrosa muestreada a alta velocidad (alta definición), pero aún así no puede obtener más información que el muestreo a una velocidad más baja. En resumen, el relleno cero no mejora en absoluto la resolución, ya que no obtiene más información que antes.
fuente
Si uno tiene algún interés en el espectro de la función de ventana utilizada para aislar la muestra en el dominio del tiempo, entonces el relleno cero aumentará la resolución de frecuencia de la función de ventana.
fuente
Puede haber diferentes razones para esto dependiendo de los procesos realizados antes y después de la transformación de Fourier. La razón más común es lograr una mayor resolución de frecuencia en cualquier transformación resultante. Es decir, cuanto mayor sea el número de muestras utilizadas en su transformación, menor será el ancho de bin en el espectro de potencia resultante. Recuerde: binwidth = sample_frequency / transform_size (a menudo llamado tamaño de ventana). Se puede imaginar a partir de esto, que a medida que aumenta el tamaño de su transformación, el ancho de bin se reduce (= mejor resolución de frecuencia). El relleno cero es una forma de aumentar el tamaño de la transformación sin introducir nueva información en la señal.
Entonces, ¿por qué no simplemente tomar una transformación más grande sin relleno cero? ¿No lograría eso el mismo efecto? Buena pregunta. En muchos casos, es posible que desee analizar una secuencia de datos de dominio de tiempo, para lo cual puede estar utilizando una transformación de Fourier (stft) de corta duración. Esto implica tomar una transformación cada N muestras de acuerdo con la resolución de tiempo que necesita para caracterizar los cambios en el espectro de frecuencia. Aquí en mentiras el problema. Una ventana demasiado grande y perderá resolución de tiempo, una ventana demasiado pequeña y perderá resolución de frecuencia. Entonces, la solución es tomar ventanas de dominio de tiempo pequeño que le brinden una buena resolución de tiempo y luego ponerlas en cero para obtener una buena resolución de frecuencia. Espero que esto sea útil para ti
Actualización
No expliqué esto bien. Debería haberlo aclarado mejor. Al referirse a una transformación en ventana, de hecho no se obtiene una resolución de frecuencia mayor 'real', pero para fines de visualización (lectura del espectro de potencia con el ojo) puede proporcionar resultados más claros. Usando la tasa de muestreo crítica, cada lóbulo lateral ocupa un solo contenedor, que dependiendo de la técnica de gráficos podría ser engañoso. El relleno cero proporciona un espectro de frecuencia interpolado que puede ser más revelador. Además, si está utilizando un método de selección de pico simple para la estimación de frecuencia, el efecto de interpolación espectral del relleno cero le dará una muestra espectral más cercana al pico verdadero del lóbulo principal. Este enlace proporciona algunos diagramas útiles: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html
fuente
No vi estos mencionados en las buenas respuestas anteriores, así que agregaré las siguientes razones importantes adicionales para el relleno cero:
Los algoritmos Radix-2 son más eficientes, por lo que el relleno cero a la siguiente potencia de 2 (o potencia de 4 en algunos casos para radix-4), o más significativamente, evitando cualquier factor primo grande puede mejorar el rendimiento en tiempo real. Además, cuando se utiliza la FFT para el análisis, a menudo se realiza un relleno cero para calcular muestras de la DTFT, como determinar la respuesta de frecuencia de un FIR: compare fft ([1 1 1 1]) con fft ([1 1 1 1], 512) que es idéntico a freqz ([1 1 1 1]).
fuente