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?

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.


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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.