FFT Effektivwerte aus Spektrum berechnen

Gast #749271
Lesenswert?

Hallo,

ich dachte, dass man bei einer FFT als Ergebnis die Ampliutden bei den 
entsprechenden Frequenzen des Eingangssignals rausbekommt.

Nun bekomme ich für das Signal:

n = [0:0.1:19.9];
x = cos(0.05*2*pi*n);

nach der FFT als Amplitude 100 bei der Frequenz 0.05 Hz. Theoretisch 
sollte ich ja als Amplitude 1 rausbekommen, bitte was mache ich falsch?

FFT = abs(fft(x,4096));
Gast #749290
Lesenswert?

Also erstens passt der von dir gepostete code nicht zu deinen Aussagen. 
Wenn du die FFT 4096 Punkte lang machst, erzeugst du durch das 
zero-padding eine Frequenzauflösung, die so nicht vorhanden ist.
Zweitens fehlt in der DFT-Gleichung das 1/N, das bei der DFS noch 
vorhanden ist.
Drittens handelt es sich um die komplexe Form der DFT mit sozusagen 
gegenläufigen Zeigern. D.h. die tatsächliche Amplitude ist zwei mal so 
groß.

Zusammenfassend:

Amplitude = 2/N*FFT

PS: Nutze zero-padding nur, wenn du weißt, was du da tust.
Gast #749430
Lesenswert?

der Gleichanteil ist davon aber doch nicht betroffen,
also gibt
FFT = 2/200*abs(fft(x,200));
bei FFT(0) einen doppelt so hohen wert wie die Amplitude tatsächlich ist 
aus

x = ones(1,200)
FFT = 2/200*abs(fft(x,200));
FFT(1)

bei einem Signal im komplexen Basisband sollte dieser Faktor 2 doch 
wegfallen oder?
Gast #749507
Lesenswert?

yep, der Betrag von 2 fällt weg:

n = [0:0.1:19.9];
x = exp(j*(0.05*2*pi*n));
FFT = 1/200*abs(fft(x,200));

da das Signal doch reell ist müsste man doch korrekterweise beide
Spiegelfrequenzen aufaddieren können

n = [0:0.1:19.9];
x = cos(0.05*2*pi*n);
FFT = 1/201*abs(fft(x,201));
FFTA = FFT(2:101);
FFTB = FFT(102:201);
FFTB = FFTB(end:-1:1);

final = [FFT(1),FFTA+FFTB];
plot(final)

sorry aber Fourier Trafo ist etwas wo ich mich immer noch nicht so 
sicher fühle wie ich sollte.

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