Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT Effektivwerte aus Spektrum berechnen


von Hans (Gast)


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));

von Karl (Gast)


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.

von Hans (Gast)


Lesenswert?

Ja ertappt,
meine obige Aussage stimmt nur bei

FFT = abs(fft(x,200));

und mit deiner Hilfe werden die Amplituden nun korrekt angezeigt! Danke 
sehr!
FFT = 2/200*abs(fft(x,200));

von Maxi (Gast)


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?

von Hägar (Gast)


Lesenswert?

Natürlich ist der Betrag bei Frequenz 0 die Amplitude. Gilt übrigens 
auch für ein Signal mit Frequenz fs/2. Preisfrage warum ist das so?

von Maxi (Gast)


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.

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.