Sistema para la Afinación Automática de Sonidos Polifónicos
Click here to load reader
description
Transcript of Sistema para la Afinación Automática de Sonidos Polifónicos
1
Sistema para la Afinación
Automática de Sonidos
Polifónicos
Iván López Espejo | [email protected]
Este texto recoge la descripción fundamental del procedimiento ideado para la
afinación automática (asistida por computador) de sonidos polifónicos.
Motivación.
Todos conocemos de la existencia de plug-in’s y otros softwares de ordenador
que nos permiten afinar en tiempo real o por postprocesado una línea melódica, ya sea
voz humana u otro instrumento musical como puede ser una guitarra o un violín. No
obstante aún no existe un sistema comercial de afinación polifónica. Pensemos en que
en un estudio de grabación se recoge como línea de entrada una secuencia de acordes de
guitarra. Por algún avatar del destino, algunos de los acordes están desafinados y no
podemos volver a grabar dicha secuencia y, sin embargo, queremos respetarla porque su
ausencia provocaría un vacío en la pieza musical. La solución radicaría en la afinación
asistida por ordenador del acorde o acordes en cuestión. El sistema que se presenta a
continuación vendría a auxiliar en caso de que este problema se diese.
Otra utilidad similar podría venir dada por la necesidad de mejora de afinación
en una canción u obra que se desea remasterizar. En muchos casos de remasterización
de audio, no se dispone de la disgregación de pistas necesarias como para tratar cada
línea por separado. El sistema de afinación de una obra en conjunción vendría de nuevo
a auxiliar este problema.
Descripción de la solución.
La clave de la solución ofertada por este sistema radica en el trabajo realizado en
el dominio de la frecuencia ya que, de otro modo, a priori resultaría casi imposible la
afinación de polifonía en el dominio del tiempo. Mostraremos una aproximación
mediante la generación de un acorde ideal bastante limpio únicamente conformado por
los tonos fundamentales y sus respectivos armónicos atenuados exponencialmente.
Presentamos a continuación el diagrama de bloques, procediendo seguidamente a su
desglose y descripción:
2
Figura 1. Diagrama de bloques del sistema afinador.
El sonido polifónico desafinado debe ser recogido en primera instancia por el
bloque Estimador de Tonos Fundamentales. En esta primera etapa se determinan los
tonos fundamentales que componen el sonido polifónico mediante el estudio de
máximos del espectro. A tal fin, sea el acorde desafinado en el dominio del tiempo el
conjunto de � muestras �(�), obtenemos el espectro del mismo mediante la operación
de DFT de la forma:
�(�) = �(�)�� �� �����
���
Seguidamente trabajamos con el módulo de la transformada pues, recordemos que la
información sonora relevante se encuentra en el módulo del espectro y no en la fase. Por
tanto, calculamos las muestras del módulo (suponemos ahora mismo por simplicidad
que disponemos también de � muestras de la DFT) como:
|�(�)| = �ℜ{�(�)} + ℑ{�(�)} ∀� = 0,1, … , � − 1
Una vez calculado habremos de obtener un conjunto representativo de posiciones de las
muestras que son máximos. Estos máximos han de corresponderse con los picos de los
tonos y armónicos que conforman el acorde desafinado. Como no sabemos, a priori, el
número de tonos fundamentales (o no tenemos porqué saberlo), podemos curarnos en
salud tomando las posiciones de un conjunto amplio de máximos aunque, con la
experiencia, podremos ir adquiriendo un compromiso que maximice la eficiencia de tal
modo que el programa cumpla su cometido a la perfección en el menor tiempo posible.
Mediante un algoritmo de recorrido y comparación entre todas las posiciones de los
máximos obtenidos, clasificamos los tonos fundamentales y desechamos los armónicos.
El desechado de los armónicos se realiza mediante comparación por cociente entre el
potencial armónico y el potencial tono fundamental. De este modo, si uno de los
máximos se corresponde con un armónico, el cociente, idealmente, debe ser un número
natural �. Como puede haber cierta desviación, de nuevo, mediante una base de datos
estocástica determinaremos el mejor # que discierna entre un armónico del que no lo es.
En principio, # = 0.05, algo más que suficiente.
3
Una vez estimados todos los tonos fundamentales, la etapa devolverá un vector de tonos
fundamentales (los cuales se presuponen desafinados).
A continuación, el bloque Clasificador Lineal se encargará, mediante un sistema
de decisión lineal, de determinar cuál es el tono fundamental al cual se debe afinar cada
uno de los sonidos componentes de la polifonía desafinada. Esto lo hace linealmente
adaptando previamente la escala exponencial frecuencial a una función logarítmica.
Recordemos que la percepción auditiva del ser humano no es lineal con la frecuencia,
sino que la sensación de linealidad proviene del crecimiento exponencial de la
frecuencia. Recurriendo a la siguiente expresión:
&(', �) = 440(()�*)+(����� )),-. ( )
Donde log (2) hace referencia al logaritmo neperiano de 2. Nos interesa que la función sólo sea dependiente de �, donde � corresponde a la siguiente asociación:
n �ota
1 Do
2 Do#
3 Re
4 Re#
5 Mi
6 Fa
7 Fa#
8 Sol
9 Sol#
10 La
11 La#
12 Si
Como es lógico, para terminar de caracterizar la nota necesitaremos especificar la
octava en la que esta se encuentra, y de ello se encarga la variable '. Podemos dejar
expresada la octava, ', en función de la frecuencia como:
' = 3log 4 &32.77 + 18
En consecuencia, la función resulta:
& = 4409:;,-.<: => .?@+�A�*@+:����� @B ,-.( ) ⟹
⟹ log 4 &4407 = D43log 4 &32.77 + 18 − 47 + 4� − 1012 7E log(2) ⟹
⟹ log 4 &4407 = log(2) 3log 4 &32.77 + 18 − 4 log(2) + 4� − 1012 7 log(2) ⟹
⟹ F = GH + GIJKL (I) MJKL 4 NOOH7 − JKL (I) P3JKLI 4 NQI. R7 + G8 − OST
4
La función anterior resulta en un decisor lineal, de modo que, por redondeo, podremos
establecer la nota a la cual, respetando la percepción auditiva, se aproxima más la nota
desafinada. Se deduce inmediatamente que si n = 1,2,…,12, la nota componente está
perfectamente afinada y no será necesario realizar ninguna afinación por
desplazamiento de espectro.
El Estimador de Tonos Fundamentales enviará el vector de tonos al Clasificador
Lineal, de tal modo que, por ejemplo, imaginemos que uno de los tonos fundamentales
se situase según lo estimado a 450Hz (& = 450UV). Aplicando la anterior expresión deducida:
F = GH + GIJKL (I) MJKL 4OWHOOH7 − JKL (I) P3JKLI 4 OWHQI. R7 + G8 − OST = GH. QXYG
Como 0.3891 < 0.5, n = 10 y, por tanto, se correspondería con un La 4 (a 440Hz).
Podemos modificar la tabla decisoria de forma que la afinación no se correspondiese
con distancias de medio tono, sino que agrupase armonías concretas, siendo ello mera
particularización de lo expuesto. Notar también que consideramos un Do# igual a un
Reb, aunque ello no sea estrictamente ortodoxo en la práctica.
El bloque Filtro se encarga de filtrar todo el espectro correspondiente al acorde
desafinado de entrada, únicamente respetando las componentes asociadas a cada uno de
los tonos, por separado, estimados por el bloque Estimador de Tonos Fundamentales.
Realizando esta separación, lo que logramos es simplificar el problema, llevándolo
posteriormente a una mera afinación de un sonido aislado por desplazamiento del
espectro y finalmente sumando todas las muestras afinadas en el dominio del tiempo
reconstruyendo la polifonía ya arreglada.
El filtro se genera para cada caso particular según cada una de las frecuencias
estimadas. Este filtro no es más que la superposición en el dominio del tiempo del tono
fundamental estimado y todos los armónicos audibles con una dispersión de 2Hz, para
tratar de no modificar altamente el timbre del instrumento en cuestión. Aplicando la
operación de DFT anteriormente descrita, obtenemos la respuesta del filtro en el
dominio de la frecuencia, de modo que la convolución en el dominio del tiempo del
filtro con el acorde se transforma en el producto de los espectros del filtro y del acorde,
seleccionando así una sola nota de las que componen el sonido polifónico:
Z[\]^' ℎ`(�) ↔ ℱ{ℎ`(�)} = U`(�) c'�[d' e'\[&ó�[g' �(�) ↔ ℱ{�(�)} = �(�) �']h g'ie'��] j`(�) = ℎ`(�) ∗ �(�) = ℎ`(l)�(� − l)���
m��↔ n`(�) = U`(�)�(�)
Por tanto, este bloque se encargaría de, para cada una de las frecuencias fundamentales
estimadas, devolver el espectro de las o notas componentes, donde, en consecuencia, [ = 1,2, … , o.
Ahora, con ayuda del Clasificador Lineal, el bloque Afinador por
Desplazamiento de Espectro se encargará de afinar cada una de las notas componentes
a partir de los espectros proporcionados por el Filtro. Este bloque aprovecha el
5
conocimiento de la frecuencia fundamental estimada y la real o ideal para definir el
parámetro p = &^gq�g[h [dh\ &^gq�g[h r][ihdhs .
Aprovechamos la propiedad de escalado temporal de la transformada de Fourier que nos
dice:
�(p]) ↔ ℱ{�(p])} = 1|p| � :tp@
En consecuencia, cada uno de los espectros devueltos por el Filtro, n`(�), lo transformaremos en:
u`(�) = 1|p| n` 4�p7
Donde los índices de muestras �v se deben redondear al entero más cercano (el prototipo
trabaja con una muestra por hertzio, aunque mejoraría mucho su funcionamiento si lo
hiciese con una mayor resolución, únicamente escalando los anteriores resultados). Para
el parámetro p, la frecuencia estimada proviene directamente del Estimador de Tonos
Fundamentales mientras que la frecuencia ideal se calcula mediante la función
anteriormente expuesta:
&(', �) = 440(()�*)+(����� )),-. ( )
Donde � es el parámetro de redondeo devuelto por el Clasificador Lineal y ' hace referencia a la octava de la nota en cuestión según la expresión ya comentada:
' = 3log 4 &32.77 + 18
Una vez afinada la nota i-ésima por desplazamiento de espectro componente del sonido
polifónico, esta se pasa ya convertida mediante DFT inversa al bloque Buffer Sumador
en el Dominio del Tiempo:
�w=`�wxw(�) = 1� u(�)� �� �����
���
Aquí esperan todas las notas componentes hasta que están todas listas, momento en el
que son superpuestas para conformar el sonido polifónico ya afinado.
A continuación veamos un ejemplo de proceder del sistema. Supongamos que
tenemos un acorde de La menor construido sobre un La 4 (idealmente 440Hz), 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.
En la siguiente figura se observa un conjunto de 1000 muestras del acorde:
6
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 y. 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.
7
Por ello, el vector devuelto por el bloque será z = (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.
8
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:
�� = 10 + 12log (2) Mlog 44354407 − log (2) P3log 443532.77 + 18 − 4ST = 10.2390 � = 10 + 12log (2) Mlog 45204407 − log (2) P3log 452032.77 + 18 − 4ST = 0.8921 �> = 10 + 12log (2) Mlog 46504407 − log (2) P3log 465032.77 + 18 − 4ST = 4.7552
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:
&(4,10) = 440((*�*)+(������ )),-. ( ) = 440UV &(5,1) = 440((~�*)+(����� )),-. ( ) = 523.25UV &(5,5) = 440((~�*)+(~���� )),-. ( ) = 659.26UV
9
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 p:
p� = 440435 = 1.011494253 p = 523.25520 = 1.010096154 p� = 659.26650 = 1.014246154
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 (2y&]), por lo que, para conseguir que dicho tono se sitúe ahora a la frecuencia &′, precisaremos de multiplicar el anterior argumento por p = &�/&, de tal modo que
cos(p2y&]) = cos :=�= 2y&]@ = cos (2y&′]). Esta idea la hacemos corresponder con la
propiedad de escalado temporal de la transformada de Fourier anteriormente expuesta.
Seguidamente, para cada uno de los espectros de las notas componentes del acorde
obtenidas en la etapa de filtrado, aplicamos:
u`(�) = 1|p| n` 4�p7
Donde n` es la respuesta en frecuencia de la nota i-ésima conformadora de la polifonía.
A continuación se muestra la secuencia de espectros componentes ya afinados:
Figura 7. Espectro del La 4 afinado.
10
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).
11
Figura 10. Acorde afinado vs. acorde desafinado en el dominio del tiempo.