Para extender la respuesta de Müller,
- ¿Deben colocarse los micrófonos en tubos separados para mejorar la separación?
speed of soundsound frequency=343 m/s6 kHz=5.71 mm
Editar
Sentí que esta pregunta # 2 parecía divertida, así que decidí intentar resolverla por mi cuenta.
- ¿Se puede calcular la correlación de fase entre 3 fuentes simultáneamente de alguna manera? (es decir, para acelerar el cálculo)
Si conoce su álgebra lineal, entonces puede imaginar que ha colocado los micrófonos en un triángulo donde cada micrófono está a 4 mm de distancia, lo que hace que cada ángulo interior sea de .60°
Entonces supongamos que están en esta configuración:
C
/ \
/ \
/ \
/ \
/ \
A - - - - - B
Voy a...
- use la nomenclatura que es un vector que apunta de aAB¯¯¯¯¯¯¯¯AB
- llama mi origenA
- escribe todos los números en mm
- usa matemáticas 3D pero termina con una dirección 2D
- Ajuste la posición vertical de los micrófonos a su forma de onda real. Entonces estas ecuaciones se basan en una onda de sonido que se parece a esto .
- Calcule el producto cruzado de estos micrófonos en función de su posición y forma de onda, luego ignore la información de altura de este producto cruzado y use arctan para obtener la dirección real de la fuente.
- llame la salida del micrófono en la posición , llame a la salida del micrófono en la posición , llame a la salida del micrófono en la posiciónaAbBcC
Entonces, las siguientes cosas son ciertas:
- A=(0,0,a)
- B=(4,0,b)
- C=(2,42−22−−−−−−√=23–√,c)
Esto nos da:
- AB¯¯¯¯¯¯¯¯=(4,0,a−b)
- AC¯¯¯¯¯¯¯¯=(2,23–√,a−c)
Y el producto cruzado es simplementeAB¯¯¯¯¯¯¯¯×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–√⎞⎠⎟
La información Z, es simplemente basura, cero interés para nosotros. A medida que cambian las señales de entrada, el vector cruzado oscilará hacia adelante y hacia atrás hacia la fuente. Entonces, la mitad del tiempo apuntará directamente a la fuente (ignorando los reflejos y otros parásitos). Y la otra mitad del tiempo apuntará a 180 grados de la fuente.83–√
De lo que estoy hablando es de que se puede simplificar a , y luego convierte los radianes en grados.arctan(−2a−2b−4c23√(b−a))arctan(a+b+2c3√(a−b))
Entonces, lo que termina es la siguiente ecuación:
arctan(a+b+2c3–√(a−b))180π
Pero la mitad del tiempo la información está literalmente 100% equivocada, entonces, ¿cómo ... debería uno ... corregir el 100% del tiempo?
Bueno, si es líder , entonces la fuente no puede estar más cerca de B.ab
En otras palabras, simplemente haga algo simple como esto:
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;
}
}
Y tal vez solo quiera reaccionar si la fuente de sonido proviene de un ángulo vertical específico, si la gente habla por encima de los micrófonos => 0 cambio de fase => no hace nada. La gente habla horizontalmente al lado => algún cambio de fase => reacciona.
|P|=P2x+P2y−−−−−−−√=3(a−b)2+(a+b+2c)2−−−−−−−−−−−−−−−−−−−√
Por lo tanto, es posible que desee establecer ese umbral en algo bajo, como 0.1 o 0.01. No estoy completamente seguro, depende del volumen y la frecuencia y los parásitos, pruébelo usted mismo.
Otra razón de cuándo usar la ecuación de valor absoluto es para cruces por cero, puede haber un pequeño momento para cuando la dirección apunte en la dirección incorrecta. Aunque solo será el 1% del tiempo, incluso si eso es así. Por lo tanto, es posible que desee adjuntar un filtro LP de primer orden a la dirección.
true_true_direction = true_true_direction*0.9+source_direction*0.1;
Y si desea reaccionar a un volumen específico, simplemente sume los 3 micrófonos y compárelo con algún valor de activación. El valor medio de los micrófonos sería su suma dividida por 3, pero no necesita dividir por 3 si aumenta el valor de activación por un factor 3.
Tengo problemas para marcar el código como C / C # / C ++ o JS o cualquier otro, por lo que lamentablemente el código será negro sobre blanco, en contra de mis deseos. Bueno, buena suerte en tu aventura. Suena divertido.
También hay una probabilidad de 50/50 de que la dirección esté a 180 grados de la fuente el 99% del tiempo. Soy un maestro en cometer tales errores. Sin embargo, una corrección para esto sería simplemente invertir las declaraciones if para cuando se deben agregar 180 grados.