WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Frage zu Filtern (Grundverständnis)

 

JayvH
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 25.10.2011, 14:03     Titel: Frage zu Filtern (Grundverständnis)
  Antworten mit Zitat      
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.
Code:

close;
Anzahl_Schwingungen = 10;
Abtastrate = 1000;
Frequenz = 1;
Grenzfrequenz = 0.5;
x = linspace(0, Anzahl_Schwingungen*2*pi,Anzahl_Schwingungen * Abtastrate);
y = sin(Frequenz * x);
subplot(2,1,1),plot(x,y)
Wn = Grenzfrequenz/(Abtastrate/2);
[b,a] = butter(1,Wn,'high');
subplot(2,1,2),plot(x,filter(b,a,y)),figure(gcf)
 


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?
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.10.2011, 15:04     Titel:
  Antworten mit Zitat      
Probier dieses Bsp. mal...

Code:
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:

http://de.wikipedia.org/w/index.php.....etimestamp=20080412154210

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 Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 25.10.2011, 23:11     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
Probier dieses Bsp. mal...

Code:
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:

http://de.wikipedia.org/w/index.php.....etimestamp=20080412154210

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 Wink

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?

Danke nochmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.10.2011, 23:56     Titel:
  Antworten mit Zitat      
Zu den Fehlern:

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 27.10.2011, 23:25     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
Zu den Fehlern:

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.10.2011, 10:51     Titel:
  Antworten mit Zitat      
War wohl nicht einer meiner besten Tage. Ich muss mich nämlich mehrfach korrigieren Embarassed

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 Wink

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 Embarassed
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 30.10.2011, 12:21     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 30.10.2011, 13:56     Titel:
  Antworten mit Zitat      
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)

http://www.dspguide.com/pdfbook.htm

Kapitel 14-21 beschreiben das Thema Filter sehr verständlich und praxisnah.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 07.08.2012, 18:38     Titel:
  Antworten mit Zitat      
Ich nach langer Zeit mal wieder, aber nachdem mir letztes Mal hier so zum Thema Filter geholfen wurde, noch eine kleine Frage meinerseits.

Beim Befehler
Code:

gibt mir MATLAB ja die Koeffizienten des Filters heraus. Wenn ich die Dokumentation von MATLAB richtig verstehe, dann entweder als digitalen Filter (Default) oder als analogen Filter (Option 's' beim Aufruf). Jetzt habe ich aber noch das von DSP erwähnte fdatool, welches in diesem youtube-Demo-Video auch kurz vorgestellt wird. Dort wird ebenfalls der Butterworth-Filter verwendet, der aber nur unter den IIR-Optionen auftaucht, was laut der Person im Video also nur ein analoger Filter ist. So würde ich darauf schließen, dass ich hier also den gleichen Verlauf erhalten würde, wie über die Analogfunktion des butter-Befehls in der Kommandozeile.

Jedoch erhalte ich mit den gleichen Daten für Grenz- und Abtastfrequenz nur gleiche Verläufe beim fdatool und dem digital angewendeten butter-Befehl.

Das ganze noch einmal an dem alten Beispiel aus diesem Thread.
Digital:
Code:
Anzahl_Schwingungen = 10;
Fs = 1500; % Abtastfrequenz
Fn = 0.5*Fs; % Nyquistfrequenz
Ts = 1/Fs; % Abtastrate
Frequenz = 100; % Signalfrequenz
Tper = 1/Frequenz; % Periodendauer
Grenzfrequenz = 50; % 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 = (Grenzfrequenz/Fn); % normierte Grenzfrequenz
[b,a] = butter(10,Wn,'low'); % 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

Analog:
Code:

Anzahl_Schwingungen = 10;
Fs = 1500; % Abtastfrequenz
Fn = 0.5*Fs; % Nyquistfrequenz
Ts = 1/Fs; % Abtastrate
Frequenz = 100; % Signalfrequenz
Tper = 1/Frequenz; % Periodendauer
Grenzfrequenz = 50; % 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,'low','s'); % 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

Im Anhang noch der Filter, wie ich ihn über das fdatool für Abtastrate = 1500 Hz und Grenzfrequenz = 50 Hz erhalte.

myFilter.zip
 Beschreibung:

Download
 Dateiname:  myFilter.zip
 Dateigröße:  1.65 KB
 Heruntergeladen:  687 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.08.2012, 19:02     Titel:
  Antworten mit Zitat      
Zitat:

Jetzt habe ich aber noch das von DSP erwähnte fdatool, welches in diesem youtube-Demo-Video auch kurz vorgestellt wird. Dort wird ebenfalls der Butterworth-Filter verwendet, der aber nur unter den IIR-Optionen auftaucht, was laut der Person im Video also nur ein analoger Filter ist.


Diese Aussage in dem Video ist nicht richtig...auch IIR Filter im fdatool sind als digitale Filter anzusehen. Allerdings sollte man sich klar machen, was IIR eigentlich bedeutet: Infinite Impulse Response...übersetzt also UNendliche Impulsantwort. Das ist aber in der digitalen Welt nicht umsetzbar...es gibt ja nur begrenzten Speicherplatz und auch Rechenzeit spielt bei der Filterung keine unwesendliche Rolle. Deshalb sind die digitalen Versionen theoretisch keine IIR Filter. Allerdings wird sich z.B. die Impulsantwort mit der Länge (Anzahl Messwerte) immer mehr dem analogen Vorbild annähern und die Abweichung sogar vernachlässigbar klein sein.

Im übrigen verwendet das fdatool die Funktion

Code:
doc fdesign
% wenn Butterworth ausgewählt...
doc butter


die in der Doku als "Create a filter design object for designing discrete-time filters" beschrieben wird. Hier ganz klar der Bezug zu diskret, was also ein digitales Filter ist. Die Übertragungsfunktion des Filter ist also im z-Bereich...H(z) = .....
Wenn du dir ein m-file des entworfenen Filters im fdatool genieren läßt, wirst du auf diese Funktionen stoßen.

In so fern verwundert es nicht, dass fdatool und butter() als Filter im z-Bereich übereinstimmen.


Allerdings könntest du dir auch selber ins "Bein" geschossen haben, wenn du zur Darstellung der Filtereigenschaften des "analogen" Filters im s-Bereich die Funktion freqz. verwendest. Teste hier mal die Funktion bode(). Freqz ist für digitale Filter. Ich weiß allerdings nicht ob es wirklich einen Unterschied macht.

Code:

sys = tf(b,a) % Transferfunktion im s-Bereich
bode(sys);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.08.2012, 15:33     Titel:
  Antworten mit Zitat      
Ich habe gerade mal deine beiden Filter mit deinem Code getestet.

Ist dir bei dem analogen Filter nicht aufgefallen, dass der gar kein Tiefpassverhalten zeigt? Es ist eigentlich totaler Müll...das Filter hat eher Hochpassverhalten und dämpft aber über den kompletten Freq.-bereich.
Wie ich vorher schon auf freqz und bode hingewiesen habe, zeigt sich nun, dass freqz eben dieses vollkommen falsche Filterverhalten verursacht. Mit bode wird der Butterworth Filter als Tiefpass dargestellt...allerdings stimmt die Grenzfreq. nicht mit der Vorgabe von 50 Hz überein. Das liegt schlecht weg an dem falschen Wn. Da es sich um ein analoges Filter handelt, muss Fs = 1 gesetzt werden.

Code:

Grenzfrequenz = 50;
Wn = 2*pi * Grenzfrequenz;
[b_s,a_s] = butter(10,Wn,'low','s'); % Butterworth Hochpass 10. Ordnung
Hs = tf(b_s,a_s);
bode(b_s,a_s);
 


bode stellt hier die Kreisfrequenz in rad/s dar...die gezeigte Grenzfreq. stimmt nun auch mit der Vorgabe Wn = 314 rad/s überein.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 08.08.2012, 21:39     Titel:
  Antworten mit Zitat      
War mir nicht so recht aufgefallen, da hatte ich mich erst einmal darauf zurück gezogen, dass ich mich mit unterschiedlichen Filtertypen nicht so auskenne. Ich schaue mir den Code morgen mal an, wenn ich wieder im Büro bin. Dank erst einmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 09.08.2012, 11:35     Titel:
  Antworten mit Zitat      
Den Code kann ich leider nicht nachvollziehen, da fehlt uns hier wohl eine Toolbox:
Zitat:
Error using tf
License checkout failed.
License Manager Error -39
User/host not on INCLUDE list for Control_Toolbox.
Contact your License Administrator to review the Options File.

Troubleshoot this issue by visiting:
http://www.mathworks.com/support/lme/R2011b/39

Diagnostic Information:
Feature: Control_Toolbox
License path: C:\Users\PC163\AppData\Roaming\MathWorks\MATLAB\R2011b_licenses;C:\Program
Files\MATLAB\R2011b\licenses\license.dat;C:\Program Files\MATLAB\R2011b\licenses\network.lic
FLEXnet Licensing error: -39,147.

Die Grenzfrequenz ist dann aber beim analogen Filter im Gegensatz zum digitalen nicht normalisiert und die Abtastfrequenz Fs muss 1 werden? Die Abtastfrequenz ist doch eigentlich durch meine eigentliche Messung vorgegeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.08.2012, 12:23     Titel:
  Antworten mit Zitat      
Dir fehlt die Control System Toolbox, die tf (= Transfer function) und auch bode beinhaltet. Dann geht dies natürlich nicht. Mit freqz kommst du hier aber definitiv nicht bei dem "analogen" Filter auf die richtige Darstellung.

Noch was zur Abtastrate...

Zitat:

bode plots the response only up to the Nyquist frequency Wn . If the sample time is unspecified, the default value Ts = 1 is assumed.


Bei einem analogen System habe ich doch gar keine Abtastfrequenz. Um ein analoges Signal quasi 1 zu 1 darzustellen, müsste Fs unendlich groß sein. Der Begriff analoger Filter ist hier daher meiner Meinung nach etwas irreführend. Man hat ja mit Matlab keine analogen Signale. Diese sind immer diskret. Matlab kann dafür mit einer varialen Schrittweite arbeiten...analog ist es dann aber immer noch nicht.

Leider fehlt dir dafür ja die Toolbox...sonst hättest du die Transferfunction mal mit c2d() in ein diskretes Filter wandeln können und dieses mit den anderen beiden Methoden/Filtern vergleichen können.
Private Nachricht senden Benutzer-Profile anzeigen
 
JayvH
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 19.03.11
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 09.08.2012, 13:39     Titel:
  Antworten mit Zitat      
Rolling Eyes Das ist natürlich eine logische Erklärung für die Frequenz. Besten Dank mal wieder.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.