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

Stufenfunktion wie analysieren?

 

hsv-fan19
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2009, 08:30     Titel: Stufenfunktion wie analysieren?
  Antworten mit Zitat      
Hey liebe Matlabler!

Ich habe mal eine Frage. Ich untersuche das Verhalten eines Prozesses. Dabei kommt es nach einer Einschwingphase zu wiederkehrenden Stufenfunktionen.

1.) Ich muss die Länge eines Intervalls nach dem Einschwingen bestimmen. Wie kann das automatisch mit Matlab geschehen? Ich denke es könnte evtl. irgendwie mit einer Fourier Transformation gehen, wie genau, weiß ich allerdings nicht...

2.) Des Weiteren kommt diese Stufenfunktion aufgrund von 6 Eingangsgrößen zustande, die ich variieren kann.

Mein Frage ist nun, wie kann ich diese Funktion analysieren. Erstmal die einzelne Funktion, eigentliches Ziel ist die Aufstellung einer allgemeinen Formel in Abhängigkeit der 6 Eingangsgrößen, die den Durchschnittswert unter dem Graphen darstellt, d.h. den Flächeninhalt einer Periode durch die Zeit ((Integral Intervall)/(Länge Intervall) quasi).

Anbei findet ihr mal Beispiele, wie so ein Graph aussehen kann. Oben links der Graph zeigt die Gesamtfunktion an, die sich aus den 3 Teilfunktionen Item1 bis Item3 zusammensetzt.

Beispiel1 zeigt quasi den einfachsten Fall, wenn alle Eingangsgrößen ganzzahlige vielfache voneinander sind. man sieht die Einschwingphase ist sehr kurz und die Intervalle sehr klein (Zeitintervall 1-200 gezeigt)

Beispiel2 zeigt den quasi ungünstigsten Fall. Das Einschwingen dauerst sehr lang und ein Intervall ist sehr groß. Für Item3 in Beispiel2Intervall.jpeg ist zu sehen, dass das Intervall von ca. 10000 bis 15000 geht. In Beispiel2nah.jpg seht ihr noch einmal, dass die Funktionen immer aus diskreten Stufen aufgebaut sind.

beispiel2nah.jpg
 Beschreibung:

Download
 Dateiname:  beispiel2nah.jpg
 Dateigröße:  62.2 KB
 Heruntergeladen:  845 mal
beispiel2intervall.jpg
 Beschreibung:

Download
 Dateiname:  beispiel2intervall.jpg
 Dateigröße:  110.04 KB
 Heruntergeladen:  811 mal
beispiel2gesamt.jpg
 Beschreibung:

Download
 Dateiname:  beispiel2gesamt.jpg
 Dateigröße:  121.95 KB
 Heruntergeladen:  807 mal
beispiel1.jpg
 Beschreibung:

Download
 Dateiname:  beispiel1.jpg
 Dateigröße:  46.98 KB
 Heruntergeladen:  830 mal
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 19.04.2009, 15:19     Titel:
  Antworten mit Zitat      
Hi,

ich würde die Autokorrelation bilden. Über welchen Bereichen, dass must du Anhand der Daten bestimmen. Ein Einschwingvorgang sollte bei mehreren Perioden nicht das Problem sein. Du musst dann den nächst höheren Peak ab der Länge des Eingangsvektors vermessen, diese Differenz (Lag) ist deine Periodenlänge.

Code:

k=1:1000;
A=sin(k./100);
plot(A);
c=xcov(A);
figure
plot(c);

 


Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
hsv-fan19
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2009, 15:49     Titel:
  Antworten mit Zitat      
das Problem dabei ist, dass die Länge von einem Peak zum nächsten nicht zwangsläufig die Periode ist. Das kannst du in den Bildern von beispiel 2 sehen. Ich könnte die Abstände zwischen den Peaks bestimmen und sobald sich das Schema mit den Abständen wiederholt annehmen, dass das die Intervalllänge ist.
Das ist zwar noch kein Absoluter Beweis, aber mit

Code:


i=0
while i=0
    K1a=B(c:d-1,2);
    K1b=B(d:d+d-c-1,2);
    if K1a == K1b,
    fprintf('Intervall korrekt\n');
    i=1;
    else fprintf('Problem with interval Overall content. Set the right value and enter "return" to resume\n');
keyboard;
    end  
end


dabei sind c und d anfangs bzw endwert eines intervalls...

Lässt sich das auch mit der Autokorrelation irgendwie machen? Was gibt mir der Befehlt xcorr bzw. cov zurück, wenn er denn funktionieren würde?
Brauche ich für xcorr eine spezielle Toolbox? Ich erhalte folgenden Fehler:

??? Undefined function or method 'xcorr' for input arguments of type
'double'.
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 19.04.2009, 16:23     Titel:
  Antworten mit Zitat      
Hi,

ich meine auch nicht, du sollst die die Peaks deiner Funktion vergleichen, sondern die Peaks der Autokorrelation. xcorr gehört zur Signal Processing Toolbox. Wenn du die nicht hast bilde die Funktion mit dem Code den ich mal gepostet hatte:

http://www.gomatlab.de/kreuzkorrela.....3772,highlight,xcorr.html

Das funktioniert! Du musst dir bloß mal die Autokorrelationsfunktion für verschiedene Vektoren angucken, dann weißt du wie du dein gewünschtes Ergebnis am besten erzielen kannst.

Viele Grüße,

der Oli

Zuletzt bearbeitet von derOli am 20.04.2009, 10:03, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
hsv-fan19
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2009, 18:21     Titel:
  Antworten mit Zitat      
das war wohl ein Verständnisproblem meinerseits! Vielen, vielen Dank! Das funktioniert ja wirklich hervorragend. Ich werde mich mal daran machen deinen Code zu verstehen, ist ja schon interessant, habe noch nie mit Autokorrelation gearbeitet Smile Meine Funktion ist nach der Einschwingphase zu 100% periodisch (Mein Datensatz bricht aber nicht genau am Ende einer Periode ab, sondern irgendwo mittendrin, denke aber das sollte egal sein). Die Maxima der autokorrelation sind alle 1.0000

mit derFunktion

Code:
find(result ==1)
 

erhalte ich eine leere matrix zurück obwohl

Code:


1.0000 ausgibt.

der Befehl

Code:
find(result >0.99)

hingegen liefer die richtigen Peaks...woran liegt das?

werder nicht alle Nachkommastellen der Y-Werte angezeigt werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 20.04.2009, 10:11     Titel:
  Antworten mit Zitat      
Ja, dass sind rundungsfehler, aber beachte, du brauchst nicht den Peak bei lag=0 sondern den nächsten peak. Die Autokorrelation vergleicht immer 2 Signale miteinander (Kreuzkorrelation) dabei wird ein Fenster immer um 1 verschoben. D.h. Der erste Peak vergleicht die selben Signale miteinander (lag=0) Daher sollte der Wert theoretisch 1.0 sein wegen rechenfehler ist er es aber nicht. Wenn du dir die Ergebnisse der Autokorr. für verschiedene Daten von dir anguckst musst du mal die Position des 2 Peaks beobachten, das sollte jeweils deine Periode sein.

Grüße,

der Oli
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.