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.