Matlab - Red neuronal afinador de guitarra

 
Vista:

Red neuronal afinador de guitarra

Publicado por Manuel (7 intervenciones) el 08/10/2009 04:30:55
Buenas quiero desarrollar una red neuronal que me permita reconocer las notas musicales cuando son tocadas en una guitarra.
La señal de la guitarra es grabada en matlab por la tarjeta de sonido y se guarda en un archivo .wav lo que quiero es poder entrenar la red para que me reconozca esas señales grabadas y me diga a que nota pertenece...
El archivo .wav se guarda como un vector donde están los valores de voltaje de la señal grabada lo que deseo es poder colocarle la señal de la guitarra anteriormente grabada a la entrada de la red neuronal y que esta pueda decirme a que nota pertenece esa señal, pero la verdad es que no se nada de este tema, no se como se entrena la red ni como le paso la señal grabada a la entrada para que la reconozca... Estoy buscando información y tratando de hacerlo pero no doy con la solución.

Espero que puedan ayudarme de verdad necesito su ayuda...
muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Red neuronal afinador de guitarra

Publicado por Andres Escobar (3 intervenciones) el 08/10/2009 06:26:29
Hola Manuel lo que propones es muy interesante he trabajado algo en matlab, para la primera parte que necesitas captuara sonido de tu trajeta de sonido te puedo pasar el siguiente codigo comentado:

%Fs = 44100; %%frecuencias admitidas (8000, 11025, 22050 y 44100), el tipo
%%de canal (1 para mono y 2 para stereo)

% y = wavrecord(5*Fs, Fs, 2); %%funcion para capturar la señal con los datos
%% previamente dados

% wavwrite(y,Fs,16,'sonido_uno.wav') %% para guardar una señal en formato
%%wav

%s= wavread('sonido_uno.wav'); %%para escuhar la señal grabada se asigna
%% ala variable s el comando wavread y para escucharla con el comando sound
%sound(s,44100)

% [y,Fs,NBits]=wavread('sonido_dos.wav') %%para conocer los datos de un archivo en formato wav,
%%como los valores del vector, su frecuencia de muestreo o el número de
%%bits NBits por muestra.

% siz=wavread('sonido_uno.wav','size') %% para saber la dimensión de los
%% canales del archivo en formato wav.



v=wavread('sonido_uno.wav'); %% gráfica espectral de la señal,y para saber cuál fue el tamaño
%%de las muestras y si las señales capturadas tienen uno o dos canales (Dimensión Vectorial).
M=wavread('sonido_dos.wav');

sound(v,44100)

sound(M,44100)

espv=abs(fft(v)); %% abs se refiere al valor absoluto o a la magnitud y
%% fft(v) es la transformada discreta de Fourier de un vector x.
espv_2=abs(fft(M));

subplot(2,2,1),plot(v),grid on,zoom,title('sonido Original uno')
subplot(2,2,2),plot(espv),grid on,zoom,title('Espectro de sonido uno ')

subplot(2,2,3),plot(M),grid on,zoom,title('sonido Original Dos')
subplot(2,2,4),plot(espv_2),grid on,zoom,title('Espectro de sonido Dos')

este código captura el sonido por la tarjeta de tu computador y lo guarda en formato wav, puedes cambiar el tiempo de muestreo y mirar el spectro, ya guardado la información puedes manipular el archivo y pasarloa un vector que seria parte de la red de entrenamiento que creo puede ser er una red neuronal multicapa, para hacer la parte de entrenamiento de la red y escoger cual red puedes usar el Nntool de matlab Comand Window = nntool, hay bastante info sobre esto y es muy facil de usar simplemente pones la matriz de entrada en inputs, luego la matriz a le que quieres llegar osea las notas de la guitarra , y a continuación colocar que tipo de red neuronal vas a usar perceptron, radial basis la que me jor se te acomode y luego el algoritmo de entrenamiento y luego simplemente le das entrnar y te entrega una grafica aprendizaje frente al tiempo.

y para terminar puedes usar simulink pasando la red neuronal y configurar para que reciba los rangos de frecuencia o voltaje a comparar y mandar la salida de la red a un disp para que te diga que nota es.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Red neuronal afinador de guitarra

Publicado por Manuel (7 intervenciones) el 08/10/2009 14:42:04
Muchas gracias por la informacion que me envias Andres y por la explicacion. Voy a probar lo que me dijiste y a ver lo de Nntoll e intentar hacerlo por alli. Cualquier avance o duda estare posteando por aqui.

Nuevamente muchas gracias.. estamos en contacto ;).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Red neuronal afinador de guitarra

Publicado por Andres Escobar (3 intervenciones) el 08/10/2009 06:28:55
Hola Manuel lo que propones es muy interesante he trabajado algo en matlab, para la primera parte que necesitas captuara sonido de tu trajeta de sonido te puedo pasar el siguiente codigo comentado:

%Fs = 44100; %%frecuencias admitidas (8000, 11025, 22050 y 44100), el tipo
%%de canal (1 para mono y 2 para stereo)

% y = wavrecord(5*Fs, Fs, 2); %%funcion para capturar la señal con los datos
%% previamente dados

% wavwrite(y,Fs,16,'sonido_uno.wav') %% para guardar una señal en formato
%%wav

%s= wavread('sonido_uno.wav'); %%para escuhar la señal grabada se asigna
%% ala variable s el comando wavread y para escucharla con el comando sound
%sound(s,44100)

% [y,Fs,NBits]=wavread('sonido_dos.wav') %%para conocer los datos de un archivo en formato wav,
%%como los valores del vector, su frecuencia de muestreo o el número de
%%bits NBits por muestra.

% siz=wavread('sonido_uno.wav','size') %% para saber la dimensión de los
%% canales del archivo en formato wav.



v=wavread('sonido_uno.wav'); %% gráfica espectral de la señal,y para saber cuál fue el tamaño
%%de las muestras y si las señales capturadas tienen uno o dos canales (Dimensión Vectorial).
M=wavread('sonido_dos.wav');

sound(v,44100)

sound(M,44100)

espv=abs(fft(v)); %% abs se refiere al valor absoluto o a la magnitud y
%% fft(v) es la transformada discreta de Fourier de un vector x.
espv_2=abs(fft(M));

subplot(2,2,1),plot(v),grid on,zoom,title('sonido Original uno')
subplot(2,2,2),plot(espv),grid on,zoom,title('Espectro de sonido uno ')

subplot(2,2,3),plot(M),grid on,zoom,title('sonido Original Dos')
subplot(2,2,4),plot(espv_2),grid on,zoom,title('Espectro de sonido Dos')

este código captura el sonido por la tarjeta de tu computador y lo guarda en formato wav, puedes cambiar el tiempo de muestreo y mirar el spectro, ya guardado la información puedes manipular el archivo y pasarloa un vector que seria parte de la red de entrenamiento que creo puede ser er una red neuronal multicapa, para hacer la parte de entrenamiento de la red y escoger cual red puedes usar el Nntool de matlab Comand Window = nntool, hay bastante info sobre esto y es muy facil de usar simplemente pones la matriz de entrada en inputs, luego la matriz a le que quieres llegar osea las notas de la guitarra , y a continuación colocar que tipo de red neuronal vas a usar perceptron, radial basis la que me jor se te acomode y luego el algoritmo de entrenamiento y luego simplemente le das entrnar y te entrega una grafica aprendizaje frente al tiempo.

y para terminar puedes usar simulink pasando la red neuronal y configurar para que reciba los rangos de frecuencia o voltaje a comparar y mandar la salida de la red a un disp para que te diga que nota es.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Red neuronal afinador de guitarra

Publicado por Manuel (7 intervenciones) el 09/10/2009 04:25:55
Hola Andres estuve probando lo que me dijiste y la verdad es que estoy un poco trancado en eso del nntool... La señal de la guitarra la logro grabar perfectamente y la guardo en una variable lo que no se es como le paso ese vector a la red para poder compararlo como hago para que la red reciba ese vector como input?...
Yo había pensado en otra forma que era sacando la frecuencia de la señal y pasandole a la red solo el valor de la frecuencia de la nota que se toco en la guitarra... por medio de la fft consigo la transformada y bueno la frecuencia de la señal pero no me da siempre igual, osea que aveces toco una nota y me da una frecuencia X y luego toco la misma y me da otra frecuencia por eso estoy intentando hacerlo así directamente con la señal que se graba pero no se como hacerlo...

de verdad necesito ayuda espero me la puedan brindar
muchas gracias por la respuesta Andres estaré trabajando en esto y bueno esperando algún otro aporte de antemano muchas gracias....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar