Fehler beim Trennen von Tonsignalen durch FastICA bei realen Aufnahmen

12

Ich habe ein Programm zum Ausführen von FastICA für eine Stereo-WAV-Datei mit dem Code von Python MDP FastICA Example geschrieben

Mit den Audiobeispielen bekomme ich sehr gute Ergebnisse.

Dann versuche ich, mit zwei Computer-Monomikrofonen, die an das Stereomikrofon meines PCs angeschlossen sind, echte Aufnahmen zu machen, indem ich Mikrofon 1 mit L-Kanal und Mikrofon 2 mit R-Kanal verbinde. Ich spiele im Hintergrund Musik, während ich in einem ruhigen Raum spreche.

Beim Ausführen von FastICA werden die Signale jedoch überhaupt nicht getrennt. Ist es möglich, dass die Qualität der Mikrofone zu schlecht ist? Muss ich mit der aufgezeichneten WAV-Datei (16 Bit, signiertes PCM, 44100 Hz) etwas anfangen, bevor ich FastICA ausführe?

Die Aufzeichnung können Sie hier herunterladen .

Jeremy
quelle

Antworten:

11

ICA in roher Form ist nur zur Verwendung mit phasensynchronisierten Beobachtungsmischungen geeignet. Die Verwendung von Mikrofonen, wie Sie beschrieben haben, führt zu einer Phasenverzögerung, auf die andere Poster hinweisen. Diese Phasenverzögerung kann jedoch mit großem Nutzen verwendet werden. Der bekannteste Algorithmus, der sich mit der Stereotrennung bei Verzögerungen befasst, ist DUET. Die Links sind defekt, aber die Referenzen, die Sie suchen, sind hier> http://eleceng.ucd.ie/~srickard/bss.html.

Dies ist der
Artikel, nach dem Sie suchen sollten> A. Jourjine, S. Rickard und O. Yilmaz, Blindes Trennen disjunkter orthogonaler Signale: Entmischung von N-Quellen aus 2 Gemischen, IEEE-Konferenz über Akustik, Sprache und Signalverarbeitung (ICASSP2000), Band 5, Seiten 2985-2988, Istanbul, Türkei, Juni 2000

Dan Barry
quelle
2
Eine Frage: Wenn die Mischungen von mehr als einem räumlich getrennten Mikrofon stammen, wie können wir dann jemals Phasensynchronität haben? ist so ein Problem, warum wird es nicht erwähnt? Ich versuche hier nur zu verstehen, ich bin neu in der ICA-Szene.
Spacey
@Mohammad: Ich vermute, dass die Phasensynchronität in anderen Anwendungen vorhanden ist, und sie verwenden nur Audioanwendungen, um sie den Lesern näher zu bringen.
Endolith
1
@Mohammad Mit räumlich getrennten Mikrofonen ist es möglich, eine Phasensynchronität für eine Quelle zu erzielen. Stellen Sie sich eine Quelle vor, die mit zwei Mikrofonen aufgenommen wird, die in gleichem Abstand zu beiden Seiten der Quelle angeordnet sind. Die Pfadlänge von der Quelle zum Mikrofon ist in jedem Fall gleich und die Signale werden bei beiden Mikrofonen in einer Phase empfangen, jedoch nur für diese Quelle. Sie können mehrere Mikrofone in gleichen Abständen entlang verschiedener räumlicher Dimensionen hinzufügen, um unerwünschte Signale weiter zu unterdrücken. Einige EEG-Analysetechniken machen davon Gebrauch. Sie sollten auch beachten, dass die Phasenverzögerung zwischen jedem Mikrofon eine Funktion der Frequenz ist (aufgrund der Wellenlänge)
Dan Barry
@DanBarry Danke Dan - interessanter Punkt zum EEG. Lassen Sie mich das klarstellen - ich weiß natürlich, dass wenn die Sensoren von einer Quelle gleich weit entfernt sind, wir die gleiche Verzögerung haben ... :-) Was ich versucht habe, war für Anwendungen, bei denen solche Dinge nicht gesteuert werden können (Lautsprecher in einem) Raum mit einer Reihe von Sensoren), soll ICA in solchen Fällen funktionieren - aber 99% der Zeit haben wir keine Phasensynchronität -, wenn es in diesem Fall als Arbeitsalgorithmus angepriesen wird - und ist dennoch empfindlich für diese Phasenprobleme - dann Was fehlt hier? ... Danke!
Spacey
1
@endolith ja es war eine schöne lösung und es funktioniert! Ich hatte bereits 2003 über eine ähnliche Lösung nachgedacht und war enttäuscht, etwas Ähnliches zu finden, aber meine Lösung war so unterschiedlich, dass ich es schaffte, sie zu patentieren. Zum Glück konnte ich bereits 2004 als Erster einen Algorithmus für die Trennung von Quellen in Echtzeit entwickeln. Demos des Originals finden Sie hier> audioresearchgroup.com/main.php?page=Demos und das neue verbesserte sind in der Video-Demo in Aktion zu sehen hier> riffstation.com
Dan Barry
6

Wie ich weiter unten sage:

Es stellt sich heraus, dass ICA nicht richtig funktioniert, wenn die Signale mit unterschiedlichen Verzögerungen in den verschiedenen Sensorkanälen auftreten. Es wird ein sofortiges Mischen vorausgesetzt (bei allen verschiedenen Aufnahmen müssen die Signale perfekt synchronisiert sein). Eine Verzögerung würde in einer realen Situation mit Interpreten und Mikrofonen auftreten, da jede Quelle einen unterschiedlichen Abstand von jedem Mikrofon hat.

Ich vermute, dass diese Verzögerung zwischen den Kanälen der Grund ist. Wenn Sie sich die beiden Wellen genau ansehen, werden Sie wahrscheinlich feststellen, dass einige Klänge in einem Kanal früher auftreten als im anderen und der Rest umgekehrt.

Um zu beweisen, dass es nicht die Qualität der Mikrofone ist, können Sie versuchen, zwei verschiedene Signale mit einem Mikrofon zu unterschiedlichen Zeiten aufzunehmen und diese dann zu mischen, sodass sich ein Teil jedes Signals in jedem Kanal befindet. Überprüfen Sie, ob der ICA in diesem Fall funktioniert .

Endolith
quelle
Ich habe es versucht. Es sollte ein Verzögerungsproblem sein, wie Sie vorschlagen. Durch das Mischen separater Aufnahmen erzielt FastICA nahezu perfekte Ergebnisse. Ich muss einige Wege finden, um mit der Verzögerung fertig zu werden ...
Jeremy
@ Jeremy: Ich denke, du würdest dann einen anderen Algorithmus brauchen.
Endolith
Kennen Sie eine BSS-Algo, die mit Verspätungen zurechtkommt?
Jeremy
Wenn ich meine Hand aufnehme und klatsche, um ein lautes, scharfes Geräusch zu erzeugen, kann ich tatsächlich keine Verzögerung in der Kühnheit feststellen.
Jeremy
1
@endolith Sie könnten Recht haben - einige neue Informationen - Ich habe die Fußnoten überprüft, und anscheinend sagt der Autor meines Buches, dass er annimmt, dass alle Signale nicht relativ zueinander verzögert sind. : - / Mit anderen Worten, die Mischmatrix ist einfach eine, die Amplituden ändert. Eh. Jetzt ist es noch verwirrender. :-)
Spacey
0

Es gibt einen anderen Algorithmus, der Statistiken zweiter Ordnung verwendet: AMUSE.

Hier finden Sie eine Implementierung in Python.

Bruno Rodrigues de Oliveira
quelle