FFT Beispiel in MatLab

OP #1760652
Hi.

Ich habe folgendes Problem. Ich habe mehrere Signale mit einer 
Samplingrate von 1.0173e+003 Hz und einer Länge von 1730 
Samplingpunkten. Ich muss diese Signale in ihrer Frequenzen zerlegen und 
vergleichen, welche Frequenzen in welchen Signalen wie intensiv 
vorhanden sind.

Ich würde gerne die fft-Funktion von MatLab (logischerweise in MatLab) 
verwenden. Hierzu habe ich mir die MatLab-Hilfe durchgelesen und bin auf 
folgendes Beispiel gestoßen:
1
Fs = 1000;                                    % Sampling frequency
2
T = 1/Fs;                                     % Sample time
3
L = 1000;                                     % Length of signal
4
t = (0:L-1)*T;                                % Time vector
5

6
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
7
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); 
8
y = x + 2*randn(size(t));                     % Sinusoids plus noise
9

10
NFFT = 2^nextpow2(L);                % Next power of 2 from length of y
11
Y = fft(y,NFFT)/L;
12
f = Fs/2*linspace(0,1,NFFT/2+1);
13

14
% Plot single-sided amplitude spectrum.
15
plot(f,2*abs(Y(1:NFFT/2+1))) 
16
title('Single-Sided Amplitude Spectrum of y(t)')
17
xlabel('Frequency (Hz)')
18
ylabel('|Y(f)|')

Zunächst mal, Fs wäre in meinem Fall 1.0173e+003 Hz und L = 1730!? Der 
Rest des oberen Teil ist hinfällig, da hier nur Daten produziert werden, 
die ich aber ja bereits habe (hab's nur der Vollständigkeithalber mit 
aufgeschrieben). Im Wesentlichen hab ich auch alles verstanden, bis auf 
zwei Punkte.

1. Warum wird hier "Y = fft(y,NFFT)/L" durch L geteilt und

2. Warum wird hier in der Ausgabe "plot(f,2*abs(Y(1:NFFT/2+1)))" nochmal 
mit 2 multipliziert?


Ich hoffe ihr könnt mir helfen, falls noch irgendwas unklar ist, 
beantworte ich auch gerne noch mehr Fragen.
Gast
Hallo,

> 1. Warum wird hier "Y = fft(y,NFFT)/L" durch L geteilt und
Das ist eine Normierung auf die Anzahl der Signalwerte und wird wohl nur 
zu Anzeigezwecken gemacht.

> 2. Warum wird hier in der Ausgabe "plot(f,2*abs(Y(1:NFFT/2+1)))" nochmal
> mit 2 multipliziert?
Das Stichwort lautet: Spiegelspektrum für negative Frequenzen.
Normalerweise (d. h. bei reellwertigen Daten) läßt Du Dir die 
Koeffizienten > N/2 nicht anzeigen. Sie enthalten keine neue Information 
und ergeben sich als konjugiert komplexe Werte zu den Werten der 
positiven Frequenzen.


Gruß,
  Michael
Gast
das ist richtig und kann validiert werden durch die matlab hilfe zu der 
funktion FFT wo ein sehr aehnliches beispiel durchgespielt wird.

wie dem auch sei, fft resultiert nicht in die feinsten ergebnisse...
die nichtmehr unterstuetzte funktion 'psd()' funktioniert immernoch, 
aber es gibt bei neueren matlab versionen keine hilfe,...
das fuehrt leider dazu dass ich nicht genau weiss, was man so als 
argumente wo schreibt... es klappt aber wenn man 
psd(DATAN,[],samplefrquenz) benutzt.

momentan scheint das spectrum objekt die alternative fuer die psd 
funktion zu sein, aber die ergebnisse sind nicht so super wie von psd().

man muss aufpassen, welches fenster man fuer die convolution benutzt. 
ausserdem sollte man die fenstergroesse auch weise auswaehlen - oder 
besser testen.

alles im allen moechte ich darauf hinweisen, das FFT nicht die beste 
loesung fuer 'snspruchsvolle' daten ist.

matlab bietet noch viele andere alternativen zur fourier transform: u.a. 
welch approximation und yeleau (irgendwas mit entropy methoden)
... testen testen testen


viel glueck!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.