Tout d'abord, j'ai vu un fil similaire, mais il est un peu différent de ce que j'essaie de réaliser. Je construis un robot qui suivra la personne qui l'appelle. Mon idée est d'utiliser 3 ou 4 microphones - c'est-à-dire dans la disposition suivante afin de déterminer de quelle direction le robot a été appelé:
Où S est la source, A, B et C sont des microphones. L'idée est de calculer la corrélation de phase des signaux enregistrés à partir des paires AB, AC, BC et à partir de cette construction un vecteur qui pointera vers la source en utilisant une sorte de triangulation. Le système n'a même pas à fonctionner en temps réel car il sera activé par la voix - les signaux de tous les microphones seront enregistrés simultanément, la voix sera échantillonnée à partir d'un seul microphone et si elle correspond à la signature vocale, la corrélation de phase sera calculée à partir de la dernière fraction de seconde afin de calculer la direction. Je suis conscient que cela pourrait ne pas fonctionner trop bien, c'est-à-dire lorsque le robot est appelé d'une autre pièce ou lorsqu'il y a plusieurs réflexions.
Ce n'est qu'une idée que j'ai eue, mais je n'ai jamais rien tenté de tel et j'ai plusieurs questions avant de construire le matériel réel qui fera le travail:
- Est-ce une façon typique de procéder? (c'est-à-dire utilisé dans les téléphones pour la suppression du bruit?) Quelles sont les autres approches possibles?
- La corrélation de phase peut-elle être calculée entre 3 sources simultanément d'une manière ou d'une autre? (c'est-à-dire afin d'accélérer le calcul)
- La fréquence d'échantillonnage de 22 kHz et la profondeur de 12 bits sont-elles suffisantes pour ce système? Je suis particulièrement préoccupé par la profondeur de bits.
- Les microphones doivent-ils être placés dans des tubes séparés afin d'améliorer la séparation?
la source
Réponses:
Pour étendre la réponse de Müller,
La meilleure façon de procéder serait de les faire face directement, de cette façon, ils recevront tous un son similaire et la seule chose qui est unique à leur sujet est leur placement physique qui affectera directement la phase. Une onde sinusoïdale de 6 kHz a une longueur d'onde de
Éditer
J'ai senti que cette question n ° 2 avait l'air amusante, alors j'ai décidé d'essayer de la résoudre par moi-même.
Supposons donc qu'ils sont dans cette configuration:
Je vais...
Donc, les choses suivantes sont vraies:
Cela nous donne:
Donc, vous vous retrouvez avec l'équation suivante:
Mais la moitié du temps, les informations sont littéralement erronées à 100%, alors comment ... faut-il ... faire les choses correctement à 100%?
En d'autres termes, faites simplement quelque chose de simple comme ceci:
Et peut-être que vous ne voulez réagir que si la source sonore provient d'un angle vertical spécifique, si les gens parlent au-dessus des microphones => 0 changement de phase => ne faites rien. Les gens parlent horizontalement à côté => un changement de phase => réagissent.
Donc, vous voudrez peut-être définir ce seuil à quelque chose de bas, comme 0,1 ou 0,01. Je ne suis pas tout à fait sûr, cela dépend du volume et de la fréquence et des parasites, testez-le vous-même.
Une autre raison pour laquelle utiliser l'équation de la valeur absolue est pour les passages à zéro, il peut y avoir un léger moment où la direction pointera dans la mauvaise direction. Bien que ce ne soit que pour 1% du temps, même si cela. Donc, vous voudrez peut-être attacher un filtre LP de premier ordre à la direction.
Et si vous voulez réagir à un volume spécifique, additionnez simplement les 3 microphones ensemble et comparez cela à une valeur de déclenchement. La valeur moyenne des microphones serait leur somme divisée par 3, mais vous n'avez pas besoin de diviser par 3 si vous augmentez la valeur de déclenchement d'un facteur 3.
J'ai des problèmes avec le marquage du code comme C / C # / C ++ ou JS ou tout autre, donc malheureusement le code sera noir sur blanc, contre mes souhaits. Eh bien, bonne chance dans votre aventure. Ça a l'air amusant.
Il y a également 50% de chances que la direction soit à 180% de la source 99% du temps. Je suis passé maître dans ces erreurs. Une correction serait cependant d'inverser simplement les instructions if pour quand 180 degrés devraient être ajoutés.
la source
la source