Para estender a resposta de Müller,
- Os microfones devem ser colocados em tubos separados para melhorar a separação?
velocidade do somfrequência de som= 343 m / s6 kHz= 5,71 mm
Editar
Eu senti que essa pergunta # 2 parecia divertida, então decidi tentar resolvê-la sozinha.
- 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 paraA B¯¯¯¯¯¯¯¯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:
- A = ( 0 , 0 , a )
- B = ( 4 , 0 , b )
- C= ( 2 , 42- 22------√= 2 3-√, C )
Isso nos dá:
- A B¯¯¯¯¯¯¯¯= ( 4 , 0 , a - b )
- A C¯¯¯¯¯¯¯¯= ( 2 , 2 3-√, a - c )
E o produto cruzado é simplesmenteA B¯¯¯¯¯¯¯¯× A C¯¯¯¯¯¯¯¯
A B¯¯¯¯¯¯¯¯× A C¯¯¯¯¯¯¯¯= ⎛⎝⎜40 0a - b⎞⎠⎟× ⎛⎝⎜22 3-√a - c⎞⎠⎟= ⎛⎝⎜0 ⋅ ( a - c ) - ( a - b ) ⋅ 2 3-√( Um - b ) ⋅ 2 - 4 ⋅ ( um - c )4 ⋅ 2 3-√- 0 ⋅ 2⎞⎠⎟= ⎛⎝⎜2 3-√( b - a )- 2 a - 2 b - 4 c8 3-√⎞⎠⎟
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.8 3-√
Estou falando do que pode ser simplificado para e depois transforme os radianos em graus.arctan( - 2 a - 2 b - 4 c2 3√( b - a ))arctan( a + b + 2 c3√(a - b ))
Então, o que você acaba fazendo é a seguinte equação:
arctan( a + b + 2 c3-√( a - 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|= P2x+ P2y-------√= 3 ( a - b )2+ ( a + b + 2 c )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.