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

Berechnung Betrag/Phase zweier gegebener Zeitfunktionen

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.12.2014, 12:47     Titel:
  Antworten mit Zitat      
Larsomat3000 hat Folgendes geschrieben:
Ich hoffe, ich raube dir nicht zu viel deiner kostbaren Zeit, aber ich hätte noch ein paar Fragen zu deinem Code!

Aus welchem Grund berechnest du dieses k?

Code:
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end



Und warum berechnest du dann den Betrag nur von 1 bis k Messwerten?
Wie du in dem Fall scale=0 "mag" berechnest, ist mir auch nicht ganz einleuchtend Sad

Code:
if scale == 0
    Fy_pos0 = abs(Fy(1:k));

    %   Skalierung  
    mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];
else % nicht durch nfft teilen bei Impulsantwort
    mag = abs(Fy(1:k));
end



zu 1) Hier erhöhe ich ja nfft + 1 wenn nfft keine gerade Zahl ist. Damit wird dann hier

Code:

% Signal transformieren
Fy = fft(sig,nfft);


automatisch eine Null an sig angehängt da, nfft ja in diesem Fall um eins größer ist als

Code:


Das ist nur wichtig für den weiteren Zugriff aus dem Vektor Fy. Ich verwendet somit immer nur eine gerade Anzahl an Messwerten.

zu 2) Die fft berechnet ein zweiseitiges Frequenzspektrum von -Fs/2...0...+Fs/2-df. I.d.R. interessiert ja nur der positive Frequenzbereich, weshalb Fy(1:k) ausdrückt, dass ich nur diesem Bereich entnehme. Um dann aber den Betrag richtig darzustellen, also das ein Sinus mit Amplitude 10 auch im Spektrum die Amplitude 10 hat, muss richtig skaliert werden. Die Werte Fy_pos0(1) = Gleichsignalanteil und Fy_pos0(k) = Signalanteil bei Fs/2 kommen in Fy nur einmal vor. Der Rest dazwischen ist doppelt (konjugiert komplex) eben für den positiven und negativen Frequenzbereich und somit die Amplitude in einem Bereich nur halb so groß. Daher müssen diese 3 Teile unterschiedlich skaliert werden.

Evtl. hilft dieses Skript noch zum Verständnis: http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
Private Nachricht senden Benutzer-Profile anzeigen


Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 01.12.2014, 13:38     Titel:
  Antworten mit Zitat      
Bevor ich jetzt mein System mit einer anderer Funktion anrege, spiele ich noch weiter mit meinen Daten herum und versuche diese zu interpretieren!

Wenn ich mir so meine Plots anschaue, kann ich mir keinen richtigen Reim darauf machen. Vielleicht magst du ja mal einen Blick darauf werfen.

Die Funktion fft(signal) führt praktisch eine Fouriertransformation durch, richtig? Und dein Code berechnet anschließend anhand dieser Transformation für alle Frequenzen Betrag und Phase, hab ich das richtig verstanden?

Und wenn ich jetzt so vorgehe, dass ich mehrere Daten unterschiedlicher Frequenzen nutze und mir mein Frequenzgang malen lasse, stellt das dann ein Bode-Diagramm meines Systems für die ausgewählten Frequenz dar?

Und habe ich es richtig verstanden, dass ich mir das aber sparen kann und es genauer wäre, wenn ich mein System mit einem Impuls (t=0, x=1) anrege und dann dieses Ausgangssignal nutze und deinen Code durchführe? Hast du eine Quelle, die angibt, dass man das so machen kann? Smile Denn das ist mir gerade etwas neu oder ich habe es schon wieder vergessen, weil es zu lange her ist, dass ich das mal gelernt habe Wink

frequenzgang.fig
 Beschreibung:
Frequenzgang für f = 800Hz

Download
 Dateiname:  frequenzgang.fig
 Dateigröße:  143.68 KB
 Heruntergeladen:  322 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: 01.12.2014, 13:56     Titel:
  Antworten mit Zitat      
Das sind Grundlagen der Systemtheorie und -analyse. Google doch einfach mal, bevor ich nun weiter tippen muss Wink

Auch wenn wikipedia als Lektüre zu dem Thema sicherlich nicht ausreichend ist, aber nur mal als Hinweis: http://de.wikipedia.org/wiki/Frequenzgang

Der Frequenzgang ist die fouriertransformierte Impulsantwort des Systems. Warum man gerade einen Impuls als Eingang wählt, habe ich dir geschrieben. Stell doch einfach mal so einen Impuls im Frequenzbereich dar! Die FFT berechnet die Signalanteile zu den diskreten Frequenzen des Vektors fv in der Funktion. Evtl. ist auch sinnvoll dich genauer mit der FFT zu beschäftigen um die Plots besser deuten zu können. Thema Leakage Effekt und Fensterung.

Die doppeltlog. Darstellung bei einem Sinus einer Frequenz macht eigtl. keinen Sinn. Wie sieht den der plot aus zu plot(fv, mag_dB)?

Bei der Darstellung der Phase ist evtl. die Funktion

Code:


sinnvoll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 01.12.2014, 16:23     Titel:
  Antworten mit Zitat      
Okay, so langsam verstehe ich es Wink

Ich versuche momentan simulativ mein System mit einer Sprungfunktion anzuregen. Wenn dies klappt, sollte ich wieder einen Ausgangssignalvektor mit vielen Messpunkten erhalten. Wie stelle ich mir denn dann hier eine zeitliche Ableitung vor, wenn ich lediglich Zeitpunkte und ihre entsprechenden Funktionswerte besitze? Denkst du an Differenzenquotienten?
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: 01.12.2014, 17:58     Titel:
  Antworten mit Zitat      
Larsomat3000 hat Folgendes geschrieben:
Wie stelle ich mir denn dann hier eine zeitliche Ableitung vor, wenn ich lediglich Zeitpunkte und ihre entsprechenden Funktionswerte besitze? Denkst du an Differenzenquotienten?


Genau so ist es. Ohne Funktion kannst du ja gar nicht anders ableiten Wink. Wenn du allerdings die Systemantwort auf eine Anregung simulieren kannst, ist es dann nicht möglich statt dem Sprung einen Impuls als Anregung zu wählen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 03.12.2014, 15:29     Titel:
  Antworten mit Zitat      
Softwareseitig könnte man diesen bestimmt irgendwie implementieren, jedoch bezweifele ich gerade eher, ob meine Vorgehensweise der Systemidentifikation überhaupt Sinn macht. Durch die Anregung meines Systems mit einem Sinus sollte am Ausgang ja ebenfalls ein Sinussignal folgen, dies leider jedoch nicht der Fall! Man erkennt zwar grob eine phasenverschobene Sinusschwingung, jedoch sind hier auch einige Nichtlinearitäten überlagert. Und meine Vorgehensweise hat ja eher ihren Vorteil bei linearen Systemen.

Heißt eher, ich müsste mein Prozessmodell, mit dem ich simuliere, erst dahingehend vereinfachen bzw. linearisieren, dass sinnvolle Signale herauskommen. Ansonsten werde ich kaum am Ende des Tages ein Übertragungsverhalten erhalten...
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: 03.12.2014, 15:42     Titel:
  Antworten mit Zitat      
Das ist wohl war. Ein Bodediagramm macht nur bei linearen zeitinvarianten Systemen Sinn.

Dann ich hoffe ich für dich, das eine Linearisierung des Prozesses hinreichend genau möglich ist. Das kann u.U. eine komplexe Angelegenheit werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 05.12.2014, 10:43     Titel:
  Antworten mit Zitat      
Guten Morgen,

ich sitze vor meiner nächsten Aufgabe! Ich habe gestern experimentell einen Laser vermessen, um auf sein Übertragungsverhalten schließen zu können. Dazu habe ich ihn mit einem Rechteckimpuls angeregt, also praktisch mit einer Sprungfunktion und sein Ansprechverhalten mit einer Fotodiode aufgenommen! Anhand der Plots von Eingangs- und Ausgangsgröße erkennt man schon grob das Verhalten eines PT1-Gliedes. (Plots dargestellt in Mathematica)

Jetzt möchte ich diese Daten mittels MATLAB analysieren. Wenn ich es denn hinbekommen habe, die binären Daten in MATLAB einzulesen, sagtest du, DSP, ja, ich müsse meine Sprungantwort nun differenzieren, um auf eine Impulsantwort zu kommen. Wenn ich dies denn hinbekommen hätte, würde ich deinen Code darauf anwenden und könnte mir hoffentlich Bode-Diagramme plotten lassen. Nur wie bekomme ich daraus dann eine Übertragungsfunktion in der Form, in der man sie so kennt? Wink
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: 05.12.2014, 11:01     Titel:
  Antworten mit Zitat      
Gar nicht. Das Bodediagramm zeigt das Übertragungsverhalten im Frequenzbereich, mehr aber auch nicht. Man muss nun das Diagramm lesen um Grundeigenschaften des Systems zu bestimmen, wie Grenzfrequenzen Dämpfungs- und Verstärkungsverhalten. Das geht für einfache Glieder wie PT1 oder PT2 ganz gut um damit die Übertragungsfunktion aufstellen zu können. Bei komplexen Systemen...no way.

Wenn du eine Übertragungsfunktion bestimmen willst, musst du dich mit Parameterschätzverfahren für Modelle beschäftigen. Z.B. ein ARMAX Modell.

Allerdings hängt die Genauigkeit eines Modell stark davon ab, in wie weit sich das reale System linearisieren lässt.

Hier würde man dann die Sprungantwort messen und Sprung sowie Sprungantwort für die Parameterbestimmung verwenden. Das kannst du ja messen und brauchst somit das differenzieren zur Impulsantwort nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 05.12.2014, 14:48     Titel:
  Antworten mit Zitat      
Ich verzweifele gerade etwas an meiner Datenverarbeitung. Mir die wichtigen Daten habe ich jetzt in einem Vektor mit 800000 Datenpunkten eingelesen. Jedoch habe ich jetzt das Problem, dass in diesem Vektor 4 verschiedene Informationen aneinander gereiht worden sind. Heißt: Element 1 des Vektors ist meinetwegen die Eingangsspannung, Element 2 ist Parameter x, Element 3 ist Parameter y, Element 4 ist Parameter z und dann wiederholt sich die Reihenfolge. Heißt, Element 5 ist wieder die Eingangsspannung zum nächstne Zeitpunkt. Wie bekomme ich aus diesem einen Vektor 4 Vektoren, die nur die jeweiligen Parameterinformationen enthalten? Ich brauch also eine Art Funktion, die mir einen Vektor generiert, der immer nur jedes 4. Element aus dem großen Vektor pickt!

Ich hoffe, man versteht mein Problem...
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: 05.12.2014, 14:54     Titel:
  Antworten mit Zitat      
Dann starte doch bitte einen neuen Thread, am besten mit einem Bsp. Code der den Aufbau deiner Daten wiederspiegelt und somit schnell getestet werden kann. Denn zu diesem Thema passt das nun wirklich nicht.

Bitte nicht gleich die Messdaten als Textdatei anhängen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Larsomat3000
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.14
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 08.12.2014, 10:45     Titel:
  Antworten mit Zitat      
Entschuldige, dass ich mich nicht mehr gemeldet habe, aber ich hatte das Problem doch lösen können Wink

Ich habe jetzt all meine Daten eingelesen, sortiert etc. Nun möchte ich daraus meine Übertragungsfunktion generieren. Wie könnte ich da (händisch) am besten vorgehen? Ich habe mein System pulsend mit Sprüngen angeregt!

Auf die K-Verstärkung kommt man ja recht easy ran, nur an die Zeitkonstante oder an eine eventuelle Totzeit kommt man händisch doch recht schwer!

Ich lege hier gleich mal ein Bild zum Eingangs- und Ausgangssignal ab!

plot.jpg
 Beschreibung:

Download
 Dateiname:  plot.jpg
 Dateigröße:  29.21 KB
 Heruntergeladen:  327 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.