Mit Matlab mittels fft die Amplitude bestimmen

Gast #4823349
Lesenswert?

Hallo,

ich möchte die Amplitude mit der FFT bestimmen. Dabei habe ich Daten 
gespeichert als CSV Datei(x und y-Achse)
Habe folgenden Code:

array = csvread('datei.csv');                    %Signal importieren
signaltime = array(:, 1);                           %x
signaldata = array(:, 2);                           %y
N = 2^nextpow2(length(signaldata));
p = abs(fft(signaldata,N))/N;                       %Power of signal
p = p(1:N/2+1)                                      %Einseitiges 
Frequenzsspektrum
p(2:end-1) = 2*p(2:end-1);                          %Alle Amplituden bis 
auf der Amplitude bei f = 0Hz verdoppeln
Fs = 3.2000e+11;                                    %Abtast-Frequenz

f = Fs/2*linspace(0,1,N/2+1);                       %Frequency spacing


subplot(1,2,1), plot(signaltime,signaldata)
xlabel('Time(s)'),ylabel('Amplitude')
subplot(1,2,2), plot(f,p)
xlabel('Frequency (Hz)'),ylabel('Amplitude')


Aber irgendwas scheint nicht zu stimmen. Mir wird eine falsche Amplitude 
angezeigt. Vielleicht findet es sich jemand, der den Fehler erkennt?

Danke!
Gast #4826113
Lesenswert?

Bux schrieb:
> Bedeutet es sozusagen, wenn ich einen Verlauf speichere mit
> 100Perioden
> das mir dann eine genauere Amplitude angezeigt wird?

Ja, das nennt sich Fensterung. Du macht das Fenster im Zeitbereich 
breiter (mehr Samples werden beobachtet), dadurch wird es im 
Frequenzbereich schmaler und deine Frequenzauflösung steigt.

So wie ich das sehe, hast du eine sehr kleine Signalfrequenz (kHz) und 
eine sehr große Abtastrate (GHz). Da wirst in der FFT bei Matlab den 
Leakage-Effekt nicht unbedingt sehen. Zoom in dein Bild und schau, ob es 
wirklich nur ein Dirac ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren