Hallo, Ich habe ein kleines Nebenprojekt geplant und hätte gerne Meinungen und Anregungen dazu. Es geht um die Lokalisation einer Soundquelle. Zur Hintergrundinformation: Es geht um einen Roboter (fahrbare Plattform, Torso + Kopf, ca. 1,40m groß), der zur Unterstützung der Interaktion eine ungefähre Lokalisation des Sprechers erhalten soll. Beispiel: Jemand nennt den Roboter beim Namen -> Ist die Anrede laut genug -> Lokalisation der Soundquelle -> Kopf hindrehen -> genauere Lokalisation mit Face recognition. Meine Idee dazu: 4 Mikrophone an einem uC (analoger oder digitaler Eingang kommt auf Mikrofonart an) - Finden des selben Bereichs in allen 4 Eingangssignalen (peak) und Berechnung der relativen Zeitabstände. Daraus bekomme ich dann ja die Richtung der Soundquelle (siehe Bild). Ich habe so etwas bereits vor 2 Jahren beim Nao (kleiner humanoider Roboter von Aldebaran) versucht, da waren die vier Mikrophone bereits eingebaut und das Signal vorbereitet. Hat auch in einem gewissen bereich (sehr nahe am Kopf) ganz gut funktioniert. Nun zu meinen Fragen: Da ich ja hier sehr kurze Zeitabschnitte messen können muss (Schallgeschwindigkeit ~343m/s, weitester Abstand zweier Mikrofone: 270mm): Reichen hier "einfache" Mikrofone und die digitalen/analogen Eingänge eines uC für eine nötige Auflösung aus? Und gibt es Mikrofone die hier mehr/weniger geeignet sind? Gibt es einen Vorteil analoger/digitaler Mikrofone? Gibt es weiter Dinge die zu beachten sind? Vielen Dank ajF für alle Anregungen.
:
Verschoben durch Admin
Die frage ist eher ob du beim Sagen eines Namens einen Peak bekommst der stark genug ist um ihn vom Rauschen und Hintergrundgeräuschen zu Unterscheiden.
Mit weiter voneinander entfernten Mikrophonen klappt das sehr gut, aber mit einer Auflösung von knapp einem Millimeter (übliche 44ksps Samplerate) kannst du ja selbst ausrechnen, welche Genauigkeit z.B. bei nur 10cm entfernten Mikrophonen erzielbar ist wenn die "Lineale" zur Schallquelle eine Unsicherheit von 0.8mm haben. Eine Steigerung der Samplerate z.B. auf 192ksps ist schon sinnvoll, ausserdem eine Montage der Mikrophone im Freifeld, sonst wird es mit der Mathematik "aus dem Ohr um den Kopf rum" zu schwer.
@ Benjamin xyz: Du meinst also eine Filterung müsste her. Vielleicht reicht es mit einem digitalen Filter alles außer den interessanten Bereich (z.B. 0,5 - 2kHz) wegzuschneiden. Könnte das mit einer Kombination geeigneter Hochpass- & Tiefpassfilter funktionieren? Und lässt sich sowas dann überhaupt auf einem uC realisieren? @ MaWin: Ja, dass so etwas im Freifeld natürlich viel besser funktioniert ist klar, aber leider hier nicht Sinn der Aufgabe :). Hängt die Samplerrate eigentlich auch vom Mikrofon ab?
>Gibt es weiter Dinge die zu beachten sind? JA. Man sollte GOOGLE benutzen und etwas Englisch können: GOOGLE fragen nach ... "localisation of sound" microphone ... dann kriegste die Antwort: Ungefähr 16.400 Ergebnisse Treffer sind u.a. http://en.wikipedia.org/wiki/Sound_localization www.cs.cmu.edu/~robust/Papers/SternWangBrownChapter.pdf Und eines scheint mir noch klar zu sein: Die Sache ist nicht einfach.
Andreas Baldinger schrieb: > @ Benjamin xyz: > Du meinst also eine Filterung müsste her. > Vielleicht reicht es mit einem digitalen Filter alles außer den > interessanten Bereich (z.B. 0,5 - 2kHz) wegzuschneiden. > Könnte das mit einer Kombination geeigneter Hochpass- & Tiefpassfilter > funktionieren? > Und lässt sich sowas dann überhaupt auf einem uC realisieren? Kann man auch analog machen und die Filterung einfach zwischen Mikrofon und DAC hängen. Auf irgend einer Seite von nem IC-Hersteller gibts ein online Tool das beim eingeben der Filterparameter ne fertige OPV-Schaltung raus wirft. Also schon mit Bauteilwerten usw. Würde sich aber auch ohne Probleme auf dem uC realisieren lassen.
Die Mikrofone sollten ungerichtet sein, also Druckempfänger wie fast alle kleinen Elektret- Mikrophonkapseln. Es sollten auch alles 4 gleiche Kapseln sein. Wenn der µC genügend Rechenzeit übrig hat kann man die Auswertung über die Korrelationsfunktion machen. Das hilft in Grenzen auch gegen Rauschen und man braucht kein scharf Definiertes Geräusch wir ein Knacken. So besonders hoch muss die Abtastrate auch nicht sein, für mehr als etwa 50 kHz Abtastrate liefern die Mikrofone kaum Informationen, und die Stimme hat eher wenig Frequenzanteile über etwa 2 kHz. Da würde dann schon fast 5 kHz Abtastrate reichen. Schnelleres Abtasten vereinfacht aber ggf die Auswerung etwas.
Andreas Baldinger schrieb: > @ MaWin: > Ja, dass so etwas im Freifeld natürlich viel besser funktioniert ist > klar, aber leider hier nicht Sinn der Aufgabe :). > Hängt die Samplerrate eigentlich auch vom Mikrofon ab? Er meinte damit nicht das du auf den Acker gehen sollst. Sondern das da wo die Mikrophone sitzen, keine Verzierungen sind, wie z.B. ne Ohrmuschel.
Ulrich schrieb: > für mehr > als etwa 50 kHz Abtastrate liefern die Mikrofone kaum Informationen, und > die Stimme hat eher wenig Frequenzanteile über etwa 2 kHz. Da würde dann > schon fast 5 kHz Abtastrate reichen. Schnelleres Abtasten vereinfacht > aber ggf die Auswerung etwas. Die Frequenz ist zur Positionsbestimmung aber ehr nebensächlich. Wichtig ist die Zeit und deren Auflösung, daher ist eine möglichst hohe Samplingfrequenz sinnvoll. Auch wichtig ist das gleichzeitige Samplen der einzelnen Mikrofone, da sonst wieder Zeitdifferenzen entstehen. Möglich, daß Dir hierbei digitale Mikrofone einen Strich durch die Rechnung machen. Gruß Jobst
So lange die Verzögerung durch ein nicht gleichzeitiges Samplen konstant und bekannt ist, stört das nicht so sehr. Eine hohe Samplingrate ist nicht unbedingt nötig, sondern macht nur ggf. die Auswertung einfacher. Da keine höheren Frequenzen gesendet werden, kann man zwischen den langsameren Samples, oder ggf. anderen daraus berechneten Werten interpolieren ohne dadurch grobe Fehler zu machen. Eine geringere Samplingrate erfordert dann ggf. eine etwas aufwendigere Auswertung - dafür hat man weniger Daten zu verarbeiten und kommt mit weniger Rechenzeit aus. Ein Möglichkeit ist die Korrelationsfunktion für ein paar Verzögerungen (z.B. +-1 ms was je nach Samplingrate etwa 10 diskreten Werten entspricht) einfach nach Brute Force (Integral über Produkt) zu berechnen. Das schafft ein kleiner µC für 2 Kanäle gerade noch. Aus den Punkten kann man dann das Maximum finden - die Interpolation geht z.B. durch anpassen einer Parabel an etwa 5 Punkte - das gibt dann auch gleich die Interpolation für Zwischenwerte. Wegen der begrenzten Bandbreite hat man eine glatte Kurve und verpasst durch die relativ weniger Stützstellen nichts wesentliches. Im Ergebnis ist man also nicht auf die anfänglichen etwa 10 Verzögerungen bzw. Winkel festgelegt.
MaWin schrieb: > Auflösung von knapp einem Millimeter (übliche 44ksps > Samplerate) kannst du ja selbst ausrechnen, welche Genauigkeit z.B. bei > nur 10cm entfernten Mikrophonen erzielbar ist Die Auflösung hat mit der Samplerate nichts zu tun. Man kann Verschiebungen deutlich unterhalb der Samplegrenzen wahrnehmen und messtechnisch erfassen.
Ulrich schrieb: > anpassen einer Parabel an etwa 5 Punkte Drei Punkte reichen (das Original, einmal nach links und einmal nach rechts verzögert) wenn man den Sinus nimmt, mit dem sich das matching der angenommenen Phasenverschiebungen ändert. Allerdings ist die Einpassung des Sinus ein Problem für einen Microcontroller.
Ulrich schrieb: > Die Mikrofone sollten ungerichtet sein, also Druckempfänger und selbst die sind im Bereich >1kHz Nierenähnlich Erich schrieb: > "localisation of sound" microphone dabei geht es aber um die Auswertung durch den Menschen. Einfach und billig wird es mit 3-4 schmalbandigen Kanälen und IQ-Demodulation, ansonsten FFT über alle Frequenzen und Phaseninfomation mitteln
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.