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

Filter-Funktion fuer zeitdiskrete Messdaten nutzen

 

FMK
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2015, 17:59     Titel: Filter-Funktion fuer zeitdiskrete Messdaten nutzen
  Antworten mit Zitat      
Hallo Zusammen,

ich schlage mich seit geraumer Zeit mit der Filter-Funktion rum und bin leider noch keinen Meter weiter gekommen. Ich habe zeitdiskrete Messdaten aus dem Oszi und PSCAD aufgenommen und moechte nun mithilfe der Filter-Funktion das Ausgangssignal erhalten.

Zuerst berechne ich analytisch die Uebertragungsfunktion, die einem PT1-Glied entspricht und diskretisiere sie. Dann filtere ich den Eingang.
Code:
C1 = 400E-12;
C2 = 0.9E-6;
R1 = 56000;
R2 = 5100;
Rs1 = 119;
Rs2 = 60;

X = Rs2*Rs2+R1*Rs2+R2*Rs2+R1*Rs2+R2*Rs2;
num = (R2*Rs2)/(Rs1*C2*X);
den = (C1+C2)/(Rs1*C1*C2);

K = num/den; % amplifier
Ts = 1/den; % delay
den2 = [1 Ts];
num2 = K;
%Create transfer function with sampling time
sys = tf( num, den, 1E-9);
% Diskretisierung der Übertragungsfunktion mit c2d
% auch hier ist die Abtastzeit dt wichtig
[num_int, den_int]  = tfdata(d2d(sys,1E-9));

Input2 = Input(1:335);
Output3 = filter(num_int{1},den_int{1}, Input2);
 

Herauskommen sollte wie in meiner Simulation aus einer Sprungfunktion eine gedaempfte Antwort (Antwort -Referenz), jedoch spuckt mir Matlab mit dem Code eher eine skalierte Sprungfunktion (Filter Ausgang) aus.

Hat jemand ne Idee was da schiefgelaufen ist.

Danke im Vorraus,
FMK
edit winkow: bitte code umgebung benutzen

untitled3.png
 Beschreibung:
Filter Ausgang

Download
 Dateiname:  untitled3.png
 Dateigröße:  12.97 KB
 Heruntergeladen:  635 mal
untitled2.png
 Beschreibung:
Eingang

Download
 Dateiname:  untitled2.png
 Dateigröße:  13.17 KB
 Heruntergeladen:  607 mal
untitled.png
 Beschreibung:
Ausgang -Referenz

Download
 Dateiname:  untitled.png
 Dateigröße:  15.02 KB
 Heruntergeladen:  609 mal
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2015, 18:12     Titel: Re: Filter-Funktion fuer zeitdiskrete Messdaten nutzen
  Antworten mit Zitat      
Code:

den2 = [1 Ts];
 

Sicher, dass Du nicht den2=[Ts 1] meinst?

Code:

sys = tf(num, den, 1E-9);
 

Sicher, dass Du nicht sys = tf(num2, den2, 1E-9); meinst? Und danach: sicher, dass Du nicht sys = tf(num2, den2); meinst?
Du definierst hier zeitdiskrete Übertragungsfunktion mit Parametern, die mutmaßlich zu einem kontinuierlichen System gehören. Und da num und den einfach nur Skalare sind, ist diese Übertragungsfunktion eine reine Verstärkung.

PS: Guck Dir auch mal an, was ein Debugger ist und wie man den von Matlab benutzt. Das wird Dir sicherlich bei der Fehlersuche behilflich sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
FMK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 09:38     Titel:
  Antworten mit Zitat      
Danke fuer die schnelle Antwort und den Debug fuer die Faktoren.
Auf die Antwort stellt sich fuer mich natuerlich die Frage, wie ich mein zeitdiskretes Eingangssignal dann mit der Uebertragungsfunktion mit num und den mein Ausgangssignal bekomme?
Das mit den Vektoren fuer die Uebertragungsfunkions habe ich leider nicht verstanden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 09:43     Titel:
  Antworten mit Zitat      
FMK hat Folgendes geschrieben:
Auf die Antwort stellt sich fuer mich natuerlich die Frage, wie ich mein zeitdiskretes Eingangssignal dann mit der Uebertragungsfunktion mit num und den mein Ausgangssignal bekomme?

Ich glaube, Du suchst lsim .

Zitat:
Das mit den Vektoren fuer die Uebertragungsfunkions habe ich leider nicht verstanden.


Code:

>> tau = 0.01;
>> num = 1;
>> den = [1 tau];
>> sys = tf(num, den)
sys =
 
     1
  --------
  s + 0.01
 
Continuous-time transfer function.
 

Ein PT1 mit der Zeitkonstante 100s.


Code:

>> den = [tau 1];
>> sys = tf(num, den)
sys =
      1
  ----------
  0.01 s + 1
Continuous-time transfer function.
 

Ein System mit der Zeitkonstante 0.01s. Und so, wie Du Deine Variablen genannt hast, nehme ich an, dass Du das willst und nicht das, was im ersten Beispiel steht (was Du aber gemacht hast).
Private Nachricht senden Benutzer-Profile anzeigen
 
FMK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 13:15     Titel:
  Antworten mit Zitat      
Danke fuer die Erklaerung der Eingabe von num und den.

Leider bekomm ich bei lsim das gleiche raus wie mit der filter-Funktion. Die Daempfung ist einfach nicht dabei, was vergesse ich da?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 13:16     Titel:
  Antworten mit Zitat      
Wie lautet denn die Ausgabe, wenn Du auf der Konsole sys eingibst?
Private Nachricht senden Benutzer-Profile anzeigen
 
FMK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 13:53     Titel:
  Antworten mit Zitat      
sys =

389.5
--------------
2.102e07 z + 1

Sample time: 1e-12 seconds
Discrete-time transfer function.

entspricht einem PT1 Glied mit 1.853E-5 / (1+s4.7578E-Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 14:01     Titel:
  Antworten mit Zitat      
Guck Dir mal mit step die Sprungantwort davon an. Oder wenn Du es besser lesen kannst mit pzmap den Pol-Nullstellenplan. Oder mit impulse die Impulsantwort. Oder mit bode da Bodediagramm. An sich ist es egal - in dem Fall sind alle recht aussagekräftig...

Und dann fängst Du nochmal von vorne an, zu prüfen, wie Du auf diese Parameter gekommen bist und an welcher Stelle es schief gelaufen ist :)
Private Nachricht senden Benutzer-Profile anzeigen
 
FMK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 14:28     Titel:
  Antworten mit Zitat      
%Calculate analytical transfer function
C1 = 400E-12;
Danke fuer den Tip. Hab jetzt mal folgendes gemacht:
C2 = 0.9E-6;
R1 = 56000;
R2 = 5100;
Rs1 = 119;
Rs2 = 60;

X = Rs2*Rs2+R1*Rs2+R2*Rs2+R1*Rs2+R2*Rs2;
num = (R2*Rs2)/(Rs1*C2*X);
den = (C1+C2)/(Rs1*C1*C2);

K = num/den; % amplifier
Ts = 1/den; % delay
den2 = [1 Ts]; %or [1 Ts]
num2 = K; % or K
sys = tf(num2, den2);
step(sys);

Heraus kommt eine amplitude groesser als 1 und gedampft. Wie kann das sein? Das Signal sollte doch kleiner werden.
Hab das ganze mal mit K und Ts in ein aehnliches Programm wie simulink eingegeben, da passen die Parameter.

Wenn ich
sys = tf(num2, den2, 1E-12); eingebe kommt die richtige skalierung raus aber wieder der einheitsprung ohne daempfung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2015, 14:32     Titel:
  Antworten mit Zitat      
Da kann ich mich leider nur selbst zitieren:

Zitat:
Sicher, dass Du nicht den2=[Ts 1] meinst?


Und der Vollständigkeit halber: doc tf

Nachtrag: Du kannst auch nicht einfach zeitkontinuierliche Parameter mit einer Samplingrate in tf stecken und erwarten, dass die Funktion dir das dem zeitkontinuierlichen System entsprechende zeitdiskrete System zurück gibt. tf gibt Dir dann zwar ein zeitdiskretes System zurück, aber das mit den Parametern, die Du übergeben hast. Was Du vermutlich meinst, ist:
Code:

sys_konti = tf(num, den);
sys_diskret = c2d(sys_konti, samplingrate);
 

Steht aber an sich auch ziemlich genau so in der Doku zu tf.
Private Nachricht senden Benutzer-Profile anzeigen
 
FMK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2015, 09:45     Titel:
  Antworten mit Zitat      
Vielen Dank fuer die letzte Antwort und die Geduld. Hat wunderbar geklappt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2015, 09:46     Titel:
  Antworten mit Zitat      
Ein Glück :)
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 - 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.