¿Qué métodos se pueden usar para identificar y eliminar el eco de un sistema de audio?

14

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.

Kellenjb
fuente
1
La cancelación de eco acústico es una gran área temática con muchos libros y décadas de trabajos de investigación sobre el tema. Aquí hay un SO Q&A sobre el tema: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2
1
@ hotpaw2 No estoy seguro de por qué no se pudo hacer clic en su cancelación de eco acústico en el enlace de Java .
Mark Booth
sugiérame, estoy tratando de cancelar el eco que es la presencia en un discurso, la entrada a un solo micrófono en un auditorio. Lo estoy intentando como ha mencionado el filtro adaptativo, para eso está dando una señal de referencia como charla final. Pero no tengo aquí señal de referencia. mi señal es eco de la señal original que está recibiendo, digamos 500 ms con la señal del altavoz a un micrófono.

Respuestas:

15

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:

ingrese la descripción de la imagen aquí

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]wnd^[n]d^[n]d[n]e[n]wnw[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 ] .ne[n]wnwnd^[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.

ingrese la descripción de la imagen aquí

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

wn

xn=(x[n],x[n1],,x[nN+1])T

Nwnx

wn=(w[0],w[1],,x[N1])T

y[n]=xn=wn

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

μ0μ2

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.

ingrese la descripción de la imagen aquí

Hay mucha literatura sobre filtros adaptativos y cancelación de eco, así como algunas bibliotecas de código abierto que puede aprovechar.

Phonon
fuente
2
¿"el trabajo del filtro adaptativo es a la señal"? Usted accidentalmente una palabra.
endolito
@endolith Gracias. No podía pensar en una buena manera de arreglarlo, así que usé alter . Puedes editarlo con algo más interesante. =)
Phonon
3

No estoy seguro de cómo determinar cuál es el retraso sin algún tipo de precalibración

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.

También está la cuestión de cuánto escalar la señal antes de restarla.

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.

finnw
fuente
Las huellas digitales de Shazam no pueden producir una aproximación precisa del retraso. Utiliza muchos procesos complejos de extracción de características para comparar muestras de audio, no todas basadas en el tiempo.
Phonon
@Phonon, Shazam puede estar usando algoritmos adicionales ahora, pero el que está en el documento vinculado está basado en el tiempo y ofrece una buena estimación del retraso.
finnw
Tal vez algo como la correlación cruzada de los espectrogramas enviados y recibidos le dirá la demora. Debe ser resistente a los efectos de filtrado y ruido agregado
endolito