Detectando a direção do som usando vários microfones

9

Primeiro de tudo, eu vi uma discussão semelhante, no entanto, é um pouco diferente do que estou tentando alcançar. Estou construindo um robô que seguirá a pessoa que o chama. Minha idéia é usar 3 ou 4 microfones - ou seja, no seguinte arranjo para determinar de que direção o robô foi chamado:

insira a descrição da imagem aqui

Onde S é a fonte, A, B e C são microfones. A idéia é calcular a correlação de fase dos sinais gravados dos pares AB, AC, BC e com base nessa construção de um vetor que apontará para a fonte usando um tipo de triangulação. O sistema nem precisa trabalhar em tempo real porque será ativado por voz - os sinais de todos os microfones serão gravados simultaneamente, a voz será amostrada em apenas um microfone e, se for adequada à assinatura de voz, a correlação de fase será calculada a partir de a última fração de segundo para calcular a direção. Estou ciente de que isso pode não funcionar muito bem, ou seja, quando o robô é chamado de outra sala ou quando há várias reflexões.

Essa é apenas uma idéia que tive, mas nunca tentei algo assim e tenho várias perguntas antes de construir o hardware real que fará o trabalho:

  1. Essa é uma maneira típica de fazer isso? (ou seja, usado em telefones para cancelamento de ruído?) Quais são outras abordagens possíveis?
  2. A correlação de fase pode ser calculada entre três fontes simultaneamente de alguma forma? (ou seja, para acelerar o cálculo)
  3. A taxa de amostragem de 22khz e a profundidade de 12 bits são suficientes para este sistema? Estou especialmente preocupado com a profundidade dos bits.
  4. Os microfones devem ser colocados em tubos separados para melhorar a separação?
Max Walczak
fonte
11
Aqui está um artigo interessante , talvez você já tenha visto. Parece que o autor acabou colocando um quarto microfone acima dos outros 3 para lidar com a fonte de som acima do array. Fora isso, parece bastante semelhante ao seu plano (para os meus olhos destreinados, pelo menos).
Convidado
O termo geral para a parte de correlação de fase é Beamforming. Um sistema comum de formação de feixe usa uma matriz linear de microfones, e não tenho certeza de que o campo de "visão" dos seus microfones realmente permita muita triangulação.
Pscheidler
Em relação à triangulação, acho que você pode configurar duas ou três das matrizes a alguma distância e encontrar a interseção das vigas. Poderia resolver um caso degenerado de 2 feixes com "ei robô ..." (o robô vira para você) ... "venha aqui!"
Convidado
Na verdade, isso poderia funcionar adicionando mais um microfone. Veja isso , é uma variação da solução de Harry. O triângulo equilátero se torna um triângulo retângulo e mais um microfone é adicionado para formar outro triângulo. De cada triângulo, projetamos uma viga e medimos a média dessas duas vigas para obter um vetor de direção preciso. Observe os dois "olhos" na demo. Eles são colocados de modo que os feixes que os atravessam triangulem a posição quando a fonte estiver diretamente na frente ou atrás do robô. Experimente com a fonte em qualquer y = 0.
Convidado
11
@FilipePinto você leu as respostas e a descrição do problema completamente? Realmente não pode funcionar assim, pois você não sabe como cada pico de energia de cada microfone está correlacionado com outros microfones - é por isso que você precisa de correlação de fase, ponto mais próximo iterativo ou algum outro algoritmo de registro (o registro não se refere à gravação aqui, mas a correspondência de um sinal contra o outro) para combinar as formas de onda gravadas e detectar sua mudança mútua dentro de algum janela de tempo
Max Walczak

Respostas:

7

Para estender a resposta de Müller,

  1. Os microfones devem ser colocados em tubos separados para melhorar a separação?


  1. velocidade do somfrequência de som=343 em6 kHz=5,71 milímetros

Editar

Eu senti que essa pergunta # 2 parecia divertida, então decidi tentar resolvê-la sozinha.

  1. A correlação de fase pode ser calculada entre três fontes simultaneamente de alguma forma? (ou seja, para acelerar o cálculo)

Se você conhece sua álgebra linear, pode imaginar que colocou os microfones em um triângulo em que cada microfone está a 4 mm de distância um do outro, fazendo os ângulos internos de .60°

Então, vamos supor que eles estejam nessa configuração:

       C
      / \
     /   \
    /     \
   /       \
  /         \
 A - - - - - B

Eu vou...

  • use a nomenclatura que é um vetor apontando de paraUMAB¯UMAB
  • chamar minha origemUMA
  • escreva todos os números em mm
  • use matemática 3D, mas termine com uma direção 2D
  • defina a posição vertical dos microfones para sua forma de onda real. Portanto, essas equações são baseadas em uma onda sonora que se parece com isso .
  • Calcule o produto cruzado desses microfones com base em sua posição e forma de onda, depois ignore as informações de altura desse produto cruzado e use o arctan para obter a direção real da fonte.
  • chamar a saída do microfone na posição , chamada a saída do microfone na posição , chamada a saída do microfone na posiçãoumaUMAbBcC

Portanto, as seguintes coisas são verdadeiras:

  • UMA=(0 0,0 0,uma)
  • B=(4,0 0,b)
  • C=(2,42-22=23,c)

Isso nos dá:

  • UMAB¯=(4,0 0,uma-b)
  • UMAC¯=(2,23,uma-c)

E o produto cruzado é simplesmenteUMAB¯×UMAC¯

UMAB¯×UMAC¯=(40 0uma-b)×(223uma-c)=(0 0(uma-c)-(uma-b)23(uma-b)2-4(uma-c)423-0 02)=(23(b-uma)-2uma-2b-4c83)

A informação Z, é apenas lixo, zero interesse para nós. À medida que os sinais de entrada estão mudando, o vetor cruzado balança para frente e para trás em direção à fonte. Então, na metade do tempo, ele apontará diretamente para a fonte (ignorando reflexões e outros parasitas). E na outra metade do tempo, ele apontará 180 graus para longe da fonte.83

Estou falando do que pode ser simplificado para e depois transforme os radianos em graus.arctan(-2uma-2b-4c23(b-uma))arctan(uma+b+2c3(uma-b))

Então, o que você acaba fazendo é a seguinte equação:

arctan(uma+b+2c3(uma-b))180π


Mas na metade do tempo as informações estão literalmente 100% erradas, então como ... alguém deve fazê-las corretamente 100% das vezes?

Bem, se está levando , então a fonte não pode estar mais perto de B.umab

Em outras palavras, basta fazer algo simples como este:

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;
  }
}

E talvez você só queira reagir se a fonte de som vier de um ângulo vertical específico, se as pessoas falarem acima dos microfones => 0 mudança de fase => não fazer nada. As pessoas falam horizontalmente ao lado dele => alguma mudança de fase => reage.

|P|=Px2+Py2=3(uma-b)2+(uma+b+2c)2

Portanto, convém definir esse limite como algo baixo, como 0,1 ou 0,01. Não tenho certeza, depende do volume, da frequência e dos parasitas, teste você mesmo.

Outro motivo para quando usar a equação do valor absoluto é para cruzamentos com zero, pode haver um pequeno momento para quando a direção apontará na direção errada. Embora seja apenas por 1% do tempo, se é que é isso. Então, você pode anexar um filtro LP de primeira ordem na direção.

true_true_direction = true_true_direction*0.9+source_direction*0.1;

E se você quiser reagir a um volume específico, basta somar os três microfones e comparar isso com algum valor de disparo. O valor médio dos microfones seria a soma dividida por 3, mas você não precisará dividir por 3 se aumentar o valor do gatilho por um fator 3.


Estou tendo problemas para marcar o código como C / C # / C ++ ou JS ou qualquer outro, então, infelizmente, o código ficará preto no branco, contra a minha vontade. Bem, boa sorte no seu empreendimento. Parece divertido.

Além disso, há uma chance de 50/50 de que a direção esteja 180 distante da fonte em 99% do tempo. Eu sou um mestre em cometer tais erros. Uma correção para isso seria apenas inverter as instruções if para quando 180 graus devem ser adicionados.

Harry Svensson
fonte
Gostaria de saber se a coisa da fase é realmente necessária ou se cada microfone pode apenas procurar algum recurso identificável. Se todos os microfones ouvem "ei robô", eles não podem alinhar o início desse som "bah" e ignorar a fase? Então você não precisa colocar os microfones tão próximos ... #
Convidado
11
@HarrySvensson, entendo o que você quer dizer. Eu estava pensando que você poderia usar algo como a sua abordagem, exceto , e seria um número de milissegundos desde o primeiro microfone ouviu o som. Eu brinquei com ele aqui , mas não está alinhado perfeitamente quando a fonte, um microfone e o centro do robô não estão todos em uma linha. Eu acho que pode estar "ok", verifique. O erro não é tão ruim quando a fonte está longe dos microfones. Tenho certeza de que poderia ser corrigido, mas a matemática me escapa. umabc
Convidado
11
Não tenho certeza de que eu já vi código destacado trabalhando aqui no SE.DSP. Deixe-me verificar no Lounge dos professores e ver o que eles dizem. Parece que alguém perguntou ao Meta há algum tempo, mas nenhuma ação foi tomada: dsp.meta.stackexchange.com/questions/133/…
Peter K.
11
Por favor, vá e vote esse post no Meta.DSP. Adicionei a tag <kbd> feature-request </kbd>, que deve ter pelo menos algum envolvimento, mas precisamos dos votos. Se o site Chemistry.SE estiver ativado, devemos definitivamente! :-) dsp.meta.stackexchange.com/questions/133/...
Peter K.
11
@ endolith Você está correto, agora removi essa parte. Obrigado.
Harry Svensson
4
  1. Sim, isso parece razoável e típico.
  2. Você também pode usar os três sinais de microfone de uma só vez (não passando o "desvio" pelas correlações de três pares). Procure por "MUSIC" e "ESPRIT" nos aplicativos de direção de chegada.
  3. Muito provavelmente é. Você não está buscando alta qualidade de áudio, está procurando boas propriedades de correlação de cors e alguns bits aqui e ali provavelmente não criarão nem quebrarão o sistema. Uma taxa de amostragem mais alta, como os 44.1 kHz ou 48 kHz, por outro lado, duplicaria instantaneamente a precisão angular, muito provavelmente, no mesmo comprimento de observação.
Marcus Müller
fonte