Hallo!
Ich möchte für ein Uni-Projekt den Sprecher lokalisieren.
Anwendung soll das ganze im Fahrzeug finden, d.h. es interessiert im
Grunde nur eine Ebene.
Leider gibt es bei uns am Lehrstuhl kaum Erfahrungen damit. Es wäre toll
wenn ihr mir ein wenig bei den grundsätzlichen Anforderungen helfen
könntet!
Mein erster Gedanke war es, drei oder vier Mikrophone nebeneinander
anzuordnen, via Matlab einzulesen und zu verarbeiten. Jetzt bin ich mir
aber gar nicht sicher ob Matlab überhaupt simultan 4 Audiosignale
erfassen kann (die Hilfe des audiorecorders spricht nur von max. 2) und
ob die Anforderungen bzgl. Leistung nicht vielleicht zu hoch sind..
Hier mal einige Fragen die sich mir stellen, vielleicht weiß ja jemand
zu einer oder mehreren die Antwort:
- Wieviele Mikrophone wird man für eine halbwegs zuverlässige Lösung
brauchen? 2,3,4 oder sogar mehr?
- Wieviele Audiosignale kann Matlab über eine angeschlossene Soundkarte
denn überhaupt verarbeiten? Hat da wer Erfahrungen vllt. sogar Hardware
Tipps?
- Muss ich zwangsweise einen DSP verwenden? Falls ja, brauche ich dann
etwas vom Kaliber eines TI TMS320C6713 ?
Ihr merkt schon, ich bin etwas ratlos und habe leider keine brauchbaren
Projekte im Netz finden können die sich wirklich mit Sprache (also kein
Klatschen etc.) beschäftigen. Gerne würde ich das auch über einen
Mikrocontroller lösen, aber die werden wohl nicht leistungsfähig genug
sein.
Danke! :-)
Mach das doch erst mal offline und nimm ein paar Wellenformen auf.
Das Stichwort um die Phasendifferenzen rauszubekommen heisst
"Korrelation". Es gibt allerdings schon (n+1) Projekte und Patente, die
das Problem abdecken. Manche werten auch die Spektren aus um mit nur 2
Mikrofonen die Richtung zu orten, im Fahrzeug sähe das Problem aber
anders aus, da fallen dann eher die Mehrdeutigkeiten wegen der Anordnung
weg. 3 brauchst du min. für die Position in der Ebene, ist wie beim GPS.
Mehr Redundanz hilft.
Ziemlich brauchbar um sowas ähnliches umzusetzen (Echo-Peilung) fand ich
das BF533 EZKIT mit 6-Kanal Codec. Ist allerdings schon einige Jahre
her. Die offiziellen Tools von Analog Devices waren damals allerdings
unbrauchbar (soll heute zum Einsteigen besser geworden sein). Benutze
allerdings nur GCC und den USB-Debugger von section5, der kostete zwar
mehr als das Board aber war irre schnell und kackte nicht andauernd ab
wie der VDSP++ Debugger.
Auf jeden Fall würd ich einen leistungsfähigen DSP nehmen und erst
später auf einen µC gehen wenn die Anforderungen feststehen.
Aus Sicht eines Toningenieurs würde man einwerfen, dass eine Abbildung
des Raumes bereits mit Koinzidenzaufnahmen mit 2 Mikrofonen gelingt. Die
Tiefen und Höhenlokalisation erfordert mindesten 1 Mikrofone mehr.
Theoretisch kommt man damit perfekt hin, aufgrund der Ungenauigkeiten
sind mehr Mikros aber hilfreich.
Du könntest es mit Beamforming der Mikrofoncharakteristiken versuchen.
Dann kommt es nämlich genau darauf an, wieviele Mikrofone du benötigst.
Wenn du zum Beispiel eine Nachführung des Sprechers möchtest, benötigst
du mehr als 2 Antennen, 4 wären dafür sehr gut geeignet. Damit könntest
du andere Störquellen dann auch einfach abdämpfen. Dafür gibts ein paar
nette Algorithmen, die das Maximum detektieren und dir dann deine
Koeffizienten für die Mikrofone so berechnen, dass nur das Maximum
durchgelassen wird. Schau mal nach "Maximal Ratio Combining",
"Antennendiagrammen" oder "Richtcharakteristik".
Zur Hardware würde ich sagen, dass du um ein DSP nicht rumkommst. Ich
weiß nicht ob es Mehrkanalboards gibt, aber mit dem C6713 habe ich auch
schon Audioverarbeitung gemacht und das klappt extrem gut. Mit dem PC
kannst du nicht arbeiten, der kommt da gar nicht hinterher dir alles zu
berechnen und in Echtzeit auszuspucken. Aber ich würde erst mal wie die
anderen schon gesagt haben ein paar Tonquellen aufnehmen und dann
versuchen deine Algorithmen drüberzujagen. Über die Echtzeitgeschichte
würde ich mir erst später Gedanken machen. Achso, achte darauf in
welchem Abstand deine Mikrofone sitzen, falls du mit Richtcharakteristik
arbeiten möchtest. Je nach dem ob in welchem Abstand die sitzen, wirst
du andere Mikrofondiagramme erhalten.
Marc schrieb:> - Wieviele Mikrophone wird man für eine halbwegs zuverlässige Lösung> brauchen? 2,3,4 oder sogar mehr?
Die Mindestanforderung läßt sich schnell mathematisch herausfinden. Bei
2 Mics liegen die Orte gleicher Laufzeitdifferenz auf zwei Hyperbeln,
d.h. man braucht mindestens drei. Damit ist die Zahl der Lösungen schon
so weit eingeschränkt, dass das je nach Mikrophonplazierung und
Vorwissen über mögliche Sprecherpositionen schon für eine eindeutige
Lösung reichen kann.
BöserFisch schrieb:> 3 brauchst du min. für die Position in der Ebene, ist wie beim GPS.
Falsch.
Beim GPS läuft das ganz anders. Dort wird die Signallaufzeit vom Sat zum
Nutzer gemessen, d.h. Orte gleicher Laufzeit liegen auf einer Kugel, die
eine Ebene in einem Kreis schneidet. Mit zwei Satelliten gibt es nur
noch 2 mögliche Punkte, von denen man einen wegen der Bewegung der
Satelliten schnell als Lösung ausschließen kann. Der dritte Satellit
wird nur benötigt, falls der Empfänger keine genügend genaue Uhr
besitzt.
Bei Korrelation der Schallsignale braucht man schon mal zwei, um in der
Ebene auf eine Hyperbel (bzw. deren Spiegelung) mit der gemessenen
Laufzeitdifferenz zu kommen. Das dritte ist für eine Lösungsmenge aus
Einzelpunkten zwingend.
Andreas Schwarz schrieb:> Bei GPS braucht man mindestens 4 Satelliten, weil es 4 Unbekannte gibt:> x, y, z und die Zeitdifferenz zwischen Empfängeruhr und Satellitenuhr.
Sag ich ja.
In der Ebene (x,y) bei genauer Empfängeruhr (=keine Unsicherheit in der
Zeitdifferenz) eben nur zwei.
Dass das gemeine GPS-Modul für 30 Eur keine Atomuhr hat, ist keine Frage
des Prinzips. Der zusätzliche Satellite wird quasi benutzt, um
Mehrfachnutze aus dem GPS zu ziehen, i.e. Lieferung einer genauen Zeit
an den Nutzer.
Marc schrieb:> Ich möchte für ein Uni-Projekt den Sprecher lokalisieren.
Was heißt lokalisieren? Winkel oder Winkel+Entfernung? Wie genau, wie
zuverlässig? Kurz, was willst du mit den Ergebnissen anfangen?
Winkelschätzung ist mit zwei Mikrofonen praktikabel. Die klassischen
Verfahren mit denen man bei der Sprecherlokalisierung brauchbare
Ergebnisse bekommt sind GCC-PHAT und SRP-PHAT, letzteres kann auch mit
mehr als zwei Mikrofonen umgehen. Entfernung ist deutlich schwerer. Hier
braucht man mehr und in größerem Abstand angeordnete Mikrofone.
Hilfreich wäre es zu wissen, was du messen willst, wie genau, und welche
Einschränkungen bzgl. Mikrofonplatzierung es gibt. Auf jeden Fall ist es
noch viel zu früh sich um eine Hardwareplattform Gedanken zu machen. Das
macht man erst wenn man mal Testsignale aufgenommen und mit dem PC
erfolgreich ausgewertet hat.
Marc schrieb:> Leider gibt es bei uns am Lehrstuhl kaum Erfahrungen damit.
Dann würde ich das Projekt mal sehr genau hinterfragen. Wenn das nur ein
Teil einer Bachelor- oder Masterarbeit sein soll, dann würde ich mir
Sorgen machen.
Danke für eure Antworten!
Ich habe mir schon überlegt das ganze mittels TDOA und 3-4 Mikrophonen
zu machen.
Ich würde nur gerne Matlab verwenden und habe nur etwas bedenken dass
eich z.B. mit 3 Mikrophonen anfange und dann feststellen muss, dass ich
doch mehr benötige und dann plötzlich mit einen ganz anderen
Hardwareaufbau benötige.
Ich bin inzwischen auf folgendes gestoßen:
http://sinusmess.de/produkte/apollo.htm
Die versprechen ja eigentlich genau das wonach ich suche: mehrere
Mikrophone nach Matlab bringen - oder?
@Andreas:
Der Winkel würde im Grunde reichen.
Es soll eine Art Roboterkopf angesteuert werden der immer den Sprecher
anschauen soll. Das muss auch nicht extrem genau sein, sollte aber
natürlich in etwa stimmen.
Glaubst du wirklich dass es mit 2 Mikrophonen brauchbare Ergebnisse bei
normalen Sprachsignalen gibt?
Zur Platzierung... naja sollte nicht allzu sehr auffallen (also besser
ein Linienarray und kein Kreis) und ich nehme einfach an, dass es mittig
vorne am meisten Sinn macht.
Zur Aufnahme von Testsignalen brauche ich doch auch bereits eine
Soundkarte und Mikrofone, da kann/will ich nicht alles 2x kaufen müssen
sondern direkt die richtige Ausrüstung kaufen. Darum geht's mir gerade
hauptsächlich
Danke! :)
Marc schrieb:> Ich bin inzwischen auf folgendes gestoßen:> http://sinusmess.de/produkte/apollo.htm
Da zahlst du vermutlich furchtbar viel für die Software und die
Kalibrierung, die du für deine Anwendung nicht brauchst. Eine einfache
Mehrkanal-Soundkarte tut's auch, wenn sie unter Windows ASIO oder unter
Linux ALSA unterstützt; aus MATLAB lässt sich die Karte mit playrec
(http://www.playrec.co.uk/) ansprechen.
> Glaubst du wirklich dass es mit 2 Mikrophonen brauchbare Ergebnisse bei> normalen Sprachsignalen gibt?
Im Prinzip schon, kommt auf die Hintergrundgeräusche in deinem Fall an.
Wenn das Auto mit offenem Verdeck auf der Autobahn fährt, dann sicher
nicht.
Moin,
nur so ein Gedanke, aber vielleicht brauchst du ein drittes Mikro im
Bodenbereich, o.ae. welches vor allem die (omnipräsenten) Nebengeräusche
erfasst. Das Motorengebrumm kriegst Du ev. gut rausgefiltert, kann aber
auch sein, dass der Filter adaptiv arbeiten muss ("Noise Cancelling")
Das knifflige wird vermutlich die Wahl der richtigen Mikrophone und
einer guten "Zeitbasis" für die A/D-Wandlung.
Grüsse,
- Strubi
Vorsicht mit den Billigsoundkarten. Die haben nicht selten interlacte
Takte, da im SPDIF Stereo sowie sequenziell versendet wird. Das kann man
hier eher nicht gebrauchen.
Ausserdem muss man die Kanäle und die Mikros kalibieren!
Martin S. schrieb:> Moin,>> nur so ein Gedanke, aber vielleicht brauchst du ein drittes Mikro im> Bodenbereich, o.ae. welches vor allem die (omnipräsenten) Nebengeräusche> erfasst. Das Motorengebrumm kriegst Du ev. gut rausgefiltert, kann aber> auch sein, dass der Filter adaptiv arbeiten muss ("Noise Cancelling")> Das knifflige wird vermutlich die Wahl der richtigen Mikrophone und> einer guten "Zeitbasis" für die A/D-Wandlung.
Motorengeräusche sind relativ einfach, wenn man an den CAN geht: die
Störungen liegen (bei einem Vierzylinder) bei der halben Drehzahl und
den zugehörigen Harmonischen.
Reifen- und Windgeräusche dominieren ab einer gewissen Geschwindigkeit,
diese sind aber deutlich schwieriger zu schätzen.
Noise Cancellation ist eine ziemlich unexakte Wissenschaft mit vielen
handgerührten Korrekturfaktoren. In einem hochgradig nichtstationären
Umfeld wie einem fahrenden Kfz wird´s nicht besser. Der TE sollte die
Finger davon lassen, wenn er nicht eine komplette Promotion aus der
Arbeit machen will.
Für einen Demonstrator müsste es doch reichen, wenn das ganze im Stand
oder bei langsamer Fahrt funktioniert. Matlab und Realtime passt meist
nicht wirklich zusammen, aber wenn die Nachführung nur z.B. einmal pro
Sekunde funktioniert, muss das für den Demonstrator doch reichen.
Nachtrag: ich habe eben bei einer kurzen Google-Suche das hier gefunden:
http://www.mathworks.com/matlabcentral/fileexchange/24352-acoustic-source-localization-using-srp-phat.
Vielleicht hilft es Dir ja.
Max
Kann man das nicht mit einem common mode Filter machen? Man müsste doch
nur die Kanäle miteinander falten und die Phasenverschiebeung berechnen.
Aus der lässt sich ein Winkel berehnen, meine ich.
Marc schrieb:> Hallo!>> Ich möchte für ein Uni-Projekt den Sprecher lokalisieren.> Anwendung soll das ganze im Fahrzeug finden, d.h. es interessiert im> Grunde nur eine Ebene.>> Leider gibt es bei uns am Lehrstuhl kaum Erfahrungen damit. Es wäre toll> wenn ihr mir ein wenig bei den grundsätzlichen Anforderungen helfen> könntet!
Ich habe das ganze anno 93/94 an der Uni Bremen auf einem AT&T DSP32C
mit 25 MHz in Zusammenhang mit adaptiver Störgeräuschunterdrückung
implementiert. Wenn Du mir Deine Mailadresse rüberreichst, kann ich die
die Studienarbeit von damals zumailen.
fchk
Filterer schrieb:> Kann man das nicht mit einem common mode Filter machen? Man müsste doch> nur die Kanäle miteinander falten und die Phasenverschiebeung berechnen.> Aus der lässt sich ein Winkel berehnen, meine ich.
Ich habe eine ähnliche Anwendung und diesen thread gefunden. Wie faltet
man die Kanäle mit einander?
Ich bekomme einen Nachrichtensprecher über ein Stereomikrofon, dass den
vollständigen Halbkreis in einer Moderatorenkabine abdeckt. Der Sprecher
kann aber links und rechts sitzen, weil es mehrere Stühle und Positionen
gibt. Die momentane Technik wird mit 2 auf die Hauptpositionen
ausgerichteten Mikrophone gelöst, die aktiv umgeschaltet werden. Das
soll ab sofort automatisch geschehen. Zum Beispiel wenn der Sprecher
etwas verrutscht, oder mehrere Stühle besetzt sind mit Gästen sollen die
Mikrofone aktiv werden, die auch besprochen werden.
Am Ende sollen bis zu 4 Mikrofone vor den Sprecherpositionen eingesetzt
werden und nur die aktiv werden, die auch verwendet werden. Der letzte
Schritt ist, die Positionen flexibel durchzufahren, wenn eine Person
sich in der Kabine bewegt. Also z.B. ein auf und ab laufender Moderator.
Das Ganze soll dann auch im Studio eingesetzt werden.
Wie geht man da ran?
Marc schrieb:> Glaubst du wirklich dass es mit 2 Mikrophonen brauchbare Ergebnisse bei> normalen Sprachsignalen gibt?
Rechne mal nach: Mit 2 Punkten kann man nur eine Gerade definieren und
nicht vorne und hinten. Es braucht immer 3 oder mehr.
Für die beschriebene Anwendung sollte das reichen. Eine Sprecherkabine
sollte ein einigermaßen hallfreier Raum sein, so dass eine
Kreuzkorrelation recht brauchbare Ergebnisse liefern sollte, wo der
Sprecher denn nun ist.
Alternativ (immer noch unter der Annahme eines hallfreien Raums, also
einer näherungsweise diracförmigen Impulsantwort) geht natürlich auch
der zweite Ansatz ("flexible Mikrofone"). Im Grund braucht es nur eine
Laufzeitkorrektur, dann kann man einfach aufsummieren.
In halligen Umgebungen sieht das schon wieder ganz anders aus. Ist hier
aber nicht gegeben.