Archiv verlassen und diese Seite im Standarddesign anzeigen : Soundanalyse mit AVR...
stefan_Z
15.07.2007, 02:38
Das Thema ist ja schon mehrfach angesprochen worden, aber so wirklich substanzhaltiges habe ich nicht finden können... Daher frage ich einfach mal:
Ich würde gerne mit einem AVR eine Audio-Peak-Anzeige bauen.
Am liebsten noch mit unterschiedlichen Frequenzbändern.
Dabei würde es auch nichts ausmachen, wenn es etwas ungenau wäre, hauptsache es kommt der Realität irgendwie nahe...
Am Ende hätte ich am liebsten einen batteriegetriebenen AVR mit Analog-Vorstufe den ich einfach in ein Audiosignal einschleife und daran dann z.B. per RS232 oder SPI ein LED-Matrix-Display mit eigenem AVR-Controller anbinde.
In Kombination mit dem TV-Terminal https://www.roboternetz.de/phpBB2/viewtopic.php?t=23833 könnte man da schon einige coole Sachen machen!
Ich habe nicht wirklich Ahnung von der Materie (HF), bin aber willig zu lernen ;-) µC programmieren kann ich (z.Zt. noch Bascom).
Wenn ichs richtig verstanden habe, dann müsste man prinzipiell erstmal Frequenzweichen bauen um die einzelnen Bänder zu isolieren. Die könnte man dann ja prima am ADC auslesen und weiterverwursten.
Welche Bauteile und Schaltungen würdet ihr mir da empfehlen? Controller hab ich ne ganze Menge hier - M8, M16, tiny2313... Der M8 bietet sich ja eigentlich an mit seinem ADC... Bauteile sind auch vorhanden und ne gut sortierte Grabbelkiste ;-)
Mir fehlen einfach die Ansätze für Verdrahtung und Bauteilauswahl...
Gruß
Stefan Z
Du redest hier von 2 verschiedenen Ansätzen.
Das eine ist eine Audio Spitzenwertanzeige, das war hier mal kürzlich ein Thema. Da hatten 2 Jungs die Aufgabe von ihrem Prof so etwas als Facharbeit zu bauen. Vieleicht rücken die beiden den Quellcode raus.
Guck mal hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=294950#294950
Das andere ist ein Spektrum Analyzer.
Dabei kann man entweder die einzelnen Frequenzbänder durch einzelne Bandpaßfilter auseinanderdröseln. (Ich glaub da gibts in der zwischenzeit sogar spezielle IC's für).
Oder man berechnet die einzelnen Frequenzanteile mittels Fourier Analyse.
Ich bin da zwar nicht der Fachmann, aber soweit ich weiß ist diese Methode sehr rechenintensiv. Ich denk nicht das ein AVR Controller das in Echtzeit schafft.
Ich glaub mich erinnern zu können, das sowas mal in Elrad mit nem DSP (Digital Signal Prozessor) und einem 8051 Controller gemacht wurde.
Ich hink da der Entwicklung aber auch um mindestens 5 Jahre hinterher, weil ich schon ewig nichts mehr mit Audio Elektronik gebastelt hab.
Also für eine FFT wird man zwar im Normalfall einen DSP verwenden, aber es geht tatsächlich auch mit einem AVR (der hat dann allerdings auch nicht mehr viel Rechenzeit übrig um irgendwelche anderen Aufgaben zu erledigen).
Es gibt ein oder zwei Projekte in der Richtung von denen ich weiss, aber leider finde ich die entsprechenden Seiten nicht mehr. Mit Bascom kommt man an der Stelle jedenfalls nicht weit, der generierte Code wäre viel zu langsam, also muss man den FFT-Algorithmus in Assembler programmieren.
edit:
hab doch noch eine Seite wiedergefunden: http://elm-chan.org/works/akilcd/report_e.html
stefan_Z
15.07.2007, 13:38
http://elm-chan.org/works/akilcd/report_e.html -> Wow, das ist ja schon heftig.
Aber der Kollege benutzt ja nichtmal Frequenzweichen!? Nur nen MAX293 als Filter, den Rest macht anscheinend ein einzelner ADC Eingang...
Wie funktioniert das?
Dass der AVR nachher nicht mehr viel machen kann, das ist egal. Soll nur die Daten rausfunken und gut ists.
Naja, das Geheimnis ist die FFT (http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation)...
Eine Fourier-Transformation transformiert ein Signal vom Zeitbereich in den Frequenzbereich. Ich weiss, das klingt komisch und man kann sich nur wenig bis garnichts darunter vorstellen.
Man kann es aber auch so umschreiben, daß diese Transformation das Signal im Prinzip in viele Sinusschwingungen unterschiedlicher Frequenz zerlegt. Zu jeder dieser Frequenzen liefert die FFT den Betrag (also die Amplitude dieser Frequenz) und die Phase (also wie weit der Sinus verschoben ist).
Die Phase ist für deine Anwendung unwichtig, was du brauchst sind die Beträge denn sie enthalten genau die Information die dich interessiert.
Haben doch meine beiden Vorredner schon gesagt: FFT=Fast FourierTransformation. Ein Algorithmus, der ein Signal in einzelne Sinusschwingungen aufdröselt, aus denen es besteht. Weil: jedes Signal lässt sich durch die Summe von Sinusschwingungen darstellen. Dadurch findest Du auch heraus, wie hoch die Amplituden der einzelnen Schwingungen sind. Wenn ich mich nicht irre, habe ich schonmal irgendwo einen AssemblerAlgorythmus im Netz gesehen...
Gruß
Edit:
Felix war schneller...
stefan_Z
16.07.2007, 03:11
Danke für die Grundlagen-Erklärungen!
Ich muss mich echt mal schlau machen, was diese Geschichten angeht...
Den Souce hat der nette Bastler ja sogar online gestellt, mal sehen, ob ich draus schlau werde...
Was macht der MAX293 in der Schaltung genau? Bügelt der nur die Frequenzen glatt oder ist da noch mehr dahinter? Ist ja immerhin irgendwie getaktet...
Also laut Beschreibung ist das ja nichts weiter als ein Filter...
für erste Versuche in der Richtung kannst du den durch einen einfachen Tiefpass in Form eines RC-Glieds ersetzen. Die Grenzfrequenz sollte dabei die halbe Abtastfrequenz nicht überschreiten (das gilt grundsätzlich immer bei digitaler Signalverarbeitung).
Mag sein, daß der MAX293 besser ist als ein einfaches RC-Glied, aber er ist nicht zwingend notwendig.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.