Robot Bailón
Desarrollado por:
Jesús López Méndez
Valerio Rodríguez Robledo
Objetivos
• El propósito de esta práctica es desarrollar un
sistema capaz de interpretar una melodía y
tomar decisiones de acuerdo a sus características
(ritmo, notas, ...).
• Dicho sistema será desarrollado en tres módulos
o partes:
Primer módulo
• Un primer módulo que se encarga de procesar la
melodía. Detecta cuándo comienza la melodía y
la muestrea en ventanas temporales, decidiendo
en cada una de ellas de que nota se trata
mediante una correlación con un seno y coseno
de cada frecuencia que se espera. Esto da lugar a
una secuencia de notas que serán interpretadas
por el siguiente módulo.
Segundo Módulo
• Un segundo módulo que sirve de interfaz y dará
unos parámetros en función de dicha melodía.
Se trata de, mediante software, parametrizar la
melodía en función del ritmo, nota instantánea,
conjunto de notas... (aún por determinar),
pasando estos valores al siguiente módulo.
Tercer módulo
• Un tercer módulo que comunica con el robot,
indicándole los movimientos que debe hacer en
función de los parámetros obtenidos. Este
último módulo deberá ser diseñado de acuerdo
al robot utilizado, teniendo en cuenta las
posibilidades de movimiento de este.
Desarrollo del primer módulo
• Hemos simulado el algoritmo de detección de
notas mediante MATLAB a fin de dimensionar
los parámetros necesarios para su correcta
realización (fs, tamaño de ventana…)
• Posteriormente adaptaremos a ColdFire dicho
algoritmo (en progreso).
Detección: teoría
• La detección se basa en correlaciones con senos
de las frecuencias que queremos detectar (desde
Sol3 al Do5 del violín), obteniendo un conjunto
de valores proporcionales a la potencia del
sonido escuchado a dichas frecuencias.
• De acuerdo con la teoría de la DFT:
Detección: teoría
• Cada muestra debe ser multiplicada por la muestra
equivalente de un seno y un coseno a cada
frecuencia y cada uno de estos valores es sumado al
acumulador del seno y del coseno respectivos de
esta ventana temporal y esta frecuencia. Al final
de la ventana, se suman los cuadrados de el
acumulador del seno y del coseno a cada frecuencia,
obteniendo una magnitud proporcional a la
potencia de la señal en dicha ventana, a la
frecuencia del seno y el coseno utilizados.
Detección: ventanas temporales
• En nuestra detección, la forma de determinar la
nota que está sonando, es decidir en cada ventana
temporal, cual es la frecuencia predominante.
• Las ventanas tendrán un número de muestras fijo
(que determinaremos en la simulación) y estarán
solapadas con el fin de dar la resolución temporal
que necesitemos (el margen de solapamiento será
determinado en simulación), reaprovechando
cálculos ya que las ventanas solapadas tienen
muestras en común.
Teoría: Frecuencia de muestreo
y Tamaño de ventana
• Si la máxima frecuencia que detectaremos es fmáx, la
frecuencia de muestreo de acuerdo al Criterio de
Nyquist será: fs=2·fmáx.
• Si la mínima diferencia de frecuencias a detectar es
fdmín, el tamaño de ventana deberá tener N muestras de
acuerdo a:
2 · f s
fs
2
N


2  1 2 f 2  f1
f 2  f1
Simulación con MATLAB
• Según la teoría expuestas, hemos implementado el
algoritmo con MATLAB, de forma que detecte las
notas de un wav (grabación del violín).
• Tomando sólo determinadas muestras de la grabación
simulamos la frecuencia de muestreo que utilizaremos
con ColdFire.
• Definiremos dos variables:
• k (fs=44100/k)
• c (nº muestras/ventana)
Nos ayudamos de los armónicos
• Para conseguir una precisión espectral mayor, tenemos
en cuenta los armónicos de cada nota, de modo que
sumamos la energía de los armónicos a su nota
fundamental.
Los armónicos de una nota siguen el siguiente orden (el
más a la izquierda tiene más potencia):
La imagen corresponde a los armónicos del La2.
• En nuestro caso nos limitamos a considerar como la
potencia de una nota, la suma de su potencia, la de su
octava y la de la quinta de su octava superior (13).
Resultados de la simulación con
MATLAB
• A partir de la teoría y la simulación, hemos determinado:
k=9 (fs=4900baudios) y c=445.
• Al introducir una melodía que es una escala cromática
desde el Sol3 hasta el Do5 con 8bits/muestra (mono).
• Asignamos el valor 1 a la nota menor (Sol3), 2 a Sol#3…
así hasta el 44 que será Re7 (la quinta de la octava del Sol5,
la máxima nota que detectamos). El siguiente valor, el 45,
representará el silencio, que se asignará cuando la potencia
a todas las frecuencias no supera un cierto umbral.
Representación Notas-Tiempo de una Escala Cromática
Problema
• Como se observa en la figura anterior, se confunden las
notas que son la misma pero en distinta octava. Esto es
debido a la gran cantidad de armónicos que presenta el
violín, que causa que tengan más potencia los armónicos de
las notas graves que las propias notas, o que tengan más
potencia los subarmónicos de la notas agudas que las
propias notas agudas.
• Solución: Reducimos nuestra detección a una escala,
considerando solamente qué nota es, sin considerar a qué
escala pertenece. Así, sólo diferenciaremos entre 12
posibles notas, lo que es variedad suficiente.
Representación Notas-Tiempo de una Escala Cromática
Detectando sólo la escala inferior
Comienzo de programación en C:
ADC
• Para comenzar, hemos adaptado el programa de manejo
del ADC a nuestras necesidades, haciendo que al leer la
muestra tomada, podamos encargar la muestra siguiente, y
aprovechar el tiempo de espera hasta la muestra siguiente
para realizar el proceso de la muestra anterior.
• Debido al error de cuantificación que comete el ADC,
reducimos el número de bits por muestra de 12 a 8
(eliminando los 4 menos significativos), lo que además
favorece las operaciones, pudiendo utilizar tamaños BYTE.
Próximos pasos
Continuar con el desarrollo del algoritmo en C y
mejorar el sistema de detección ya sobre ColdFire.
Descargar

RobotBailon_2-4