Nicht negative Matrixfaktorisierung für die Audio-Trennung - warum funktioniert das?


8

Die nicht-negative Matrixfaktorisierung zielt darauf ab, eine Matrix in das Produkt zweier Matrizen zu faktorisieren , wobei eine Menge von Basisvektoren und deren Aktivierungen oder Gewichte darstellt. Auf die Trennung von Audioquellen angewendet, ist das Spektrogramm (das uns bekannt ist), und ist die Basis nicht negativer Spektren, ist ihre zeitliche Aktivierung.V = W H W H V W H.VV=WHWHVWH

Dies scheint mir in der Lage zu sein, ein Spektrogramm als Summe verschiedener Frequenzbereiche und ihrer Größen auszudrücken - was helfen würde, verschiedene Tonhöhen zu filtern oder zu trennen (scheinbar die Aufgabe eines normalen Bandpassfilters?). Ich verstehe nicht, wie dies tatsächlich beispielsweise ein Klavier und einen Sänger trennen würde, die dieselbe oder eine ähnliche Tonhöhe singen.


Für Noten mit Harmonischen wäre vielleicht eine Bank von Kammfiltern besser als eine Bank von Bandpassfiltern, die nur die Grundwelle (oder vielleicht eine andere Harmonische) stimmen würden. Der Zahn mit der niedrigsten Frequenz der Kammfilter würde auf die gleiche Frequenz wie die BPFs gedreht. Das Spektrogramm könnte also als die Summe verschiedener Tonhöhenfrequenzen mit ihren Harmonischen betrachtet werden. es würde einige Überlappungen geben.
Robert Bristow-Johnson

Antworten:


6

Denken Sie daran, dass die Spalten von als "Basis" -Vektoren (oder Elemente eines Wörterbuchs - die Bausteine ​​eines beliebigen Signals) betrachtet werden können und Elemente in jeder Spalte in die entsprechenden Gewichte angeben (das im Laufe der Zeit variieren). Dies ermöglicht es uns, das Spektrogramm nicht nur anhand von Frequenzkomponenten, sondern auch anhand von Informationen zum zeitlichen Beginn zu zerlegen. Es ist also mehr als ein einfaches Bandpassfilter oder Kammfilter.H.WH

Die nicht negative Matrixfaktorisierung eines Spektrogramms trennt ein Klavier und einen Sänger, die in derselben Tonhöhe singen, nicht auf magische Weise. Es gibt jedoch eine nützliche Annäherung in Bezug auf eine Summe gewichteter Basisvektoren, die (hoffentlich) in Beiträge von verschiedenen Quellen aufgeteilt werden können, da es unwahrscheinlich ist, dass jede Quelle genau zum gleichen Zeitpunkt genau das gleiche Frequenzfach belegt.

Genauer gesagt, lassen seine , seine und seine . Wir haben also Frequenzbereiche, Zeitabtastwerte und zerlegte Komponenten. Wenn die Spalten von und die Zeilen von , können wir schreiben: M × N W M × K H K × N M N K w i W.VM×NWM×KHK×NMNKwiWH V K i = 1 w i h T i . W H S{1,,K} V Klavier =i S w i h T i V Sänger =hiH

Vi=1KwihiT.
Wenn wir wissen, dass die Aufnahme nur zwei Quellen enthält (Klavier und Sänger), können wir versuchen, ihre Beiträge aufzuteilen, indem wir Teilmengen der Spalten von und die entsprechende Teilmenge der Zeilen von auswählen . Wenn also der vom Klavier beigesteuerte Teil wie folgt bezeichnet werden: und der Teil, den der Sänger beigesteuert hat, ist: WHS{1,,K}
Vpiano=iSwihiT
Vsinger=i{1,,K}SwihiT

In Wirklichkeit werden wir wahrscheinlich eine Zersetzung haben, die diese Trennung nie genau erreicht. Das heißt, es wird 's geben, die Beiträge sowohl des Sängers als auch des Klaviers enthalten, was es schwierig macht, die beiden zu trennen.wi

Hier ist ein Python-Notizbuch, das dieses Verfahren für eine Mischung aus Schlagzeug und Gitarre zeigt: http://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98f (Oder wenn das nicht funktioniert, hier: https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f )

Beachten Sie, dass der NMF-Algorithmus nur eine Zerlegung generiert. Es können keine Teilmengen von , die jeder Quelle entsprechen. Im Python-Beispiel gibt es einen manuellen Schritt, um herauszufinden, welcher -Sound der Gitarre v / s-Trommel am ähnlichsten ist. Man kann diesen Schritt vielleicht automatisieren, indem man feststellt, dass die Vektoren der Trommel mehr Material in niedrigeren Frequenzen enthalten.w i w i{wi}wiwi

Die Analyse jeder Spalte (Rahmen) des Spektrogramms unter Verwendung einer Reihe von Bandpassfiltern ist eine weitere Möglichkeit, das Spektrogramm zu zerlegen. Es ist jedoch zu beachten, dass die durch NMF erzeugte Zersetzung einen niedrigen Rang hat, dh sparsam. Im Python-Beispiel war es viel einfacher, Teilmengen von 16 Spalten von , die den beiden Quellen entsprechen, manuell auszuwählen . Mit einer Reihe von Bandpassfiltern hätten wir viel mehr Regler drehen müssen (# Filter, Positionen der Durchlassbänder für jeden Frame), und die Anzahl der Parameterkombinationen kann sehr schnell zunehmen.W

Verweise:

https://ccrma.stanford.edu/~njb/teaching/sstutorial/part2.pdf

http://musicinformationretrieval.com/nmf.html


1
Pyhton Notizbuch Link funktioniert nicht
Soultrane

1
Wenn der Sänger und das Klavier dieselbe Note singen (gleiche Tonhöhenklasse und gleiche Oktave), wie kommt es dann, dass Sie und den entsprechenden Satz für den Sänger setzen (den Sie als ) wäre anders? { 1 , , K } S.S{1,,K}S
Robert Bristow-Johnson

@ robertbristow-johnson, du hast recht - in diesem Fall ist meine Beschreibung nicht korrekt. Ich ging jedoch davon aus, dass es sehr unwahrscheinlich ist, dass der Sänger und das Klavier genau zur gleichen Zeit genau dieselbe Note sangen / sofort einsetzten. Es besteht also die Hoffnung, dass wir es in disjunkte Teilmengen aufteilen können. Wenn nicht, gibt es 's, die Beiträge aus beiden Quellen enthalten. wi
Atul Ingle

@ Soultrane Link behoben.
Atul Ingle

1
Dies ist anders, da die Verwendung einer Reihe von Bandpassfiltern zu einer "dichteren" Zerlegung führt, während NMF zu einer "spärlicheren" Zerlegung führt. Die durch NMF erzeugte Zersetzung ist von geringem Rang und sparsam. Im Python-Beispiel war es viel einfacher, Teilmengen von 16 Spalten von , die den beiden Quellen entsprechen, manuell auszuwählen . Mit einer Reihe von Bandpassfiltern hätten wir viel mehr Regler drehen müssen (# Filter, Positionen der Durchlassbänder für jeden Frame), und die Anzahl der Parameterkombinationen kann sehr schnell zunehmen. W
Atul Ingle

0

Ziel: gute Annäherung an die Trennung eines Sängers von einem Klavier. Nun einige Gedanken zu den Anforderungen für eine genaue Trennung der Klangquellen, da es unwahrscheinlich ist, dass ALLE erforderlichen Eingabeinformationen für eine genaue Trennung vorhanden sind (möglicherweise Ihre "Basisvektoren"):
- Für jede Lautstärke jeder Note des Klaviers ergibt sich das Ergebnis Häufigkeitsverteilung über die Zeit abgetastet (wenn es angreift und dann verblasst). - für jede Note X Lautstärke X Phonem der Sänger die Frequenzverteilung (und ihre Variation mit verschiedenen Vibrato-Pegeln). - Für alle oben genannten Punkte sollte der Hall-Effekt berücksichtigt werden. - die Texte des Liedes (passend zu den Phonemen des Sängers)

Es gibt auch Zeitbereichsbeschränkungen, wie z. B., dass jede Klaviernote mit dem Anschlag beginnen muss, und die Auswirkungen des Sustain-Pedals des Klaviers (plötzliche nahezu gleichzeitige Dämpfung von Noten, die "klingelten", obwohl die entsprechenden Tasten losgelassen wurden).

In Anbetracht des Vorstehenden wird nach der "am besten passenden" Summe eines Satzes von Spektren einer Klaviernote und des Spektrums eines einzelnen Noten-Lautstärke-Phonems eines Sängers gesucht, um den resultierenden Klang zu approximieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.