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

Wie wende ich den Filter butter z,p,k an?

 

FloG
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 05.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2012, 07:16     Titel: Wie wende ich den Filter butter z,p,k an?
  Antworten mit Zitat      
Hallo zusammen,

es gibt ja jede menge beispiele hier wie ich den Butterworth Filter in der Version [b,a]=butter(n,Wn) nutze mit der Funktion "filter". Aber nirgends ist eine Information zu finden wie ich ein Signal filtere mit dem Filter in der Version [z,p,k]=butter(n,Wn).

Warum möchte ich den zpk verwenden? Es heisst in der Matlab Hilfe:
"In general, you should use the [z,p,k] syntax to design IIR filters. To analyze or implement your filter, you can then use the [z,p,k] output with zp2sos and an sos dfilt structure. For higher order filters (possibly starting as low as order Cool, numerical problems due to roundoff errors may occur when forming the transfer function using the [b,a] syntax."

gruß Flo
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: 13.06.2012, 09:11     Titel:
  Antworten mit Zitat      
Du hast doch schon fast alles...es muss nur noch das Filterobjekt erzeugt werden.

Code:

[z,p,k] = butter(30,0.5);
[s,g] = zp2sos(z,p,k);
hd = dfilt.df2sos(s,g);
signal = randn(100,1);
signal_filt = filter(hd,signal);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
FloG
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 05.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2012, 11:04     Titel:
  Antworten mit Zitat      
Hallo DSP,

dankeschön für die Antwort. Diese Anwendung der Funktion filter war leider nicht in der Hilfe beschrieben. Ich habe das allerdings tatsächlich im Internet gefunden. Wenn ich mich recht erinnere war da die Rede von Problemen, oder dass das aufs gleiche hinausläuft wie mit der filter(b,a) version.

Warum ich das mit zpk ausprobieren wollte war, dass ich bei einem Signal (|sin(w*t)|), den Gleichanteil bestimmen/filtern wollte (ja das geht auch mit mean()). Also ein butter filter mit Zeitkonstante (=1/Grenzfrequenz) von 1s und Ordnung 1. Funktioniert wunderbar im (b,a) Typ. Sobald ich aber die 4te Ordnung oder eine höhere Zeitkonstante wählte, gab es Probleme. Anstelle einer Amplitude von ~1, schaukelte sich das gefilterte Signal auf 25 oder gar x*10^200 hoch.
Das tritt auch mit der zpk Variante auf. Die eigentliche Frage dieses Threads ist aber beantwortet.
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: 13.06.2012, 11:23     Titel:
  Antworten mit Zitat      
Verstehe ich noch nicht ganz...was gibst du genau für Wn bei der butter Fkt. an?
Private Nachricht senden Benutzer-Profile anzeigen
 
FloG
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 05.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2012, 15:17     Titel:
  Antworten mit Zitat      
Code:
Fs = 200e3;

% Butterworth Filter
n = 4;  % order
timeconstant = 1;   % in s
f_cutoff = 1 / timeconstant;
Wn = f_cutoff/(Fs/2);
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: 13.06.2012, 19:14     Titel:
  Antworten mit Zitat      
Wenn ich mit diesem Wn und n den butter Filter erstellen lasse, ist b(1-4) = 0. Das kann dann ja auch nicht gehen. Es ist aber auch utopisch bei dieser Abtastfreq. eine Grenzfreq. von 1 Hz haben zu wollen. Ich weiß nicht was hier zu dem b=0 führt, aber dadurch ist die tf-Funktion = 0. Du musst hier eine höhere Grenzfreq. wählen.

Das Hochschaukeln spricht ja dann eindeutig für ein instabiles Filter.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2025 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.