Você está na página 1de 4

ISSN 15623823.

I NDEXADA EN : S CI ELO, L ATINDEX , P ERI ODICA

ANALISIS DE SONIDO PARA DETERMINACION DE NOTAS MUSICALES


F RANCISCO J AVIER C ASTA NETA M ANCILLA
Facultad de ciencias Puras y Naturales Fisica - UMSA

RESUMEN Para la determinac on de una nota musical se hizo us o de herramientas como ser la Transfomada Discreta de Fourier (DTF), utilizando tambien un algoritmo de seleccion tanto para la nota como la octava, despues se simplico el trabajo usando caracteristicas de las notas como ser la periodicidad de las notas (hay 12 notas antes de que doble la frecuencia fundamental). Todo este trabajo se lo realizo en MATLAB. Subject headings:
1. INTRODUCCION

1.1. Notas y escala musical

Las notas musicales corresponden a sonidos con ciertas frecuencias bien determinadas, obedeciendo las convenciones establecidas a lo largo de la historia. El intervalo entre dos notas musicales de frecuencias v1 y v2 es denido por la razon de las frecuencias v2 /v1 . En particular, cuando v2 = 2 v1 , se dice que es un intervalo de octava y los dos sonidos son percibidos como la misma nota musical en alturas diferentes. Pitagoras ya habia descubierto, en el siglo VI a.C. que sonidos musicales harmonicos son emitidos por una cuerda vibrante cujo largo es divido segun proporciones simples, loque altera en la misma proporcion la frecuencia v1 del tono fundamental de la cuerda. Asi reduciendo el largo a la mitad, el tono fundamental producido esta en una octava arriba; la proporcion 2:3 da la razon de frecuencias 3/2, y corresponde a el intervalo de la quinta, que separa las notas Do y Sol, y asi por delante. La tabla 1 da los intervalos vn /v1 entre Do y las demas notas en la escala diatonica naior natural y los intervalos vn /vn1 entre cada dos notas consecutivas.
Nota vn /v1 Do 1 Re 9/8 Mi 5/4 Fa 4/3 Sol 3/2 La 5/3 Si 15/8 Do 2

spondiendo cada uno a 21/12 = 1, 0595 o sea una frecuencia aproximadamente 6% mayor. La tabla dos muestra la escala cromatica temperada, muestra que este es un buen compromiso, pues los intervalos son bastante proximos a los de la escala natural.
Nota Intervalo temperado Intervalo natural Do 1,0000 1,0000 Do# 1,0595 Re 1,1225 1,1250=9/8 Re# 1,1892 Mi 1,2600 1,2500=5/4 Fa 1,3348 1.3333=4/3 Fa# 1,4142 Sol 1,4983 1,5000=3/2 Sol# 1,5874 La 1,6818 1,6666=5/3 La# 1,7818 Si 1,8877 1,8750=15/8

TABLA 2 N OTAS EN LA ESCALA C ROMATICA

La frecuencia absoluta fue jada, por una convencion internacional deniendo la nota La de la escala media del piano como v = 440Hz .
1.2. Transformada Discreta de Fourier (DFT)

TABLA 1 N OTAS EN LA ESCALA DIATONICA N ATURAL

Un sonido musical emitido por una cuerda vibrante, por ejemplo, corresponde a un movimiento periodico, y como tal puede ser analisado por una serie de Fourier. Generalmente, por tanto, tenemos, un frecuencia fundamental v1 , una superposicion de tonos armonicos de frecuencias v2 = 2 v1 , v3 = 3 v1 , etc. Con amplitudes que tenden a decrescer. En una escala temperada la octava es dividida en 12 intervalos iguales (semitonos temperados), corre-

En matematicas, la transformada discreta de Fourier o DFT (del ingl es, Discrete Fourier Transform) es un tipo de transformada discreta utilizada en el analisis de Fourier. Transforma una funcin matematica en otra, obteniendo una representaci on en el dominio de la frecuencia, siendo la funci on original una funci on en el dominio del tiempo. Pero la DFT requiere que la funci on de entrada sea una secuencia discreta y de duraci on nita. Dichas secuencias se suelen generar a partir del muestreo de una funcin continua, como puede ser la voz humana. Al contrario que la transformada de Fourier en tiempo discreto (DTFT), esta transformaci on unicamente sucientes componentes frecuenciales para evalua reconstruir el segmento nito que se analiza. Utilizar la DFT implica que el segmento que se analiza peri es un unico per odo de una senal odica que se extiende de forma innita; si esto no se cumple, se debe utilizar una ventana para reducir los espurios del espectro. Por la misma raz on, la DFT inversa (IDFT) no puede reproducir el dominio del tiempo completo, a no ser que la entrada sea peri odica indenidamente. Por estas razones, se dice que la DFT es una transfor mada de Fourier para analisis de senales de tiempo

Francisco Castaneta disp(Identicacion de los acordes digitales por medio de la DFT); disp(Lista de frecuencias de la Octava 4); disp(DO = 261,63); disp(RE = 293,66); disp(MI = 329,63); disp(FA = 349,23); disp(SOL = 392,00); disp(LA = 440,00); disp(SI = 493,88); %% En esta parte grabamos el archivo de sonido; t=2; Fs=44100; ch=1; YW=zeros(t*Fs,1); YW=wavrecord(t*Fs,Fs,ch); NBits=16; lexxx=le1.wav wavwrite(YW,Fs,NBits,lexxx); y,fs =wavread(le1.wav); % Se debe tener el archivo en la misma carpeta % YW = muestras de la seal % fs = frecuencia de muestreo disp(-); disp(Se ha leido un archivo en .wav.); subplot(311) T=length(y)/fs; t=linspace(0,T,T*fs); plot(t,y) title(SEAL) xlabel(Tiempo (s)) ylabel(Amplitud (V)) % Calculo de FFT dela pagina de Ayuda Matlab %http://www.mathworks.com/help/techdoc/ref/fft.html L=length(y); NFFT = 2 nextpow2(L); % Siguiente potencia de 2 de la longitud de y Y = fft(y,NFFT)/L;% FFT de la seal f = fs/2*linspace(0,1,NFFT/2+1);% Rango de frecuencia, linspace equivale a 0:1/(NFFT/2+1):1 potsenial=2*abs(Y(1:NFFT/2+1)); %Sacamos la potencia e igualamos el numero de puntos de f subplot(312) plot(f,potsenial); xlabel(Frecuencia (Hz)) ylabel(| Y(f) ) title(ESPECTRO DE LA SE NAL) xlim([0 1000]); m1 indi1 = max(potsenial); %tomamos el valor maximo y usamos el indice frecuencia= f(indi1); %frecuencia dominante %Algoritmo desarrollado en conjunto con otros equipos %que toma una octava de los acordes musicales y lo pasa a la cuarta octava, %donde La = 440 hz por medio de un buffer. disp(frecuencia); buffer= frecuencia; aux=buffer; octava=4;

discreto y dominio nito. Las funciones sinusoidales base que surgen de la descomposici on tienen las mismas propiedades.
DEL SISTEMA 2. DESCRIPCION

Para nes de nuestro programa y maximizar su eciencia se graba un archivo de sonido en formato .wav durante 2 segundos con una taza de muestreo de 44100 muestras por segundo. Para tener una buena resolucion usamos 16 Bits esto signica que tenemos 65536 niveles de cuantizac on. El esquema bajo elque se trabajo es el siguiente:

Audio DFT Frecuencia Octava Nota Resultado Se agrego tambien un pasabanda para poder as ltrar la seal este pasabanda debe trabajar en la octava numero 4 para que asi el ltro se estabilice.
3. RESULTADOS Y CONSIDERACIONES

Los resultados del programa son aceptables trabajando tanto con el algoritmo,como con la formula, siendo que en cada prueba tenemos un acierto, el ltro es de gran ayuda cuando tenemos ruido de fondo. El programa en si es bueno para la identicac on de las notas de cuerda vibrante, pero no asi en los instrumentos de viento teniendo aciertos solo si es que el instrumento se encuentra a una distancia considerable. Este efecto se debe al hecho de que los timbres de la voz humana, piano, violin, auta, etc. Son distintos apesar de generar la misma nota.
4. CONCLUCIONES

El programa es conable para cuerdas vibrantes, pero adhiriendo el uso de un espectro acustico conjuntamente con nuestro programa obtendriamos no solo un identicador de notas si no tambien un identicador de instrumentos.
5. ANEXOS 5.1. Codigo Fuente: Proyecto EUTERPE

%% Practica N1 %Francisco Javier Castaeta Mancilla %UMSA-FCPN %Identicacion de los acordes (do,re,mi,fa,sol,la,si) close all;clear all;

musicales

%% Display de tabla de Frecuencias de las notas musicalesdisp( );

Analis s de sonido con MATLAB for i=1:15; if buffer<=521 && buffer>=255; break; end if buffer>500 buffer=buffer/2; octava=octava+1; end if buffer<255; buffer=buffer*2; octava=octava-1; end end frecuencia=buffer; %Fin del Algoritmo % Determinar que nota se toco if frecuencia < 255nota = - ; end if (frecuencia >= 255 // frecuencia < 288) nota = Do ; fc=aux+250; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE DO) xlim([255 288]); end if (frecuencia >= 288 && frecuencia < 324) nota = Re ; fc=aux+200; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE RE) xlim([aux-15 aux+15]); end if (frecuencia >= 324 && frecuencia < 344) nota = Mi ; fc=aux+150; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE MI) xlim([aux-15 aux+15]); end if (frecuencia >= 344 && frecuencia < 387) nota = Fa ; fc=aux+100; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE FA) xlim([aux-15 aux+15]); end

if (frecuencia >= 387 && frecuencia < 435) nota = Sol ; fc=aux+100; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE SOL) xlim([aux-15 aux+15]); end if (frecuencia >= 435 && frecuencia < 488) nota = La ; fc=aux+50; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE LA) xlim([aux-15 aux+15]); end if (frecuencia >= 488 && frecuencia < 521) nota = Si ; fc=aux+100; subplot(313) stem(f,potsenial,ll); title(Espectro de y(t)) xlabel(Frecuencia (Hz)) ylabel(|Y(f)|); title(ZOOM DEL ESPECTRO DEL ACORDE SI) xlim([aux-15 aux+15]); end if (frecuencia >= 521) NotaCorrespondiente = -; end str= num2str(aux); %pasar numero a texto str2=num2str(octava); disp([La nota grabada tiene una frecuencia fundamental de: ,str, Hz]); disp([perteneciente a la octava ,str2, y corresponde al acorde musical: ,nota,.]); %%%%%%%%%%%%%%%%%%%%%Para que funcione el ltro, las notas deberian ser grabadas en la octava#4 %acorde o mayor, o que la suma de su frecuencia mas 100 sea mayor a 350 hz %para que el ltro se estabilice. %%%%%%% gure(2) %Filtro Pasabajas con frecuencia de corte a fc hz para tomar solo la %frecuncia fundamental para reconstruir la seal fNorm = fc / (fs/2); b,a = butter(10, fNorm, low); y Low = ltlt(b, a, y); % Gracacin de la seal en el tiempo subplot(211) plot(t,y Low) grid; title([SEAL ,nota, FILTRADA]);

Francisco Castaneta ylabel(|4(f)|) title([ESPECTRO DE LA SEAL ,nota,FILTRADA]) xlim([0 2000]) %% Reproducir archivo .WAV leido wavplay(y,fs) %escuchar archivo leido pause(1) wavplay(y Low,fs) disp(-); %% Sabiendo que las notas solo pueden estar entre 12 valores usamos la siguiente formula para identicar la nota; pruebita=oor(12*((log(frecuencia)/log(2))oor(log(frecuencia)/log(2)))); disp(pruebita);

xlabel(Tiempo (s)) ylabel(Amplitud (V)) % xlim([0 20/f0]) % Gracacin de la seal en frecuenciasubplot(212) % Llamado a la funcin que calcula la FFT L=length(y Low); NFFT = 2nextpow2(L); % Siguiente potencia de 2 de la long de y Y = fft(y Low,NFFT)/L; % FFT de la seal f = fs/2*linspace(0,1,NFFT/2+1); % Rango de frecuencia potsenial=2*abs(Y(1:NFFT/2+1)); plot(f,potsenial); grid; xlabel(Frecuencia (Hz))

REFERENCIAS [1]H. M OYSES N USSENSZVEIG, Curso de F sica Bas ca 2, cuarta edicion, BLUCHER,BRASIL, 2002. [2]C LAUDIO S CHERER, M etodos computacionais da F sica, pags. 49 61, 2005.

Você também pode gostar