www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Audiofrequenz ermitteln.


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich möchte von 10 Mikrofonen die Audiofrequenz ermitteln. Im Prinzip ist 
die Vorgehensweise klar ..

Mic Amp -> ADC -> µC -> FFT

die FFT sollte am besten mit 1024 Werten arbeiten. Abtastrate 44kHz also 
rund 42Hz Auflösung (?)..

Ich weis nur nicht so recht welchen µC ich nutzen soll.. Erfahrung und 
Equipment habe ich für AVR (AVRstudio + JTAG), 8051 (Silabs) und ARM7/9 
(Keil). Die Daten aus der FFT brauche ich nur für die stärkste Frequenz 
rauszufinden und anzuzeigen bzw. über UART ausgeben (also z.B. Eingang 
1: 84Hz).Danach werden die Daten verworfen. Ich denke 10-20 mal / 
Sekunde sollte mehr als ausreichend sein.

Ich wollte das so machen .. 1024 Punkte messen, FFT berechnen, Ausgeben. 
In der Zwischenzeit der Berechnung werden die nächsten 1024 Punkte 
bereich angefangen zu messen. Damit hab ich zwar nur Momentaufnahmen, 
aber das reicht.

Welchen Prozessor / ADC würdet ihr dafür nutzen? Mangeln Erfahrung und 
Equipemnt mit DSPs würde ich ungern einen verwenden. Mehrere µC wären 
auch ok ..

Derzeit habe ich mir einen STR910 ausgekuckt (zumal ich auch noch paar 
hier hab davon).

Grüße & THX

Autor: Mandrake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nur die stärkste Frequenz rausfinden willst brauchst du keine 
FFT.
Du musst nur deine 1024 Abtastwerte autokorrelieren. Bei der 
Grundfrequenz, die eigentlich immer die stärkste Frequenz ist, bekommst 
du ein deutlich hervortretendes Maximum. Bzw. stimmt nicht ganz. Du 
bekommst in der AKF (Autokorrelationsfunktion) bei der Periodendauer der 
Grundfrequenz ein Maximum, da die AKF ja eine Zeitdifferenzachse hat.

Die Auflösung ist korrekt: 22kHz / (0,5 x 1024) = 42Hz

Bezüglich AKF solltest du mal nach Faltungssumme und AKF suchen.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm ok .. könntest du mir das was ausführlicher erklären? Könnte ich 
damit dann auch die Lautstärke später herausfinden sofern ich das mal 
will?

Für den STR9 dachte ich, weil er Single Cycle DSP-Befehle hat, mit 96MHz 
sowieso nicht grade langsam ist und auch weil es von ST auch eine fertig 
FFT Lib gibt, die mir die Arbeit etwas erleichter g

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Nur" ist gut... die FFT ist viel schneller als eine Autokorrelation. 
Für den AVR sind 100 1024-Punkte-FFTs pro Sekunde wahrscheinlich zu 
viel, aber mit dem ARM geht das locker.

Autor: Mandrake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einer FFT allein wirst du allerdings auch nicht auskommen. Deshalb 
ist die AKF-Methode am Ende vielleicht genauso aufwendig.
Bevor du nämlich eine FFT machst solltest du deinen Datenframe 
"fenstern".
Etwa mit einem Hanning-Fenster oder einem Cosinus-Roll-Off. Ansonsten 
geht dein Nutzsignal zu sehr im Spektrum des benutzten Fensters (dann in 
deinem Fall ein Rechteckfenster) unter und du siehst nur das Spektrum 
deines Rechteck-Fensters (also eine schöne si(f) Funktion).
Zudem wirst du nach der Transformation mit Sicherheit das 
Betragsspektrum oder das Betragsquadratspektrum (das ist dann das 
Leistungsdichtespektrum was wiederum die FFT der AKF ist) verwenden. 
Denn dein FFT-Spektrum ist nicht reell.

Also:
Andreas kann recht haben, dass eine FFT auf einer bestimmten CPU 
schneller zu rechnen geht als eine AKF. Da habe ich keine Erfahrung.
Sicher kann ich nur sagen, dass mit "einfach eine FFT und fetig" noch 
nicht viel gewonnen ist. Ganz im Gegenteil. Danach fängt die Arbeit 
eigentlich erst an. Das Signal muss etwa so aufbereitet werden, dass man 
die Infos die man haben möchte auch sauber herausnehmen kann.
Ich empfehle daher sich vorher etwas mit Integraltransformationen 
speziell
der Fouriertransformation sowie der diskreten Fouriertransformation zu 
beschäftigen. Trivial ist das Thema eindeutig nicht.
Ein fundiertes Wissen um die System und Signaltheorie kann hier auch 
nicht schaden.

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.