martes, marzo 02, 2010

Sistema para la Afinación Automática de Sonidos Polifónicos (II)

Como dije, en esta entrada vamos a ver un ejemplo simplificado del sistema. En el caso de querer aplicarlo sobre instrumentos reales habría que realizar un estudio más extenso y a fondo, el cual no voy a hacer por falta de tiempo, presupuesto y apoyo, pero se me ocurriría que podría realizarse con ventanados, pues la característica del timbre del instrumento se encuentra distribuida a lo largo de todo el eje de frecuencias y no sólo se concentra en los tonos y armónicos componentes del sonido polifónico.

Supongamos que tenemos un acorde de La menor construido sobre un La 4 (La-Do-Mi). No obstante, las frecuencias de los tonos fundamentales de las notas componentes del acorde son 435Hz (para el La a 440Hz), 520Hz (para el Do a 523.25Hz) y 650Hz (para el Mi a 659.26Hz), por lo que está desafinado. (idealmente 440Hz),

En la siguiente figura se observa un conjunto de 1000 muestras del acorde:

Figura 2. 1000 muestras del acorde desafinado.

El sonido polifónico está muestreado a 44100Hz (calidad de audio) y está compuesto por, aparte de los tres tonos fundamentales, 20 armónicos cuya amplitud sufre un decaimiento exponencial por cada uno de los tonos fundamentales. A continuación, el bloque Estimador de Tonos Fundamentales calcula el módulo de la DFT del acorde entre 0 y pi. Como se aprecia en la figura 3, esta etapa implementa un algoritmo de selección de posición de máximos que se correspondan con las frecuencias de los tonos fundamentales. Por simplicidad, cada muestra se refiere a un hertzio, por lo que sobre el eje de abscisas se puede ver directamente la frecuencia fundamental de cada una de las notas componentes del acorde:

 
 Figura 3. Espectro del acorde desafinado.

Por ello, el vector devuelto por el bloque será v = (435,520,650).

Ahora, por cada nota detectada, se procederá del siguiente modo. La etapa Filtro, conocida la frecuencia fundamental de la nota i-ésima, con i = 1,2,…,M, siendo en este caso M = 3, generará el filtro en el dominio del tiempo anteriormente descrito. La siguiente secuencia de figuras recoge 1000 muestras de cada una de las respuestas temporales de los filtros según el vector v:

 Figura 4. Respuesta en el dominio temporal del filtro para la nota cuya frecuencia fundamental se sitúa en 435Hz.

Figura 5. Respuesta en el dominio temporal del filtro para la nota cuya frecuencia fundamental se sitúa en 520Hz.

Figura 6. Respuesta en el dominio temporal del filtro para la nota cuya frecuencia fundamental se sitúa en 650Hz.

Para cada uno de los filtros anteriormente generados se calcula el producto de sus respuestas en frecuencia con el espectro del acorde, lo que nos devuelve, en este caso, tres espectros (puesto que M = 3) que se corresponden con los propios de las notas componentes del sonido polifónico por separado.

“Paralelamente”, el Clasificador Lineal hace uso de las frecuencias estimadas de los tonos fundamentales para determinar hacia qué nota debe afinarse cada una de las componentes de la polifonía según lo descrito. Es decir:

 

Realizamos una simple clasificación lineal basada en minimización de distancia en el espacio de las notas musicales, por lo que deducimos que las notas componentes son La4-Do5-Mi5, como se puede extraer de la tabla anteriormente presentada. Las frecuencias reales de las notas son, en consecuencia:


Todos estos datos son recogidos por la etapa Afinador por Desplazamiento de Espectro. De este modo, para cada una de las notas componentes del acorde, calculamos el parámetro alpha:

 
 
Estos son los parámetros de escalado temporal motivados por la necesidad de modificar el pitch de cada una de las notas desafinadas. Pensemos en que el tono fundamental de cada una de las notas componentes de la polifonía se puede aproximar por la función cos(2pift), por lo que, para conseguir que dicho tono se sitúe ahora a la frecuencia f', precisaremos de multiplicar el anterior argumento por alpha = f'/f, de tal modo que cos(alpha2pift) = cos(2pif't).
Esta idea la hacemos corresponder con la propiedad de escalado temporal de la transformada de Fourier anteriormente expuesta. A continuación se muestra la secuencia de espectros componentes ya afinados:

 Figura 7. Espectro del La 4 afinado.

Figura 8. Espectro del Do 5 afinado.

Figura 9. Espectro del Mi 5 afinado.

La última etapa del diagrama de bloques se encargaría de sumar las transformadas inversas (muestras temporales) de cada uno de los espectros de las notas componentes del acorde, lo que se traduce en el sonido polifónico ya afinado. La siguiente gráfica recoge una comparación entre las primeras 1000 muestras del acorde desafinado (en azul) y las primeras 1000 muestras del acorde ya afinado (en rojo). Observar que el filtro introduce una cierta distorsión (sólo sería cuestión de ir "afinando" el sistema :D).

Figura 10. Comparación entre acordes afinado y desafinado en el dominio del tiempo.

Podéis descargar el ejemplo comentado a continuación. Notar que por algún problema relacionado con el filtrado o con el desplazamiento de espectro, se introdujo un efecto extraño en el acorde afinado, por lo que para mayor representatividad copié y pegué una secuencia del período más limpio. No obstante, los cortes sí se notan en el ensamblaje, lo que se traduce en un pequeño piqueteo.