Forum: Analoge Elektronik und Schaltungstechnik Mit Matlab mittels fft die Amplitude bestimmen


von Bux (Gast)


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!

von Christian L. (cyan)


Lesenswert?

Bux schrieb:
> Aber irgendwas scheint nicht zu stimmen. Mir wird eine falsche Amplitude
> angezeigt.

Wie sieht denn das Signal aus? Was erwartest du und was für ein Ergebnis 
bekommst du?

von Bux (Gast)


Angehängte Dateien:

Lesenswert?

Siehe Screenshot. Links der Verlauf ist korrekt und rechts wird die 
falsche Amplitude angezeigt

von Blatant (Gast)


Lesenswert?

Was erwartest du für ein Ergebnis? Rechne dein Beispiel per Hand mittels 
der Fourier Transformation durch.

von Kevin K. (nemon) Benutzerseite


Lesenswert?

Dein Eingangssignal ist nicht-periodisch, erwarte von einer FFT daher 
nicht eine einzelne, saubere Amplitude.

von Bux (Gast)


Angehängte Dateien:

Lesenswert?

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

von Christian L. (cyan)


Angehängte Dateien:

Lesenswert?

So, ich habe mal versuch das ganze nachzustellen. Aus wie vielen Punkten 
besteht dein Signal? Wenn ich die Anzahl der Punkte von 1.000 auf 
100.000 erhöhe, dann sieht das Ergebnis im Grunde perfekt aus.

von Bux (Gast)


Lesenswert?

Was meinst du mit Punkte?

Also meine Abtastzeit beträgt 1.0000e-08 oder Abtastfrequenz 1.0000e+08

Wie hast du die Anzahl der Punkte erhöht?

Mein signaldata und signaltime sind 1000000x1 double

von Christian L. (cyan)


Lesenswert?

Punkte = Werte

Da ich ja deine original Werte nicht habe, habe ich mir halt selbst 
einen Sinus aus entsprechend vielen Werten zusammengebastelt.

Bux schrieb:
> Also meine Abtastzeit beträgt 1.0000e-08 oder Abtastfrequenz 1.0000e+08

Bei ein paar ms aus deinem Bild, müsstest du doch auch schon beinahe 
eine Million Werte haben, oder?

von Bux (Gast)


Lesenswert?

ja es sind 1000000Werte

von W.A. (Gast)


Lesenswert?

Christian L. schrieb:
> ... habe ich mir halt selbst einen Sinus aus entsprechend vielen
> Werten zusammengebastelt.

Und wo bleibt das Rechteckfenster [-4.x .. 6.x]s

von Christian L. (cyan)


Lesenswert?

W.A. schrieb:
> Und wo bleibt das Rechteckfenster [-4.x .. 6.x]s

Ach, das habe ich gar nicht gesehen, dass das Signal vor den 0s beginnt. 
Das sollte aber auf die Amplitude keinen Einfluss haben, sondern nur auf 
die Phase und die Frequenz selbst.

von Daniel (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.