MATLABs „filtfilt
führt eine Vorwärts-Rückwärts-Filterung durch, dh filtert, kehrt das Signal um, filtert erneut und kehrt dann wieder um. Anscheinend geschieht dies, um Phasenverzögerungen zu reduzieren? Was sind die Vor- und Nachteile einer solchen Filterung (ich denke, dies würde dazu führen) in einer effektiven Erhöhung der Filterreihenfolge).
Wäre es vorzuziehen, filtfilt
immer anstelle von filter
( dh nur Vorwärtsfilterung) Gibt es Anwendungen, in denen dies erforderlich ist und in denen es nicht verwendet werden sollte?
Kommentare
- ' Verwenden Sie keine Nullphasenfilterung für Audio, da dies " Vorklingeln " klingt seltsam. Die Minimalphasenfilterung ist natürlicher. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
Antwort
Sie können es am besten im Frequenzbereich betrachten. Wenn $ x [n] $ die Eingabesequenz und $ h [n] $ die Impulsantwort des Filters ist, ist das Ergebnis des ersten Filterdurchlaufs
$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$
mit $ X (e ^ {j \ omega}) $ und $ H (e ^ {j \ omega}) $ the Fourier-Transformationen von $ x [n] $ bzw. $ h [n] $. Die Zeitumkehr entspricht dem Ersetzen von $ \ omega $ durch $ – \ omega $ im Frequenzbereich, sodass wir nach der Zeitumkehr
erhalten
$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$
Der zweite Filterdurchgang entspricht einer weiteren Multiplikation mit $ H (e ^ {j \ omega}) $:
$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $
was nach Zeitumkehr schließlich für das Spektrum des Ausgangssignals
$$ Y (e ^ {j \ omega}) = X (e ^ {j \ omega) ergibt }) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) = X (e ^ {j \ omega}) | H (e ^ {j \ omega}) | ^ 2 \ tag {1} $$
, weil wir für reelle Filterkoeffizienten $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $ haben. Gleichung (1) zeigt, dass das Ausgangsspektrum durch Filtern mit einem Filter mit dem Frequenzgang $ | H (e ^ {j \ omega}) | ^ 2 $ erhalten wird, whi ch ist rein reell, d. h. seine Phase ist Null und folglich gibt es keine Phasenverzerrungen.
Dies ist die Theorie. Bei der Echtzeitverarbeitung gibt es natürlich eine ziemlich große Verzögerung, da die Zeitumkehr nur funktioniert, wenn Sie eine Latenz zulassen, die der Länge des Eingabeblocks entspricht. Dies ändert jedoch nichts an der Tatsache, dass keine Phasenverzerrungen vorliegen. Es handelt sich lediglich um eine zusätzliche Verzögerung der Ausgabedaten. Für die FIR-Filterung ist dieser Ansatz nicht besonders nützlich, da Sie genauso gut einen neuen Filter $ \ hat {h definieren können } [n] = h [n] * h [-n] $ und erhalten das gleiche Ergebnis mit gewöhnlicher Filterung. Es ist interessanter, diese Methode mit IIR-Filtern zu verwenden, da sie keine Nullphase (oder lineare Phase) haben können, d. h eine reine Verzögerung).
In Summe:
-
Wenn Sie ein IIR-Filter haben oder benötigen und keine Phasenverzerrung wünschen, ist die UND-Verarbeitungsverzögerung dann kein Problem Diese Methode ist nützlich.
-
Wenn die Verarbeitungsverzögerung ein Problem darstellt, sollten Sie sie nicht verwenden.
-
Wenn Sie einen FIR-Filter haben können Sie leicht eine neue FIR-Filterantwort berechnen, die der Verwendung dieser Methode entspricht. Beachten Sie, dass mit FIR-Filtern immer eine genau lineare Phase realisiert werden kann.
Kommentare
- Ich habe ein Tag mit dem Namen erstellt
maximum-aposteriori-estimation
. Könnten Sie es bitte inmaximum-a-posteriori-estimation
umbenennen? Ich habe versehentlich die-
nach dera
vergessen. Vielen Dank.
Antwort
Ich habe dieses Video gefunden sehr, sehr hilfreich zu sein (es geht auf Matts Antwort ein).
Hier sind einige Schlüsselideen aus dem Video:
- Nullphasen-Wille führen zu keiner Phasenverzerrung, aber zu einem nicht kausalen Filter. Dies bedeutet, dass wenn die Daten beim Sammeln gefiltert werden, dies keine Option ist (nur gültig für gespeicherte Daten, die wir nachbearbeiten können).
- Wenn Sie einen nicht kausalen Filter implementieren, werden Transienten vorwärts und rückwärts verwischt (z. B. wenn wir eine 2DB-Welligkeit wünschen, die Tatsache Dass wir mit dem Filter einen Vorwärts- und Rückwärtslauf durchführen, bedeutet, dass jeder von ihnen 1 dB haben soll.
- Verwendet die Zeitumkehr-Eigenschaft der zeitdiskreten Fourier-Transformation.
- Der durch FILTFILT verursachte effektive Frequenzgang entspricht der Größe in einer Richtung im Quadrat. Sie nehmen Ihr Eingangssignal
x[n]
, filtern es, kehren das Ergebnis um, filtern es erneut und kehren es erneut um (für den Zeitumkehrschritt müssen alle Daten verfügbar sein).