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:
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:
- 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?
- A correlação de fase pode ser calculada entre três fontes simultaneamente de alguma forma? (ou seja, para acelerar o cálculo)
- 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.
- Os microfones devem ser colocados em tubos separados para melhorar a separação?
fonte
Respostas:
Para estender a resposta de Müller,
Editar
Eu senti que essa pergunta # 2 parecia divertida, então decidi tentar resolvê-la sozinha.
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:
Eu vou...
Portanto, as seguintes coisas são verdadeiras:
Isso nos dá:
E o produto cruzado é simplesmenteA B¯¯¯¯¯¯¯¯× A C¯¯¯¯¯¯¯¯
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:
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.uma b
Em outras palavras, basta fazer algo simples como este:
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.
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.
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.
fonte
fonte