Estoy tratando de comprender la relación entre un filtro FIR diseñado a partir de "primeros principios" que utiliza un núcleo de filtro con convolución, y un filtro diseñado de una de las dos maneras que utiliza FFT (ver más abajo).
Según tengo entendido, la respuesta al impulso de un filtro FIR es lo mismo que el núcleo de convolución del filtro. (Corrígeme si me equivoco.)
Además, según tengo entendido, las frecuencias componentes (es decir, la transformada de Fourier) de la respuesta de impulso de un filtro FIR es lo mismo que la respuesta de frecuencia del filtro. Y, por lo tanto, la transformación inversa de Fourier me devolverá la respuesta al impulso (de nuevo, corríjame si me equivoco).
Esto me lleva a dos conclusiones (ignorar la respuesta de fase o asumir una respuesta de fase lineal):
Debería poder diseñar un filtro FIR de respuesta de frecuencia arbitraria "dibujando" mi respuesta de frecuencia deseada, tomando un IFFT para obtener la respuesta de impulso, y usándolo como mi núcleo de convolución.
Alternativamente, debería poder crear un filtro tomando la FFT de la señal de entrada, multiplicándola por mi respuesta de frecuencia arbitraria deseada en el dominio de la frecuencia, y tomando una IFFT del resultado para producir la señal de salida.
Intuitivamente, parece que 1 y 2 son equivalentes, pero no estoy seguro de poder probarlo.
Parece que las personas (y la literatura de DSP) hacen todo lo posible para diseñar núcleos FIR con respuestas predefinidas, utilizando algoritmos complicados (para mí) como Chebyshev o Remez (estoy tirando algunos nombres que he leído, sin entenderlos realmente) .
- ¿Por qué ir a estas longitudes, cuando existe una transformación FFT / IFFT para cada posible núcleo FIR?
- ¿Por qué no simplemente dibujar la respuesta de frecuencia exacta que desea, tomar un IFFT y ahí está su núcleo FIR (método 1 anterior)?
fuente
Respuestas:
Una razón por la que ve a las personas que diseñan filtros FIR, en lugar de adoptar un enfoque directo (como 1 y 2) es que el enfoque directo generalmente no tiene en cuenta la periodicidad en el dominio de frecuencia, y el hecho de que la convolución implementada usando un FFT es circular convolución .
¿Qué significa esto?
Suponga que tiene una señal y una respuesta de impulso de filtro (núcleo de convolución; tiene razón, son lo mismo) h = [ 1 , 1 ] .x = [ 1 , 2 , 3 , 4 ] h = [ 1 , 1 ]
La convolución es [ 1 , 3 , 5 , 7 , 4 ] , un vector de 5 longitudes. Si utiliza la FFT (de longitud incorrecta, 4), la respuesta que obtiene es [ 3 , 5 , 7 , 5 ] . La razón de la diferencia es que el resultado de la convolución lineal de estos dos es la longitud 5, pero el resultado de la convolución circular es cualquiera que sea la longitud FFT.y= x ∗ h [ 1 , 3 , 5 , 7 , 4 ] [ 3 , 5 , 7 , 5 ]
Si la longitud de FFT es mayor o igual que la longitud del resultado de la convolución lineal, entonces los dos son iguales. De lo contrario, los dos no son lo mismo (a menos que los datos conspiren de alguna manera para hacerlo, por ejemplo, si una señal fuera cero).
fuente
Un problema es tratar con transformaciones de longitud infinita que se envuelven cuando se usa una FFT de longitud finita. La transformada de Fourier de una respuesta de frecuencia de longitud finita es una respuesta de impulso de longitud infinita o núcleo de filtro. A la mayoría de las personas les gustaría que su filtro termine antes de morir o quedarse sin memoria de la computadora, por lo que necesitan trucos para producir filtros FIR más cortos. Simplemente dejando que la cola de la respuesta de impulso infinita envuelva la FFT, o truncandola a una longitud genérica, puede producir un filtro FIR inferior para la especificación de frecuencia deseada en comparación con uno de los prototipos de filtro "clásico".
Otro problema es que una respuesta de frecuencia "dibujada" aleatoria muy a menudo tiene una respuesta horrible (sobreimpulsos) entre los puntos dibujados en cualquier resolución finita. Convierte a un filtro FIR, y suena como loco. Los prototipos de filtro clásicos están diseñados para tener funciones de respuesta de frecuencia que son suaves entre los puntos de muestra.
Su (2) se llama convolución rápida, y se usa comúnmente si la FFT es más larga que la longitud de la ventana de datos más el núcleo de filtro combinado, y la suma / guardado de superposición adecuada se usa para cuidar el inicio / final de cada segmento de convolución o ventana (ya que las FFT generalmente tienen una longitud de bloque).
fuente
Re 1): Sí, puede diseñar un filtro FIR "dibujando" la respuesta de frecuencia (tanto en magnitud como en fase. Sin embargo, esto tiende a ser muy ineficiente: la longitud de la respuesta al impulso (y el orden del filtro) es simplemente pre -determinado por la longitud de su FFT. Si elige una FFT de 128 puntos, obtiene 128 toques para la respuesta al impulso y si elige una FFT de 4096 puntos, obtiene 4096 toques de filtro.
Re 2): Sí, puede filtrar por multiplicación en el dominio de frecuencia y esa es, de hecho, la única forma de hacerlo de manera eficiente para respuestas de impulso grandes. Sin embargo, como Peter K ha señalado, la multiplicación en el dominio de la frecuencia corresponde a la convolución circular. La forma más común de implementar convolución lineal son los algoritmos de "solapamiento de superposición" o "guardado de superposición" (fácil de buscar en Google).
fuente
No estoy seguro de entender todo lo que se dijo aquí, pero me gustaría defender el método de la Transformada de Fourier.
Primero, es una forma increíblemente flexible y directa de diseñar filtros FIR. Como dijiste, todo lo que hay que hacer es definir la magnitud y las respuestas de fase. Sin embargo, como se dijo, debe tener un poco de cuidado al definir la respuesta. Una respuesta arbitraria puede requerir un número excesivamente grande de toques para implementar y dar una respuesta terrible en el dominio del tiempo. Así que tenga cuidado de cómo lo define.
En segundo lugar, es cierto que el método de Parks McClellan, por ejemplo, puede generar un mejor filtro que el método de Fourier para algunos requisitos específicos, pero no es fácil controlar el recuento de tomas y también definir la magnitud, fase y respuesta de paso con eso método.
Por ejemplo, suponga que desea diseñar un filtro FIR con características similares a un Bessel IIR de 10 polos, pero desea reducir un poco la banda de transición (a expensas del sobrepaso de respuesta escalonada). Luego, el método de Fourier hace que este sea un problema fácil de resolver con aproximadamente 22 toques, dependiendo de cuánto se estrecha la banda de transición.
Si desea ver de qué es capaz el método Fourier, pruebe este programa FIR http://www.iowahills.com/5FIRFiltersPage.html (es gratis). Puede, por ejemplo, diseñar equivalentes IIR para los filtros Gauss, Bessel, Butterworth e Inverso Chebyshev. En general, le permite ajustar la respuesta de un filtro a casi cualquier cosa, que es el punto fuerte del método de Fourier. En el lado negativo, los filtros probablemente no son óptimos para algunos requisitos específicos.
fuente
AFAIK esto se llama "enfoque de filtrado ingenuo". Puede influir en el contenido espectral en ciertos puntos en el espacio de frecuencia, pero no hace nada útil para el contenido de frecuencia entre esos puntos. Si diseña el filtro FIR adecuado, en realidad también tiene en cuenta los puntos entre esos puntos principales y dicho filtro es mucho mejor que el primero.
Saludos, Bul.
fuente