Forum: Digitale Signalverarbeitung / DSP / Machine Learning Uni Projekt - Erkennung von Sprache


von Markus (Gast)


Lesenswert?

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ß

von Roland L. (Gast)


Lesenswert?

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.

von P. M. (o-o)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.