Fattorizzazione a matrice non negativa per la separazione audio: perché funziona?


8

La fattorizzazione a matrice non negativa mira a fattorizzare una matrice nel prodotto di due matrici, , dove rappresenta un insieme di vettori di base e loro attivazioni o pesi. Applicato alla separazione della sorgente audio, è lo spettrogramma (che ci è noto) e è lo spettro di base non negativo, è la loro attivazione temporale.VV=WHWHVWH

Mi sembra di essere in grado di esprimere uno spettrogramma come una somma di diversi bin di frequenza e delle loro magnitudini - che aiuterebbe a filtrare o separare diversi toni (apparentemente facendo il lavoro di un normale filtro passa-banda?). Non capisco come questo in realtà separerebbe, diciamo, un piano e un cantante che canta la stessa tonalità o tonalità simile.


per le note musicali con armoniche, forse un banco di filtri a pettine sarebbe meglio di un banco di filtri passa banda che si accorderebbero solo sul fondamentale (o forse un'altra armonica). il dente con la frequenza più bassa dei filtri a pettine verrebbe ruotato sulla stessa frequenza dei BPF. quindi lo spettrogramma potrebbe essere pensato come la somma di frequenze di tono diverse con le loro armoniche. ci sarebbe qualche sovrapposizione.
robert bristow-johnson,

Risposte:


7

Ricordiamo che le colonne di possono essere pensate come vettori "base" (o elementi di un dizionario - i mattoni di qualsiasi segnale) e gli elementi in ogni colonna in danno i pesi corrispondenti (che variare nel tempo). Questo ci consente di scomporre lo spettrogramma in base non solo alle componenti di frequenza ma anche alle informazioni di insorgenza temporale; quindi fa più di quello che farebbe un semplice filtro passa-banda o un filtro a pettine.WH

La fattorizzazione a matrice non negativa di uno spettrogramma non separerà magicamente un piano e un cantante che canta nella stessa tonalità. Tuttavia fornisce un'utile approssimazione in termini di una somma di vettori di base ponderati che (si spera) possono essere suddivisi in contributi da fonti diverse perché è improbabile che ciascuna sorgente occupi esattamente lo stesso bin di frequenza esattamente nello stesso istante.

Più concretamente, lasciate essere , essere e essere . Quindi abbiamo bin di frequenza , campioni di tempo e componenti decompostiSe sono le colonne di e sono le righe di possiamo scrivere: VM×NWM×KHK×NMNKwiWhiH

Vi=1KwihiT.
Se sappiamo che ci sono solo due fonti nella registrazione (piano e cantante) possiamo provare a dividere i loro contributi scegliendo sottoinsiemi delle colonne di e corrispondenti sottogruppi delle righe di . Quindi, se la parte fornita dal piano può essere indicata da: e la parte fornita dal cantante è: WHS{1,,K}
Vpiano=iSwihiT
Vsinger=i{1,,K}SwihiT

In realtà, probabilmente finiremo con una decomposizione che non raggiunge mai esattamente questa separazione. Cioè, ci saranno che avranno contributi sia dal cantante che dal piano rendendo difficile separare i due.wi

Ecco un notebook Python che mostra questa procedura per un mix di batteria e chitarra: http://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98f (O se non funziona, qui: https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f )

Si noti che l'algoritmo NMF genera solo una decomposizione. Non può selezionare sottoinsiemi di corrispondenti a ciascuna sorgente. Nell'esempio di Python, c'è un passaggio manuale per capire quale dei suoni di assomigli di più al tamburo della chitarra. Si può forse automatizzare questo passaggio osservando che i vettori del tamburo hanno più roba a frequenze più basse.{wi}wiwi

Analizzare ogni colonna (frame) dello spettrogramma usando un banco di filtri passa-banda è un altro modo di decomporre lo spettrogramma. Tuttavia, si noti che la decomposizione generata da NMF è di basso rango cioè parsimoniosa. Nell'esempio di Python, era molto più semplice selezionare manualmente sottoinsiemi di 16 colonne di corrispondenti alle due fonti. Con un banco di filtri passa-banda avremmo dovuto ruotare molte più manopole (# filtri, posizioni delle bande passanti per ciascun fotogramma) e il numero di combinazioni di parametri può aumentare molto rapidamente.W

Riferimenti:

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

http://musicinformationretrieval.com/nmf.html


1
Il link del notebook Pyhton non funziona
soultrane il

1
quando il cantante e il piano stanno cantando la stessa nota (stessa pitch pitch e stessa ottava), com'è che ha impostato e ha impostato il set corrispondente per il cantante (che si sta indicando come ) sarebbe diverso? S{1,,K}S
robert bristow-johnson,

@ robertbristow-johnson, hai ragione - in tal caso la mia descrizione non è precisa. Tuttavia, ho ipotizzato che è molto improbabile che il cantante e il piano stessero cantando esattamente la stessa nota nello stesso momento di insiemi istantanei / identici. Quindi c'è speranza che possiamo dividerlo in sottoinsiemi disgiunti. In caso contrario, ci saràwioche avrà contributi da entrambe le fonti.
Atul Ingle,

Collegamento @soultrane corretto.
Atul Ingle,

1
È diverso perché l'uso di un banco di filtri passa-banda darà una decomposizione "più densa" mentre NMF fornisce una decomposizione "più sparsa". La decomposizione generata da NMF è di basso rango e parsimoniosa. Nell'esempio di Python, era molto più semplice selezionare manualmente sottoinsiemi di 16 colonne diWcorrispondente alle due fonti. Con un banco di filtri passa-banda avremmo dovuto ruotare molte più manopole (# filtri, posizioni delle bande passanti per ciascun fotogramma) e il numero di combinazioni di parametri può aumentare molto rapidamente.
Atul Ingle,

0

Obiettivo: buona approssimazione della separazione di un cantante da un piano. Ora alcune considerazioni sui requisiti per una separazione accurata delle fonti sonore dato che è improbabile che TUTTE le informazioni di input richieste per fare una separazione accurata (possibilmente i tuoi "vettori di base"):
- per ogni volume di ogni nota del piano il risultato distribuzione della frequenza campionata nel tempo (mentre attacca poi si attenua). - per ogni nota X volume X fonema dei cantanti voce la distribuzione della frequenza (e la sua variazione con vari livelli di vibrato). - per quanto sopra è necessario considerare l'effetto riverbero. - il testo della canzone (per abbinare i fonemi del cantante)

Ci sono anche restrizioni nel dominio del tempo come ogni nota di piano deve iniziare con l'attacco e gli effetti del pedale sustain del piano (smorzamento improvviso e quasi simultaneo di note che "squillavano" anche se i tasti corrispondenti erano stati rilasciati)

Alla luce di quanto sopra, la ricerca è la somma "più adatta" di un insieme di spettri di note di piano e spettro di un singolo fonema-volume-nota di un cantante per approssimare il suono risultante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.