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

FFT Beispiel (echte Daten)

 

leanderW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2013, 17:51     Titel: FFT Beispiel (echte Daten)
  Antworten mit Zitat      
Hallo, ich habe ein Problem mit der bestimmung der FFT von einem Datensatz. Der Datensatz umfasst 520 Messwerte und jeder Messwert steht für einen Monat. Jetzt ist meine Aufgabe herrauszufinden welche Periode in den Daten vorliegen. Also mein erwartetes Ergebnis soll in diesem Fall (Temperaturen) als Hauptperiode 12 Monate sein.

Ich hab das jetzt ganz analog wie im Matlab sunspot Beispiel programmiert.
http://www.mathworks.de/products/ma.....ping/matlab/sunspots.html

Mein Problem ist nun das ich das Beispiel nicht ganz verstehe. Mein Abtastvektor hat nur "ungerade" Monate ( warum nicht 1 2 3 ... ) sondern irgendwas dazwischen und wie kann man das vlt. ändern? Kann man die Abtastrate frei wählen? Kann man auch irgendwie soetwas wie die Amplitude darstellen, anstatt der Power.

Code:

% x --> datenvektor (n,1)
Y = fft(x);
Y(1)=[];
n=length(Y);
power = abs(Y(1:floor(n/2))).^2;
nyquist = 1/2;
freq = (1:n/2)/(n/2)*nyquist;
period=1./freq;

plot(period,power);
ylabel('Power');
xlabel('Periode Month');

 


leanderW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 09:36     Titel:
  Antworten mit Zitat      
Ich hab mir jetzt nocheinmal gedanken gemacht und als Lösung muss man ändern:
Code:


Dann bekomme ich auch meine echte Periode von 12 raus.
 
leanderW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2013, 13:26     Titel:
  Antworten mit Zitat      
Jetzt hab ich mich nochmal ein wenig mit dem Thema beschäftigt. Was man vlt. festhalten sollte ist folgende Erkentniss (und bitte korrigiert mich wenn ich da falsch liege)

FFT unter Matlab funktioniert im wesentlichen indem man einfach
Code:

macht. Y hat dabei die Dimension von x. Es wird bei fft von 0 bis zur nyquistfrequenz 1/(2*dt) in 1/N*df schritten abgetastet. Dabei gilt immer das Verhältnis df = 1 / dt mit df = Frequenzschritte und dt = Abtastschritte. N sind die Anzahl der Sample (Messungen). Diese sind bei gegebenen Daten nicht umbedingt frei wählbar.
Bsp: monatliche Messung der Temperatur: -> dt = 1 -> df = 1 N = 500
Nun liegt die eigentliche Schwierigkeit darin die Y Frequenzen richtig zuzuordnen. Hierzu verwende ich nun folgenden Code.

Code:

dt = 1;  % Abtastrate
fs = 1/dt;  % Abtastfrequenz
N = length(x); % Anzahl der Samples ( Messungen )
f = 1/N*fs:1/N*fs:fs; % Frequenzband -> quasi die X-Achse im Frequenzbereich
f = f(1:floor(N/2)); % Nur bis zur Nyquistfrequenz -> dannach wiederholt sich alles ja nur

X = fft(x); % die FFT
X(1)=[]; % erstes Element ist die cummulative Summe aller Werte (nach sunspot beipiel)
X=X(1:floor(N/2)); % nur die ersten Werte benutzen
figure,plot(f,abs(X)) % Darstellen der Werte
t =1./f; % Zeitvektor

ind = t<50;
figure, plot(t(ind),abs(X(ind)))

 


Hierbei muss man beachten, dass der diskrete Frequenzvektor von der Anzahl der Samples abhängig ist. Es wird also ein Frequenzbereich diskret mit N frequenzen abgetastet. Diese Frequenzen sind regelmäsßig aufgeteilt zwischen 0 und Fs. Ist Fs also bei einer im Zeitbereich von dt = 1 (jeden Monat ein Wert) auch gleich 1 so werden N Frequenzen zwischen 0 und 1 abgetestet. Sind nun zB 576 Monate (48 Jahre) Daten vorhanden so finde ich genau die Periode 12 (für Jährlich) da zwischen 0 und 1 genau die Frequenz f = 1/12 vorhanden ist. Bei einer anderen Samplerate zB. 500 Monate finde ich eine Dominante Frequenz bei t = 11.97. t=12 wurde nicht diskret abgetastet.
 
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 - 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.