Contexte
Je conçois un système qui aura un seul petit microphone et des haut-parleurs pour une utilisation dans un cadre de type téléphone. L'exemple le plus simple que je puisse donner est une conversation Skype où vous utilisez les haut-parleurs de votre ordinateur et un microphone de bureau.
Je crains que le son des haut-parleurs ne soit capté par le microphone et renvoyé à la personne d'origine. J'avais l'habitude d'entendre cela se produire tout le temps dans les premiers jours des conversations VoIP, mais je ne l'entends presque plus.
Mon hypothèse est que les groupes ont trouvé des moyens d'annuler l'écho, mais comment le font-ils?
Approches
Ma première pensée a été de simplement soustraire le signal envoyé aux haut-parleurs du signal du microphone, sauf qu'avec cette méthode, vous devez vous préoccuper du retard. Je ne sais pas comment déterminer le retard sans une sorte de pré-étalonnage, que j'aimerais éviter. Il y a aussi la question de savoir dans quelle mesure mettre le signal à l'échelle avant de le soustraire.
J'ai ensuite pensé à faire une sorte de corrélation entre le signal du haut-parleur et le signal du micro afin de déterminer la probabilité que le signal du micro soit un écho et de pouvoir déterminer le retard réel. Cette méthode a pu fonctionner correctement lorsque je jouais avec des signaux enregistrés, mais il semblait y avoir une latence trop grande dans le calcul de la corrélation pour être utile dans un système en temps réel. De plus, le volume réglable des haut-parleurs rendait difficile de déterminer si quelque chose était réellement corrélé ou non.
Ma prochaine pensée est qu'il doit y avoir quelqu'un sur Internet qui l'a déjà fait avec succès, mais n'a pas trouvé de bons exemples. Je viens donc ici pour voir quelles méthodes peuvent être utilisées pour résoudre ce type de problème.
Réponses:
Vous avez raison. Il existe de nombreuses méthodes d'annulation d'écho, mais aucune d'entre elles n'est exactement triviale. La méthode la plus générique et la plus populaire est l'annulation d'écho via un filtre adaptatif. En une phrase, le travail du filtre adaptatif consiste à modifier le signal en cours de lecture en minimisant la quantité d'informations provenant de l'entrée.
Filtres adaptatifs
Un filtre adaptatif (numérique) est un filtre qui change ses coefficients et converge finalement vers une configuration optimale. Le mécanisme de cette adaptation fonctionne en comparant la sortie du filtre à une sortie souhaitée. Voici un schéma d'un filtre adaptatif générique:
Comme vous pouvez le voir sur le diagramme, le signal est filtré par (convoluée avec) → w n pour produire le signal de sortie d [ n ] . Nous avons ensuite soustraction d [ n ] du désiré le signal d [ n ] pour produire l' erreur le signal e [ n ] . Notez que → w n est un vecteur de coefficients, pas un nombre (donc nous n'écrivons pas w [ n ]x[n] w⃗ n d^[n] d^[n] d[n] e[n] w⃗ n w[n] ). Parce qu'il change à chaque itération (chaque échantillon), nous indexons la collection actuelle de ces coefficients avec . Une fois e [ n ] obtenu, nous l'utilisons pour mettre à jour → w n par un algorithme de mise à jour de choix (plus de détails plus loin). Si l' entrée et la sortie satisfont à une relation linéaire qui ne change pas au fil du temps et donné un algorithme de mise à jour bien conçu, → w n finira par converger vers le filtre optimal et d [ n ] sera suivi de près d [ n ] .n e[n] w⃗ n w⃗ n d^[n] d[n]
Annulation d'écho
Le problème de l'annulation d'écho peut être présenté en termes de problème de filtre adaptatif où nous essayons de produire une sortie idéale connue à partir d'une entrée en trouvant le filtre optimal satisfaisant la relation entrée-sortie. En particulier, lorsque vous saisissez votre casque et dites «bonjour», il est reçu à l'autre bout du réseau, modifié par la réponse acoustique d'une pièce (s'il est lu à haute voix), et réinjecté dans le réseau pour revenir en arrière. à vous comme un écho. Cependant, parce que le système sait à quoi ressemblait le "bonjour" initial et qu'il sait maintenant à quoi ressemble le "bonjour" réverbéré et retardé, nous pouvons essayer de deviner à quoi ressemble la réponse de cette pièce en utilisant un filtre adaptatif. Ensuite, nous pouvons utiliser cette estimation, convoluez tous les signaux entrants avec cette réponse impulsionnelle (qui nous donnerait l'estimation du signal d'écho) et soustrayez-le de ce qui entre dans le microphone de la personne que vous avez appelée. Le diagramme ci-dessous montre un annuleur d'écho adaptatif.
Applications et défis réels
Plusieurs choses peuvent présenter des difficultés avec cette méthode d'annulation d'écho. Tout d'abord, comme mentionné précédemment, il n'est pas toujours vrai que l'autre personne se taise pendant qu'elle reçoit votre signal «bonjour». Il peut être montré (mais dépasse le cadre de cette réponse) que dans certains cas, il peut être utile d'estimer la réponse impulsionnelle alors qu'une quantité importante d'entrée est présente à l'autre extrémité de la ligne car le signal d'entrée et l'écho sont supposé être statistiquement indépendant; par conséquent, minimiser l'erreur sera toujours une procédure valide. En général, un système plus sophistiqué est nécessaire pour détecter de bons intervalles de temps pour l'estimation de l'écho.
D'un autre côté, pensez à ce qui se passe lorsque vous essayez d'estimer l'écho lorsque le signal reçu est approximativement silencieux (bruit, en fait). En l'absence d'un signal d'entrée significatif, l'algorithme adaptatif divergera et commencera rapidement à produire des résultats sans signification, aboutissant éventuellement à un écho aléatoire. Cela signifie que nous devons également prendre en considération la détection de la parole . Les annuleurs d'écho modernes ressemblent plus à la figure ci-dessous, mais la description ci-dessus en est l'essentiel.
Il existe de nombreuses publications sur les filtres adaptatifs et l'annulation d'écho, ainsi que sur certaines bibliothèques open source dans lesquelles vous pouvez puiser.
la source
Je commencerais par modifier un algorithme d'empreinte digitale acoustique tel que celui utilisé par Shazam .
Vos exigences sont similaires à celles de Shazam à bien des égards (les fonctionnalités doivent survivre à un algorithme de compression conçu pour la téléphonie, elles passent également par des microphones de faible qualité), vous pouvez donc probablement utiliser les mêmes fonctionnalités (maxima locaux de puissance dans l'espace temps / fréquence). vous souhaiterez peut-être augmenter la résolution temporelle au détriment de la résolution en fréquence.
Une mise à l'échelle uniforme ne sera certainement pas assez précise. Vous devriez faire quelque chose comme approximer la réponse en fréquence avec un filtre FIR puis passer votre signal micro (retardé) à travers le filtre inversé avant de le soustraire du signal reçu.
la source