www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Interpretation Amplitude nach FFT


Autor: Fourier-Verwirrter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fourier-Verwirrter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fourier-Verwirrter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fourier-Verwirrter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.