Verfasst am: 07.10.2013, 09:29
Titel: FFT Problem in Matlab
Hallo User,
ich bin gerade dabei ein Powerspektrum einer Zeitreihe zu erstellen. Meine Ergebnisse habe ich mit LabVIEW überprüft und festgestellt, dass die Form meines Powerspektrums zwar richtig ist, die dazugehörigen Werte allerdings nicht. (Anhang: Input_Zeitreihe, Lösung Matlab und LabVIEW).
Ich verwende folgenden Code der aber anscheinend nicht richtig funktioniert.
Verfasst am: 07.10.2013, 09:44
Titel: Re: FFT Problem in Matlab
Hallo Grünschnabel,
Und meinst Du, dass das Problem nun an Matlab oder an LabVIEW liegt?
Wieso meinst Du, dass der gezeigte Code "anscheinend nicht richtig funktioniert"? Wenn Du solche Ideen äußerst, ist es hilfreich, wenn Du auch erklärst, warum. Dann müssen wir keine Zeit verwenden, um nochmal auf die gleichen Gedanken zu kommen.
Die Größe des Skalierungsfaktors zwischen den beiden Lösungen sollte zielführend sein. Falls das genau Pi/2 wäre, oder "( NTimesteps - 1)/Faktor" wäre das Problem schonmal besser eingekreist.
Vielen Dank Jan für Deine schnelle Antwort und ja du hast recht, solche Infos sind sinnvoll! Sorry, ich werde mich bessern.
Meiner Meinung nach liefert LabVIEW das richtige Ergebnis wobei ich mir auch hier nicht 100% sicher bin. Mir fehlt leider eine Zeitreihe mit einer Musterlösung des dazugehörigen Powerspektrums. Hätte ich solch eine Zeitreihe, würde ich zu 100% wissen welches Programm richitg funktioniert, da ich diese mit meinen Ergebnissen vergleichen könnte. Allerdings ist für mich LabVIEW eine Art "Blackbox", ich kann nicht genau nachvollziehen, welche Schritte innerhalb des Programms ablaufen. Ich nehme aber bis jetzt an, das LabVIEW Powerspektren richtig erzeugt.
Das Problem muss also an meinem Code liegen. Ich gebe dir recht, der Skalierungsfaktor ist vermutlich entscheidend. Allerdings liefert er sowohl mit Pi/2 als auch mit ( NTimesteps - 1)/Faktor nicht das gleiche Ergebnis wie LabVIEW.
Bitte zoome mal in beide Diagramme rein und bestimme den Skalierungs-Faktor von Hand. Der Wert, den ich aus den Pixel-Grafiken ablesen kann ist zu ungenau und ich kenne den Wert von NTimesteps nicht.
Guten Morgen Jan,
vielen Dank für Deine Bemühungen!
Da ich nicht genau verstehe, wie ich den Skalierungsfaktor von Hand bestimmen kann, füge ich die beiden Ergebnisse für die Powerspektren von Matlab und LabViEW als Anhang an. Sorry.
Der Wert NTimesteps ist gleich der Anzahl der einzelnen Zeitschritte meiner Inputdatei, hier in dem Beispiel NTimesteps = 3001.
In meinem Code verwende ich zudem die Variable "Limit". Das oben gezeigte Powerspektrum (siehe erster Foreneintrag) zeigt Ergebnisse, die mit einem Limit = 400 und Faktor 200 berechnet wurden. Wenn ich es richtig vestehe, kann ich über meine Definition der Variablen Limit angeben, wieviele Output Schritte ich im Frequenzbereich haben möchte. Hier in dem Fall würde dies mit dem Anhang ( Results_Matlab.txt) übereinstimmen, da ich "nur noch" 400 Einzelschritte im Frequenzbereich anstatt 3001 Zeitschritte habe. Ist das richtig?
Eine dumme Frage: Es gibt hier so viele Werte die Einfluss auf mein Powerspektrum haben, gibt es denn dann eigentlich eine einzige exakte Lösung?!?
Vielen Dank im Voraus.
Der Grünschnabel
Results_Lapview.txt
Beschreibung:
Die Ergebnisse wurden automatisch mit LabVIEW erzeugt. Mir ist leider nicht bekannt welche Eingangswerte verwendet wurden. Kann es sein, dass hier das "Limit" (vl. mit meinem Code) gleich 600 ist?!
Die Ergebnisse wurden mit oben gezeigten Code(siehe erster Foreneintrag), einem Limit=400 und einem Faktor= 200 berechnet. Die Datei besteht aus 400 Frequenschritten. Der Verlauf des Powerspektras wurde bereits oben angehängt (Matlab_code.jpg)
Du kannst den Skalierungsfaktor bestimmen, indem Du den Maximal-Wert aus beiden Diagrammen abliest und einen Wert durch den anderen teilst. Der höchste Peak ist dafür sehr gut geeignet.
Man kann bei der Bestimmung des Power-Spektrums mehrere Parameter angeben. In Bezug auf diese Parameter ist die Lösung dann so "exakt", wie es die Rundungsfehler zulassen.
Die unterschiedlichenErgebnisse stammen also nur von den verschiedenen Parametern.
Hallo Jan,
ich muss mich erstaml entschuldigen, dass ich nicht gleich geantwortet habe aber ich war leider außer Gefecht.
Vielen Dank für deinen Hinweis, er hat sehr geholfen!
Ich fand heraus, dass wenn ich mit zwei unabhängigen Skalierungsfaktoren für die "Frequenz"- und "Amplitudenachse" arbeite, auf die gleichen Ergebnisse wie Labview komme.
Die richtigen Werte erhalte ich, wenn ich mit einem Skalierungsfaktor von 100 für die Frequenzachse (Umrechnungsfaktor [s] in [ms]) und einem Skalierungsfaktor von 1500 für die Amplitudenachse rechne.
Hat jemand eine Idee für den Skalierungsfaktor 1500???
Vielen Dank für Eure Hilfe und nochmals sorr, für meine späte Antwort.
Beste Grüße
der Grünschnabel
Einstellungen und Berechtigungen
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
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.