Ist jemand mit Gustafsons Algorithmus zur Minimierung von Transienten bei der Vorwärts-Rückwärts-Filterung vertraut [1]? Ich versuche es zu implementieren und meine erste Vermutung war, Matlabs filtfilt.m zu überprüfen, da sie auf das Papier verweisen. In der Matlab-Funktion wird auch ein lineares Gleichungssystem gelöst, um Anfangsbedingungen zi zu finden, die die Starttransienten minimieren, aber die Beziehung zwischen Referenz und Code ist für mich nicht offensichtlich. Die einzigen Codezeilen bezüglich der Minimierung sind (nfilt ist die Länge der Koeffizientenvektoren):
zi = ( eye(nfilt-1) - [-a(2:nfilt), [eye(nfilt-2); zeros(1,nfilt-2)]] ) \...
( b(2:nfilt) - b(1)*a(2:nfilt) );
Kann mich jemand in die richtige Richtung weisen, wie sich diese Zeilen auf den in Gustafsons Artikel beschriebenen Algorithmus beziehen?
[1] Gustafsson, F. "Bestimmen der Anfangszustände bei der Vorwärts-Rückwärts-Filterung." IEEE®-Transaktionen zur Signalverarbeitung. Vol. 44, April 1996, S. 988–992.
filtfilt()
kann ich nicht verstehen, warum. Ich habe das Gustafson-Papier nicht gelesen (ich bin kein IEEE und kann es nicht kostenlos bekommen. Jeder, der eine Kopie hat, kann mir gerne eine PDF-Datei per E-Mail senden). Wenn man das Konzept von verwendet filtfilt
, kann man es mit einer ganzen Datei von Samples machen (für mich wäre es eine Audio- oder Sounddatei, wie eine .wav). Zuerst wird der Sound vorwärts gefiltert, wobei er am Ende um Null gepolstert wird, solange Sie erwarten eine Impulsantwort des Vorwärtsfilters. das verlängert die Datei, aber die Ausgabe wird praktisch auf Null. Führen Sie dann die resultierende Datei rückwärts durch den Filter.
filtfilt
in Echtzeit die Eingabe in Probenblöcke aufteilt, jeden Block auf Null auffüllt, die Blöcke rückwärts filtert, aber die "Schwänze" zurück in die Vorwärtsrichtung dreht und Überlappungsaddition. Powell-Chau hat dies nicht getan, aber ich denke, dies ist eine gute Anwendung von abgeschnittenen IIR-Filtern, sodass Sie wissen, wann die abklingende Blockausgabe endet.