Pour étendre la réponse de Müller,
- Les microphones doivent-ils être placés dans des tubes séparés afin d'améliorer la séparation?
- Non, vous essayez d'identifier la direction de la source, l'ajout de tubes ne fera que faire rebondir le son à l'intérieur du tube, ce qui n'est certainement pas souhaité.
La meilleure façon de procéder serait de les faire face directement, de cette façon, ils recevront tous un son similaire et la seule chose qui est unique à leur sujet est leur placement physique qui affectera directement la phase. Une onde sinusoïdale de 6 kHz a une longueur d'onde de speed of soundsound frequency=343 m/s6 kHz=5.71 mm. Donc, si vous souhaitez identifier de manière unique les phases des ondes sinusoïdales jusqu'à 6 kHz, qui sont les fréquences typiques de la conversation humaine, vous devez espacer les microphones d'au plus 5,71 mm. Voici unarticledont le diamètre est inférieur à 5,71 mm. N'oubliez pas d'ajouter un filtre passe-bas avec une fréquence de coupure à environ 6-10 kHz.
Éditer
J'ai senti que cette question n ° 2 avait l'air amusante, alors j'ai décidé d'essayer de la résoudre par moi-même.
- La corrélation de phase peut-elle être calculée entre 3 sources simultanément d'une manière ou d'une autre? (c'est-à-dire afin d'accélérer le calcul)
60° .
Supposons donc qu'ils sont dans cette configuration:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Je vais...
- AB¯¯¯¯¯¯¯¯AB
- A mon origine
- écrire tous les nombres en mm
- utiliser les mathématiques 3D mais se retrouver avec une direction 2D
- réglez la position verticale des microphones sur leur forme d'onde réelle. Donc, ces équations sont basées sur une onde sonore qui ressemble à ceci .
- Calculez le produit croisé de ces microphones en fonction de leur position et de leur forme d'onde, puis ignorez les informations de hauteur de ce produit croisé et utilisez arctan pour trouver la direction réelle de la source.
- aAbBcC
Donc, les choses suivantes sont vraies:
- A=(0,0,a)
- B=(4,0,b)
- C=(2,42−22−−−−−−√=23–√,c)
Cela nous donne:
- AB¯¯¯¯¯¯¯¯=(4,0,a−b)
- AC¯¯¯¯¯¯¯¯=(2,23–√,a−c)
AB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯
AB¯¯¯¯¯¯¯¯×AC¯¯¯¯¯¯¯¯=⎛⎝⎜40a−b⎞⎠⎟×⎛⎝⎜223–√a−c⎞⎠⎟=⎛⎝⎜0⋅(a−c)−(a−b)⋅23–√(a−b)⋅2−4⋅(a−c)4⋅23–√−0⋅2⎞⎠⎟=⎛⎝⎜23–√(b−a)−2a−2b−4c83–√⎞⎠⎟
83–√
arctan(−2a−2b−4c23√(b−a))arctan(a+b+2c3√(a−b))
Donc, vous vous retrouvez avec l'équation suivante:
arctan(a+b+2c3–√(a−b))180π
Mais la moitié du temps, les informations sont littéralement erronées à 100%, alors comment ... faut-il ... faire les choses correctement à 100%?
ab , la source ne peut pas être plus proche de B.
En d'autres termes, faites simplement quelque chose de simple comme ceci:
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;
}
}
Et peut-être que vous ne voulez réagir que si la source sonore provient d'un angle vertical spécifique, si les gens parlent au-dessus des microphones => 0 changement de phase => ne faites rien. Les gens parlent horizontalement à côté => un changement de phase => réagissent.
|P|=P2x+P2y−−−−−−−√=3(a−b)2+(a+b+2c)2−−−−−−−−−−−−−−−−−−−√
Donc, vous voudrez peut-être définir ce seuil à quelque chose de bas, comme 0,1 ou 0,01. Je ne suis pas tout à fait sûr, cela dépend du volume et de la fréquence et des parasites, testez-le vous-même.
Une autre raison pour laquelle utiliser l'équation de la valeur absolue est pour les passages à zéro, il peut y avoir un léger moment où la direction pointera dans la mauvaise direction. Bien que ce ne soit que pour 1% du temps, même si cela. Donc, vous voudrez peut-être attacher un filtre LP de premier ordre à la direction.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
Et si vous voulez réagir à un volume spécifique, additionnez simplement les 3 microphones ensemble et comparez cela à une valeur de déclenchement. La valeur moyenne des microphones serait leur somme divisée par 3, mais vous n'avez pas besoin de diviser par 3 si vous augmentez la valeur de déclenchement d'un facteur 3.
J'ai des problèmes avec le marquage du code comme C / C # / C ++ ou JS ou tout autre, donc malheureusement le code sera noir sur blanc, contre mes souhaits. Eh bien, bonne chance dans votre aventure. Ça a l'air amusant.
Il y a également 50% de chances que la direction soit à 180% de la source 99% du temps. Je suis passé maître dans ces erreurs. Une correction serait cependant d'inverser simplement les instructions if pour quand 180 degrés devraient être ajoutés.