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

Überlagerung von gedämpften Schwingungen

 

motlob
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 16.03.2012, 19:29     Titel: Überlagerung von gedämpften Schwingungen
  Antworten mit Zitat      
Hallo, geehrte Matlab-Profis!

Ich stehe vor einem etwas kleinem Problem und hoffe hier eine Antwort darauf zu finden.

Ich habe Messdaten über der Zeit aufgenommen und möchte diese auswerten. Es ist bekannt, dass die Messdaten eine Überlagerung von gedämpften Schwingungen beschreiben.

Meine Aufgabe ist es, die Koeffizienten (Frequenz f_i, Dämpfung k_i, Amplitude \hat p_i) der überlagerten Schwingungen herauszufinden:

p(t) = \sum_{i=1}^{n}{\hat{p}_ie^{-k_it}\sin(2\pi f_i t)}

Ich weiß, dass ich die Frequenzen mittels einer Fouriertransformation FFT bestimmen kann. Theoretisch ist auch das Ablesen der Dämpfung möglich, aber das ist mit den Daten, die ich habe nur sehr schwierig.

Meine Frage ist es, ob es schon eine Toolbox gibt, die mir diese Aufgabe abnehmen kann. Ich habe auch cftool ausprobiert, aber diese schafft nicht immer die wahre Form der Messdaten anzunähern.

Auch wäre es mir lieb, wenn ich nur die ersten drei Schwingungen (mit den größten Amplituden) herauslesen könnte.

Wie gehe ich am besten vor? Sollte ich etwas schlecht beschrieben haben, kann ich es gerne noch näher erläutern.

Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


motlob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 17.03.2012, 16:45     Titel:
  Antworten mit Zitat      
Ich habe mich mal ein wenig eingelesen und gesehen, dass man die Messdaten als Summe von Übertragungsfunktionen darstellen könnte (mit pem und iddata). Daraus könnte ich die Konstanten ermitteln und einfach in meine Funktion einsetzen.

Es gilt:

G(s) = \frac{K_d}{(T_ws)^2+2\zeta T_ws+1}e^{-T_d s}

für

y(t) = K_d\cdot e^{-\zeta \omega_0(t-t_T)}\sin(\omega_d (t-Td))

mit \omega_0 = \frac{1}{T_w} und \omega_d = \sqrt{1-\zeta^2}\omega_0.

Ich hab es auch schon versucht in Matlab umzusetzen. Meine Messdaten sehen bspw. so aus (Messdaten befinden sich im Anhang):



Mein Matlab-Code:
Code:
% Plotten
plot(t,y);

% Berechnung der Übertragungsfunktion
Ts = 1/20000;                   % Abtastzeit
u = zeros(length(y), 1);        % Speicher für u allokieren

u(1) = 1;                       % Impulsfunktion
idy = iddata(y, [u u u], Ts);   % 3 Eingangsfunktion, um es als Überlagerung von 3 Funktionen darzustellen
m = pem(idy, 'P2DU');           % Berechne Übertragungsfunktion:
                                % P2 = PT2-Glied, D = Totzeit, U = komplexe Polstellen
disp('Fertig');

% Berechne y(t)
y_neu = zeros(length(t), 1);    % Speicher für das berechnete y
for i = 1:length(t)
    for k = 1:3
        kp = m.kp.value(k);  % Nehme die Koeffizienten aus der berechneten Übertragungsfunktionen
        zeta = m.zeta.value(k);
        w0 = 1/m.tw.value(k);
        wd = sqrt(1-zeta^2)*w0;
        td = m.td.value(k);
        y_neu(i) = y_neu(i) + kp*exp(-zeta*w0*(t(i)-td))*sin(wd*(t(i)-td));
    end
end
disp('Fertig');

% Plotten
plot(t, y, t, y_neu);


Plotte ich beide Funktionen nebeneinander, dann sehe ich, dass sie gar nicht übereinstimmen.



Wo liegt der Fehler? Oder habe ich die Funktion von pem falsch verstanden? Ein kleiner Hinweis würde mir weiterhelfen.

Messdaten t, y.zip
 Beschreibung:
Es befindet sich eine mat-File mit den Messdaten y und der Zeit t.

Download
 Dateiname:  Messdaten t, y.zip
 Dateigröße:  5.77 KB
 Heruntergeladen:  639 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
motlob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 17.03.2012, 21:45     Titel:
  Antworten mit Zitat      
Ich komme meinem Ziel näher! Anstatt die Parameter einzeln zu übertragen und y(t) über die for-Schleife zu bestimmen, habe ich mit c2d und sim das neue y(t) bestimmt:



Code:
md = c2d(m, Ts); % Vom kontinuierlichen zum diskreten Modell umwandeln
y_neu2 = sim(md, [u u u]); % Simulation für die Eingänge u

plot(t, y, t, y_neu2);


Leider stimmt es immer noch nicht wirklich mit den Messdaten überein. Der entscheidende Hinweis fehlt aber immer noch. Irgendwer hat sich doch bestimmt schon einmal mit dem Problem auseinander gesetzt. Ich mache das leider zum ersten Mal und im Forum finde ich nicht so viele Antworten auf meine Fragen. Crying or Very sad

(Entschuldigt den Doppelpost. Man kann die Beiträge nicht editieren.)
Private Nachricht senden Benutzer-Profile anzeigen
 
motlob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 20.03.2012, 03:55     Titel:
  Antworten mit Zitat      
Entweder ist das Problem zu kompliziert oder zu einfach, weswegen ich keine Antwort bekomme. Sad

Daher eine andere Frage:

Ist das überhaupt möglich, was ich machen möchte? Also die Messdaten in einzelne gedämpfte Schwingungen aufzuspalten?

Ein kurzes Ja oder Nein würde mir vollkommen ausreichen, da ich wissen will, ob ich mich damit weiter auseinandersetzen soll.

Danke trotzdem. Ich werde nebenbei mein Glück bei Matlab Central versuchen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.03.2012, 10:49     Titel:
  Antworten mit Zitat      
dein problem ist sehr speziell und es hat auch nicht jeder deine toolboxen. das könnte ein grund sein warum du noch keine antworten bekommen hast. zum thema fft giebts hir ein gutes beispiel in der script ecke soweit ich weis. sonst hoff ich mal für dich das das hir bald jemand liest der ahnung von signalverarbeitung hat Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
motlob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 20.03.2012, 17:28     Titel:
  Antworten mit Zitat      
Ah, ok. Ich dachte das würde zu der Grundausbildung eines jeden Matlab-Benutzers gehören. Von der Theorie her ist das alles ganz einfach, aber in Matlab sieht das alles merkwürdig aus. Anschauliche Beispiele finde ich leider auch keine.

Ich werde es dann wohl noch etwas ausprobieren und hier im Forum noch einige Beiträge zu FFT anschauen.

Danke für dein Statement, Winkow! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2012, 23:48     Titel:
  Antworten mit Zitat      
Hi motlob,

also wenn ich das richtig verstanden habe was du vor hast, dann sollte das eigentlich nicht alzu schwierig sein. Die Koeffizienten der Übertragungsfunktion kannst du mit der Identification Toolbox identifizieren. Umrechnen must du diese dann selber.

Für diese vergleichsweise einfache Aufgabe würde ich dir das Gui der Toolbox empfehlen. Einfach mal "ident" eingeben.
Dann kannst du dir beispielsweise ein "Process Modell" oder ein "Polynom Modell" identifizieren lassen. Je nach Anforderung...
Ich glaube dein Modell sollte sogar so als Process Modell verfügbar sein, ist aber schon ne weile her, dass ich mich damit beschäftigt hatte. Schau dir mal hierzu die Hilfe an oder hier ein paar Videos: http://www.mathworks.de/products/sysid/demos.html
Hoffe geholfen zu haben, wenn nicht einfach nochmal nachfragen...

Mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
motlob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.03.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 25.03.2012, 01:00     Titel:
  Antworten mit Zitat      
Danke, vega!

Mit der ident-Toolbox war alles viel einfacher, als sich durch die Befehle zu prügeln.

So konnte ich auch meinen Fehler finden! Bei pem fehlte ein PropertyValue. Da ich Störfrequenzen hatte, musste ein DisturbanceModel ausgewählt werden. Es hätte also lauten müssen:

Code:
m = pem(idy, 'P2U', 'Dist', 'ARMA2');


Und man erhält damit das richtige Resultat:


Man erhält immer bessere Ergebnisse, wenn man bspw. die Frequenz der gedämpften Schwingung mit der größten Amplitude über FFT abliest und dem Modell vorgibt und so die Parameter stark eingrenzt.

Ich habe auch noch eine andere Möglichkeit gefunden. Und zwar mit dem Befehl prony. Es gibt auch eine Toolbox bei Matlab Central. Ich denke damit sollte es auch gut möglich sein, die Parameter zu finden. Leider fehlt mir die Zeit, um dies auszuprobieren.


_____

Hier noch der komplette Code auf einem Blick, falls jemals jemand das gleiche Problem haben sollte:
Code:
% Berechnung der Übertragungsfunktion
Ts = 1/20000;                   % Abtastzeit
u = zeros(length(y), 1);        % Speicher für u allokieren

u(1) = 1;                       % Impulsfunktion
idy = iddata(y, u, Ts, 'Tstart', 0);
m = pem(idy, 'P2U', 'Dist', 'ARMA2');           % Berechne Übertragungsfunktion: P2 = PT2, D = Totzeit, U = komplexe Polstellen
disp('Fertig');

% Simuliere die Daten
md = c2d(m, Ts); % Vom kontinuierlichen zum diskreten Modell umwandeln
y_neu2 = sim(md, u); % Simulation für den Eingang u
disp('Fertig');

% Plotten
plot(t, y, t, y_neu2);
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.