Napisałem program do wykonywania FastICA na stereofonicznym pliku WAV za pomocą kodu w Python MDP FastICA Example
Z przykładami audio uzyskuję bardzo dobre wyniki.
Następnie próbuję nagrywać w świecie rzeczywistym za pomocą dwóch komputerowych mikrofonów monofonicznych podłączonych do mikrofonu stereo w moim komputerze, podłączając mikrofon 1 do kanału L i mikrofon 2 do kanału R. Testuję, odtwarzając muzykę w tle, gdy rozmawiam w cichym pokoju.
Jednak uruchomienie FastICA w ogóle nie rozdziela sygnałów. Czy to możliwe, że jakość mikrofonów jest zbyt niska? Czy muszę coś zrobić z nagranym plikiem WAV (16 bitów, podpisany PCM, 44100Hz) przed uruchomieniem FastICA?
Możesz pobrać nagranie tutaj .
Jak mówię w dalszej części strony:
Sądzę, że to opóźnienie między kanałami jest przyczyną. Jeśli przyjrzysz się uważnie dwóm falom, prawdopodobnie zauważysz, że niektóre dźwięki pojawiają się wcześniej w jednym kanale niż w drugim, a pozostałe odwrotnie.
Aby udowodnić, że nie jest to jakość mikrofonów, możesz spróbować nagrać dwa różne sygnały za pomocą jednego mikrofonu w różnych momentach, a następnie miksować je razem, aby niektóre z nich znajdowały się w każdym kanale, i sprawdzić, czy ICA działa w takim przypadku .
źródło
Istnieje inny algorytm, który wykorzystuje statystyki drugiego rzędu: AMUSE.
Tutaj możesz znaleźć implementację w Pythonie.
źródło