Forum: Digitale Signalverarbeitung / DSP / Machine Learning Interpretation Amplitude nach FFT


von Fourier-Verwirrter (Gast)


Lesenswert?

Hallo zusammen,
nach längeren Überlegungen bin ich mir nicht ganz sicher ob meine
Gedankengänge richtig sind.
Hier mein Problem:
Ich habe ein Signal im Zeitbereich mit einer Amplitude X. Nun
transformiere ich dieses (das System sei uninteressant) Signal in den
Frequenzbereich mit einer FFT.
Nun habe ich beispielsweise eine 2048er FFT. Die Einzelnen Punkte
(x-Achse) spiegeln die entsprechende Frequenz wieder (abhängig von der
Abtastrate).

Nur wie interpretiere ich die y-Achse, also die Amplitudenwerte? Hierzu
finde ich nichts.
Wenn ich 10V im Zeitbereich habe, was habe ich dann im Frequenzbereich?
Oder anders herum, wenn ich nach der FFT an Position X den Wert 1234
habe, was entspricht dies im Zeitbereich? (Ausprobieren will ich es
nicht, ich würde gerne den Hintergrund verstehen).

Vorab vielen Dank :)

: Verschoben durch Admin
von Werner Hoch (Gast)


Lesenswert?

Lies die Hilfe zur FFT-Funktion in deinen Programm.

Je nach Programm und FFT-Funktion kann eine Normierung mit den
Faktoren:
n/2
n
wurzel(n)
1
1/2

vorliegen.

Wobei n die Länge deines Vektors im Zeitbereich ist.

von Fourier-Verwirrter (Gast)


Lesenswert?

Wenn man beispielsweise Matlab verwendet...

fs = 50000;
tt = 0:1/fs:1;
f1 = 1000;
f2 = 2000;
S1 = sin(2*pi*f1*tt) + sin(2*pi*f2*tt);

FFT1 = fft(S1, 1024);
FFT1 = sqrt(real(FFT1).^2 + imag(FFT1).^2);

und ich dies nun plotte, so habe ich zwei verschiedene
Amplitudenwerte im Spektrum, obwohl beide Signale mit gleicher
Amplitude im Zeitbereich (Amplitude = 1) vorliegen.

Somit ist mein Problem nicht alleine bei der Normierung auf einen Wert
welcher von der verwendeten Funktion abhängt, sondern wirklich das
Verständnis der Thematik an dieser Stelle... grübel

von Werner Hoch (Gast)


Lesenswert?

Nochmal: lies die Hilfe!

Hilfe von octave:
-------------------
Function: fft (a, n)
    Compute the FFT of a using subroutines from FFTPACK. If a is a
matrix, fft computes the FFT for each column of a.

    If called with two arguments, n is expected to be an integer
specifying the number of elements of a to use. If a is a matrix, n
specifies the number of rows of a to use. If n is larger than the size
of a, a is resized and padded with zeros.
---------------------

Dein Vektor tt ist 50000 Punkte lang, die FFT machst du aber nur über
die ersten 1024 Punkte.

von Fourier-Verwirrter (Gast)


Lesenswert?

Hallo,
vielen Dank für Deine Antwort, nur hilft mir dies noch immer nicht
weiter.

Die Hilfe habe ich schon mehrmals durchgelesen. Wenn mir dies
weitergeholfen hätte, so müsste ich nicht weiter fragen, sondern hätte
mich bedankt :o)

Wenn ich annehme das Signal ist nun nicht 50000 Werte lang, sondern
unendlich lang, so muss ich ja dennoch die tatsächlichen
Amplitudenwerte aus der FFT für den Zeitbereich bestimmen können.

Meine FFT-Funktion normiert auf n (n = FFT-Länge). Wenn ich nun die
Amplitudengrößen im Zeitbereich kenne so könnte ich von der Normierung
zurückrechnen.

Ist mir diese Amplitude im Zeitbereich aber nicht bekannt, so kann ich
die Normierung auf eine physikalische Größe nicht zurückrechnen, oder
sehe ich dies falsch?

Wie beschriftet man in diesem Fall dann die Achsen? x-Achse entspricht
der Frequenz, y-Achse "einer" Amplitude welche normiert ist.

Nochmals danke und viele Grüße

von Ronny (Gast)


Lesenswert?

Bei gleicher Amplitude ist die Energie eines Signals (sprich:die
Amplitude im Spektrum) abhängig davon,wielange das Signal
anliegt.Werden 1024 Punkte verwendet,entspricht das einem kürzerem
Zeitraum als bei 2048 Punkten (wenn die Abtastfrequenz die selbe ist).

Erklären kannst du dir die Amplitude einfach mit der Diskreten Fourier
Transformation (DFT),aus der Summenfunktion ist ersichtlich jede
Frequenz ist eine Summe aller Punkte multipliziert mit der Frequenz.

von Werner Hoch (Gast)


Lesenswert?

Die Normierung mit n kannst du einfach rückgängig machen.

sieh dir mal den Unterschied zwischen:

FFT1 = abs(fft(S1, 1024))./1024;
und
FFT2 = abs(fft(S1))./50000;
an.

Im ersten Fall werden keine ganzen Sinuswellen von f1 und f2 verwendet.
Deshalb haben die beiden Frequenzen im Spektrum unterschiedliche
Amplituden.

Die y-Achse im Spektrum ist die (normierte) Amplitude.
Die x-Achse enthält die (normierten) Frequenzen.
Der Abstand der Spektrallinien beträgt 1/Tmax.
In deinem Fall Tmax=1024/50000 für FFT1 und Tmax=1 für FFT2.

von Fourier-Verwirrter (Gast)


Lesenswert?

Hallo,
nun habe ich den einen Denkfehler bei mir gefunden (Frequenzanteil über
eine kurze Zeit [1024] Punkte und über einen längeren Zeitraum).

Um noch einmal auf die Achsenbeschriftung zurück zu kommen. An dieser
Stelle bin ich etwas verwirrt mit Tmax wobei ich die Aussage denke ich
verstanden habe.

Die x-Achse hat bei FFT1 1024 Punkte, wobei ein Punkt die Frequenz
(in diesem Fall) 50000/1024 hat (~48,8). Stehen die 50000 für eine
Abtastrate von 50kHz, so habe ich eine Auflösung auf der x-Achse von
48,8Hz. Ich kann einfach die x-Achse mit 48,8Hz multiplizieren und habe
somit die Frequenzanteile. Als Beschriftung kann ich Frequenz [Hz]
schreiben. (Das die FFT ein zweiseitiges Spektrum liefert sei an dieser
Stelle "übersehen". Mir ist bewusst, dass ich nur bis 25kHz gehe, und
der darauf folgende Teil die negativen Frequenzen darstellt).

Mein Problem ist nun, dass ich an die y-Achse eine Beschriftung machen
möchte wie Amplitude [V]. Da die y-Achse "normiert" ist, kann ich
nicht einfach [V] "hinterschreiben".
Ein Signal mit der Amplitude 1V wird ja nicht im Spektrum mit 1
wiedergegeben.
Vor allem wenn ich mit einbeziehe, dass ich ein kontinuierliches Signal
habe und auch gerne eine 256er FFT machen würde. So wird die Amplitude
ja nicht "wahrheitsgetreu" im Frequenzspektrum wiedergegeben, hierfür
müsste man ja eine längere FFT machen (wie in Bsp. FFT2, hier liegt ja
eine 50.000er-FFT vor).

Scheinbar muss ich mir noch einige Gedanken an dieser Stelle machen.
Dennoch vielen Dank an Euch beide! Ihr habt mir schon ein gutes Stück
weitergeholfen!!!

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.