Um Müllers Antwort zu erweitern,
- Sollten die Mikrofone in getrennten Röhren platziert werden, um die Trennung zu verbessern?
- Nein, Sie versuchen, die Richtung der Quelle zu bestimmen. Wenn Sie Röhren hinzufügen, wird der Ton nur innerhalb der Röhre reflektiert, was definitiv nicht erwünscht ist.
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 Artikelspeed of soundsound frequency=343 m/s6 kHz=5.71 mmdas hat einen Durchmesser von weniger als 5,71 mm. Vergessen Sie nicht, einen Tiefpassfilter mit einer Grenzfrequenz von etwa 6-10 kHz hinzuzufügen.
Bearbeiten
Ich hatte das Gefühl, dass diese Frage Nr. 2 Spaß machte, und beschloss, sie selbst zu lösen.
- Kann die Phasenkorrelation zwischen 3 Quellen gleichzeitig berechnet werden? (dh um die Berechnung zu beschleunigen)
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:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Ich werde...
- Verwenden Sie die Nomenklatur , einen Vektor, der von nachA B.¯¯¯¯¯¯¯¯EINB.
- nenne meine HerkunftEIN
- Schreiben Sie alle Zahlen in mm
- Verwenden Sie 3D-Mathematik, erhalten Sie jedoch eine 2D-Richtung
- Stellen Sie die vertikale Position der Mikrofone auf ihre tatsächliche Wellenform ein. So diese Gleichungen auf einer soliden Basis sind so etwas wie das aussieht Welle dies .
- Berechnen Sie das Kreuzprodukt dieser Mikrofone anhand ihrer Position und Wellenform, ignorieren Sie dann die Höheninformationen dieses Kreuzprodukts und verwenden Sie Arctan, um die tatsächliche Richtung der Quelle zu ermitteln.
- Rufen Sie den Ausgang des Mikrofons an Position , nennen Sie den Ausgang des Mikrofons an Position , rufen Sie den Ausgang des Mikrofons an PositioneinEINbB.cC.
Folgende Dinge sind also wahr:
- A = ( 0 , 0 , a )
- B = ( 4 , 0 , b )
- C.= ( 2 , 42- 22- -- -- -- -- -- -√= 2 3- -√, c )
Dies gibt uns:
- A B.¯¯¯¯¯¯¯¯= ( 4 , 0 , a - b )
- A C.¯¯¯¯¯¯¯¯= ( 2 , 2 3- -√, a - c )
Und das Kreuzprodukt ist einfachA B.¯¯¯¯¯¯¯¯× A C.¯¯¯¯¯¯¯¯
A B.¯¯¯¯¯¯¯¯× A C.¯¯¯¯¯¯¯¯= ⎛⎝⎜40a - b⎞⎠⎟× ⎛⎝⎜22 3- -√a - c⎞⎠⎟= ⎛⎝⎜0 ⋅ ( a - c ) - ( a - b ) ⋅ 2 3- -√( a - b ) ⋅ 2 - 4 ⋅ ( a - c )4 ⋅ 2 3- -√- 0 ⋅ 2⎞⎠⎟= ⎛⎝⎜2 3- -√( b - a )- 2 a - 2 b - 4 c8 3- -√⎞⎠⎟
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:
Arctan( a + b + 2 c3- -√( a - b )) 180π
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 seineinb
Mit anderen Worten, machen Sie einfach etwas wie dieses:
source_direction=atan2(a+b+2c,\sqrt{3}*(a-b))*180/pi;
if(a>b){
if(b>c){//a>b>c
possible_center_direction=240; //A is closest, then B, last C
}else if(a>c){//a>c>b
possible_center_direction=180; //A is closest, then C last B
}else{//c>a>b
possible_center_direction=120; //C is closest, then A last B
}
}else{
if(c>b){//c>b>a
possible_center_direction=60; //C is closest, then B, last A
}else if(a>c){//b>a>c
possible_center_direction=300; //B is closest, then A, last C
}else{//b>c>a
possible_center_direction=0; //B is closest, then C, last A
}
}
//if the source is out of bounds, then rotate it by 180 degrees.
if((possible_center_direction+60)<source_direction){
if(source_direction<(possible_center_direction-60)){
source_direction=(source_direction+180)%360;
}
}
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.
| P.|= P.2x+ P.2y- -- -- -- -- -- -- -√= 3 ( a - b )2+ ( a + b + 2 c )2- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -√
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.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
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.