FFT - brauchbar?

Gast #1817962
Lesenswert?
• ▲
▼
Hallo,
ich möchte auf meinem Mikrocontroller (ein LPC2148) gerne eine kleine 
FFT zur Darstellung eines Audiosignals machen. Das ganze muss nicht 
wirklich genau sein, nur möglichst schnell, da der Prozessor noch andere 
Dinge tun soll.
Ich würde gerne sagen wir mal 10 Frequenzbänder auf meinem Display 
anzeigen lassen von 0-20 kHz. Ergibt also 200 Hz pro Frequenzband. Der 
ADC hat 10 Bits. Nun habe ich mir mal die fix_fft runtergeladen und in 
Visual Studio zum Laufen gebracht, um das ganze zu testen 
(http://jjj.de/fft/fftpage.html).

Frage 1:
Wie muss ich jetzt weiter vorgehen, um brauchbare Resultate zu erhalten? 
Ich muss ja mittels Timer und ADC das Signal periodisch abtasten, und 
ich möchte 200 Hz breite Frequenzbänder. Wie gehe ich jetzt vor?

Frage 2:
ich habe beim Test in Visual Studio ein Array mit Daten gefüttert (z.B. 
ein Sinus, oder ein Rechtecksignal) und die FFT darüber laufen lassen 
(fix_fftr, da es sich um reelle Daten handelt). Ich erhalte auch ein 
Ausgangsspektrum. Sind das nun direkt die Amplituden der einzelnen 
Komponenten, oder was ist das? Es sind nämlich viele negative Werte 
dabei, und das kann ja eigentlich nicht sein. Was soll ich mit den 
negativen Werten machen? Ich kann die schlecht auf das Spektrum-Display 
ausgeben....
Gast #1817971
Lesenswert?
• ▲
▼
du solltest dich dringend mal mit Fourierreihen/der 
Fouriertransformation allgemein vertraut machen. Da ist nichts 
mystisches bei und dann wirst du auch verstehen wie und warum ein 
Spektrum bei diskreter Abtastung so und so aussieht und woher die 
"negativen" Amplituden kommen ;)
Gast #1818026
Lesenswert?
• ▲
▼
Spricht etwas gegen eine Filterbank mit 10 Bandpässen, deren 
Grenzfrequenzen aneinander liegen? Ist einfach zu dimensionieren 
(Matlab/Octave/Scipy) und im µC zu implementieren. Außerdem kommt als 
Ergebnis direkt ein einzelner Wert für jedes Band heraus. Auch der 
Rechenaufwand dürfte deutlich niedriger liegen als bei einer FT.

Im Elektor-Sonderheft "Mikrocontroller 1" von Nov. 2006 wurde das am 
Beispiel des ATMega8 behandelt.

Falls du trotzdem eine FT einsetzen möchtest, kannst du dir auch die 
Kosinus-Transformation (Stichwort DCT) anschauen, die ist für relle 
Eingangswerte schneller und kompakter.

Je nach Anspruch an das Ergebnis sollte man auch die Randbedingungen 
einer FT beachten, siehe "Zero-Padding", "Windowing" und "Overlap" 
(Overlap-Add oder Overlap-Save).

Das Buch "Fouriertransformation für Fußgänger" von Tilman Butz bietet 
einen guten Einstieg in die Grundzüge der FT. Sollte in der 
Uni-Bibliothek vorhanden sein.
#1818225
Lesenswert?
• ▲
▼
Randalf schrieb:
> Uuhps, peinlich, ich habe eine 0 vergexssen :)
> es sind natürlich 2kHz, nicht200 Hz.

Sinnvoller ist allerdings eine logarithmische Aufteilung, da das mehr 
dem Tonhöhenempfinden des Gehörs entspricht. Eine Oktave bedeutet eine 
Verdoppelung der Frequenz. Siehe dazu auch die üblicherweise bei 
Equalizern zu findende Aufteilung.

Bei linearer Aufteilung in 2kHz-Schritten spielt sich Musik oder Sprache 
dann zum grössten Teil nur im untersten Band ab, im Rest siehst du fast 
nur noch Oberwellen.

Andreas

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.