detector de notas
Flores Ramírez Bernardo
Programa para el reconocimiento de frecuencias fundamentales de notas musicales
Este programa utiliza la transformada de Fourier para desplegarel espectro de frecuencias correspondiente a un segundo de grabación de audio.
En el código mostrado a continuación se describe de manera más amplia el funcionamiento del programa.
%Las secciones deadquisición y análisis de este programa están basadas en
%un ejemplo tomado de la ayuda de MATLAB, sin embargo se le realizaron
%modificaciones para cumplir el objetivo de la tarea.
clear allclose all
clc
% 1.Crea un objeto de la entrada analógica
AI = analoginput('winsound');
% 2.Agrega un canal de entrada
chan = addchannel(AI,1);
% 3.Asignación de valores a las propiedades básicas de configuración, % y creación de las variables blocksize y Fs, las cuales serán usadas % en el análisis subsecuente.
duration = 1; %1second acquisition
set(AI,'SampleRate',8000)
ActualRate = get(AI,'SampleRate');
set(AI,'SamplesPerTrigger',duration*ActualRate)
set(AI,'TriggerType','Manual')
blocksize= get(AI,'SamplesPerTrigger');
Fs = ActualRate;
while true
% 4.Adquisisción de información. Se inicializa el objeto AI y se % comienza la extracción de información.
%Antes de comenzar la adquisición es necesario encender la fuente
% sonora que se registrará
start(AI)
trigger(AI)
wait(AI,duration + 1) %La función wait pausaMATLAB ya sea que la
%adquisisción se complete o el tiempo culmine
%(lo que suceda primero).
data = getdata(AI);
% 5. Análisis dedatos
xfft = abs(fft(data)); % Transformada de Fourier
mag = 20*log10(xfft); %Eje de magnitud en dB
mag = mag(1:floor(blocksize/2));
f = (0:length(mag)-1)*Fs/blocksize;%Eje de frecuencia...
Regístrate para leer el documento completo.