Falha ao separar os sinais sonoros do FastICA na gravação do mundo real

12

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 .

Jeremy
fonte

Respostas:

11

O ICA na forma bruta é adequado apenas para uso com misturas de observação sincronizadas por fase. O uso de microfones como você descreveu apresentará um atraso de fase, conforme indicado por outros pôsteres. No entanto, esse atraso de fase pode ser utilizado com grande proveito. O algoritmo mais conhecido que lida com a separação estéreo na presença de atrasos é DUET. Os links estão quebrados, mas as referências que você procura estão aqui> http://eleceng.ucd.ie/~srickard/bss.html.

Este é o artigo que você deve procurar>
A. Jourjine, S. Rickard e O. Yilmaz, separação cega de sinais ortogonais disjuntos: desmistificação de fontes N de 2 misturas, conferência IEEE sobre acústica, fala e processamento de sinais (ICASSP2000), Volume 5, Páginas 2985-2988, Istambul, Turquia, junho de 2000

Dan Barry
fonte
2
Uma pergunta - se as misturas são provenientes de mais de um microfone espacialmente separado ... então como podemos nunca ter sincronicidade fase ... Em todos os textos que eu vejo este exemplo de vários microfones é usado ubiquitously, mas se a sincronicidade fase? é um problema, por que não é mencionado? Estou apenas tentando entender aqui, sou novo na cena da ACI.
Spacey
@ Mohammad: Eu suspeito que a sincronicidade de fase esteja presente em outros aplicativos e eles apenas usam aplicativos de áudio para torná-lo mais familiar aos leitores.
endolith
1
@ Mohammad é possível com microfones espaçados ter sincronicidade de fase para uma fonte. Imagine uma fonte sendo capturada com 2 microfones colocados equidistantes em ambos os lados da fonte. O comprimento do caminho da fonte para o microfone é o mesmo em cada caso e os sinais serão recebidos em uma fase nos dois microfones, mas apenas para essa fonte. Você pode adicionar mais microfones equidistantemente ao longo de diferentes dimensões espaciais para rejeitar ainda mais sinais indesejados. Algumas técnicas de análise de EEG valem disso. Você também deve observar que o atraso de fase entre cada mic será uma função da frequência (devido ao comprimento de onda)
Dan Barry
@ DanBarry Obrigado Dan - ponto interessante sobre o EEG. Deixe-me esclarecer: é claro que obviamente sei que, se os sensores são equidistantes de uma fonte, temos o mesmo atraso ... :-) O que eu estava tentando abordar era para aplicações em que essas coisas não podem ser controladas (alto-falantes em um Diz-se que a ICA funciona nesses casos - mas 99% das vezes não temos sincronicidade de fase - se for apresentada como um algoritmo de trabalho nesse caso - ainda é sensível a esses problemas de fase - então o que está faltando aqui? ... Obrigado!
Spacey
1
@ endolith sim, foi uma boa solução e funciona! Também pensei em uma solução semelhante em 2003 e fiquei desapontado ao encontrar algo semelhante, mas o meu era suficientemente diferente que eu consegui patentear. Felizmente, fui o primeiro a desenvolver um algoritmo de separação de fontes em tempo real em 2004. Demonstrações do original aqui> audioresearchgroup.com/main.php?page=Demos e o novo e aprimorado podem ser vistos em ação na demonstração em vídeo aqui> riffstation.com
Dan Barry
6

Como eu digo mais abaixo na página:

acontece que o ICA não funciona realmente bem quando os sinais ocorrem em diferentes atrasos nos diferentes canais do sensor; pressupõe mixagem instantânea (que os sinais estão em perfeita sincronia entre si em todas as diferentes gravações). Atraso seria acontecer em uma situação da vida real com artistas e microfones, uma vez que cada fonte é uma distância diferente de cada microfone.

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. .

endólito
fonte
Eu tentei. Deve ser um problema de atraso, como você sugere. Ao misturar gravações separadas, o FastICA produz resultados quase perfeitos. Eu preciso encontrar algumas maneiras de lidar com o atraso .... #
411 Jeremy
@ Jeremy: Eu acho que você precisaria de um algoritmo diferente, então.
endolith
você conhece algum algo bss que possa lidar com atrasos?
Jeremy
na verdade, quando gravo e bato palmas para produzir um ruído alto e agudo, não percebo atraso na audácia.
Jeremy
1
@ endolith Você pode estar certo - algumas informações novas - verifiquei as notas de rodapé e, aparentemente, o autor do meu livro diz que ele assume que todos os sinais não estão atrasados ​​um em relação ao outro. : - / Em outras palavras, a matriz de mistura é simplesmente uma que muda de amplitude. Eh. Agora é ainda mais confuso. :-)
Spacey
0

Há outro algoritmo que usa estatísticas de segunda ordem: AMUSE.

Aqui você pode encontrar uma implementação em Python.

Bruno Rodrigues de Oliveira
fonte