Factorización de matriz no negativa para la separación de audio: ¿por qué funciona?

8

La factorización de matriz no negativa tiene como objetivo factorizar una matriz en el producto de dos matrices, , donde representa un conjunto de vectores base y sus activaciones o pesos. Aplicado a la separación de la fuente de audio, es el espectrograma (que conocemos), y es la base de los espectros no negativos, son sus activaciones temporales.VV=WHWHVWH

Parece que soy capaz de expresar un espectrograma como una suma de diferentes intervalos de frecuencia y sus magnitudes, lo que ayudaría a filtrar o separar diferentes tonos (¿aparentemente haciendo el trabajo de un filtro de paso de banda normal?). No entiendo cómo esto realmente separaría, por ejemplo, un piano y un cantante cantando el mismo tono o un tono similar.

Samyukta Ramnath
fuente
para notas musicales con armónicos, quizás un banco de filtros de peine sería mejor que un banco de filtros de paso de banda que solo sintonizaría el fundamental (o quizás otro armónico). el diente de frecuencia más baja de los filtros de peine se giraría a la misma frecuencia que los BPF. entonces el espectrograma podría considerarse como la suma de diferentes frecuencias de tono con sus armónicos. habría alguna superposición.
robert bristow-johnson

Respuestas:

7

Recordemos que las columnas de W puede considerarse como vectores "básicos" (o elementos de un diccionario, los componentes básicos de cualquier señal) y elementos en cada columna en Hdar los pesos correspondientes (que varían con el tiempo). Esto nos permite descomponer el espectrograma basado no solo en componentes de frecuencia sino también en información de inicio temporal; por lo tanto, hace más de lo que haría un simple filtro de paso de banda o filtro de peine.

La factorización matricial no negativa de un espectrograma no separará mágicamente un piano y un cantante que cantan en el mismo tono. Sin embargo, proporciona una aproximación útil en términos de una suma de vectores base ponderados que (con suerte) se pueden dividir en contribuciones de diferentes fuentes porque es poco probable que cada fuente ocupe exactamente el mismo intervalo de frecuencia exactamente en el mismo instante de tiempo.

Más concretamente, dejemos V ser METRO×norte, W ser METRO×K y H ser K×norte. Entonces tenemosMETRO contenedores de frecuencia, norte muestras de tiempo y KComponentes descompuestos. Siwyo son las columnas de W y hyo son las filas de H podemos escribir:

Vyo=1KwyohyoT.
Si sabemos que solo hay dos fuentes en la grabación (piano y cantante), podemos intentar dividir sus contribuciones eligiendo subconjuntos de las columnas de W y el subconjunto correspondiente de las filas de H. Así que siS{1,...,K} entonces la parte aportada por el piano se puede denotar por:
Vpiano=yoSwyohyoT
y la parte aportada por el cantante es:
Vcantante=yo{1,...,K}SwyohyoT

En realidad, es probable que terminemos con una descomposición que nunca logre esta separación exactamente. Es decir, habráwyoLos que tienen contribuciones tanto del cantante como del piano hacen que sea difícil separarlos.

Aquí hay un cuaderno de Python que muestra este procedimiento para una mezcla de batería y guitarra: http://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98f (O si eso no funciona, aquí: https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f )

Tenga en cuenta que el algoritmo NMF solo genera una descomposición. No puede seleccionar subconjuntos de{wyo}correspondiente a cada fuente. En el ejemplo de Python, hay un paso manual para descubrir quéwyoSuena más como el tambor de guitarra v / s. Tal vez se pueda automatizar este paso observando que el tamborwyo los vectores tienen más cosas en frecuencias más bajas.

Analizar cada columna (cuadro) del espectrograma utilizando un banco de filtros de paso de banda es otra forma de descomponer el espectrograma. Sin embargo, tenga en cuenta que la descomposición generada por NMF es de bajo rango, es decir, parsimoniosa. En el ejemplo de Python, fue mucho más fácil seleccionar manualmente subconjuntos de 16 columnas deWcorrespondiente a las dos fuentes. Con un banco de filtros de paso de banda habríamos tenido que girar muchos más mandos (# filtros, ubicaciones de bandas de paso para cada cuadro) y el número de combinaciones de parámetros puede crecer muy rápidamente.

Referencias

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

http://musicinformationretrieval.com/nmf.html

Atul Ingle
fuente
1
El enlace del cuaderno Pyhton no funciona
soultrane
1
cuando el cantante y el piano están cantando la misma nota (misma clase de tono y la misma octava), ¿cómo es ese conjunto S y establezca el conjunto correspondiente para el cantante (que está denotando como {1,...,K}S) sería diferente?
robert bristow-johnson
@ robertbristow-johnson, tienes razón, en ese caso mi descripción no es precisa. Sin embargo, asumí que es muy poco probable que el cantante y el piano estuvieran cantando exactamente la misma nota exactamente al mismo tiempo, con un inicio instantáneo / idéntico. Así que hay esperanza de que podamos dividirlo en subconjuntos disjuntos. Si no, habráwyo's que tendrán contribuciones de ambas fuentes.
Atul Ingle
Enlace @soultrane fijo.
Atul Ingle
1
Es diferente porque usar un banco de filtros de paso de banda producirá una descomposición "más densa", mientras que NMF produce una descomposición "más dispersa". La descomposición generada por NMF es de bajo rango y parsimoniosa. En el ejemplo de Python, fue mucho más fácil seleccionar manualmente subconjuntos de 16 columnas deWcorrespondiente a las dos fuentes. Con un banco de filtros de paso de banda habríamos tenido que girar muchos más mandos (# filtros, ubicaciones de bandas de paso para cada cuadro) y el número de combinaciones de parámetros puede crecer muy rápidamente.
Atul Ingle
0

Objetivo: buena aproximación de separar un cantante de un piano. Ahora, algunas reflexiones sobre los requisitos para una separación precisa de las fuentes de sonido dado que es poco probable que tenga TODA la información de entrada requerida para hacer una separación precisa (posiblemente sus "vectores base"):
- para cada volumen de cada nota del piano, el resultado distribución de frecuencia muestreada en el tiempo (cuando ataca y luego se desvanece). - para cada nota X volumen X fonema de los cantantes expresan la distribución de frecuencia (y su variación con varios niveles de vibrato). - para todo lo anterior se debe considerar el efecto de reverberación. - la letra de la canción (para que coincida con los fonemas del cantante)

También hay restricciones en el dominio del tiempo, como cada nota de piano debe comenzar con el ataque y los efectos del pedal de sostenido del piano (amortiguación súbita casi simultánea de notas que estaban "sonando" aunque se habían liberado las teclas correspondientes)

Dado lo anterior, la búsqueda es la suma de "mejor ajuste" de un conjunto de espectros de notas de piano y el espectro de un solo fonema de volumen de nota de cantante para aproximar el sonido resultante.

Bgr967dhr
fuente