"Restar" una transmisión de audio de otra transmisión de audio


8

Soy un ingeniero de software desde hace mucho tiempo pero tengo prácticamente cero experiencia con el procesamiento de señal / audio. Estoy interesado en aprender sobre el procesamiento de señales a través de un caso de uso que tenemos para uno de nuestros componentes de audio. NOTA: este es solo un ejercicio de aprendizaje para mí ... no es una prioridad que el resultado final sea útil.

Tenemos un componente (A) que produce audio (a través de un altavoz). Tenemos otro componente (B) que graba ese audio (a través de un micrófono simple).

Lo que me gustaría hacer es usar A para grabar el audio de B. Entonces me gustaría, si es posible, comparar las dos corrientes. El objetivo sería eliminar el audio que estaba presente en la transmisión A, dejando las condiciones ambientales que existieron durante la grabación, entiendo que no es posible eliminarlo por completo.

Me doy cuenta de que hay problemas de fase y magnitud. También me doy cuenta de que no se trata simplemente de "restar" B de A. Dicho esto, supongo que puedes restar A de A.

Me gustaría entender cómo abordar el problema. Nuevamente, esta es una experiencia de aprendizaje para mí (no hay plazos); Estoy más que dispuesto a comenzar desde el principio.

Cualquier consejo / sugerencia sería muy apreciada.

Respuestas:


5

Esta configuración comparte algunas similitudes con los problemas de identificación del sistema, donde UNA sería la entrada del sistema LTI del que desea estimar la función de transferencia, sisiendo la salida; y el "sonido ambiental" es el ruido aditivo. La suposición de LTI es razonable siempre que sus convertidores / amplificadores / transductores sean de buena calidad.

Entonces los pasos serían:

  • Use una técnica de identificación del sistema para encontrar el filtro FIR h^ que minimiza el error cuadrático medio entre h^UNA y si. Un método simple, que podría no ser el más adecuado aquí, es dividir la correlación cruzada deUNA y si por la autocorrelación de UNA. Explicación aquí . La limitación es que no funcionará bien para grabaciones largas (puede calcular mejor sus estimaciones en segmentos más cortos y promediarlas), y que la música no es la mejor señal de "sonda" para enviar a un sistema para estimar su respuesta.
  • Ahora puedes usar h^UNA como una estimación de la señal original A "escuchada" por el micrófono y restarla de si para recuperar el sonido ambiental.

Le di una oportunidad a esto usando un clip de música (A), aplicando una reverberación y un ligero modelo de amplificador para simular un altavoz en una habitación, luego mezclé una muestra de audio de gato para obtener (B), luego estimé una respuesta de impulso de ( A, B), luego restando el A filtrado de B. Esto muestra algunos resultados, ¡ pero una mejor técnica de estimación FIR podría ayudar aquí! (tenga en cuenta que trunqué el IR estimado a sus primeras 5000 muestras para acelerar los cálculos).

Tenga en cuenta que existen algoritmos para hacer esto de forma adaptativa (como LMS ). Esto podría ser más adecuado para su problema siUNA y sise procesan en tiempo real en lugar de sin conexión. Dichos algoritmos forman la base de los sistemas de cancelación de eco utilizados en las telecomunicaciones.


Muchas gracias @pinchenettes! Su c_cat_estimated.wav es exactamente el tipo de resultado que estoy tratando de lograr. ¿Hay alguna manera de que pueda decirme cómo lo hizo (software utilizado, etc.)? No dude en ponerse en contacto conmigo directamente: catxtwo@gmail.com
CaymanEss

Utilicé las unidades de audio estándar de Audacity y Apple para procesar el audio original y obtener el efecto "sala". La muestra de gato también se mezcló con audacia. El resto del código está en python + numpy: gist.github.com/pichenettes/5434412 . Esta es la "cosa más simple que podría funcionar": el núcleo del algoritmo son solo 6 líneas de código.
pichenettes

Una vez más, gracias muy mucho @pinchenettes. Esto me pondrá en marcha. Eventualmente querré hacer esto en tiempo real: ¿crees que usar LMS aún sería factible?
CaymanEss

Si sabe que su respuesta al impulso no va a cambiar, puede calcularla usando un algoritmo lento durante los primeros segundos y luego seguir usándola. De lo contrario (los altavoces se mueven, el entorno está cambiando ...) necesitará un algoritmo adaptativo. Tenga en cuenta que probablemente tendrá que lidiar con la convolución con respuestas de impulso largas si desea modelar habitaciones -> Verifique esto para conocer las técnicas dsp.stackexchange.com/questions/8771/… . Sin embargo, no conozco los métodos de filtrado adaptativo optimizados para respuestas FIR muy largas.
pichenettes

Las señales deben tener la misma longitud, número de canales y frecuencia de muestreo.
pichenettes

1

El problema que no permitirá que el sonido ambiental exacto sea la salida es:

(a) la diferencia de sonoridad (b) la diferencia de fase debido al retraso de tiempo.

Así, en general, la señal grabada por B será (suponiendo que la sala se comporte como un sistema LTI) ysi[norte]=k=0 0pagsαkXUNA[norte-k]+Xunametrosi[norte])=(Xh)[norte]+Xunametrosi[norte], dónde h[norte]=αnorteo así la respuesta al impulso de la sala. aquíXunametrosi[norte]es la señal ambiental en la ubicación de B. Ahora,z[norte]=XUNA[norte]-ysi[norte] puedes ver que tendrás z[norte]Xunametrosi[norte], a menos que conozca la respuesta al impulso de la sala o su estimación. Para obtener una idea, puede avanzar haciendo la resta y viendo el espectrograma de la señal resultante y comparándolo con el espectrograma de la señal ambiental y solo de la señal de A.

La otra forma es colocar el micrófono cerca de A para minimizar el efecto de la respuesta al impulso de la sala, tal técnica se usa en los auriculares con cancelación de ruido donde se eliminará el ruido ambiental. http://en.wikipedia.org/wiki/Noise-cancelling_headphonese .


Muchas gracias @Neeks. ¿Hay un nombre para la ecuación yB [n] (algoritmo)? Nuevamente, soy totalmente nuevo en dsp, por lo que sería beneficioso para mí poder leer sobre algoritmos / conceptos específicos.
CaymanEss

1
Se llama discurso y desverberación de audio. Es análogo a un problema de desconvolución una vez que supone que la operación de reverberación se debe a un sistema LTIh(t)Es un sistema LTI.
Neeks

1

Eso suena como un caso estándar para la "cancelación de eco acústico". Existen MUCHAS patentes, trabajos de investigación y tesis académicas sobre el tema (a partir de 1967, creo que con el trabajo de MM Sondhi "Un cancelador de eco acústico adaptativo").

Una descripción general simple está aquí http://supportdocs.polycom.com/PolycomService/support/global/documents/support/technical/products/voice/vortex_choose_acoustic_echo_canceller.pdf .

Este es un libro decente sobre el tema http://www.amazon.com/Advances-Network-Acoustic-Cancellation-Processing/dp/3540417214


Gracias @Hilmar. Por recomendación suya, he leído la descripción general de la cancelación de eco y varios documentos sobre la cancelación de ruido. ¿Me equivoco al pensar que la cancelación es lo contrario de lo que quiero? Nuevamente, mi objetivo es obtener el ruido ambiental, no una versión limpia de la señal original.
CaymanEss
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.