Eu escrevi um programa para executar o FastICA em um arquivo WAV estéreo usando o código no Python MDP FastICA Example
Com os exemplos de áudio, obtive resultados muito bons.
Então, tento gravar no mundo real usando dois microfones mono de computador conectados ao microfone estéreo do meu PC, conectando o microfone 1 ao canal L e o microfone 2 ao canal R. Testo tocando alguma música em segundo plano enquanto falo em uma sala silenciosa.
No entanto, a execução do FastICA não separa os sinais. É possível que a qualidade dos microfones seja muito ruim? Preciso fazer alguma coisa no arquivo WAV gravado (16 bits, PCM assinado, 44100Hz) antes de executar o FastICA?
Você pode baixar a gravação aqui .
Como eu digo mais abaixo na página:
Eu acho que esse atraso entre os canais é o motivo. Se você observar atentamente as duas ondas, provavelmente verá que alguns sons ocorrem mais cedo em um canal que no outro e o restante vice-versa.
Para provar que não é a qualidade dos microfones, você pode tentar gravar dois sinais diferentes usando um microfone em momentos diferentes e depois misturá-los para que parte de cada sinal esteja em cada canal e ver se a ICA funciona nesse caso. .
fonte
Há outro algoritmo que usa estatísticas de segunda ordem: AMUSE.
Aqui você pode encontrar uma implementação em Python.
fonte