Impossible de séparer les signaux sonores de FastICA lors d'un enregistrement en conditions réelles

12

J'ai écrit un programme pour exécuter FastICA sur un fichier WAV stéréo en utilisant le code sur Python MDP FastICA Exemple

Avec les exemples audio, j'obtiens de très bons résultats.

Ensuite, j'essaie de faire un enregistrement dans le monde réel en utilisant deux microphones mono d'ordinateur connectés au micro stéréo de mon PC en connectant le micro 1 au canal L et le micro 2 au canal R. Je teste en jouant de la musique à l'arrière-plan pendant que je parle dans une pièce calme.

Cependant, l'exécution de FastICA ne sépare pas du tout les signaux. Est-il possible que la qualité des microphones soit trop mauvaise? Dois-je faire quoi que ce soit sur le fichier WAV enregistré (16 bits, signé PCM, 44100 Hz) avant d'exécuter FastICA?

Vous pouvez télécharger l'enregistrement ici .

Jeremy
la source

Réponses:

11

L'ICA sous forme brute ne convient que pour les mélanges d'observation synchronisés en phase. L'utilisation de microphones comme vous l'avez décrit introduira un retard de phase comme indiqué par d'autres affiches. Cependant, ce retard de phase peut être utilisé à bon escient. L'algorithme le plus connu qui traite de la séparation stéréo en présence de retards est DUET. Les liens sont cassés mais les références que vous recherchez sont ici> http://eleceng.ucd.ie/~srickard/bss.html.

Voici le document que vous devriez rechercher>
A. Jourjine, S. Rickard et O. Yilmaz, Séparation aveugle des signaux orthogonaux disjoints: démixage des sources N de 2 mélanges, Conférence IEEE sur l'acoustique, la parole et le traitement du signal (ICASSP2000), Volume 5, Pages 2985-2988, Istanbul, Turquie, juin 2000

Dan Barry
la source
2
Une question - si les mélanges sont à venir de plus d'un micro séparé dans l' espace ... alors comment pouvons - nous jamais avoir synchronicité de phase ... Dans tous les textes que je vois cet exemple de plusieurs micros est utilisé ubiquitaire, mais si la synchronicité de phase? est un tel problème pourquoi il n'est pas mentionné? J'essaie juste de comprendre ici, je suis nouveau sur la scène ICA.
Spacey
@Mohammad: Je soupçonne que la synchronicité de phase est présente dans d'autres applications, et ils utilisent simplement des applications audio pour la rendre plus familière aux lecteurs.
endolith
1
@Mohammad il est possible avec des microphones espacés d'avoir une sychronicité de phase pour une seule source. Imaginez une source capturée avec 2 microphones placés à égale distance de chaque côté de la source. La longueur du trajet de la source au microphone est la même dans chaque cas et les signaux seront reçus en une phase sur les deux micros, mais uniquement pour cette source. Vous pouvez ajouter plus de micros de manière équidistante le long de différentes dimensions spatiales pour rejeter davantage les signaux indésirables. Certaines techniques d'analyse EEG en profitent. Vous devriez également noter que le retard de phase entre chaque micro sera fonction de la fréquence (en raison de la longueur d'onde)
Dan Barry
@ DanBarry Merci Dan - point intéressant sur l'EEG. Permettez-moi de clarifier - je sais bien sûr que si les capteurs sont à égale distance d'une source, nous obtenons le même retard ... :-) Ce que j'essayais d'obtenir était pour les applications où de telles choses ne peuvent pas être contrôlées (haut-parleurs dans un avec un certain nombre de capteurs), l'ICA fonctionnerait dans de tels cas - mais 99% du temps, nous n'aurons pas de synchronicité de phase - s'il est présenté comme un algorithme de travail dans ce cas - tout en étant sensible à ces problèmes de phases - alors que manque-t-il ici? ... Merci!
Spacey
1
@endolith oui c'était une bonne solution et ça marche! J'ai également pensé à une solution similaire en 2003 et j'ai été déçu de trouver quelque chose de similaire, mais le mien était suffisamment différent pour que je réussisse à le breveter. Heureusement, j'ai pu être le premier à développer un algorithme de séparation des sources en temps réel en 2004. Les démos de l'original ici> audioresearchgroup.com/main.php?page=Demos et le nouveau amélioré peuvent être vus en action dans la démo vidéo ici> riffstation.com
Dan Barry
6

Comme je le dis plus bas sur la page:

il s'avère que l'ICA ne fonctionne pas vraiment bien lorsque les signaux se produisent à différents délais dans les différents canaux de capteur; il suppose un mixage instantané (que les signaux sont parfaitement synchronisés entre eux dans tous les différents enregistrements). Le retard se produirait dans une situation réelle avec des interprètes et des microphones, car chaque source est à une distance différente de chaque microphone.

Je suppose que ce retard entre les canaux est la raison. Si vous regardez attentivement les deux ondes, vous verrez probablement que certains sons se produisent plus tôt dans un canal que dans l'autre, et le reste vice versa.

Pour prouver que ce n'est pas la qualité des microphones, vous pouvez essayer d'enregistrer deux signaux différents en utilisant un microphone à des moments différents, puis les mélanger ensemble pour qu'une partie de chaque signal soit dans chaque canal, et voir si l'ICA fonctionne dans ce cas .

endolith
la source
J'ai essayé. Ce devrait être un problème de retard comme vous le suggérez. En mélangeant des enregistrements séparés, FastICA produit des résultats presque parfaits. J'ai besoin de trouver des moyens de faire face au retard ....
Jeremy
@Jeremy: Je pense que vous auriez alors besoin d'un algorithme différent.
endolith
connaissez-vous un algo bss qui peut faire face à un retard?
Jeremy
en fait, lorsque j'enregistre et tape dans ma main pour produire un bruit fort et fort, je ne remarque aucun retard d'audace.
Jeremy
1
@endolith Vous avez peut-être raison - de nouvelles informations - j'ai vérifié les notes de bas de page, et apparemment l'auteur de mon livre dit qu'il suppose que tous les signaux ne sont pas retardés les uns par rapport aux autres. : - / En d'autres termes, la matrice de mélange est simplement celle qui change les amplitudes. Eh. Maintenant, c'est encore plus déroutant. :-)
Spacey
0

Il existe un autre algorithme qui utilise des statistiques de second ordre: AMUSE.

Ici vous pouvez trouver une implémentation en Python.

Bruno Rodrigues de Oliveira
la source