Widziałem w wątku SO sugestię użycia, filtfilt
która zamiast tego wykonuje filtrowanie wstecz / do przodu lfilter
.
Jaka jest motywacja do zastosowania jednej z innymi technikami?
Widziałem w wątku SO sugestię użycia, filtfilt
która zamiast tego wykonuje filtrowanie wstecz / do przodu lfilter
.
Jaka jest motywacja do zastosowania jednej z innymi technikami?
filtfilt
wykonuje ten sam filtr dwa razy, w przeciwnych kierunkach, więc nie jest to wolniejsze niżlfilter
dwukrotne wykonywanie w jednym kierunku, w ten sposób uzyskałbyś tę samą odpowiedź częstotliwościową.Odpowiedzi:
filtfilt
to filtrowanie fazy zerowej, które nie przesuwa sygnału podczas filtrowania. Ponieważ faza jest zerowa na wszystkich częstotliwościach, jest również fazą liniową. Filtrowanie wstecz w czasie wymaga przewidywania przyszłości, więc nie można go stosować w rzeczywistych aplikacjach „online”, tylko do przetwarzania nagrań sygnałów offline.lfilter
to tylko przyczynowe filtrowanie z wyprzedzeniem, podobne do prawdziwego filtra elektronicznego. To nie może być faza zerowa. Może być fazą liniową (symetryczna FIR), ale zwykle nie jest. Zwykle dodaje różne wielkości opóźnienia przy różnych częstotliwościach.Przykład i obraz powinny uczynić to oczywistym. Chociaż wielkość odpowiedzi częstotliwościowej filtrów jest identyczna (lewy górny i prawy górny), dolnoprzepustowy zero-fazowy pokrywa się z oryginalnym sygnałem, tylko bez zawartości wysokiej częstotliwości, podczas gdy minimalne filtrowanie fazowe opóźnia sygnał w sposób przyczynowy :
źródło
lfilter
niekoniecznie jest to faza minimalna, może być czymkolwiek zależnym od współczynników filtra, ale w każdym razie jest to przyczynowość , cofiltfilt
nie jest. Zatem wynik porównania, któryfiltfilt
ma zerowe opóźnienie ilfilter
zawsze dodaje pewne opóźnienie, nie jest do końca prawdziwy, ponieważfiltfilt
w pierwszym rzędzie nie ma związku przyczynowego. Liczy się to, żefiltfilt
nie powoduje żadnych zniekształceń fazowych, podczaslfilter
gdy (chyba, że jest stosowany jako filtr FIR fazy liniowej, tj. Z mianownikiem = 1).filtfilt
odpowiada filtrowaniu za pomocą (2N-1) rzędulfilter
.lfilter
lubfiltfilt
. Zachowują się inaczej, jak pokazanoOdpowiedź @endolith jest kompletna i poprawna! Przeczytaj najpierw jego post, a następnie ten oprócz niego. Z powodu mojej niskiej reputacji nie byłem w stanie odpowiedzieć na komentarze, w których @Thomas Arildsen i @endolith spierają się o efektywną kolejność filtrów uzyskaną przez
filtfilt
:lfilter
stosuje dany filtr, aw przestrzeni Fouriera jest to jak RAZ zastosowanie funkcji transferu filtra.filtfilt
zastosuj dwukrotnie ten sam filtr, a efekt jest podobny do zastosowania funkcji przenoszenia filtra SQUARED. W przypadku filtra Butterworth (scipy.signal.butter
) z funkcją przesyłaniaefektywny zysk będzie
źródło