Nie rozdziela sygnałów dźwiękowych FastICA podczas nagrywania w świecie rzeczywistym

12

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 .

Jeremy
źródło

Odpowiedzi:

11

ICA w postaci surowej nadaje się tylko do użytku z mieszaninami obserwacyjnymi zsynchronizowanymi fazowo. Korzystanie z mikrofonów, które opisałeś, wprowadzi opóźnienie fazowe, jak wskazali inni plakaty. Jednak to opóźnienie fazowe może być bardzo przydatne. Najbardziej znanym algorytmem zajmującym się separacją stereo w obecności opóźnień jest DUET. Linki są zepsute, ale referencje, których szukasz, są tutaj> http://eleceng.ucd.ie/~srickard/bss.html.

To jest dokument, którego powinieneś szukać>
A. Jourjine, S. Rickard i O. Yilmaz, Ślepa separacja rozłącznych sygnałów ortogonalnych: Odmieszanie źródeł N z 2 mieszanin, Konferencja IEEE na temat akustyki, mowy i przetwarzania sygnałów (ICASSP2000), Tom 5, strony 2985-2988, Stambuł, Turcja, czerwiec 2000 r

Dan Barry
źródło
2
Pytanie - jeśli miksy pochodzą z więcej niż jednego oddzielnego przestrzennie mikrofonu ... to jak możemy kiedykolwiek mieć synchronizację faz? czy taki problem nie jest wymieniony? Próbuję tu tylko zrozumieć, jestem nowy na scenie ICA.
Spacey
@Mohammad: Podejrzewam, że synchroniczność faz jest obecna w innych aplikacjach, a oni po prostu używają aplikacji audio, aby przybliżyć ją czytelnikom.
endolith,
1
@Mohammad możliwe jest przy mikrofonach rozmieszczonych w odstępach fazowych dla jednego źródła. Wyobraź sobie, że źródło jest przechwytywane za pomocą 2 mikrofonów umieszczonych w jednakowej odległości po obu stronach źródła. Długość ścieżki od źródła do mikrofonu jest w każdym przypadku taka sama, a sygnały będą odbierane w fazie na obu mikrofonach, ale tylko dla tego źródła. Możesz dodać więcej mikrofonów w równych odległościach wzdłuż różnych wymiarów przestrzennych, aby dodatkowo odrzucić niechciane sygnały. Wykorzystują to niektóre techniki analizy EEG. Należy również pamiętać, że opóźnienie fazowe między każdym mikrofonem będzie funkcją częstotliwości (ze względu na długość fali)
Dan Barry,
@DanBarry Thanks Dan - interesujący punkt na temat EEG. Pozwól, że wyjaśnię - oczywiście wiem, że jeśli czujniki są w równej odległości od źródła, otrzymujemy to samo opóźnienie ... :-) Próbowałem uzyskać w aplikacjach, w których takich rzeczy nie da się kontrolować (głośniki w pokój z wieloma czujnikami), mówi się, że ICA działa w takich przypadkach - ale w 99% przypadków nie będziemy mieli synchronizacji faz - jeśli jest reklamowany jako działający algorytm w tym przypadku - ale jest wrażliwy na problemy z fazami - wtedy czego tu brakuje? ... Dzięki!
Spacey,
1
@endolith tak, to było miłe rozwiązanie i działa! Myślałem również o podobnym rozwiązaniu w 2003 roku i byłem rozczarowany znalezieniem czegoś podobnego, ale moje było wystarczająco inne, że udało mi się je opatentować. Na szczęście mogłem być pierwszym, który opracował algorytm separacji źródeł w czasie rzeczywistym w 2004 roku. Demonstracje oryginalnego tutaj> audioresearchgroup.com/main.php?page=Demos i nowego ulepszonego można zobaczyć w akcji w demie wideo tutaj> riffstation.com
Dan Barry
6

Jak mówię w dalszej części strony:

okazuje się, że ICA nie działa właściwie, gdy sygnały pojawiają się z różnymi opóźnieniami w różnych kanałach czujnika; zakłada natychmiastowe miksowanie (że sygnały są idealnie zsynchronizowane ze sobą we wszystkich nagraniach). Opóźnienie to zdarzyć w sytuacji rzeczywistych z wykonawców i mikrofony, ponieważ każde źródło jest inna odległość od każdego mikrofonu.

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 .

endolit
źródło
Próbowałem. Jak sugerujesz, powinien to być problem z opóźnieniem. Łącząc osobne nagrania, FastICA daje prawie idealne rezultaty. Muszę znaleźć sposób na poradzenie sobie z opóźnieniem ....
Jeremy,
@Jeremy: Myślę więc, że potrzebujesz innego algorytmu.
endolith
znasz jakieś bgo algo, które poradzi sobie z opóźnieniem?
Jeremy,
właściwie kiedy nagrywam i klaszczę w dłoń, by wydać głośny, ostry dźwięk, nie zauważam żadnego opóźnienia w zuchwałości.
Jeremy,
1
@endolith Być może masz rację - trochę nowych informacji - sprawdziłem przypisy i najwyraźniej autor mojej książki twierdzi, że zakłada, że ​​wszystkie sygnały nie są opóźnione względem siebie. : - / Innymi słowy, macierz miksująca jest po prostu taką, która zmienia amplitudy. Eh Teraz jest to jeszcze bardziej mylące. :-)
Spacey
0

Istnieje inny algorytm, który wykorzystuje statystyki drugiego rzędu: AMUSE.

Tutaj możesz znaleźć implementację w Pythonie.

Bruno Rodrigues de Oliveira
źródło