MATLAB filtfilt
realiza 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 filtfilt
siempre en lugar de filter
(es decir, solo filtrado hacia adelante)? ¿Hay alguna aplicación donde sea necesario usar esto y donde no deba usarse?
Respuestas:
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 [ n ] h [ n ]
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( ej ω) H( ej ω) x [ n ] h [ n ] ω - ω
El segundo paso de filtro corresponde a otra multiplicación con :H( ej ω)
que después de la inversión de tiempo finalmente da el espectro de la señal de salida
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( e-j ω) = H∗(ejω) El |H( ej ω) |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^[ n ] = h [ n ] ∗ h [ - n ]
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.
fuente
maximum-aposteriori-estimation
. ¿Podría cambiarle el nombremaximum-a-posteriori-estimation
? Por error olvidé el-
después dela
. Gracias.Este video me pareció muy, muy útil (explica la respuesta de Matt).
Aquí hay algunas ideas clave del video:
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).fuente