Forum: Digitale Signalverarbeitung / DSP / Machine Learning MatLab filtfilt


von Eric (Gast)


Lesenswert?

Hallo,

weiß jemand zufällig was genau bei der filtfilt Funktion in MatLab 
passiert. Konkret meine ich die Initialbedingungen der Filter. Wie sind 
die darauf gekommen ? Ich kann es zwar in C nachprogrammieren, doch 
würde ich gerne wissen was ich programmiere :D.

Kennt sich einer damit aus ? Oder weiss einer wo die Erklärung im Netz 
zu finden ist. Ein Link wäre schon toll. Hat man als Randbedingungen 0 
zieht das Signal natürlich an den Rändern gegen 0. Für meine Anwendung 
unschön.


Gruß,

Eric

von Detlef _. (detlef_a)


Lesenswert?

Das sagt Mathworks zu den intial conditions:

filtfilt uses the filter function. filtfilt attempts to minimize 
start-up transients by adjusting the initial conditions to match the DC 
component of the signal. The algorithm also prepends several filter 
lengths of a flipped, reflected copy of the input signal.

'help filtfilt' bringt sowas.


Gute Nacht
Detlef

von Eric (Gast)


Lesenswert?

Hallo,


ja das habe ich auch gelesen. Doch wie funktioniert der Algorithmus 
genau ?Das war meine eigentliche Frage. Wann kann der angewendet werden 
und wann sollte er nicht verwendet werden usw. ?

Gruß,

Eric

von Mark 99 (Gast)


Lesenswert?

Normalerweise sehe ich mir bei so etwas die entsprechend geklonte 
Funktion in GNU Octave an. Da gibt es Source-Code. Allerdings scheinen 
die bei Octave ein paar Probleme bei der Implementierung zu haben:

http://octave.sourceforge.net/signal/function/filtfilt.html
> Forward and reverse filter the signal. This corrects for phase distortion
> introduced by a one-pass filter, though it does square the magnitude
> response in the process. That's the theory at least. In practice the phase
> correction is not perfect, and magnitude response is distorted,
> particularly in the stop band.

Bleibt nur sich quer durch die Literatur zu wühlen, ob sich dort etwas 
findet.

von Eric (Gast)


Lesenswert?

Ja danke erstmal.


Gruß

von Eric (Gast)


Lesenswert?

Hallo,

ich hätte nochmal ne Frage. Habe ein FIlter in Direktform 2 und in 
Direktform 2 transponiert programmiert. Ich brauch ja Initialbedingungen

Hier mal mein Matlab Code für die Direktform 2 normal:
1
for i=1:1:sz
2
     new_sample=input(i);    
3
     w1(1) = new_sample + ( -a1(1) * w1(2)) + (-a2(1)*w1(3));    
4
     res1=(b0(1)*w1(1))+(b1(1)*w1(2))+(b2(1)*w1(3));
5
    w1(3)=w1(2);
6
    w1(2)=w1(1);
7
    output(i)=res1*gain;
8
 
9
end

Nun habe ich bemerkt, das wenn ich bei den beiden Formen die Zustände 
(hier w1) ändere nur ein richtiges Ergebnis bei der Direktform 2 
transponiert herauskommt. Im Buch wird als Beispiel auch immer mit 
Direktform2 transponiert gerechnet bei Verwendung von Zuständen. Aber es 
muss doch auch gehen in der normalen Direktform2. Das wundert mich 
gerade irgendwie. Ist an der Gleichung irgendwo ein Fehler (muss ja :D), 
den ich gerade nicht sehe. Wenn mit 0 initalisiert wird funktionierts 
einwandfrei

: Bearbeitet durch Admin
von Eric (Gast)


Lesenswert?

Hallo,

keiner eine Idee ?.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.