Zunächst habe ich einen ähnlichen Thread gesehen, der sich jedoch ein wenig von dem unterscheidet, was ich erreichen möchte. Ich baue einen Roboter, der der Person folgt, die ihn anruft. Meine Idee ist es, 3 oder 4 Mikrofone zu verwenden - dh in der folgenden Anordnung, um zu bestimmen, aus welcher Richtung der Roboter gerufen wurde:
Wo S die Quelle ist, sind A, B und C Mikrofone. Die Idee ist, die Phasenkorrelation von Signalen zu berechnen, die von den Paaren AB, AC, BC aufgezeichnet wurden, und auf dieser Grundlage einen Vektor zu konstruieren, der unter Verwendung einer Art Triangulation auf die Quelle zeigt. Das System muss nicht einmal in Echtzeit arbeiten, da es sprachaktiviert wird - Signale von allen Mikrofonen werden gleichzeitig aufgezeichnet, Sprache wird von nur einem Mikrofon abgetastet und wenn es zur Sprachsignatur passt, wird die Phasenkorrelation berechnet der letzte Sekundenbruchteil, um die Richtung zu berechnen. Mir ist bewusst, dass dies möglicherweise nicht gut funktioniert, z. B. wenn der Roboter aus einem anderen Raum gerufen wird oder wenn mehrere Reflexionen auftreten.
Dies ist nur eine Idee, die ich hatte, aber ich habe so etwas noch nie versucht und ich habe einige Fragen, bevor ich die eigentliche Hardware konstruiere, die die Arbeit erledigt:
- Ist das ein typischer Weg, dies zu tun? (dh in Telefonen zur Geräuschunterdrückung verwendet?) Was sind andere mögliche Ansätze?
- Kann die Phasenkorrelation zwischen 3 Quellen gleichzeitig berechnet werden? (dh um die Berechnung zu beschleunigen)
- Ist eine Abtastrate von 22 kHz und eine Tiefe von 12 Bit für dieses System ausreichend? Ich bin besonders besorgt über die Bittiefe.
- Sollten die Mikrofone in getrennten Röhren platziert werden, um die Trennung zu verbessern?
quelle
Antworten:
Um Müllers Antwort zu erweitern,
Die beste Vorgehensweise wäre, sie direkt nach oben zu richten. Auf diese Weise erhalten sie alle einen ähnlichen Klang. Das einzige, was an ihnen einzigartig ist, sind ihre physischen Platzierungen, die sich direkt auf die Phase auswirken. Eine 6-kHz-Sinuswelle hat eine Wellenlänge von . Wenn Sie also die Phasen von Sinuswellen bis zu 6 kHz eindeutig identifizieren möchten, die die typischen Frequenzen für menschliches Sprechen sind, sollten Sie die Mikrofone höchstens 5,71 mm voneinander entfernt platzieren. Hier ist ein Artikel
Bearbeiten
Ich hatte das Gefühl, dass diese Frage Nr. 2 Spaß machte, und beschloss, sie selbst zu lösen.
Wenn Sie Ihre lineare Algebra kennen, können Sie sich vorstellen, dass Sie die Mikrofone in einem Dreieck platziert haben, in dem jedes Mikrofon 4 mm voneinander entfernt ist und jeder Innenwinkel .60°
Nehmen wir also an, sie befinden sich in dieser Konfiguration:
Ich werde...
Folgende Dinge sind also wahr:
Dies gibt uns:
Und das Kreuzprodukt ist einfachA B.¯¯¯¯¯¯¯¯× A C.¯¯¯¯¯¯¯¯
Die Z-Information ist nur Junk, für uns kein Interesse. Wenn sich die Eingangssignale ändern, schwingt der Kreuzvektor zur Quelle hin und her. Die Hälfte der Zeit zeigt es also direkt auf die Quelle (ohne Berücksichtigung von Reflexionen und anderen Parasiten). Und die andere Hälfte der Zeit zeigt es 180 Grad von der Quelle entfernt.8 3- -√
Ich spreche von das zu vereinfacht werden kann und drehen Sie dann das Bogenmaß in Grad.Arctan( - 2 a - 2 b - 4 c2 3√( b - a )) Arctan( a + b + 2 c3√( a - b ))
Am Ende haben Sie also die folgende Gleichung:
Aber die Hälfte der Zeit sind die Informationen buchstäblich 100% falsch, also wie ... sollte man ... es 100% der Zeit richtig machen?
Nun , wenn ist führendes , dann kann die Quelle nicht näher an B seinein b
Mit anderen Worten, machen Sie einfach etwas wie dieses:
Und vielleicht möchten Sie nur reagieren, wenn die Schallquelle aus einem bestimmten vertikalen Winkel kommt, wenn Menschen über den Mikrofonen sprechen => 0 Phasenwechsel => nichts tun. Die Leute reden horizontal daneben => etwas Phasenwechsel => reagieren.
Vielleicht möchten Sie diesen Schwellenwert auf einen niedrigen Wert einstellen, z. B. 0,1 oder 0,01. Ich bin mir nicht ganz sicher, hängt von der Lautstärke und Frequenz und den Parasiten ab, testen Sie es selbst.
Ein weiterer Grund für die Verwendung der Absolutwertgleichung sind Nulldurchgänge. Es kann einen kleinen Moment geben, in dem die Richtung in die falsche Richtung zeigt. Obwohl es nur für 1% der Zeit sein wird, wenn auch das. Vielleicht möchten Sie der Richtung einen LP-Filter erster Ordnung hinzufügen.
Und wenn Sie auf eine bestimmte Lautstärke reagieren möchten, addieren Sie einfach die 3 Mikrofone und vergleichen Sie diese mit einem Triggerwert. Der Mittelwert der Mikrofone wäre ihre Summe geteilt durch 3, aber Sie müssen nicht durch 3 teilen, wenn Sie den Triggerwert um einen Faktor 3 erhöhen.
Ich habe Probleme, den Code als C / C # / C ++ oder JS oder einen anderen zu markieren. Leider wird der Code entgegen meinen Wünschen schwarz auf weiß sein. Na ja, viel Glück bei Ihrem Vorhaben. Klingt lustig.
Es besteht auch eine 50/50-Chance, dass die Richtung 99% der Zeit 180 von der Quelle entfernt ist. Ich bin ein Meister darin, solche Fehler zu machen. Eine Korrektur hierfür wäre jedoch, einfach die if-Anweisungen umzukehren, wenn 180 Grad hinzugefügt werden sollen.
quelle
quelle