Vi en un hilo SO una sugerencia de uso filtfiltque realiza el filtrado hacia atrás / adelante en lugar de lfilter.
¿Cuál es la motivación para usar una técnica contra la otra?
Vi en un hilo SO una sugerencia de uso filtfiltque realiza el filtrado hacia atrás / adelante en lugar de lfilter.
¿Cuál es la motivación para usar una técnica contra la otra?
filtfilthace el mismo filtro dos veces, en direcciones opuestas, por lo que no es más lento que hacerlolfilterdos veces en una dirección, así es como obtendría la misma respuesta de frecuencia.Respuestas:
filtfiltes un filtro de fase cero, que no cambia la señal mientras se filtra. Como la fase es cero en todas las frecuencias, también es de fase lineal. Filtrar hacia atrás en el tiempo requiere que prediga el futuro, por lo que no se puede usar en aplicaciones de la vida real "en línea", solo para el procesamiento fuera de línea de grabaciones de señales.lfilteres un filtrado causal directo en el tiempo solamente, similar a un filtro electrónico de la vida real. No puede ser de fase cero. Puede ser de fase lineal (FIR simétrica), pero generalmente no lo es. Por lo general, agrega diferentes cantidades de retraso a diferentes frecuencias.Un ejemplo y una imagen deberían hacerlo obvio. Aunque la magnitud de la respuesta de frecuencia de los filtros es idéntica (arriba a la izquierda y arriba a la derecha), el paso bajo de fase cero se alinea con la señal original, simplemente sin contenido de alta frecuencia, mientras que el filtrado de fase mínimo retrasa la señal de manera causal :
fuente
lfilterno es necesariamente una fase mínima, puede ser cualquier cosa dependiendo de los coeficientes del filtro, pero en cualquier caso es causal , lo quefiltfiltno lo es. Por lo tanto, el resultado de la comparación quefiltfilttiene un retraso cero ylfiltersiempre agrega algo de retraso no es exactamente cierto, porquefiltfilten primer lugar no es causal. Lo que realmente importa es quefiltfiltno causa distorsiones de fase, mientras que lolfilterhace (a menos que se use como un filtro FIR de fase lineal, es decir, con denominador = 1).filtfiltcorresponde al filtrado con (2N-1) enésimo orden conlfilter.lfilterofiltfilt. Se comportan de manera diferente, como se muestra¡La respuesta de @endolith es completa y correcta! Lea primero su publicación, y luego esta además de ella. Debido a mi baja reputación, no pude responder a los comentarios donde @Thomas Arildsen y @endolith discuten sobre el orden efectivo del filtro obtenido por
filtfilt:lfilteraplica el filtro dado y en el espacio de Fourier esto es como aplicar la función de transferencia de filtro UNA VEZ.filtfiltaplica el mismo filtro dos veces y el efecto es como aplicar la función de transferencia de filtro CUADRADO. En el caso del filtro Butterworth (scipy.signal.butter) con la función de transferenciala ganancia efectiva será
fuente