He escrito un programa para realizar FastICA en un archivo WAV estéreo usando el código en Python MDP FastICA Ejemplo
Con los ejemplos de audio obtengo muy buenos resultados.
Luego trato de grabar en el mundo real usando dos micrófonos mono de computadora conectados al micrófono estéreo de mi PC conectando el micrófono 1 al canal L y el micrófono 2 al canal R. Pruebo tocando música de fondo mientras hablo en una habitación tranquila.
Sin embargo, ejecutar FastICA no separa las señales en absoluto. ¿Es posible que la calidad de los micrófonos sea demasiado pobre? ¿Debo hacer algo con el archivo WAV grabado (16 bits, PCM firmado, 44100Hz) antes de ejecutar FastICA?
Puedes descargar la grabación aquí .
Como digo más abajo en la página:
Supongo que este retraso entre canales es la razón. Si observa de cerca las dos ondas, probablemente verá que algunos sonidos se producen antes en un canal que en el otro, y el resto al revés.
Para demostrar que no es la calidad de los micrófonos, puede intentar grabar dos señales diferentes usando un micrófono en diferentes momentos, y luego mezclarlas para que parte de cada señal esté en cada canal, y ver si el ICA funciona en ese caso .
fuente
Hay otro algoritmo que usa estadísticas de segundo orden: AMUSE.
Aquí puedes encontrar una implementación en Python.
fuente