www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Frequenzskalierung der Ergebnisse der FFT


Autor: Skywalker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist wahrscheinlich eine recht triviale Verständnisfrage, aber das 
bereitet mir etwas Kopfzerbrechen.

- Ich nehme in MatLab eine viersekündige Mikrofonaufnahme (normale 
Sprache) auf mit einer Samplerate von 44,1kHz.
- Diese wird als wave-Datei gespeichert und dann wieder eingelesen.
- Vor der FFT liegen somit 176400 Samples vor.
- Diese teile ich in eine Framegröße von 441 Samples ein.
- Das ganze noch mit einem Hammingfenster multipliziert und dann in eine 
512-FFT eingelesen.
- Daraus erhalte ich 512 komplexe Werte, wobei ich nur die ersten 257 
Werte benutze und aus denen die Amplituden und Phasen berechne.

(Nicht wundern wegen den vielleicht komischen Werten, das ist so 
gewollt.)

Nun möchte ich das Amplitudenspektrum darstellen. Das funktioniert nun 
(übrigends für alle Frames) problemlos. Kopfzerbrechen bereitet mir nun 
die Einteilung der Frequenzachse. Die scheint nicht richtig zu sein, da 
bei einem normalen Satz (männlich) sehr viele Werte um 10kHz liegen.

Wie genau berechne ich die Abstände dieser Frequenzwerte im 
Amplitudenspektrum?

Bisher verwende ich als Frequenzbereich beim plot:
0:44100/512:44100/2 (diese Bereich wird in einem Array freq gespeichert)
Der Hauptanteil liegt dann bei 10kHz. Problem ist auch, dass die Anzahl 
der Frequenzwerte den Anzahl der FFT entsprechen muss.
plot(freq,amp)   (amp enthält die 256 Amplitudenwerte)

Wie krieg ich den Frequenzbereich so hin, dass er passt?

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einer komplexen 512er-FFT steckst du 512 komplexe Werte rein und 512 
komplexe kommen raus. Du schreibst nicht, ob du den img-Teil des 
Eingangssignals auf 0 setzt oder links und rechts als komplexen Wert 
reinsteckst. Ist aber egal, bei beiden Varianten kommt etwas raus, was 
du wahrscheinlich nicht erwartest, nämlich die Aufteilung der 
Ergebniskoeffizienten in positive (0-255) und negative Frequenzen 
(511-256) und das "vermischt" für beide Eingangskanäle. Beide Bereiche 
können aber zwangsläufig nur von 0 bis fs/2 gehen. D.h. Koeffizient 1 
und 511 liegen auf 22050/256=~86Hz usw.

Wenn du nur einen Monokanal verarbeiten willst, solltest du eine FFT mit 
nicht komplexen Eingangsdaten suchen (kenn mich jetzt mit Matlab nicht 
aus, wirds aber wohl auch da geben :) ). Bei Stereo kann man die 
komplexe FFT schon auch nutzen, allerdings muss man die 
Ergebniskoeffizienten noch nachbearbeiten, um tatsächlich getrennte 
Spektren für L+R zu bekommen.

Hint: Steck mal einen synthetischen Sinus bzw. Cosinus mit 172.xxxHz auf 
einem Kanal in die FFT und schau das Spektrum an... Dann sollte der 
Zusammenhang klar werden, ist nur + und -...

Autor: Skywalker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hinweise. Es hat sich herausgestellt, dass meine 
ursprünglichen Annahmen korrekt waren. Ich hab deinen Tipp befolgt und 
tatsächlich mit Testsignalen getestet. Das Spektrum war korrekt skaliert 
und beinhaltete die richtigen Frequenzen.

Man sollte sich eben nicht dazu verleiten lassen solche Dinge mit 
menschlicher Sprache zu testen. Die enthält mehr Frequenzanteile als man 
denken mag. ;)

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.