diseno e implementacion de calibrador de afinacion para guitarra en matlab

4
Diseño e implementación de calibrador de afinación para guitarra en MATLAB Manuel Alejandro Yáñez Quintero Universidad de San Buenaventura sede Bogotá Programa de Ingeniería de Sonido Correo-e: [email protected] Abstract. Guitar tuning or calibration is a problematic process if tuning references are not present. That is why musicians consider helpful a tool which provides standard sounds for tuning. Going further, if technology can assist those players who are just beginning in his ear training process, a device or program which accomplishes this task becomes a powerful guide for recognizing and tuning properly an instrument as the guitar. It will be shown how a simple frequency analyser can completely success this purpose through FFT algorithm and Fundamental Frequency Identification. 1. Introducción Para el análisis de cualquier señal existe la posibilidad de computar y procesar muestras en el dominio del tiempo y de la frecuencia. La aplicación a desarrollar es indispensable manipular las señales capturadas en el dominio de la frecuencia, para identificar la frecuencia fundamental o tonal de las cuerdas, compararlas una a una con la referencia y así conseguir la afinación del instrumento. Mediante la transformación del dominio tiempo a frecuencia (Transformada de Fourier), y el algoritmo respectivo para identificar la frecuencia fundamental, son herramientas que permitirán en el desarrollo de la calibración del instrumento de forma muy simple. 2. Descripción del algoritmo El algoritmo para lograr un sistema de calibración para guitarra consta de los siguientes procedimientos: Captura de la señal emitida cuerda a cuerda. Transformación de la señal capturada al dominio de la frecuencia. Identificación de la frecuencia fundamental de cada cuerda. Comparación con las frecuencias de afinación de cada cuerda. Comunicación del estado de las cuerdas (afinadas, desafinadas). 2.1. Captura de Cuerdas. Para evitar superposición de frecuencias y problemas subsiguientes en la detección de la frecuencia fundamental cuerda a cuerda, se decidió realizar la captura de la señal cuerda a cuerda. A continuación se muestra el código utilizado para captura de las cuerdas; se registra durante 5 segundos la señal de la cuerda y al finalizar se reproduce para avisarle al usuario que ya ha finalizado la captura: x = wavrecord(5*fs, fs, 2); wavplay(x,fs);

Upload: andy-rodriguez

Post on 04-Sep-2015

215 views

Category:

Documents


2 download

DESCRIPTION

Matlab

TRANSCRIPT

Ejemplo formato artculo

Diseo e implementacin de calibrador de afinacin para guitarra en MATLABManuel Alejandro Yez Quintero

Universidad de San Buenaventura sede Bogot

Programa de Ingeniera de Sonido

Correo-e: [email protected]. Guitar tuning or calibration is a problematic process if tuning references are not present. That is why musicians consider helpful a tool which provides standard sounds for tuning. Going further, if technology can assist those players who are just beginning in his ear training process, a device or program which accomplishes this task becomes a powerful guide for recognizing and tuning properly an instrument as the guitar. It will be shown how a simple frequency analyser can completely success this purpose through FFT algorithm and Fundamental Frequency Identification.1. IntroduccinPara el anlisis de cualquier seal existe la posibilidad de computar y procesar muestras en el dominio del tiempo y de la frecuencia.

La aplicacin a desarrollar es indispensable manipular las seales capturadas en el dominio de la frecuencia, para identificar la frecuencia fundamental o tonal de las cuerdas, compararlas una a una con la referencia y as conseguir la afinacin del instrumento.Mediante la transformacin del dominio tiempo a frecuencia (Transformada de Fourier), y el algoritmo respectivo para identificar la frecuencia fundamental, son herramientas que permitirn en el desarrollo de la calibracin del instrumento de forma muy simple.

2. Descripcin del algoritmoEl algoritmo para lograr un sistema de calibracin para guitarra consta de los siguientes procedimientos: Captura de la seal emitida cuerda a cuerda.

Transformacin de la seal capturada al dominio de la frecuencia.

Identificacin de la frecuencia fundamental de cada cuerda.

Comparacin con las frecuencias de afinacin de cada cuerda.

Comunicacin del estado de las cuerdas (afinadas, desafinadas).

2.1. Captura de Cuerdas.

Para evitar superposicin de frecuencias y problemas subsiguientes en la deteccin de la frecuencia fundamental cuerda a cuerda, se decidi realizar la captura de la seal cuerda a cuerda.

A continuacin se muestra el cdigo utilizado para captura de las cuerdas; se registra durante 5 segundos la seal de la cuerda y al finalizar se reproduce para avisarle al usuario que ya ha finalizado la captura:

x = wavrecord(5*fs, fs, 2);wavplay(x,fs);wavwrite(x,fs,16,'sonido_uno.wav')[y, fs]=wavread('sonido_uno.wav');2.2. Transformacin de la seal capturada al dominio de la frecuencia (Anlisis en frecuencia)

En MATLAB hay un algoritmo que me transforma de manera sencilla cualquier seal en el dominio del tiempo al dominio de la frecuencia, basta con utilizar el formato que a continuacin se relaciona:

N=length(y) Y=fft(y,N);y es el vector que contiene la seal en el dominio del tiempo

Y es el vector calculado mediante la FFT y contiene la seal en el dominio de la frecuencia.

2.3. Identificacin de la frecuencia fundamental de cada cuerda.Cuando tenemos la seal en el dominio de la frecuencia, identificar la frecuencia fundamental es una tarea sencilla, corresponde siempre a la frecuencia con mayor amplitud cuando la seal ha sido transformada al dominio de la frecuencia.

En el cdigo que se presenta se utiliza la funcin max para identificar el pico de la seal en el dominio del tiempo, el valor de retorno que se han denominado o me indica la posicin en el vector del mximo localizado, por tal motivo debo convertir ese valor o mediante una regla de tres donde pueda conocer el valor de frecuencia asociado para el rango que estoy analizando en el vector, segn la frecuencia mxima de muestreo que corresponde a fs y el nmero de muestras N que tiene el vector.

Se toma siempre el primer mximo, ya que el algoritmo max calcula todos los mximos de la seal que se procesa. Sabiendo que no interesan los armnicos sino solo la frecuencia fundamental del audio capturado.

[a, o]=max(Y);fundamental(1)=o*fs/N;2.4. Comparacin con las frecuencias de afinacin de cada cuerda y Comunicacin del estado de las cuerdas (afinadas, desafinadas).

Al capturar el audio cuerda a cuerda garantizamos que por ms fuera del rango de afinacin que est la cuerda, el algoritmo no la confundir con otra cuerda, al estar 100% seguros de esta condicin podemos aplicar el desarrollo del siguiente algoritmo, sabiendo que los rangos de estado afinado deben ser muy selectivos, los dems rangos (desafinado: soltar cuerda o desafinado: apretar cuerda) son ms amplios.

La Tabla 1. Da la referencia para mostrar al usuario si la cuerda ha logrado su afinacin o qu accin es necesaria para llegar a ese estado.

Las imgenes y textos en el cdigo y en el numeral de Tablas y Grficas, se han denominado Grficas 1, 2 y 3; son los encargados de interactuar con el usuario y mostrarle el estado de cada cuerda.

Seccin del Cdigo para la Primera Cuerda:

%PRIMERA CUERDAif fundamental(1)300 if fundamental(1)330[x,map]=imread('vuhafinado.jpg','jpg');imshow(x);axis offset(handles.text2,'String','Primera Cuerda Afinada'); elseif fundamental (1)>350 [x,map]=imread('vuhmas.jpg','jpg'); imshow(x); axis off set(handles.text2,'String',' Soltar Primera Cuerda '); elseif fundamental(1)