MATLAB ist filtfilt () - Algorithmus

Ich versuche zu reproduzieren lange Teil von MATLAB-code in einer anderen Sprache, die keine built-in Entsprechung der phaseless filter filtfilt(). Ich versuche, die neu-Besetzung der Funktion in Bezug auf die einfache Filterung (oder Faltung) Operationen, so kann ich einfach nachvollziehen.
Ich verstehe, dass dieser Filtervorgang entspricht forward-Filterung, gefolgt von reverse-filtern, aber ich sehe die kleinen Unterschiede an den Kanten der Daten. Speziell:

data = [1 1 1 2 2 3 5 7 1 1 1 1 1];
ker = [2 1 1];

a = filtfilt(ker,1,data)

b = fliplr( filter( ker, 1, fliplr( filter(ker, 1, data) ) ) )

% a =
%
%   16   18   21   29   39   57   66   68   42   28   16   16   16
%
% b =
%
%   11   16   21   29   39   57   66   68   42   28   16   12    8

Ich habe versucht, die Polsterung der Daten mit Nullen an einem oder an beiden enden, bevor Sie eine oder beide der Filter-Operationen. Ich denke, ich bin wahrscheinlich etwas fehlt offensichtlich, aber kann nicht es vor Ort.

  • Ich hatte das gleiche Problem mit scipy.signal.filtfilt. Es gibt zwei wichtige Dinge, die filtfilt hat, zusätzlich zu der Ausführung des filters vorwärts und rückwärts: 1. gelten "ungerade" Polsterung, um bei start und Ende des Signals; 2. bestimmen Sie den Anfangszustand zi und leitet Sie an den eigentlichen filter. Details finden Sie in diesem einfache filtfilt Umsetzung.
InformationsquelleAutor Corey Kelly | 2013-07-16
Schreibe einen Kommentar