Verfasst am: 25.10.2011, 14:03
Titel: Frage zu Filtern (Grundverständnis)
Hallo,
ich habe eine Frage zur Filterung von Signalen (im speziellen mit Matlab). Ich bin leider noch totaler Anfänger was die Filterung von Signalen angeht. Aber was ich mir darunter vorstelle ist bspw. ein Störsignal, welches sich niederfrequent über meine Messung gelegt hat und welches ich dann mit einem Hochpassfilter entferne. Jetzt habe ich mir mal ein ganz einfaches Beispiel geschrieben, um das nachzuvollziehen, aber was passiert ist eine Absenkung der Amplitude im Ausgangssignal. Die Frequenz ist da. In meiner Vorstellung sollte sich eigentlich als Ausgangssignal nur ein langer Strich ergeben.
In meinem Beispiel also für die Sinusschwingung mit der Frequenz 1 Hz und der Grenzfrequenz 0,5.
Mache ich in der Anwendung etwas falsch oder verstehe ich die Funktion des Filters nicht? Falls es letzteres sein sollte, dann wäre ein Hinweis auf eine leicht verständliche Einführung in Filterung (for Dummies sozusagen) sehr hilfreich. Wikipedia beginnt gleich bei elektrischen Filtern und da bin ich als Maschinenbauer wohl zu unverständig für.
Zusatzfrage: Wieso schwingt sich so eine Berechnung erst ein?
Anzahl_Schwingungen = 10;
Fs = 1000; % Abtastfrequenz
Fn = 0.5*Fs; % Nyquistfrequenz
Ts = 1/Fs; % Abtastrate
Frequenz = 10; % Signalfrequenz
Tper = 1/Frequenz; % Periodendauer
Grenzfrequenz = 5; % des Filters
t = linspace(0, 10*Tper,10*Tper/Ts); % Zeitvektor
y = sin(2*pi*Frequenz * t);
subplot(2,1,1),plot(t,y)
Wn = 2*pi*(Grenzfrequenz/Fn); % normierte Grenzfrequenz [b,a] = butter(10,Wn,'high'); % Butterworth Hochpass 10. Ordnung % 1. Ordnung macht wenig Sinn, da der Dämpfungsfaktor des Filters einfach zu gering ist subplot(2,1,2),plot(t,filter(b,a,y)),figure(gcf) % Darstellung der Filterimpulsantwort figure(2)
freqz(b,a); % Darstellung von Amplituden- und Phasengang % Der Amplitudengang zeigt das Dämpfungsverhalten des Filters. % auf der x-Achse ist die Frequenz...negative dB Werte bedeuten Dämpfung, positive Verstärkung des Signals.
Du hattest ein paar Fehler drin und die Filterordnung war zu gering. Ebenfalls ist die Wahl von 1 Hz Signal- und 0.5 Hz Grenzfrequenz für ein derartiges Filter nicht leistbar. Je höher die Filterordnung, desto größer wird in der Regel die Dämpfung des Filters im Sperrbereich. Schau dir mal den oberen Plot in Figur 2 an...das Amplitudenspektrum. Im Niederfrequentenbereich hat das Filter eine Dämpfung. Es sperrt diese Signalanteile mit annähernd -120 dB. Im Durchlassbereich ist die Verstärkung 0 dB = 1...also werden hochfrequenten Anteile unverändert durchgelassen.
Wegen dem Einschwingen solltest du dir mal dieses Bild der Filterstruktur anschauen:
z^-1 ist nicht weiter als eine Verzögerung um 1 Abtastwert (oben Ts genannt). h(0...4) sind die Koeffizenten des Filters. Bei einem FIR Filter lediglich b...der Butterworth Hochpass von oben ist ein IIR-Filter (deshalb a und b). Zum besseren Verständnis bleiben ich aber beim einfacheren FIR-Filter. Beim Dreieck mit h(0...4) wird ein Signalwert mit einem Koeffizienten multipliziert. Wie du in dem Diagramm siehst, werden die Werte am Eingang nacheinander eingeschoben. Wenn ich nun jeweils nur Einsen einschiebe, dauert es eben 5 Abtastschritte, bis auch am Ausgang eine 1 anliegt.
y = h(0) * x(0) + h(1) * x(1) + ...h(n)*x(n)
Bsp. für ein einfaches Mittelwertfilter da alle Koeffizienten h=1/5 gleich sind: Das Filter ist mit Nullen initialisiert. Es wird nun bei jedem Abtastschritt eine 1 in das Filter geladen...es dauert also 5 Abtastschritte, bis dieser Wert am Ausgang erscheint.
1. Abtastschritt: x(0) = 1, x(1...4) = 0
y(1) = 1/5*1 + 1/5*0 + 1/5*0 + 1/5*0 + 1/5*0 = 1/5
2. Abtastschritt: erste 1 wandert zu x(1) und in x(0) wird die nächste 1 geladen
y(2) = 1/5*1 + 1/5*1 + 1/5*0 + 1/5*0 + 1/5*0 = 2/5
...
5. Abtastschritt
y(5) = 1/5*1 + 1/5*1 + 1/5*1 + 1/5*1 + 1/5*1 = 5/5 = 1
Dieser Vorgang entspricht dem Einschwingen. Ich hoffe das war jetzt verständlich
Anzahl_Schwingungen = 10;
Fs = 1000; % Abtastfrequenz
Fn = 0.5*Fs; % Nyquistfrequenz
Ts = 1/Fs; % Abtastrate
Frequenz = 10; % Signalfrequenz
Tper = 1/Frequenz; % Periodendauer
Grenzfrequenz = 5; % des Filters
t = linspace(0, 10*Tper,10*Tper/Ts); % Zeitvektor
y = sin(2*pi*Frequenz * t);
subplot(2,1,1),plot(t,y)
Wn = 2*pi*(Grenzfrequenz/Fn); % normierte Grenzfrequenz [b,a] = butter(10,Wn,'high'); % Butterworth Hochpass 10. Ordnung % 1. Ordnung macht wenig Sinn, da der Dämpfungsfaktor des Filters einfach zu gering ist subplot(2,1,2),plot(t,filter(b,a,y)),figure(gcf) % Darstellung der Filterimpulsantwort figure(2)
freqz(b,a); % Darstellung von Amplituden- und Phasengang % Der Amplitudengang zeigt das Dämpfungsverhalten des Filters. % auf der x-Achse ist die Frequenz...negative dB Werte bedeuten Dämpfung, positive Verstärkung des Signals.
Danke, dass hat mich schon einmal gut weiter gebracht.
Zitat:
Du hattest ein paar Fehler drin
Welche denn neben der Ordnung und der Frequenzwahl?
Zitat:
und die Filterordnung war zu gering. Ebenfalls ist die Wahl von 1 Hz Signal- und 0.5 Hz Grenzfrequenz für ein derartiges Filter nicht leistbar. Je höher die Filterordnung, desto größer wird in der Regel die Dämpfung des Filters im Sperrbereich.
Da habe ich die Ordnung wohl vollständig fehlinterpretiert. Ich hatte meine Gedanken bei Vielfachen von Frequenzen und daher gedacht, ich würde bspw. bei der 2. Ordnung das doppelte der Grenzfrequenz rechnen.
Zitat:
Schau dir mal den oberen Plot in Figur 2 an...das Amplitudenspektrum. Im Niederfrequentenbereich hat das Filter eine Dämpfung. Es sperrt diese Signalanteile mit annähernd -120 dB. Im Durchlassbereich ist die Verstärkung 0 dB = 1...also werden hochfrequenten Anteile unverändert durchgelassen.
Ja sehr anschaulich. So langsam kommen auch ein paar Erinngerungen an die Mess- und Regelungstechnik Vorlesungen vor vielen Jahren zurück. Was aber nicht so klar ist, ist nun der Begriff Grenzfrequenz. Es ist also nicht so, dass ich über die Wahl der Frequenz sagen kann, dass über bzw. unter dieser Frequenz alles durchgelassen wird, oder? Wenn ich in dem Code für die Grenzfrequenz auf 5 habe (war bei meiner 0,5 Vermutung dann ja auch entgegen meiner Annahme), die Frequenz der Sinusschwingung aber bei 10 habe, so hätte ich zunächst vermutet, dass meine Schwingung durch die Filterung unangetastet bleibt (sie ist ja höherfrequent als die Grenze).
Zitat:
Wegen des Einschwingens solltest du dir mal dieses Bild der Filterstruktur anschauen:
z^-1 ist nicht weiter als eine Verzögerung um 1 Abtastwert (oben Ts genannt). h(0...4) sind die Koeffizenten des Filters. Bei einem FIR Filter lediglich b...der Butterworth Hochpass von oben ist ein IIR-Filter (deshalb a und b). Zum besseren Verständnis bleiben ich aber beim einfacheren FIR-Filter. Beim Dreieck mit h(0...4) wird ein Signalwert mit einem Koeffizienten multipliziert. Wie du in dem Diagramm siehst, werden die Werte am Eingang nacheinander eingeschoben. Wenn ich nun jeweils nur Einsen einschiebe, dauert es eben 5 Abtastschritte, bis auch am Ausgang eine 1 anliegt.
y = h(0) * x(0) + h(1) * x(1) + ...h(n)*x(n)
Bsp. für ein einfaches Mittelwertfilter da alle Koeffizienten h=1/5 gleich sind: Das Filter ist mit Nullen initialisiert. Es wird nun bei jedem Abtastschritt eine 1 in das Filter geladen...es dauert also 5 Abtastschritte, bis dieser Wert am Ausgang erscheint.
1. Abtastschritt: x(0) = 1, x(1...4) = 0
y(1) = 1/5*1 + 1/5*0 + 1/5*0 + 1/5*0 + 1/5*0 = 1/5
2. Abtastschritt: erste 1 wandert zu x(1) und in x(0) wird die nächste 1 geladen
y(2) = 1/5*1 + 1/5*1 + 1/5*0 + 1/5*0 + 1/5*0 = 2/5
...
5. Abtastschritt
y(5) = 1/5*1 + 1/5*1 + 1/5*1 + 1/5*1 + 1/5*1 = 5/5 = 1
Dieser Vorgang entspricht dem Einschwingen. Ich hoffe das war jetzt verständlich
Ja, das war jetzt sehr anschaulich. Je nach Aufbau des Filters (Zahl der Koeffizienten usw.) benötigt es dann auf ggf. eine längere Zeit bis sich das Ausgangssignal eingeschwungen hat, oder?
Bei der normierten Grenzfrequenz wie auch beim Testsignal y fehlte 2*pi. Außerdem stimmte beim Zeitvektor x die Schrittweite nicht mit der Abtastrate überein.
Zitat:
Es ist also nicht so, dass ich über die Wahl der Frequenz sagen kann, dass über bzw. unter dieser Frequenz alles durchgelassen wird, oder?
Doch...mit der Grenzfrequenz stellt man den Durchlass- und Sperrbereich des Filters ein. Bei der Grenzfrequenz beträgt die Dämpfung exakt 1/sqrt(2) = 0.707 oder -3.01 dB. Bei einem Hochpass werden dann eben bis zur Grenzfrequenz niederfreq. Anteile gedämpft und darüber durchgelassen. Bei einem Tiefpass ist es genau umgekehrt. Wenn du etwas Regelungstechnik kennst...ein PT1-Glied ist ein Tiefpass 1. Ordnung mit einer Grenzfrequenz von 1/T (T = Zeikonstante) und einer Dämpfung nach 1/T von -20dB/Dekade. Beim PT2 sind es dann schon -40dB/Dekade.
Zitat:
Je nach Aufbau des Filters (Zahl der Koeffizienten usw.) benötigt es dann auf ggf. eine längere Zeit bis sich das Ausgangssignal eingeschwungen hat, oder?
Richtig...Filtertyp (z.B. IIR oder FIR), Filterordnung, Filterverhalten (Tief-, Hoch-, Bandpass etc) aber auch die Abtastrate haben einen Einfluss auf das Einschwingverhalten. Das Einschwingverhalten untersucht man am Besten mit der Sprungantwort des Filters...das Übertragungsverhalten mit der Impulsantwort bzw. dessen transfomierte Frequenzantwort.
Bei der normierten Grenzfrequenz wie auch beim Testsignal y fehlte 2*pi. Außerdem stimmte beim Zeitvektor x die Schrittweite nicht mit der Abtastrate überein.
OK, da ich das 2*pi im x versenkt hatte, dachte ich das damit erledigt zu haben. Da ich in der Hilfe zum butter Befehl explizit gelesen hatte, dass Wn bei der Option 's' in [rad/s] anzunehmen ist, habe ich gedacht, dass das bei meiner Anwendung ohne 's' rausfällt. Etwas verwirrend bzw. in der Hilfe dann nicht ordentlich angegeben.
Zitat:
Doch...mit der Grenzfrequenz stellt man den Durchlass- und Sperrbereich des Filters ein. Bei der Grenzfrequenz beträgt die Dämpfung exakt 1/sqrt(2) = 0.707 oder -3.01 dB. Bei einem Hochpass werden dann eben bis zur Grenzfrequenz niederfreq. Anteile gedämpft und darüber durchgelassen. Bei einem Tiefpass ist es genau umgekehrt. Wenn du etwas Regelungstechnik kennst...ein PT1-Glied ist ein Tiefpass 1. Ordnung mit einer Grenzfrequenz von 1/T (T = Zeikonstante) und einer Dämpfung nach 1/T von -20dB/Dekade. Beim PT2 sind es dann schon -40dB/Dekade.
So habe ich mir es ja eigentlch auch gedacht. Aber in dem hier programmierten Beispiel ist ja die Grenzfrequenz 5 Hz, aber die Signalfrequenz ist 10 Hz, warum wird die höhere Frequenz vom High Pass dann nicht durchgelassen?
War wohl nicht einer meiner besten Tage. Ich muss mich nämlich mehrfach korrigieren
Beim Faktor 2*pi beim Vektor x und auch beim Sinus hast du in so fern Recht, dass das Signal dennoch identisch zu meiner Schreibweise ist. Allerdings bin ich es gewohnt, im Zeitbereich die x-Achse dann auch in Abhängigkeit zur Abtastrate darzustellen. Das ist ja mit dem Vektor x durch den Faktor 2*pi nicht mehr gegegeben, weshalb ich persönlich
sin(2*pi*f * t) vorziehen würde
Bei der normierten Grenzfrequenz hattest du vollkommen Recht. Hier habe ich mich mal wieder von dem Namen Wn verwirren lassen. Ich hatte dies schon mal in einem anderen Thread durcheinander gebracht und dann sogar extra in der Doku danach gesucht. Leider hatte ich es wieder vergessen. Erstellt man ein 'analoges' Filter im Bildbereich ('s') wird Wn tatsächlich in rad/s übergeben und somit muss der Faktor 2*pi dort mit eingerechnet werden. Bei einem digitalen Filter wird Wn allerdings doch in Hz übergeben und somit war das bei dir vollkommen richtig. Für mich steht das Wn für omega-normiert und das ist nun mal 2*pi*f / Normierung. Da finde ich das Kürzel sehr irritierend, zu mal in der Doku beim Butter-Befehl es in meinen Augen nicht ausreichend erklärt wird.
Unter 'Frequency response' in der Doku wird es im Zusammenhang mit freqz als Bsp. für einen Butterworth-Filter einleuchtend erklärt. Da also die Grenzfrequenz somit nicht bei 5 Hz lag, sondern bei rund 32 Hz wurde das 10Hz Signal gedämpft. Hier hätte es mir aber spätestens auffallen müssen, dass das Filter nicht wie gewünscht reagiert
Ich habe mich auch wohl zu sehr an deinem Satz aus dem ersten Post orientiert:
Zitat:
In meiner Vorstellung sollte sich eigentlich als Ausgangssignal nur ein langer Strich ergeben.
Da sich dieser Verhalten ja einstellte, habe ich mir keine weiteren Gedanken gemacht. Sorry...wenn ich hier also für einige Verwirrung gesorgt habe. Allerdings reagiert das Filter trotz richtigem Wn nicht wie gewunscht bei Wn = 5 Hz und f = 10 Hz. Bei einer einstelligen Grenzfrequenz wird das IIR-Filter instabil. Versuche mal eine Grenzfreq. von mind. 10 Hz und eine ensprechend höhere Signalfreq. So kannst du dir übrigens den Amplitudengang/Dämfungsverlauf des Filters mit der Frequenz in Hz darstellen.
Code:
[h,f]=freqz(b,a,1024,Fs);
plot(f,20*log10(abs(h)+eps));
xlabel('Frequenz in [Hz]') ylabel('Magnitude in [dB]')
Da fällt dann schneller auf, ob das Filter entsprechend der gewünschte Vorgabe designed wurde. Wenn du auch noch den Phasengang in Abhängigkeit von f in Hz darstellen willst, verwende den Befehl phasez.
Danke für die Rückmeldung ich denke mir ist jetzt schon einiges klarer. Ich habe es jetzt mal mit einer Frequenz von 40 Hz und einer Grenzfrequenz von 41 Hz, 50 Hz und 80 Hz ausprobiert. Je näher sich meine Grenzfrequenz an der tatsächlichen Frequenz befindet desto schwächer ist die Dämpfung. Ich werde mit das jetzt noch einmal genauer in der Dokumentation von freqz anschauen.
Gibt es vielleicht sonst noch eine kleine Literaturempfehlung, um sich in das Gebiet der Filter (wie wählt man richtig) einzuarbeiten?
Zum Thema Filterdesign gibt es in Matlab z.B. auch die Funktion
Code:
[n,Wn] = buttord(Wp,Ws,Rp,Rs)
womit die dir die optimale Filterordnung und Grenzfrequenz an Hand der Parameter übergeben wird. Was sich hinter Wp etc. verbirgt, steht in der Doku. Noch bequemer wäre aber das fdatool, wo du auch eine Gui samt Grafik mit Beschreibung des Dämpfungsverlaufes hast.
Da du dich ja erst in das Thema einarbeitest, würde ich zunächst nach frei zugänglicher Skripte zum Thema digitale Filter (FIR,IIR etc.) vor allem von Hochschulen suchen. Das sollte für den Anfang reichen, als sich z.B. gleich ein Buch zu kaufen. Ich empfehle sonst auch immer wieder folgendes Skript (allerdings in Englisch)
Kapitel 14-21 beschreiben das Thema Filter sehr verständlich und praxisnah.
Options and Permissions
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.