Hallo Leute, folgendes Szenario: Ich habe einen Raum, in welchem in jeder Ecke ein Mikrofon angebracht ist. Ziel ist es, dass der User später sich frei im Raum bewegen kann und Sprachbefehle absetzen kann, die von den Mikros aufgenommen werden und über eine zentrale Recheneinheit ausgewertet wird. So jetzt ist aber folgendes Problem: Je nachdem wo sich der User grad im Raum befindet, nimmt ein Mikrofon u.U. das Signal besser auf als ein Mikrofon in einer anderen Ecke. Ziel ist es, eine Software zu schreiben, die erkennen kann, welches Mikrofon "am besten geeignet ist", um das Signal auszuwerten. Nicht falsch verstehen: Hier geht es nicht darum ein Algorithmus zu schreiben der Spracherkennung macht, sondern um einen Algorithmus der erkennen kann welches der 4 Signale am besten geeignet wäre um es in eine Spracherkennung zu stopfen. Jetzt hatte ich mir folgende Ansätze überlegt: 1. Man misst von jedem Mikrofon den aktuell anliegenden Pegel und wählt immer das Mic aus mit dem höchsten Mikrofonpegel. Problem hierbei: Wird irgendwo in einer Ecke ein Staubsauger aktiviert führt das quasi zu falschen Informationen. 2. Man nimmt die Signale der 4 Mikrofone und lässt eine FFT darüber laufen und erkennt evtl. an einzelnen Frequenzpeaks ob es sich bei diesem Mikrofon um Sprache handelt oder eben nicht. Eine FFT habe ich schon implementiert dazu, funktioniert auch, nur: Wie werte ich das sinnvoll aus? Jetzt wollte ich mich mal fragen was Ihr für Ideen oder Ansätze dazu hättet? Erfahrung im Bereich digitaler-audio-Verarbeitung sind da. Also irr/fir Filter, fft, audiostreaming habe ich alles schonmal implementiert. Ich weiß nur nicht so recht wie ich das Signal richtig analysieren soll. Danke & Gruß
werte doch alle vier Signale mit dem Algorithmus aus, der die Spracherkennung macht. Damit kannst sicher am besten erkennen, ob es sich um Sprache handelt.
Schau dir mal an, wie man mit Antennen- oder Mikrofonarrays eine Richtwirkung erzielen kann. Das ist vermutlich genau das, was du willst. Grundsätzlich funktioniert das so, dass man ein Modell aufstellt, das die Signallaufzeit zu den einzelnen Mikrofonen in Abhängigkeit zur Position der Signalquelle errechnet. Das gemessene Signal wird dann für jede mögliche Position entsprechend zeitversetzt und mit den anderen Mikrofonen korreliert. Diejenige Position, welche die höchste Korrelation ergibt, ist die Position der Signalquelle. Mathematisch/rechenmässig einfacher als mit 4 Mikrofonen in der Ecke geht das aber mit 4 Mikrofonen in einem linearen Array.
Ich würde mit folgendem Ansatz beginnen: Die vier Mikrofone werden so angeordnet, dass sie idealerweise an den Eckpunkten eines Tetraeders oder – falls dies nicht möglich ist – zumindest nicht näherungeweise in einer Ebene liegen. Dadurch gibt es zu jeder Position einer Schallquelle im Raum ein charakeristisches Quadrupel aus absoluten bzw. ein Tripel aus relativen Laufzeiten. Wenn du jetzt für eine Position (x,y,z) im Raum für jedes der vier Mikrofone die Distanz berechnest, die vier empfangenen Schallsignale ei (i = 1..4) um die entsprechende Laufzeit verschiebst, die verschobenen Signale unter Berücksichtigung der abstandsabhängigen Schalldruckabnahme gewichtet zu einem Summensignal s(x,y,z) zusammenaddierst und dieses über einen bestimmten Zeitbereich quadratisch mittelst, erhältst du ein Maß p(x,y,z) für den ausgesandten Schallpegel unter der Annahme, dass nur eine einzige Schallquelle existiert und diese sich genau an der betrachteten Position befindet. Existiert tatsächlich nur eine einzige Schallquelle im Raum, wird die Funktion p(x,y,z) an der Position (x1,y1,z1) der Schallquelle ein deutliches globales Maximum aufweisen, und das Summensignal s(x1,y1,z1) entspricht den zeitverschobenen Einzelsignalen multipliziert mit einem konstanten Faktor. Da das Signal keine Störgeräusche enthält, sollte der Spracherkennungsalgorithmus problemlos damit zurechtkommen. Existieren hingegen mehrere Schallquellen an den Positionen (xj,yj,zj) (für j = 1..n), so wird p(x,y,z) an jeder dieser Positionen ein lokales Maximum aufweisen. Jedes empfangene Signal ei ist eine gewichtete Summe der zeitverschobenen Quellensignale. Ist die Anzahlder Quellen kleiner oder gleich der Anzahl der Mikrofone, kannst du die Quellensignale aus den Empfangssignalen rekonstruieren. Ist die Anzahl der Quellen größer, kannst du sie zumindest statistisch schätzen. Eine ganz passable Schätzung sind schon die Summensignale sj = s(xj,yj,zj), denn sie enthalten das jeweils von der Quelle j ausgesandte Signal um den Faktor 4 verstärkt, während die Signale der anderen Quellen abgeschwächt werden. Vermutlich gibt es aber noch bessere Schätzfunktionen. Über jedes der rekonstruierten bzw. geschätzten Quellensignale lässt du den Spracherkennungsalgorithmus laufen, der – wenn er ordentlich gemacht ist – nicht nur den erkannten Text, sondern auch einen zugehörigen Konfidenzwert liefert. Der Text mit dem höchsten Konfidenzwert ist das gesuchte Ergebnis. Als weiteres Ergebnis erhältst du die Position des Sprechers, mit der du bei der nächsten Signalauswertung die Zuverlässigkeit der Auswahl der relevanten Schallquelle bei mehreren ähnlichen Konfidenzwerten erhöhen kannst. Wenn du es ganz toll machen willst, kannst du auch noch eine Bewegungsschätzung für den Sprecher einbauen für den Fall, dass er im Raum umhergeht. Dieser Ansatz ist prinzipiell auch dafür geeignet, zwei oder mehr gleichzeitig sprechende Personen an verschiedenen Positionen getrennt voneinander auszuwerten. Das Ganze hört sich jetzt vielleicht ein Bisschen einfacher an, als es tatsächlich ist. In der Praxis treten – wie so oft – die verschiedensten Dreckeffekte auf: - Die Schallquellen sind nicht punktförmig. - Der Weg des Schalls ist nicht immer geradlinig, es treten auch Reflexion und Beugung auf. - Die Dämpfung der Schallsignale in der Luft ist nicht nur abstands-, sondern auch frequenzabhängig. - Die Abtastrate des Auswertesystems ist begrenzt. - ... (weitere Effekte wirst du spätesten bei der Umsetzung erkennen) Einen Teil dieser Effekte kannst du dadruch reduzieren, dass du die betrachetete Bandbreite vor vornherein auf die für die Spracherkennung relevante beschränkst (ein paar Hundert Hz bis ein paar kHz). Ansonsten kann man in solchen Fällen viel mit Statistik geradebiegen. Ich glaube, dass es zu dem Thema auch schon beliebig viel Literatur gibt. Die zu finden dürfte im Internetzeitalter ja nicht allzu schwer sein.
Wenn nur 4 Mikrofone in den Raumecken vorhanden sind, dann ist Auswahl des besten Mikrofons tatsächlich das einzig sinnvolle. Was Yalu beschreibt funktioniert zwar theoretisch, praktisch in diesem Szenario aber nicht, hauptsächlich weil ein realer Raum reflektierende Wände hat und der Sprecher keine omnidirektionale Punktquelle ist. Die Lokalisierung mit steered response power (so nennt man das beschriebene Verfahren) wird da ziemlich wild aussehen, und Beamforming (kohärente Addition der Mikrofonsignale) wird kaum einen messbaren Gewinn gegenüber dem besten Mikrofon bringen, selbst wenn man die Position der Quelle genau genug bestimmen könnte. Leistungsbasierte Auswahl des Mikrofons ist in erster Näherung schon ganz gut, Gewichtung mit dem Sprachspektrum hilft, es gibt aber natürlich noch ausgefeiltere Methoden. Literatur dazu solltest du unter den Begriffen "microphone selection" und "voice activity detection" finden. Noch besser ist der schon vorgeschlagene Ansatz, die Konfidenzmaße des Spracherkenners zu verwenden - so man an diese herankommt. Wichtig beim Spracherkenner ist auch, dass er für das Erkennen von verhallter Sprache optimiert ist, sonst geht die Erkennungsrate schnell in den Keller. Auf jeden Fall sollte man sich bei dem Vorhaben bewusst sein, dass an dem Problem schon andere mit mehr Ressourcen gearbeitet haben und arbeiten (z.B. EU-Projekte DICIT, DIRHA), und es noch immer keine marktreife Lösung gibt. Das Ganze ist also nicht so einfach.
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.