Factorisation matricielle non négative pour la séparation audio - pourquoi ça marche?

8

La factorisation matricielle non négative vise à factoriser une matrice dans le produit de deux matrices, , où représente un ensemble de vecteurs de base et leurs activations ou pondérations. Appliqué à la séparation des sources audio, est le spectrogramme (qui nous est connu), et est la base des spectres non négatifs, est leurs activations temporelles.VV=WHWHVWH

Cela me semble être capable d'exprimer un spectrogramme comme une somme de différentes fréquences et de leurs amplitudes - ce qui aiderait à filtrer ou à séparer différents hauteurs (faisant apparemment le travail d'un filtre passe-bande normal?). Je ne comprends pas comment cela séparerait en fait, disons, un piano et un chanteur chantant la même hauteur ou une hauteur similaire.

Samyukta Ramnath
la source
pour les notes de musique avec des harmoniques, peut-être qu'une banque de filtres en peigne serait meilleure qu'une banque de filtres passe-bande qui ne ferait que régler le fondamental (ou peut-être une autre harmonique). la dent de fréquence la plus basse des filtres en peigne serait tournée à la même fréquence que les BPF. de sorte que le spectrogramme pourrait être considéré comme la somme de différentes fréquences accordées avec leurs harmoniques. il y aurait un certain chevauchement.
robert bristow-johnson

Réponses:

7

Rappelons que les colonnes de W peuvent être considérés comme des vecteurs "de base" (ou des éléments d'un dictionnaire - les éléments constitutifs de tout signal) et des éléments dans chaque colonne de Hdonner les poids correspondants (qui varient dans le temps). Cela nous permet de décomposer le spectrogramme sur la base non seulement des composantes de fréquence mais aussi des informations de début temporel; il fait donc plus que ce qu'un simple filtre passe-bande ou filtre en peigne ferait.

La factorisation matricielle non négative d'un spectrogramme ne séparera pas comme par magie un piano et un chanteur chantant dans la même hauteur. Cependant, il donne une approximation utile en termes de somme de vecteurs de base pondérés qui (espérons-le) peuvent être divisés en contributions de différentes sources car il est peu probable que chaque source occupe exactement la même tranche de fréquence au même instant.

Plus concrètement, laissez V être M×N, W être M×K et H être K×N. Donc nous avonsM bacs de fréquence, N échantillons de temps et Kcomposants décomposés. Siwje sont les colonnes de W et hje sont les rangées de H nous pouvons écrire:

Vje=1KwjehjeT.
Si nous savons qu'il n'y a que deux sources dans l'enregistrement (piano et chanteur), nous pouvons essayer de répartir leurs contributions en choisissant des sous-ensembles des colonnes de W et sous-ensemble correspondant des rangées de H. Donc siS{1,,K} alors la partie apportée par le piano peut être désignée par:
Vpiano=jeSwjehjeT
et la contribution du chanteur est:
Vchanteur=je{1,,K}SwjehjeT

En réalité, nous finirons probablement par une décomposition qui n'atteindra jamais exactement cette séparation. Autrement dit, il y aurawjequi ont des contributions à la fois du chanteur et du piano, ce qui rend difficile la séparation des deux.

Voici un cahier Python montrant cette procédure pour un mélange de batterie et de guitare: http://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98f (ou si cela ne fonctionne pas, ici: https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f )

Notez que l'algorithme NMF ne génère qu'une décomposition. Il ne peut pas sélectionner de sous-ensembles de{wje}correspondant à chaque source. Dans l'exemple Python, il y a une étape manuelle pour déterminer quelswjeLe son ressemble le plus au tambour de guitare v / s. On peut peut-être automatiser cette étape en notant que le tambourwje les vecteurs ont plus de choses dans les basses fréquences.

L'analyse de chaque colonne (trame) du spectrogramme à l'aide d'une banque de filtres passe-bande est une autre façon de décomposer le spectrogramme. Cependant, notez que la décomposition générée par le NMF est de faible rang, c'est-à-dire parcimonieuse. Dans l'exemple Python, il était beaucoup plus facile de sélectionner manuellement des sous-ensembles de 16 colonnes deWcorrespondant aux deux sources. Avec une banque de filtres passe-bande, nous aurions dû tourner beaucoup plus de boutons (# filtres, emplacements des bandes passantes pour chaque trame) et le nombre de combinaisons de paramètres peut augmenter très rapidement.

Références:

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

http://musicinformationretrieval.com/nmf.html

Atul Ingle
la source
1
Le lien du carnet Pyhton ne fonctionne pas
soultrane
1
quand le chanteur et le piano chantent la même note (même classe de hauteur et même octave), comment se fait-il que l'ensemble S et définissez l'ensemble correspondant pour le chanteur (que vous indiquez comme {1,,K}S) serait différent?
robert bristow-johnson
@ robertbristow-johnson, vous avez raison - dans ce cas, ma description n'est pas exacte. Cependant, j'ai fait l'hypothèse qu'il est très improbable que le chanteur et le piano chantaient exactement la même note exactement au même moment des débuts instantanés / identiques. Il y a donc de l'espoir que nous pourrons le diviser en sous-ensembles disjoints. Sinon, il y aurawjequi auront des contributions des deux sources.
Atul Ingle
Lien @soultrane corrigé.
Atul Ingle
1
C'est différent parce que l'utilisation d'une banque de filtres passe-bande donnera une décomposition "plus dense" tandis que NMF donnera une décomposition "plus clairsemée". La décomposition générée par le NMF est de faible rang et parcimonieuse. Dans l'exemple Python, il était beaucoup plus facile de sélectionner manuellement des sous-ensembles de 16 colonnes deWcorrespondant aux deux sources. Avec une banque de filtres passe-bande, nous aurions dû tourner beaucoup plus de boutons (# filtres, emplacements des bandes passantes pour chaque trame) et le nombre de combinaisons de paramètres peut augmenter très rapidement.
Atul Ingle
0

Objectif: bonne approximation de la séparation d'un chanteur d'un piano. Maintenant quelques réflexions sur les exigences pour une séparation précise des sources sonores étant donné qu'il est peu probable que TOUTES les informations d'entrée nécessaires pour effectuer une séparation précise (éventuellement vos "vecteurs de base"):
- pour chaque volume de chaque note du piano, le résultat distribution de fréquence échantillonnée dans le temps (car elle attaque puis s'estompe). - pour chaque note X volume X phonème des chanteurs voix la distribution de fréquence (et sa variation avec différents niveaux de vibrato). - pour tout ce qui précède, l'effet de réverbération doit être pris en compte. - les paroles de la chanson (pour correspondre aux phonèmes du chanteur)

Il existe également des restrictions dans le domaine temporel telles que chaque note de piano doit commencer par l'attaque et les effets de la pédale de sustain du piano (atténuation soudaine presque simultanée des notes qui "sonnaient" bien que les touches correspondantes aient été relâchées).

Compte tenu de ce qui précède, la recherche consiste à trouver la somme «la plus adaptée» d'un ensemble de spectres de note de piano et d'un spectre de volume de note à un seul chanteur pour approximer le son résultant.

Bgr967dhr
la source