Detección de la dirección del sonido con varios micrófonos.

9

En primer lugar, he visto un hilo similar, sin embargo, es un poco diferente a lo que estoy tratando de lograr. Estoy construyendo un robot que seguirá a la persona que lo llama. Mi idea es usar 3 o 4 micrófonos, es decir, en la siguiente disposición para determinar desde qué dirección se llamó al robot:

ingrese la descripción de la imagen aquí

Donde S es fuente, A, B y C son micrófonos. La idea es calcular la correlación de fase de las señales registradas a partir de los pares AB, AC, BC y, en base a eso, construir un vector que apunte a la fuente utilizando una especie de triangulación. El sistema ni siquiera tiene que funcionar en tiempo real porque se activará por voz: las señales de todos los micrófonos se grabarán simultáneamente, la voz se muestreará desde un solo micrófono y si se ajusta a la firma de voz, la correlación de fase se calculará a partir de la última fracción de segundo para calcular la dirección. Soy consciente de que esto podría no funcionar demasiado bien, es decir, cuando se llama al robot desde otra habitación o cuando hay múltiples reflexiones.

Esta es solo una idea que tuve, pero nunca he intentado algo así y tengo varias preguntas antes de construir el hardware real que hará el trabajo:

  1. ¿Es esta una forma típica de hacer esto? (es decir, utilizado en teléfonos para cancelación de ruido?) ¿Cuáles son otros enfoques posibles?
  2. ¿Se puede calcular la correlación de fase entre 3 fuentes simultáneamente de alguna manera? (es decir, para acelerar el cálculo)
  3. ¿La frecuencia de muestreo de 22 kHz y la profundidad de 12 bits son suficientes para este sistema? Estoy especialmente preocupado por la profundidad de bits.
  4. ¿Deben colocarse los micrófonos en tubos separados para mejorar la separación?
Max Walczak
fuente
1
Aquí hay un artículo interesante , tal vez lo hayas visto. Parece que el autor terminó colocando un cuarto micrófono por encima de los otros 3 para tratar con la fuente de sonido que está por encima de la matriz. Aparte de eso, se parece bastante a su plan (para mi ojo inexperto, al menos).
Invitado
El término general para la parte de correlación de fase es Beamforming. Un sistema de formación de haces común utiliza una matriz lineal de micrófonos, y no estoy seguro de que el campo de "visión" para sus micrófonos realmente permita mucha triangulación.
pscheidler
Con respecto a la triangulación, supongo que podría configurar dos o tres de las matrices a cierta distancia y encontrar la intersección de las vigas. Podría resolver el caso degenerado de 2 haces con "hey robot ..." (el robot se vuelve hacia ti) ... "¡ven aquí!"
Invitado
En realidad, eso podría funcionar agregando un micrófono más. Mira esto , es una variación de la solución de Harry. El triángulo equilátero se convierte en un triángulo rectángulo, y se agrega un micrófono más para formar otro triángulo. Desde cada triángulo proyectamos una viga y tomamos el promedio de esas dos vigas para obtener un vector de dirección preciso. Observe los dos "ojos" en la demostración. Se colocan de modo que los haces que los atraviesan triangulen la posición cuando la fuente está directamente delante o detrás del robot. Pruébelo con la fuente en cualquier y = 0.
Invitado
1
@FilipePinto, ¿ha leído las respuestas y la descripción del problema a fondo? Realmente no puede funcionar así, ya que no se puede saber cómo cada pico de energía de cada micrófono se correlaciona con otros micrófonos; es por eso que necesita correlación de fase, punto más cercano iterativo o algún otro algoritmo de registro (el registro no se refiere a la grabación aquí, pero para hacer coincidir una señal con otra) para hacer coincidir las formas de onda registradas y detectar su cambio mutuo dentro de una ventana de tiempo
Max Walczak

Respuestas:

7

Para extender la respuesta de Müller,

  1. ¿Deben colocarse los micrófonos en tubos separados para mejorar la separación?


  1. 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.

  1. ¿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,4222=23,c)

Esto nos da:

  • AB¯=(4,0,ab)
  • AC¯=(2,23,ac)

Y el producto cruzado es simplementeAB¯×AC¯

AB¯×AC¯=(40ab)×(223ac)=(0(ac)(ab)23(ab)24(ac)42302)=(23(ba)2a2b4c83)

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(2a2b4c23(ba))arctan(a+b+2c3(ab))

Entonces, lo que termina es la siguiente ecuación:

arctan(a+b+2c3(ab))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|=Px2+Py2=3(ab)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.

Harry Svensson
fuente
Me pregunto si la fase es realmente necesaria, o si cada micrófono puede buscar alguna característica identificable. Si todos los micrófonos escuchan "hey robot", ¿no podrían alinear el inicio de ese sonido "bah" e ignorar la fase? Entonces no deberías tener que colocar los micrófonos tan juntos ...
Invitado
1
@ HarrySvensson, entiendo lo que quieres decir. Estaba pensando que podría utilizar algo así como su enfoque, excepto , y sería un número de milisegundos desde el primer micrófono oyó el sonido. Jugué con él aquí , pero no se alinea perfectamente cuando la fuente, un micrófono y el centro del robot no están todos en línea. Sin embargo, creo que podría estar "bien", échale un vistazo. El error no es tan malo cuando la fuente está lejos de los micrófonos. Estoy seguro de que podría corregirse, pero las matemáticas se me escapan. b cabc
Invitado
1
No estoy seguro de haber visto código resaltado trabajando aquí en SE.DSP. Déjame consultar con la Sala de profesores y ver qué dicen. Parece que alguien preguntó por Meta hace algún tiempo, pero no se tomó ninguna acción: dsp.meta.stackexchange.com/questions/133/…
Peter K.
1
Ve y vota esa publicación en Meta.DSP. He agregado la etiqueta <kbd> feature-request </kbd> que al menos debería ver algo de compromiso, pero necesitamos los votos. Si el sitio Chemistry.SE lo tiene habilitado, definitivamente deberíamos hacerlo. :-) dsp.meta.stackexchange.com/questions/133/…
Peter K.
1
@endolith Tienes razón, ahora he eliminado esa parte. Gracias.
Harry Svensson
4
  1. Sí, esto se siente razonable y típico.
  2. También puede usar las tres señales de micrófono a la vez (sin pasar por el "desvío" a través de sus correlaciones de tres pares). Busque "MÚSICA" y "ESPRIT" en las aplicaciones de dirección de llegada.
  3. Muy probablemente lo sea. No está apuntando a una alta calidad de audio, apunta a buenas propiedades de correlación de corss, y algunos bits aquí y allá probablemente no harán ni dañarán el sistema. Por otro lado, una frecuencia de muestreo más alta, como la muy común 44,1 kHz o 48 kHz, duplicaría instantáneamente la precisión angular, muy probablemente, en la misma longitud de observación.
Marcus Müller
fuente