Informe del Parcial Final
Identificacin de notas musicales de archivos .wav
Mediante el uso de MATLAB
Jeison Fabin Macas Ortiz - 20121-109132
Facultad de Ingeniera
Ingeniera de Petrleos
Neiva-Huila
04/06/2015
I.
Introduccin
A continuacin se presenta un programa desarrollado con el uso del software
MATLAB, permitiendo adquirir conocimientos y destrezas con funciones
desarrolladas en dicha herramienta, concretamente la interpretacin de notas
musicales mediante archivos tipo .wav, en este programa analizaremos una
seal, en nuestro caso una nota musical donde observaremos que su espectro
consiste en una serie de picos, correspondiente a la frecuencia fundamental con
componentes armnicos en mltiplos enteros de la misma, de ah que cuando
comprimimos el espectro en varias ocasiones (fenmeno conocido como
disminucin de resolucin), y lo comparamos con el espectro original, podemos
ver que los fuertes picos armnicos se alinean. El primer pico en el espectro
original coincide con el segundo pico en el espectro comprimido por un factor de
dos, que coincide con el tercer pico en el espectro comprimido por un factor de
tres. Por lo tanto, cuando los diferentes espectros se multiplican entre s, el
resultado ser formar un pico claro en la frecuencia fundamental, dichas
formulas y anlisis mencionados son fundamentales para el continuo progreso
de un correcto aprendizaje de la asignatura.
II.
Resultados
El cdigo utilizado para el desarrollo del ejercicio fue el siguiente:
% Parcial final de MATLAB
clc
clear all
%Archivo de prueba .wav
nota=input('Ingrese el nombre del archivo a analizar entre comillas
seguido de un ".wav": ');
[y,Fs] = wavread(nota);
wavplay(y,Fs)
Y=double(y);
Y=Y/max(Y); % Normalizacin de la seal.
N=length(Y); % N es igual al nmero de variables de Y
FFT=abs(fft(Y)/N);% FFT es La valor absoluto de la transformada rpida de
Fourier de Y.
coeficiente=2*FFT(1:floor(N/2)); % coeficientes unilaterales de la FFT
coeficiente(1)=0; % Laimina La componente DC
figure
plot(coeficiente) % Grfica de los coeficientes
title('Coeficientes');
grid on;
coeficiente2=downsample(coeficiente,2);
coeficiente3=downsample(coeficiente,3);
coeficiente4=downsample(coeficiente,4);
coeficiente5=downsample(coeficiente,5);
l=length(coeficiente5); % Dimensin del vector de coeficientes ms
pequeo.
for i=1:l
x=coeficiente(i)*coeficiente2(i)*coeficiente3(i)*coeficiente4(i)*coeficie
nte5(i);
X(i)=x; % Vector resultante
end
figure
plot(X) %Grfica del vector resultante
title('Vector Resultante');
grid on;
[Ymax,posi] = findpeaks(X, 'SortStr', 'descend'); % Encuentra los
Ymximos y su posicin.
FrecuenciaFundamental=posi(1); % La frecuencia fundamental es la del
Ymximo.
disp('La Frecuencia Fundamental es:');
disp(FrecuenciaFundamental);
if FrecuenciaFundamental==2210
disp('La nota introducida corresponde a:');
disp('Piano');
end
if FrecuenciaFundamental==238
disp('La nota introducida corresponde a:');
disp('A#');
end
if FrecuenciaFundamental==225
disp('La nota introducida
disp('A');
end
if FrecuenciaFundamental==448
disp('La nota introducida
disp('A+');
end
if FrecuenciaFundamental==252
disp('La nota introducida
disp('B');
end
if FrecuenciaFundamental==283
disp('La nota introducida
disp('C#');
end
if FrecuenciaFundamental==267
disp('La nota introducida
disp('C');
end
if FrecuenciaFundamental==317
disp('La nota introducida
disp('D#');
end
if FrecuenciaFundamental==299
disp('La nota introducida
disp('D');
end
if FrecuenciaFundamental==377
disp('La nota introducida
disp('F#');
end
if FrecuenciaFundamental==336
disp('La nota introducida
disp('E');
end
if FrecuenciaFundamental==356
disp('La nota introducida
disp('F');
end
if FrecuenciaFundamental==423
disp('La nota introducida
disp('G#');
end
if FrecuenciaFundamental==399
disp('La nota introducida
disp('G');
end
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
corresponde a:');
III.
Resultados
En la siguiente tabla mostraremos la nota, su frecuencia y su frecuencia
obtenida mediante el programa realizado:
Nota musical
Frecuencia en Hz
Frecuencia calculada en Hz
261 Hz
267 Hz
293 Hz
299 Hz
329 Hz
336 Hz
349 Hz
356 Hz
391 Hz
399 Hz
220 Hz
225 Hz
246 Hz
252 Hz
C#
277 Hz
283 Hz
D#
311 Hz
317 Hz
F#
369 Hz
377 Hz
G#
415 Hz
420 Hz
A#
233 Hz
238 Hz
Resultados Obtenidos:
IV.
Anlisis de los Resultados
Al comparar los resultados obtenidos con los resultados arrojados en la
tabla mostrada anteriormente, nos damos cuenta que estamos muy cerca
sin embargo podemos notar que variamos un poco esto es debido a
nmero de muestras significativas.
Este programa lo que hace es comparar la Frecuencia Fundamental del
archivo a analizar, y las compara con los datos anteriormente
mencionados en la tabla, si la Frecuencia Fundamental del archivo es
igual a alguna de las Frecuencias Fundamentales que tiene el programa
para comparar, este nos arrojar como resultado la nota.
V.
Conclusiones
Un grave problema HPS (Harmonic Product Spectrum) es que su
resolucin es slo tan buena como la longitud de la FFT la cual se utiliza
para calcular el espectro. Si realizamos una FFT corta y rpida, estamos
limitados en el nmero de frecuencias discretas.
MatLab brinda flexibilidad en la creacin de funciones mediante la
variabilidad de argumentos de salida y entrada a la misma.
La declaracin de funciones se puede realizar a travs de mltiples
maneras; ya sea de manera comn, simblica, en lnea o annima.
Se logr analizar el archivo .wav con el fin de obtener por medio de su
frecuencia fundamental la nota correspondiente.
VI.
(2011)
Bibliografa
Yamil A. Cerquera
Surcolombiana. ed 1.
Un
curso
de
Matlab.
Universidad
Efficient Pitch Detection Techniques for Interactive Music, Patricio de la
Cuadra, Aaron Master , Craig Sapp. Center for Computer Research in
Music and Acoustics, Stanford University