mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT - brauchbar?


Autor: Randalf (Gast)
Datum:

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

: Verschoben durch Admin
Autor: Finsbury (Gast)
Datum:

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

Autor: moe (Gast)
Datum:

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

Autor: Jobst M. (jobstens-de)
Datum:

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

Nochmal nachrechnen bitte ... :-)


Gruß

Jobst

Autor: Randalf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uuhps, peinlich, ich habe eine 0 vergexssen :)
es sind natürlich 2kHz, nicht200 Hz.

Autor: Andreas Ferber (aferber)
Datum:

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

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.