¿Cuál es la ventaja de filtfilt de MATLAB


30

MATLAB filtfiltrealiza un filtrado hacia adelante y hacia atrás, es decir, filtra, invierte la señal, filtra nuevamente y luego invierte nuevamente. Aparentemente esto se hace para reducir los retrasos de fase? ¿Cuáles son las ventajas / desventajas de usar un filtrado de este tipo (supongo que daría lugar a un aumento efectivo en el orden del filtro).

¿Sería preferible usar filtfiltsiempre en lugar de filter(es decir, solo filtrado hacia adelante)? ¿Hay alguna aplicación donde sea necesario usar esto y donde no deba usarse?


No utilice el filtro de fase cero para el audio, ya que provoca un "timbre previo" que suena extraño. El filtrado de fase mínima es más natural. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
endolith

Respuestas:


34

Puede verlo mejor en el dominio de frecuencia. Si es la secuencia de entrada y es la respuesta al impulso del filtro, entonces el resultado de la primera pasada del filtro esh [ n ]X[norte]h[norte]

X(mijω)H(mijω)

con y las transformadas de Fourier de y , respectivamente. La inversión de tiempo corresponde a reemplazar por en el dominio de frecuencia, por lo que después de la inversión de tiempo obtenemosH ( e j ω ) x [ n ] h [ n ] ω - ωX(mijω)H(mijω)X[norte]h[norte]ω-ω

X(mi-jω)H(mi-jω)

El segundo paso de filtro corresponde a otra multiplicación con :H(mijω)

X(mi-jω)H(mijω)H(mi-jω)

que después de la inversión de tiempo finalmente da el espectro de la señal de salida

(1)Y(mijω)=X(mijω)H(mijω)H(mi-jω)=X(mijω)El |H(mijω)El |2

porque para coeficientes de filtro con valores reales tenemos . La ecuación (1) muestra que el espectro de salida se obtiene al filtrar con un filtro con respuesta de frecuencia , que tiene un valor puramente real, es decir, su fase es cero y, en consecuencia, hay sin distorsiones de fase.H(mi-jω)=H(mijω)El |H(mijω)El |2

Esta es la teoría. Por supuesto, en el procesamiento en tiempo real hay un retraso bastante grande porque la inversión de tiempo solo funciona si permite una latencia correspondiente a la longitud del bloque de entrada. Pero esto no cambia el hecho de que no hay distorsiones de fase, es solo un retraso adicional de los datos de salida. Para el filtrado FIR, este enfoque no es especialmente útil porque también podría definir un nuevo filtro y obtener el mismo resultado con el filtrado ordinario. Es más interesante utilizar este método con filtros IIR, porque no pueden tener fase cero (o fase lineal, es decir, un retraso puro).h^[norte]=h[norte]h[-norte]

En suma:

  • si tiene o necesita un filtro IIR y desea una distorsión de fase cero, y el retraso de procesamiento no es un problema, entonces este método es útil

  • Si el retraso del procesamiento es un problema, no debe usar

  • Si tiene un filtro FIR, puede calcular fácilmente una nueva respuesta de filtro FIR que es equivalente a utilizar este método. Tenga en cuenta que con los filtros FIR siempre se puede realizar una fase exactamente lineal.


Creé una etiqueta llamada maximum-aposteriori-estimation. ¿Podría cambiarle el nombre maximum-a-posteriori-estimation? Por error olvidé el -después del a. Gracias.
Royi

15

Este video me pareció muy, muy útil (explica la respuesta de Matt).

Aquí hay algunas ideas clave del video:

  • La fase cero no producirá distorsión de fase, pero dará como resultado un filtro no causal. Esto significa que si los datos se filtran a medida que se recopilan, esta no será una opción (solo es válida para los datos almacenados que podemos procesar posteriormente).ingrese la descripción de la imagen aquí
  • Cuando implementa un filtro no causal, los transitorios se vuelven borrosos hacia adelante y hacia atrás (por ejemplo, si queremos una ondulación de 2dB, el hecho de que vamos a hacer una carrera hacia adelante y hacia atrás usando el filtro significa que querremos cada uno de ellos estos para tener 1dB).ingrese la descripción de la imagen aquí
  • Utiliza la propiedad de inversión de tiempo de la transformada de Fourier de tiempo discreto. ingrese la descripción de la imagen aquí
  • La respuesta de frecuencia efectiva causada por FILTFILT es la magnitud de eso en una dirección, al cuadrado. Toma su señal de entrada x[n], la filtra, invierte el resultado, la filtra nuevamente y la invierte nuevamente (el paso de inversión de tiempo requiere que todos los datos estén disponibles).ingrese la descripción de la imagen aquí
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.