mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT Effektivwerte aus Spektrum berechnen


Autor: Hans (Gast)
Datum:

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

Autor: Karl (Gast)
Datum:

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

Autor: Hans (Gast)
Datum:

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

Autor: Maxi (Gast)
Datum:

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

Autor: Hägar (Gast)
Datum:

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

Autor: Maxi (Gast)
Datum:

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

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.