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.
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.
quelle
Antworten:
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.W. H.
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.V. M.× N. W. M.× K. H K×N M N K wi W H 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 =hi H
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} wi wi
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
quelle
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.
quelle