cóctel algoritmo de enfermedad vesicular porcina aplicación … en una sola línea de código?

En una presentación en la conferencia introductoria sobre el aprendizaje de máquina por Andrew Ng, de Stanford en Coursera, se da la siguiente línea de Octava solución a la fiesta problema debido a las fuentes de audio se graban por dos separados espacialmente micrófonos:

[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

En la parte inferior de la diapositiva es «fuente: Sam Roweis, Yair Weiss, Eero Simoncelli» y en el fondo de una diapositiva anterior es «clips de Audio cortesía de Te-Won Lee». En el video, el Profesor dice Ng,

«Así que usted puede mirar sin supervisión de aprendizaje como este y preguntar,» ¿es muy complicado implementar esto?’ Parece que con el fin de crear esta aplicación, parece que para hacer esto de procesamiento de audio, habría que escribir un montón de código, o tal vez el enlace en un montón de C++ o Java bibliotecas que procesar el audio. Parece que sería una muy complicado programa para hacer este audio: separar el audio y así sucesivamente. Resulta que el algoritmo para hacer lo que usted acaba de decir, que se puede hacer con sólo una línea de código … se muestra a la derecha aquí. Lo hizo tomar a los investigadores un largo tiempo para llegar con esta línea de código. Así que no estoy diciendo que esto es un problema fácil. Pero resulta que cuando uso la derecha entorno de programación de muchos algoritmos de aprendizaje va a ser muy corto programas».

El audio separada resultados jugado en la video conferencia no son perfectos, pero, en mi opinión, sorprendente. ¿Alguien tiene alguna idea sobre cómo que una línea de código realiza tan bien? En particular, ¿alguien sabe de un marco de referencia que explica el trabajo de la Te-Won Lee, Sam Roweis, Yair Weiss, y Eero Simoncelli con respecto a que una línea de código?

ACTUALIZACIÓN

Para demostrar que el algoritmo de sensibilidad del micrófono de la distancia de separación, la siguiente simulación (en la Octava) separa los tonos de dos separados espacialmente generadores de tono.

% define model 
f1 = 1100;              % frequency of tone generator 1; unit: Hz 
f2 = 2900;              % frequency of tone generator 2; unit: Hz 
Ts = 1/(40*max(f1,f2)); % sampling period; unit: s 
dMic = 1;               % distance between microphones centered about origin; unit: m 
dSrc = 10;              % distance between tone generators centered about origin; unit: m 
c = 340.29;             % speed of sound; unit: m /s 

% generate tones
figure(1);
t = [0:Ts:0.025];
tone1 = sin(2*pi*f1*t);
tone2 = sin(2*pi*f2*t);
plot(t,tone1); 
hold on;
plot(t,tone2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('tone 1', 'tone 2');
hold off;

% mix tones at microphones
% assume inverse square attenuation of sound intensity (i.e., inverse linear attenuation of sound amplitude)
figure(2);
dNear = (dSrc - dMic)/2;
dFar = (dSrc + dMic)/2;
mic1 = 1/dNear*sin(2*pi*f1*(t-dNear/c)) + \
       1/dFar*sin(2*pi*f2*(t-dFar/c));
mic2 = 1/dNear*sin(2*pi*f2*(t-dNear/c)) + \
       1/dFar*sin(2*pi*f1*(t-dFar/c));
plot(t,mic1);
hold on;
plot(t,mic2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('mic 1', 'mic 2');
hold off;

% use svd to isolate sound sources
figure(3);
x = [mic1' mic2'];
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
plot(t,v(:,1));
hold on;
maxAmp = max(v(:,1));
plot(t,v(:,2),'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -maxAmp maxAmp]); legend('isolated tone 1', 'isolated tone 2');
hold off;

Después de unos 10 minutos de la ejecución en mi computadora portátil, la simulación genera las siguientes tres figuras que ilustran los dos tonos aislados tienen las frecuencias correctas.

cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?

Sin embargo, ajuste el micrófono de la distancia de separación a cero (es decir, dMic = 0) hace que la simulación en lugar de generar tres cifras que ilustran la simulación no se pudo aislar un segundo tono (confirmado por el único significativo diagonal plazo devuelto en svd s de la matriz).

cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?

Tenía la esperanza de que el micrófono de la distancia de separación en un teléfono inteligente sería lo suficientemente grande como para producir buenos resultados, pero fijar el micrófono a una distancia de separación de 5,25 pulgadas (es decir, dMic = 0.1333 metros) hace que la simulación para generar el siguiente, a menos que alentadores, cifras que ilustran mayores componentes de frecuencia en el primer aislado de tono.

cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?
cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?

  • Tengo vagos recuerdos de esta conferencia, pero no puede recordar lo que x es; es el espectrograma de la forma de onda, o qué?
  • El profesor Ng, en t=5:30 en el vídeo de introducción 4 en la supervisión de aprendizaje, parece sugerir que x es un vector de las muestras de audio. Tal vez que repmat sección en la svd argumento es la aplicación de algún tipo de poder de la normalización de la señal.
InformationsquelleAutor gregS | 2013-12-06

2 Kommentare

  1. 22

    Yo estaba tratando de averiguar esto así, 2 años más tarde. Pero tengo mis respuestas; esperamos que va a ayudar a alguien.

    Necesita 2 grabaciones de audio. Usted puede obtener ejemplos de audio de http://research.ics.aalto.fi/ica/cocktail/cocktail_en.cgi.

    de referencia para la aplicación es http://www.cs.nyu.edu/~roweis/kica.html

    ok, aquí está el código –

    [x1, Fs1] = audioread('mix1.wav');
    [x2, Fs2] = audioread('mix2.wav');
    xx = [x1, x2]';
    yy = sqrtm(inv(cov(xx')))*(xx-repmat(mean(xx,2),1,size(xx,2)));
    [W,s,v] = svd((repmat(sum(yy.*yy,1),size(yy,1),1).*yy)*yy');
    
    a = W*xx; %W is unmixing matrix
    subplot(2,2,1); plot(x1); title('mixed audio - mic 1');
    subplot(2,2,2); plot(x2); title('mixed audio - mic 2');
    subplot(2,2,3); plot(a(1,:), 'g'); title('unmixed wave 1');
    subplot(2,2,4); plot(a(2,:),'r'); title('unmixed wave 2');
    
    audiowrite('unmixed1.wav', a(1,:), Fs1);
    audiowrite('unmixed2.wav', a(2,:), Fs1);

    cóctel algoritmo de enfermedad vesicular porcina aplicación ... en una sola línea de código?

    • Usted es capaz de encontrar una referencia que explica de manera más explícita la justificación para esa línea de código?
    • Podría por favor explicar cómo la señal de la mezcla de trabajo en el interior del enlace proporcionado? Mediante el código es bueno para extraer dos fuentes de sonido de los dos archivos mixtos descargado desde el sitio. Sin embargo, cuando trato de mezclar dos señales separadas junto a mí, parece que el algoritmo no puede producir el resultado correcto. Yo estoy usando la ingenua manera de obtener la mezcla de señales: mic1 = 0.3 * pista 1 + 0.5 * track2, mic2 = 0.5 * pista 1 + 0.3 * track2. Estos son la señal de que yo traté de alimentación para el algoritmo. Muchas gracias!
    • Soy un poco nuevo en Matlab. Estoy teniendo errores en la línea 3 diciendo que tiene un problema concatenación de 2 matriz de diferentes dimensiones. ¿Cómo debo manejar este problema?
    • Traté de que el código pero no funciona muy bien… (y no culpar a usted!!)
  2. 15

    x(t) es la voz original de un canal de micrófono/entrada.

    X = repmat(sum(x.*x,1),size(x,1),1).*x)*x' es una estimación del espectro de potencia de x(t). Aunque X' = X, los intervalos entre las filas y las columnas no son las mismas en todos. Cada fila representa el tiempo de la señal, mientras que cada columna de la frecuencia. Supongo que esto es una estimación de la simplificación y de un más estricto de la expresión de la llamada espectrograma.

    La Descomposición De Valor Singular en el espectrograma se utiliza para factorizar la señal en diferentes componentes con base en el espectro de la información. Diagonal de los valores en s son la magnitud de espectro diferentes componentes. Las filas en u y columnas en v' son los vectores ortogonales que el mapa de la componente de la frecuencia con la correspondiente magnitud a X espacio.

    No tengo datos de voz para probar, pero en mi entendimiento, por medio de la enfermedad vesicular porcina, las piezas caen en el parecido de los vectores ortogonales son esperemos ser agrupado con la ayuda de la supervisión de aprendizaje. Decir, si los 2 primeros diagonal magnitudes a partir de s se agrupan, a continuación, u*s_new*v' se forma de una sola persona-voz, donde s_new es el mismo de s a excepción de todos los elementos a la (3:end,3:end) son eliminados.

    Dos artículos sobre el sonido-la matriz formada y SVD son para su referencia.

    • gregS, matemáticamente un n-por-2 de la matriz x puede todavía forman una X con la repmat operación. Sin embargo, el espectrograma sólo puede mostrar canal cada vez. Así que creo que tiene más sentido utilizar n-por-1 x cada momento, y tratar el problema como una regresión lineal (dos ecuaciones de matrices). Otros dos posibles approachs son: (i) el promedio de dos canales como n-por-2 x; o (ii) de la unión de ellos juntos para construir una de 2*n-por-x 2.
    • gregS, he reconsiderado su pregunta. Puede funcionar en el caso de implementar repmat en un n-por-x 2. Físicamente puede ser visto como un promedio de potencia de dos canales en cada momento y de cada una de las frecuencias.
    • He encontrado este post después de ver el vídeo de introducción de la Máquina de Aprendizaje (el curso acaba de empezar de nuevo). Me preguntaba si usted logró reproducir el audio de separación se muestra en el vídeo, o si fue desarrollado durante el curso.
    • por favor búsqueda Andrew Ng publicación en supervisión/aprendizaje profundo en el audio, gracias
    • Usted puede encontrar discurso de los ejemplos aquí mcdermottlab.mit.edu/cocktail_examples/index.html
    • ¿Por qué es de $X$ el poder de espectro de $x$? También de acuerdo a la respuesta de Jack Z, $x$ no es la voz original de la grabación, pero algún tipo de procesado recíproco de la autovalor de la covarianza de la voz original.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea