Antecedentes
Estoy diseñando un sistema que tendrá un solo micrófono pequeño y altavoces para usar en una configuración de tipo de teléfono. El ejemplo más fácil que puedo dar es una conversación de Skype en la que estás usando los altavoces de tu computadora y un micrófono de escritorio.
Me preocupa que el audio de los altavoces sea captado por el micrófono y enviado a la persona original. Solía escuchar que esto sucedía todo el tiempo en los primeros días de las conversaciones de VoIP, pero casi nunca lo escucho.
Supongo que los grupos han encontrado formas de cancelar el eco, pero ¿cómo lo hacen?
Enfoques
Mi primer pensamiento fue simplemente restar la señal que se envía a los altavoces de la señal del micrófono, excepto que con este método debes preocuparte por el retraso. No estoy seguro de cómo determinar cuál es el retraso sin algún tipo de precalibración, que me gustaría evitar. También está la cuestión de cuánto escalar la señal antes de restarla.
Luego pensé en hacer algún tipo de correlación entre la señal del altavoz y la señal del micrófono para determinar la probabilidad de que la señal del micrófono sea un eco, así como para poder determinar el retraso real. Este método pudo funcionar bien cuando estaba jugando con algunas señales grabadas, pero parecía haber una latencia demasiado grande en el cálculo de la correlación para que fuera útil en el sistema en tiempo real. Además, el volumen ajustable en los altavoces dificultaba determinar si algo estaba realmente correlacionado o no.
Mi siguiente pensamiento es que debe haber alguien en Internet que haya hecho esto antes con éxito, pero no encontró ningún gran ejemplo. Así que vengo aquí para ver qué métodos se pueden usar para resolver este tipo de problema.
Respuestas:
Estás en lo correcto. Existen muchos métodos de cancelación de eco, pero ninguno de ellos es exactamente trivial. El método más genérico y popular es la cancelación de eco a través de un filtro adaptativo. En una oración, el trabajo del filtro adaptativo es alterar la señal de que se está reproduciendo minimizando la cantidad de información proveniente de la entrada.
Filtros adaptativos
Un filtro adaptativo (digital) es un filtro que cambia sus coeficientes y finalmente converge a una configuración óptima. El mecanismo para esta adaptación funciona comparando la salida del filtro con alguna salida deseada. A continuación se muestra un diagrama de un filtro adaptativo genérico:
Como se puede ver en el diagrama, la señal es filtrada por (convolucionada con) → w n para producir una señal de salida d [ n ] . Nosotros luego restar d [ n ] a partir de la deseada señal de d [ n ] para producir el error de señal e [ n ] . Tenga en cuenta que → w n es un vector de coeficientes, no un número (por lo tanto, no escribimos w [ n ]x[n] w⃗ n d^[n] d^[n] d[n] e[n] w⃗ n w[n] ) Debido a que cambia cada iteración (cada muestra), subíndice la colección actual de estos coeficientes con . Una vez que se obtiene e [ n ], lo usamos para actualizar → w n mediante un algoritmo de actualización de elección (más sobre eso más adelante). Si la entrada y salida satisfacen una relación lineal que no cambia con el tiempo y da un algoritmo de actualización bien diseñado, → w n finalmente convergerán al filtro y óptima d [ n ] será siguiendo de cerca d [ n ] .n e[n] w⃗ n w⃗ n d^[n] d[n]
Cancelación del eco
El problema de la cancelación de eco se puede presentar en términos de un problema de filtro adaptativo en el que estamos tratando de producir una salida ideal conocida dada una entrada al encontrar el filtro óptimo que satisfaga la relación entrada-salida. En particular, cuando agarra su auricular y dice "hola", se recibe en el otro extremo de la red, alterado por la respuesta acústica de una habitación (si se reproduce en voz alta), y se retroalimenta en la red para volver para ti como un eco. Sin embargo, debido a que el sistema sabe cómo sonó el "hola" inicial y ahora sabe cómo suena el "hola" reverberado y retrasado, podemos intentar adivinar cuál es la respuesta de la sala utilizando un filtro adaptativo. Entonces podemos usar esa estimación, Convolucionar todas las señales entrantes con esa respuesta de impulso (que nos daría la estimación de la señal de eco) y restarla de lo que entra en el micrófono de la persona que llamó. El siguiente diagrama muestra un cancelador de eco adaptativo.
Aplicaciones y desafíos de la vida real.
Varias cosas pueden presentar dificultades con este método de cancelación de eco. En primer lugar, como se mencionó anteriormente, no siempre es cierto que la otra persona esté en silencio mientras recibe su señal de "hola". Se puede demostrar (pero está más allá del alcance de esta respuesta) que en algunos casos aún puede ser útil estimar la respuesta al impulso mientras hay una cantidad significativa de entrada presente en el otro extremo de la línea porque la señal de entrada y el eco son se supone que es estadísticamente independiente; por lo tanto, minimizar el error seguirá siendo un procedimiento válido. En general, se necesita un sistema más sofisticado para detectar buenos intervalos de tiempo para la estimación del eco.
Por otro lado, piense en lo que sucede cuando intenta estimar el eco cuando la señal recibida es aproximadamente silenciosa (ruido, en realidad). En ausencia de una señal de entrada significativa, el algoritmo adaptativo divergerá y comenzará rápidamente a producir resultados sin sentido, que culminará eventualmente en un patrón de eco aleatorio. Esto significa que también debemos tener en cuenta la detección de voz . Los canceladores de eco modernos se parecen más a la figura a continuación, pero la descripción anterior es la esencia.
Hay mucha literatura sobre filtros adaptativos y cancelación de eco, así como algunas bibliotecas de código abierto que puede aprovechar.
fuente
Comenzaría modificando un algoritmo acústico de huellas dactilares como el utilizado por Shazam .
Sus requisitos son similares a los de Shazam en muchos aspectos (las funciones deben sobrevivir a un algoritmo de compresión diseñado para telefonía, también pasan a través de micrófonos de baja calidad), por lo que probablemente podría usar las mismas funciones (máximos locales de potencia en el espacio de tiempo / frecuencia) es posible que desee aumentar la resolución de tiempo a expensas de la resolución de frecuencia.
La escala uniforme seguramente no será lo suficientemente precisa. Debería hacer algo como aproximar la respuesta de frecuencia con un filtro FIR y luego pasar su señal de micrófono (retardada) a través del filtro invertido antes de restarla de la señal recibida.
fuente