Hallo,
ich schreibe ein Skript, mit dem man das Spektrum eines beliebigen
Zeitsignals geplottet bekommt. Ich nutze dafür die FFT von Matlab. Ich
habe aber das Problem, dass mein Skript ungenau ist. Wenn ich
beispielsweise ein Cosinussignal mit 50Hz angeben, wird mir im Spektrum
nicht genau bei 50Hz ein peak angezeigt. Was kann ich tun oder mache ich
falsch?
Hier der Code:
1 | %FFT Beispiel anders programmiert
|
2 | clc;
|
3 | clear all;
|
4 |
|
5 | %zeitvektor definieren
|
6 | Startzeit = 0;
|
7 | Abtastfrequenz = 600000; %Abtastdauer
|
8 | Schrittweite = 1/Abtastfrequenz;
|
9 | Endzeit = 40*10^(-3);
|
10 | t = Startzeit:Schrittweite:Endzeit;
|
11 |
|
12 | %Anzahl der Abtastpunkte
|
13 | Abtastpunkte = length(t);
|
14 |
|
15 | %Definition des Zeitsignals
|
16 | Frequenz = 50;
|
17 | y = cos(2*pi*Frequenz*t)+cos(2*pi*2*Frequenz*t)+cos(2*pi*3*Frequenz*t);
|
18 |
|
19 | %plot des Zeitsignals
|
20 | subplot(2,1,1)
|
21 | plot(t,y);
|
22 | title('Signal')
|
23 | xlabel('Zeit (Millisekunden)')
|
24 | grid on;
|
25 |
|
26 | %FFT
|
27 | AnzahlMesswerte = length(t)
|
28 | AnzahlStuetzpunkteFFT = 2^nextpow2(AnzahlMesswerte*10)
|
29 | Y = fft(y,AnzahlStuetzpunkteFFT)/AnzahlMesswerte;
|
30 |
|
31 | %Definition der Frequenzachse
|
32 | f = Abtastfrequenz*linspace(0,1,AnzahlStuetzpunkteFFT);
|
33 |
|
34 | %plot des Spektrums
|
35 | subplot(2,1,2)
|
36 | plot(f,abs(Y(1:AnzahlStuetzpunkteFFT)));
|
37 | xlim([0 400]);
|
38 | grid on;
|