generación automática de instrumentos fm a partir …i resumen la síntesis de audio por...
TRANSCRIPT
UNIVERSIDAD DE CASTILLA - LA MANCHA
ESCUELA SUPERIOR DE INGENIERÍA INFORMÁTICA
INGENIERÍA
EN INFORMÁTICA
PROYECTO FIN DE CARRERA
Generación automática de instrumentos FM a partir de ejemplos
Miguel Ángel Teruel Martínez
Julio, 2010
UNIVERSIDAD DE CASTILLA – LA MANCHA
ESCUELA SUPERIOR DE INGENIERÍA INFORMATICA
Departamento de Sistemas Informáticos
PROYECTO FIN DE CARRERA
Generación automática de instrumentos FM a partir de ejemplos
Autor: Miguel Ángel Teruel Martínez
Director: Luis Rodríguez Ruiz
Julio, 2010
I
RESUMEN
La síntesis de audio por modulación en frecuencias (FM) es una técnica que con un
conjunto relativamente pequeño de parámetros puede generar sonidos ricos y realistas.
Estos parámetros son normalmente establecidos por un experto. El objetivo de este
proyecto es desarrollar una serie de técnicas que permitan estimar de forma automática
estos parámetros.
Para la realización de dicha tarea se utilizarán técnicas metaheurísticas, como la
búsqueda local y los algoritmos genéticos.
El uso de esta técnica junto a técnicas de búsqueda local proporcionará el conjunto
de parámetros a partir de os cuales generaremos un instrumento FM, el cual podría ser
utilizado, por ejemplo, para la creación de un sintetizador comercial.
Tras el diseño e implementación de algoritmos basados en las técnicas
anteriormente mencionadas se efectuarán una serie de experimentos para comprobar la
funcionalidad de los mismos. Estos experimentos consistirán en generar automáticamente
los parámetros de unos instrumentos FM que imiten a una serie de instrumentos reales.
III
AGRADECIMIENTOS
Quisiera dar las gracias en primer lugar al director del proyecto, Luis Rodríguez, por
el apoyo que me ha proporcionado durante la realización de este trabajo, así como por la
paciencia que ha tenido.
En segundo lugar quiero dar las gracias a mis amigos Miguel Arnedo y Matías Díaz
por su apoyo en parte matemática del proyecto, así como a Emilio Vidal por haber probado
la aplicación.
Como último, gracias a todos aquellos que de una u otra manera me han apoyado y
animado a lo largo de éste último año durante el cual he realizado éste trabajo.
IV
ÍNDICE GENERAL
1. INTRODUCCIÓN ........................................................................................................... 1
2. ESTADO DEL ARTE ...................................................................................................... 3
2.1. FUNDAMENTOS DE PRODUCCIÓN Y TRATAMIENTO DE AUDIO
MEDIANTE COMPUTADOR ............................................................................................. 3
2.1.1. Sonido, Acústica y Psicoacústica ............................................................. 3
2.1.2. Procesamiento del sonido ......................................................................... 5
2.1.3. Análisis espectral .................................................................................... 12
2.1.4. Técnicas básicas de síntesis de audio ...................................................... 19
2.2. INTELIGENCIA ARTIFICIAL, METAHEURÍSTICAS Y ALGORITMOS
GENÉTICOS ....................................................................................................................... 36
2.2.1. Algoritmos genéticos .............................................................................. 39
2.2.2. Búsqueda local ........................................................................................ 48
3. DISEÑO E IMPLEMENTACIÓN ............................................................................... 53
3.1. DISEÑO .............................................................................................................. 54
3.1.1. Sintetizador FM ...................................................................................... 54
3.1.2. Comparador de señales de audio ............................................................. 55
3.1.3. Algoritmo genético ................................................................................. 56
3.1.4. Búsqueda local ........................................................................................ 60
3.2. IMPLEMENTACIÓN
3.2.1. Diagrama de clases ................................................................................. 61
3.2.2. Descripción de las clases ........................................................................ 61
4. EXPERIMENTOS ......................................................................................................... 72
5. CONCLUSIONES ......................................................................................................... 86
6. BIBLIOGRAFIA ........................................................................................................... 87
ANEXO A. RESULTADOS DE LOS EXPERIMENTOS ............................................. 89
ANEXO B. CONTENIDO DEL CD ADJUNTO ............................................................ 94
V
ÍNDICE DE FIGURAS
2.1. Representación esquemática del oído ............................................................................. 3
2.2. Variación del voltaje respecto al tiempo en una onda sonora ......................................... 6
2.3. Señal digital y señal analógica ........................................................................................ 7
2.4. Proceso de digitalización de una señal analógica ........................................................... 9
2.5. Ejemplo de aliasing ...................................................................................................... 10
2.6. Señal analógica muestreada a 8 y 16 bits ..................................................................... 11
2.7. Onda generada por una sucesión de muestras .............................................................. 11
2.8. Ejemplo de onda de voz humana y su espectro de frecuencia ...................................... 12
2.9. Onda triangular representada en los dominios temporal y frecuencial ......................... 13
2.10. Gráfica de una función periódica de onda en diente de sierra .................................... 14
2.11. Aproximación de una función con uno, dos, tres, cuatro y cinco coeficientes ........... 15
2.12. Representación de una onda cuadrada en serie de Fourier ......................................... 16
2.13. Formas de onda básicas .............................................................................................. 20
2.14. Onda generada por un oscilador senoidal ................................................................... 20
2.15. Espectro generado por un oscilador senoidal ............................................................. 20
2.16. Onda generada por un oscilador triangular ................................................................. 21
2.17. Espectro generado por un oscilador triangular ........................................................... 21
2.18. Onda generada por un oscilador de diente de sierra ................................................... 22
2.19. Espectro generado por un oscilador de diente de sierra .............................................. 22
2.20. Envolvente ADSR y sus fases .................................................................................... 23
2.21. Señal a la que se le aplica una envolvente ADSR ...................................................... 24
2.22. Ejemplo de modulación .............................................................................................. 25
2.23. Ejemplo de modulación en anillo ............................................................................... 26
2.24. Espectro generado por una modulación en anillo ....................................................... 27
2.25. Ejemplo de modulación en amplitud .......................................................................... 28
2.26. Espectro generado por una modulación en amplitud .................................................. 29
2.27. Espectro de una señal FM con índices de modulación de 0.1, 1 y 10 ........................ 30
2.28. Efecto de un ratio C.M de 1:2, 2:1 y 4:1 ..................................................................... 32
2.29. Espectro de dos señales FM individuales y combinadas ............................................ 34
2.30. Formantes de la vocal “i” ............................................................................................ 34
2.31. Espectro generado por una señal FM con doble moduladora ..................................... 35
2.32. Ciclo básico de un algoritmo genético ........................................................................ 40
2.33. Cruce por un punto ..................................................................................................... 43
2.34. Cruce por varios puntos .............................................................................................. 43
2.35. Cruce uniforme ........................................................................................................... 44
2.36. Cruce aritmético simple .............................................................................................. 44
2.37. Cruce aritmético completo .......................................................................................... 45
2.38. Ejemplo de aplicación del cruce PMX ....................................................................... 45
VI
2.39. Mutación en codificación binaria ............................................................................... 46
2.40. Mutación en permutaciones ........................................................................................ 46
2.41. Hillclimbing ................................................................................................................ 49
2.42. Búsqueda por escalada (minimizando) ....................................................................... 50
3.1. Resultado de sintetizador FM para una señal dada ....................................................... 55
3.2. Señal FM con parámetros (1, 1, 1, 0.2, 0.1, 0.8, 0.3) .................................................... 56
3.3. Señal FM con parámetros (1, 1.1, 1, 0.2, 0.1, 0.8, 0.3) ................................................. 56
3.4. Señal FM con parámetros (1, 4, 2, 0.1, 0.2, 0.5, 0.4) .................................................... 56
3.5. Codificación de un individuo ........................................................................................ 57
3.6. Ejemplo de cruce de individuos .................................................................................... 59
3.7. Ejemplo de mutación de un individuo .......................................................................... 60
3.8. Relaciones de herencia entre clases .............................................................................. 61
3.9. Clase Sonido ................................................................................................................. 62
3.10. Interfaz Instrumento y clases Instrumento y Portadora .............................................. 64
3.11. Interfaz Envolvente y clases ADSR y EnvolventeInterpolacion ................................ 65
3.12. Clase Geneticos ........................................................................................................... 65
3.13. Clase Voraz ................................................................................................................. 66
3.14. Clase Configuracion ................................................................................................... 67
3.15. Clase Estadisticas ........................................................................................................ 68
3.16. Clase Constantes ......................................................................................................... 69
3.17. Clase GeneticSynthesis con envolventes por interpolación ....................................... 70
3.18. Ejecución de la aplicación en un entorno Windows ................................................... 71
4.1. Resultado con una portadora sin envolvente ................................................................ 73
4.2. Resultado con dos portadoras sin envolvente ............................................................... 74
4.3. Resultado con tres portadoras sin envolvente ............................................................... 74
4.4. Resultado con una portadora y envolvente simple ....................................................... 75
4.5. Resultado con dos portadoras y envolvente simple ...................................................... 76
4.6. Resultado con tres portadoras y envolvente simple ...................................................... 76
4.7. Resultado con dos portadoras y envolvente múltiple ................................................... 78
4.8. Resultado con tres portadoras y envolvente múltiple ................................................... 79
4.9. Resultado para un instrumento de cuerda con envolvente ADSR ................................ 80
4.10. Resultado para un instrumento de viento con envolvente ADSR ............................... 80
4.11. Resultado para un instrumento de percusión con envolvente ADSR ......................... 81
4.12. Resultado para un instrumento tipo campana con envolvente ADSR ........................ 81
4.13. Resultado para un instrumento de cuerda con envolvente por interpolación ............. 83
4.14. Resultado para un instrumento de viento con envolvente por interpolación .............. 84
4.15. Resultado para un instrumento de percusión con envolvente por interpolación ........ 84
4.16. Resultado para un instrumento tipo campana con envolvente por interpolación ....... 85
VII
ÍNDICE DE TABLAS
2.1. Selección proporcional al fitness .................................................................................. 42
2.2. Ejemplo de evaluación de fitness y selección en un AG .............................................. 47
2.3. Ejemplo de cruce de individuos en un AG ................................................................... 47
2.4. Ejemplo de mutación de individuos en un AG ............................................................. 48
4.1. Resultado con una portadora sin envolvente ................................................................ 72
4.2. Resultado con dos portadoras sin envolvente ............................................................... 74
4.3. Resultado con tres portadoras sin envolvente ............................................................... 74
4.4. Resultado con una portadora y envolvente simple ....................................................... 75
4.5. Resultado con dos portadoras y envolvente simple ...................................................... 76
4.6. Resultado con tres portadoras y envolvente simple ...................................................... 76
4.7. Resultado con dos portadoras y envolvente múltiple ................................................... 78
4.8. Resultado con tres portadoras y envolvente múltiple ................................................... 79
4.9. Resultado para un instrumento de cuerda con envolvente ADSR ................................ 80
4.10. Resultado para un instrumento de viento con envolvente ADSR ............................... 80
4.11. Resultado para un instrumento de percusión con envolvente ADSR ......................... 81
4.12. Resultado para un instrumento tipo campana con envolvente ADSR ........................ 81
4.13. Resultado para un instrumento de cuerda con envolvente por interpolación ............. 83
4.14. Resultado para un instrumento de viento con envolvente por interpolación .............. 84
4.15. Resultado para un instrumento de percusión con envolvente por interpolación ........ 85
4.16. Resultado para un instrumento tipo campana con envolvente por interpolación ....... 85
A.1. Resultado con una portadora sin envolvente ............................................................... 89
A.2. Resultado con dos portadoras sin envolvente .............................................................. 89
A.3. Resultado con tres portadoras sin envolvente .............................................................. 89
A.4. Resultado con una portadora y envolvente simple ...................................................... 90
A.5. Resultado con dos portadoras y envolvente simple ..................................................... 90
A.6. Resultado con tres portadoras y envolvente simple ..................................................... 90
A.7. Resultado con dos portadoras y envolvente múltiple .................................................. 90
A.8. Resultado con tres portadoras y envolvente múltiple .................................................. 91
A.9. Resultado para un instrumento de cuerda con envolvente ADSR ............................... 91
A.10. Resultado para un instrumento de viento con envolvente ADSR .............................. 91
A.11. Resultado para un instrumento de percusión con envolvente ADSR ........................ 91
A.12. Resultado para un instrumento tipo campana con envolvente ADSR ....................... 92
A.13. Resultado para un instrumento de cuerda con envolvente por interpolación ............ 92
A.14. Resultado para un instrumento de viento con envolvente por interpolación ............. 92
A.15. Resultado para un instrumento de percusión con envolvente por interpolación ....... 92
A.16. Resultado para un instrumento tipo campana con envolvente por interpolación ...... 93
VIII
ÍNDICE DE ALGORITMOS
2.1. Procedimiento Algoritmo Genético .............................................................................. 40
2.2. Búsqueda por escalada (se asume un problema de minimización) ............................... 50
2.3. Algoritmo memético ..................................................................................................... 52
1
1. INTRODUCCIÓN
Según el diccionario, el adjetivo sintético se define como: que procede componiendo,
o que pasa de las partes al todo.
Un sintetizador de sonido es un dispositivo que permite realizar un proceso de
síntesis. Tomando la definición anterior de síntesis, se tiene que un sintetizador puro no
modifica un sonido preexistente, sino que lo genera a partir de la combinación de
elementos simples (normalmente señales periódicas y/o funciones matemáticas) que no
existen fuera de los circuitos del dispositivo o del código del programa.
El primer sintetizador de sonido de la historia fue inventado en 1876 por Elisha Gray,
quien accidentalmente descubrió que podía controlar el sonido de un circuito
electromagnético vibratorio. Con esto, inventó un oscilador básico de una sola nota. Gray
también construyó un altavoz simple consistente en un diafragma vibratorio dentro de un
campo magnético con el que hizo audible su oscilador.
Los sintetizadores permiten, por un lado, generar una infinidad de sonidos totalmente
nuevos. También, dependiendo de los métodos utilizados, podrán imitar sonidos ya
existentes (por ejemplo, de instrumentos acústicos) con mayor o menor fiabilidad.
Una de las técnicas de síntesis más populares es, la síntesis de sonido por modulación
de frecuencias (síntesis FM) que permite la generación de sonidos complejos y bastante
realistas.
Esta técnica de modulación consiste en variar determinado aspecto de una señal
(denominada portadora) con respecto a una segunda (moduladora), generando una “onda
modulada”. Dada a conocer en 1973 por el compositor John Chowning (Chowning, 1973),
esta técnica es capaz de generar señales complejas con tan sólo dos osciladores (aunque
suele usar hasta seis), en contraposición con otras técnicas de síntesis de sonido menos
efectivas, como pueden ser la síntesis aditiva o la síntesis substractiva, las cuales requieren
un oscilador por cada variación de onda.
El objetivo principal del presente proyecto es la creación de algoritmos que,
mediante la aplicación de técnicas metaheurísticas sean capaces de generar modelos que,
usando síntesis FM sean capaces de imitar un sonido dado que generalmente será un
instrumento musical, aunque también se realizarán experimentos para intentar generar otro
tipo de sonidos como puede ser la voz humana.
2
Los algoritmos generados se basarán la combinación de dos técnicas metaheurísticas,
como son los algoritmos genéticos y la búsqueda local.
Estos algoritmos genéticos están inspirados en la evolución biológica y su base
genético-molecular, los cuales hacen evolucionar una población de individuos
sometiéndola a acciones aleatorias semejantes a las que actúan en la evolución biológica
(mutaciones y recombinaciones genéticas), así como también a realizando un proceso de
selección, en función del cual se decide cuáles son los individuos más adaptados los cuales
sobrevivirán, mientras que los menos aptos serán descartados.
3
2. ESTADO DEL ARTE
2.1. FUNDAMENTOS DE PRODUCCIÓN Y TRATAMIENTO DE AUDIO
MEDIANTE COMPUTADOR
2.1.1. Sonido, Acústica y Psicoacústica
En física, sonido es cualquier fenómeno que involucre la propagación en forma de
ondas elásticas audibles o casi inaudibles, generalmente a través de un fluido (u otro medio
elástico) que este generando movimiento vibratorio de un cuerpo (Iglesias Simón, 2004).
Desde un punto de vista perceptivo, el sonido se basa en ondas sonoras consistentes
en oscilaciones de la presión del aire, que son convertidas en ondas mecánicas en el oído
humano y percibidas por el cerebro. La propagación del sonido es similar en los fluidos,
donde el sonido toma la forma de fluctuaciones de presión. En los cuerpos sólidos la
propagación del sonido involucra variaciones del estado tensional del medio.
La propagación del sonido implica transporte de energía sin transporte de materia, en
forma de ondas mecánicas que se propagan a través de la materia sólida, líquida o gaseosa.
Como las vibraciones se producen en la misma dirección en la que se propaga el sonido, se
trata de una onda longitudinal.
En la Figura 2.1 se puede ver una representación esquemática del oído. (Azul: ondas
sonoras. Rojo: tímpano. Amarillo: Cóclea. Verde: células de receptores auditivos. Purpura:
espectro de frecuencia de respuesta de lo oído. Naranja: impulso del nervio.)
Figura 2.1: Representación esquemática del oído
La acústica es una rama de la física que estudia el sonido. A efectos prácticos, la
acústica estudia la producción, transmisión, almacenamiento, percepción o reproducción
del sonido (Lindsay).
4
La psicoacústica estudia la percepción subjetiva de las cualidades (características)
del sonido: intensidad, tono y timbre. Estas cualidades o características del sonido están, a
su vez, determinadas por los propios parámetros del sonido, principalmente, frecuencia y
amplitud.
Cualidades del sonido
Tal y como podemos observar en (Rayleigh, 1984), las cuatro cualidades básicas del
sonido son:
La altura: viene determinada por la frecuencia fundamental de las ondas
sonoras (es lo que permite distinguir entre sonidos graves, agudos o medios)
medida en ciclos por segundo o hercios (Hz). Para que los humanos podamos
percibir un sonido, éste debe estar comprendido entre el rango de audición de
20 y 20.000 Hz. (rango de frecuencia audible). Por debajo de este rango
tenemos los infrasonidos y por encima los ultrasonidos. Cuanta más edad se
tiene, este rango va reduciéndose tanto en graves como en agudos.
La intensidad: es la cantidad de energía acústica que contiene un sonido. La
intensidad viene determinada por la potencia, que a su vez está determinada
por la amplitud y nos permite distinguir si el sonido es fuerte o débil. Los
sonidos que percibimos deben superar el umbral auditivo (0 dB1) y no llegar
al umbral de dolor (140 dB).
El timbre: esta cualidad es la que permite distinguir dos sonidos, que
presentan el mismo tono pero que son producidos por dos instrumentos
musicales distintos. Se define como la calidad del sonido. Cada cuerpo
sonoro vibra de una forma distinta. Las diferencias se dan no solamente por la
naturaleza del cuerpo sonoro (madera, metal, piel tensada, etc.), sino también
por la manera de hacerlo sonar (golpear, frotar, rascar). Una misma nota
suena distinta si la toca una flauta, un violín, una trompeta…
La duración: es la cualidad que determina el tiempo de vibración de un
objeto. Por ejemplo, podemos escuchar sonidos largos, cortos, muy cortos,
etc. Es el tiempo durante el cual se mantiene un sonido, está determinada por
1 Decibelio es la unidad relativa empleada en acústica y telecomunicaciones para expresar la relación
entre dos magnitudes, acústicas o eléctricas, o entre la magnitud que se estudia y una magnitud de referencia.
El decibelio, cuyo símbolo es dB, es una unidad logarítmica. Es un submúltiplo del belio, de símbolo B, que
es el logaritmo de la relación entre la magnitud de interés y la de referencia, pero no se utiliza por ser
demasiado grande en la práctica, y por eso se utiliza el decibelio, la décima parte de un belio. El belio recibió
este nombre en honor de Alexander Graham Bell.
5
la longitud, que indica el tamaño de una onda, que es la distancia entre el
principio y el final de una onda completa (ciclo).
2.1.2. Procesamiento del sonido
Los primeros (y muy limitados) intentos de almacenar y procesar el sonido se
realizaron en el siglo XIX de forma totalmente mecánica (Fries, y otros, 2005).
Alrededor de 1920 se comienza a trabajar con el sonido en forma de corriente
eléctrica. Los dispositivos encargados de convertir el sonido en corriente eléctrica y
viceversa se denominan “transductores electroacústicos”.
La transducción o transformación de energía, se hace en dos fases. El modelo teórico
de un transductor electroacústico, se basa en un transductor electromecánico y un
transductor mecánico-acústico. Esto significa, que se estudia por un lado la transformación
de la energía eléctrica en mecánica, y por otro lado, aborda la transformación de la energía
mecánica en acústica.
El transductor electromecánico se llama "motor", por el movimiento que genera. Este
movimiento se traspasa al segundo transductor, el mecánico-acústico, que se llama
"diafragma".
Ejemplos de transductores electroacústicos son:
Un micrófono es un transductor electroacústico que convierte la energía
acústica (vibraciones sonoras: oscilaciones en la presión del aire) en energía
eléctrica (variaciones de voltaje).
Un altavoz también es un transductor electroacústico, pero sigue el camino
contrario. Un altavoz transforma la corriente eléctrica en vibraciones sonoras.
El sonido puede ser codificado así en forma de corriente eléctrica, lo cual permite
procesarlo y almacenarlo de forma adecuada.
El sonido es normalmente codificado como una serie de variaciones de voltaje en
función del tiempo (el voltaje representa la amplitud) (Figura. 2.2).
6
Figura 2.2: Variación del voltaje respecto al tiempo en una onda sonora
Señales analógicas y digitales
Se dice que un sistema es analógico cuando las magnitudes de la señal se representan
mediante variables continuas, esto es análogas (semejantes) a las magnitudes que dan lugar
a la generación de esta señal. Un sistema analógico contiene dispositivos que manipulan
cantidades físicas representadas en forma analógica. En un sistema de este tipo, las
cantidades varían sobre un intervalo continuo de valores. Por otra parte, una magnitud
digital es aquella que toma un conjunto de valores discretos.
La mayoría de los fenómenos que se pueden medir cuantitativamente aparecen en la
naturaleza en forma analógica. Un ejemplo de ello es la temperatura: a lo largo de un día la
temperatura no varía entre, por ejemplo, 20 ºC o 25 ºC de forma instantánea, sino que
tomará valores intermedios. Otros ejemplos de magnitudes analógicas son la presión, la
distancia, el sonido.
Una señal analógica es un voltaje o corriente que varía suave y continuamente. Los
voltajes de la voz y del video son señales analógicas que varían de acuerdo con el sonido o
variaciones de la luz que corresponden a la información que se está transmitiendo.
Las señales digitales, en contraste con las señales analógicas, no varían en forma
continua, sino que cambian en pasos o en incrementos discretos (Figura 2.3). La mayoría
de las señales digitales utilizan códigos binarios o de dos estados.
7
Figura 2.3: Señal digital y señal analógica
El sonido es una magnitud analógica. No obstante, ¿Por qué trabajar con señales
digitales?
Los sistemas digitales son más sencillos de construir y más flexibles, tanto en
lo que respecta a software como a hardware.
Tienen mayor precisión y tolerancia al ruido.
Los algoritmos de procesamiento de señales complejos son difíciles de
implementar en sistemas analógicos.
Facilitan el almacenamiento de la información.
Permiten trabajar con computadores, los cuales son sistemas digitales de
procesamiento de información.
Señales digitales y computadores
Un computador es un sistema digital de propósito general y programable basado en
el sistema de numeración en base 2 (binario) que no puede trabajar directamente con
magnitudes (señales) analógicas. Por ello, una señal analógica se transformará al dominio
digital antes de ser procesada por un computador. De la misma manera, una señal digital ya
procesada se transformará en una señal analógica si es necesario.
Estas conversiones se llevan a cabo por dispositivos conocidos como Conversores
Analógico-Digital (ADC, Analogic-Digital Converter) y Conversores Digital-Analógico
(DAC, Digital-Analog Converter).
Un ADC es un dispositivo electrónico capaz de convertir un voltaje determinado en
un valor binario, en otras palabras, se encarga de transformar señales analógicas a digitales.
Un DAC es un dispositivo que convierte una entrada digital (generalmente binaria) a
una señal analógica (generalmente voltaje). Los conversores digital-analógico son
interfaces entre el mundo abstracto digital y la vida real analógica. Este tipo de conversores
se utilizan en reproductores de sonido de todo tipo, dado que actualmente las señales de
8
audio son almacenadas en forma digital (por ejemplo, MP3 y CDs), y para ser emitidas a
través de los altavoces, los datos se deben convertir a una señal analógica.
Digitalización del sonido
La digitalización o conversión analógica-digital (conversión A/D) consiste
básicamente en realizar de forma periódica medidas de la amplitud (voltaje) de una señal
(por ejemplo, la que proviene de un micrófono si se trata de registrar sonidos, de un
sismógrafo si se trata de registrar vibraciones o de una sonda de un osciloscopio para
cualquier nivel variable de tensión de interés), ajustar sus valores a un conjunto finito de
niveles preestablecidos de voltaje (conocidos como niveles de cuantificación) y registrarlos
como valores discretos en cualquier tipo de memoria o soporte.
En esta definición están presentes los cuatro procesos que intervienen en la
conversión analógica-digital:
1. Muestreo: el muestreo consiste en tomar muestras periódicas de la amplitud
de onda. La velocidad con que se toma esta muestra, es decir, el número de
muestras por segundo, es lo que se conoce como frecuencia de muestreo.
2. Retención: las muestras tomadas han de ser retenidas por un circuito de
retención el tiempo suficiente para permitir evaluar su nivel (cuantificación).
Desde el punto de vista matemático este proceso no se contempla, ya que se
trata de un recurso técnico debido a limitaciones prácticas, y carece, por
tanto, de modelo matemático.
3. Cuantificación: en el proceso de cuantificación se mide el nivel de voltaje de
cada una de las muestras. Consiste en convertir una medida de una magnitud
continua en otra equivalente en una magnitud discreta. En este proceso se
produce un error en la medida.
4. Codificación: la codificación consiste en traducir los valores obtenidos
durante la cuantificación al código binario. Hay que tener presente que el
código binario es el más utilizado, pero también existen otros tipos de
códigos que también son utilizados.
Durante el muestreo y la retención, la señal aún es analógica, puesto que aún puede
tomar cualquier valor. No obstante, a partir de la cuantificación, cuando la señal ya toma
valores discretos, la señal ya es digital (Figura 2.4).
9
Figura 2.4: Proceso de digitalización de una señal analógica
A la hora de muestrear una señal analógica deben tenerse en cuenta
fundamentalmente dos parámetros:
Frecuencia de muestreo: Número de muestras por intervalo de tiempo que se
toman de la señal analógica. Medida en hercios (1 Hz = 1 muestra / seg.).
Resolución: El número de valores distintos que puede tomar cada muestra.
Viene determinada por el número de bits. Con una resolución de n bits,
pueden obtenerse 2n valores distintos por cada muestra.
Frecuencia de muestreo
La tasa o frecuencia de muestreo es el número de muestras por unidad de tiempo que
se toman de una señal continua para producir una señal discreta, durante el proceso
necesario para convertirla de analógica en digital. Como todas las frecuencias,
generalmente se expresa en hercios (Hz, ciclos por segundo) o múltiplos suyos, como el
kilohercio (kHz), aunque pueden utilizarse otras magnitudes (Lavry).
Según el teorema de muestreo de Nyquist-Shannon, para poder replicar con exactitud
una señal analógica es necesario que la frecuencia de muestreo sea igual o superior al
doble de la máxima frecuencia presente en la señal original.
Es un error frecuente y extendido creer que una misma señal muestreada con una tasa
elevada se reconstruye mejor que una muestreada con una tasa inferior. Esto es falso
(siempre que la tasas empleadas cumplan el criterio de Nyquist, naturalmente). El proceso
de muestreo es, desde el punto de vista matemático perfectamente reversible, esto es, su
reconstrucción es exacta, no aproximada. Dicho de otro modo, desde el punto de vista
matemático al que se refiere el teorema de muestreo de Nyquist-Shannon, la reconstrucción
de una señal de 10 kHz es idéntica tanto si se obtiene de una tasa de muestreo de 25000
10
muestras por segundo como de una de 50000 muestras por segundo. No aporta nada
incrementar la tasa de muestreo una vez que esta cumple el criterio de Nyquist.
Si se utiliza una frecuencia menor a la establecida por el teorema de Nyquist, se
produce una distorsión conocida como aliasing. El aliasing consiste en la aparición de
frecuencias en la señal muestreada que no estaban presentes en la señal original
El aliasing impide recuperar correctamente la señal cuando las muestras de ésta se
obtienen a intervalos de tiempo demasiado largos
En la Figura 2.5 puede verse un ejemplo de aliasing. En color rojo puede verse la
señal original sobre la que se toman muestras (puntos azules). La señal muestreada
afectada por el aliasing es la representada en color azul, que como puede observarse, no
tiene la misma frecuencia que la señal original.
Figura 2.5: Ejemplo de aliasing
Resolución
Al muestrear una señal, cada una de las muestras puede tomar un número finito de
valores distintos. Cuanto mayor sea el número de valores por muestra (resolución), mejor
se podrá reconstruir la señal.
La resolución se mide en número de bits. Una resolución de n bits implica que cada
muestra puede tomar 2n valores distintos. Por ejemplo, un muestreo de 8 bits contiene 256
valores posibles para una muestra, mientras que otro realizado a 16 bits contiene 65536
valores (Figura 2.6). El utilizar menos bits provoca que el ruido de cuantización2 sea
mayor.
2 Se define como ruido de cuantificación a la diferencia que resulta de restar la señal de entrada a la de
salida, esto es, la medida en la que ha sido necesario cambiar el valor de una muestra para igualarlo a su nivel
de cuantificación más próximo.
11
Figura 2.6: Señal analógica muestreada a 8 y 16 bits
Señales digitales de audio
El audio digital consiste en la codificación digital de una señal eléctrica que
transporta información de audio. La señal se representa como una secuencia de números
binarios y se obtiene del muestreo y que representan la amplitud de las muestras de la seña.
Como ejemplo supóngase que se desea generar una señal sonora con los siguientes
valores:
[-10, 0, 10, 0, -10, etc]
El resultado de esa generación es el mostrado en (Figura 2.7).
Figura 2.7: Onda generada por una sucesión de muestras
Generar una señal de audio significa generar un conjunto de muestras. Procesar una
señal significa alterar el valor de dichas muestras.
Una señal digital de audio se convierte en sonido cuando se envía al conversor
digital-analógico de, por ejemplo, una tarjeta de sonido y de ahí a un altavoz.
Hay que tener en cuenta que no todas las fuentes sonoras contienen componentes de
frecuencia cercanos a los 20 kHz; la mayoría de los sonidos está muy por debajo de ésta.
Por ejemplo, si se va a grabar la voz de una soprano, la máxima frecuencia que la cantante
12
será capaz de producir no tendrá armónicos3 de nivel significativo en la última octava (de
10 a 20 kHz), con lo que utilizar una frecuencia de muestreo de 44100 muestras por
segundo sería innecesario (se estaría empleando una capacidad de almacenamiento extra
que se podría economizar).
En cuanto a la resolución, normalmente se utilizan 16 bits por muestra (65536
valores diferentes).
2.1.3. Análisis espectral
En audio, la información en audio está codificada en el dominio del tiempo, no en el
de la frecuencia. Por ello, para poder aplicar técnicas de análisis deberemos transformar
dicha codificación en otra en la cual la señal esté expresada en función de la frecuencia
(Figuras 2.8 y 2.9). Para ello se utilizan las técnicas de análisis espectral.
Figura 2.8: Ejemplo de forma de onda generada por la voz humana y su espectro de
frecuencia
El espectro de frecuencias de una señal (sonora, luminosa o electromagnética) es una
medida de la distribución de amplitudes de cada frecuencia (Bateman, 1980).
El espectro de frecuencias o descomposición espectral de frecuencias puede aplicarse
a cualquier concepto asociado con frecuencia o movimientos ondulatorios, sonoros y
electromagnéticos. Por ejemplo, una fuente de luz puede tener muchos colores mezclados
en diferentes cantidades (intensidades). Eso nos permite ver cada componente de la luz
inicial por separado.
3 Los armónicos son frecuencias múltiplos de la fundamental que caracterizan el timbre de un sonido.
Son los que permiten diferenciar un tipo de instrumento de otro, o reconocer el timbre de la voz de una
persona. Por ejemplo, si dos instrumentos ejecutaran la nota do en la 3ª octava, la onda fundamental de
ambos poseería la misma frecuencia (264 Hz) pero sus timbres serían diferentes porque cada uno produce
una secuencia de armónicos diferentes.
13
El análisis espectral consiste en cuantificar la energía de las diferentes frecuencias
presentes en una señal. Dicho análisis espectral puede llevarse a cabo con una herramienta
llamada transformada de Fourier.
Figura 2.9: Onda triangular representada en los dominios temporal (arriba) y frecuencial
(abajo)
Nótese que en la parte inferior de la Figura 2.9, las distintas barras representan a los
armónicos de la señal de la parte superior.
Series de Fourier
Una serie de Fourier es una serie infinita que converge puntualmente a una función
continua y periódica. Las series de Fourier constituyen la herramienta matemática básica
del análisis de Fourier empleado para analizar funciones periódicas a través de la
descomposición de dicha función en una suma infinitesimal de funciones senoidales
mucho más simples (como combinación de senos y cosenos con frecuencias enteras). El
nombre se debe al matemático francés Jean-Baptiste Joseph Fourier que desarrolló la teoría
cuando estudiaba la ecuación del calor. Fue el primero que estudió tales series
sistemáticamente, publicando sus resultados iniciales en 1807 y 1811. (Simmons, 2007).
De acuerdo con las series de Fourier, una función periódica puede descomponerse en
una serie de senos y cosenos como muestra la ecuación 2.1:
( )
∑, ( ) ( )-
(2.1)
Siendo y una serie de coeficientes reales denominados coeficientes de Fourier.
Dichos coeficientes para una función periódica entre [– ] se obtienen a partir de la
función de partida como muestran las ecuaciones 2.2 y 2.3 (puede extenderse a cualquier
otro periodo):
14
∫ ( ) ( )
(2.2)
∫ ( ) ( )
(2.3)
Podemos ilustrar este proceso tomando como ejemplo la función de onda en diente
de sierra, definida en las ecuaciones 2.4 y 2.5, cuya su gráfica se muestra en la Figura 2.10:
( ) para – , (2.4)
( ) ( ) para – . (2.5)
Figura 2.10: Gráfica de una función periódica de onda en diente de sierra
Los coeficientes de Fourier vienen dados por las ecuaciones 2.6 y 2.7:
∫ ( )
(2.6)
∫ ( )
( )( )
(2.7)
Y por tanto la función puede expresarse como la ecuación 2.8:
( )
∑, ( ) ( )-
∑( )( )
( )
(2.8)
15
Figura 2.11: Aproximación de una función con uno, dos, tres, cuatro y cinco coeficientes
Cuando la función que se está desarrollando en Serie de Fourier tiene
discontinuidades no es posible obtener una buena aproximación en los entornos de las
discontinuidades. A esto se le denomina Efecto Gibbs (Rodríguez del Río, y otros).
16
Figura 2.12: Representación de una onda cuadrada en serie de Fourier para uno, diez y cien
términos de la sumatoria
Como se puede apreciar en la Figura 2.12, a medida que se adhieren más términos a
las series, ésta se va aproximando a la onda cuadrada dado que las oscilaciones se vuelven
más rápidas y más pequeñas, pero los picos no disminuyen. Estos picos en la series de
Fourier de la función cuadrada nunca desaparecen; es causa del anteriormente mencionado
Efecto Gibbs. Ocurren cada vez que las señales son discontinuas, y siempre estarán
17
presentes cuando la señal presenta discontinuidades como en este caso de uno a menos
uno.
También se puede utilizar una representación alternativa, para las series de Fourier,
a partir de la fórmula de Euler:
( ) ( ) (2.9)
Entonces, la función periódica puede descomponerse como:
( ) ∑
(2.10)
Donde los coeficientes de Fourier vienen dados, para una señal periódica en
[– ], por:
∫ ( )
(2.11)
Transformada de Fourier
La transformada de Fourier permite obtener la representación espectral de una señal
expresada en el dominio del tiempo. Las condiciones para poder obtener la transformada
de Fourier a una función son (Condiciones de Dirichlet):
Que la señal sea absolutamente integrable, es decir:
∫| ( )|
(2.12)
Que tenga un grado de oscilación finito
Que tenga un número máximo de discontinuidades
La transformada de Fourier es una particularización de la transformada de Laplace
con (siendo ), y se define como:
( ) ∫ ( )
(2.13)
18
Y su transformada inversa se define como:
( )
∫ ( )
(2.14)
De esta forma, podemos calcular la transformada de Fourier de cualquier señal
periódica ( ) de potencia media finita, esto es:
∫| ( )| (2.15)
Transformada discreta de Fourier
En el caso de señales discretas, como es el caso del audio digital, para transformar
una secuencia temporal en su representación frecuencial se utiliza la transformada discreta
de Fourier (DFT). (Bracewell, 1999)
La DFT toma como entrada una secuencia de números complejos en el dominio
temporal y genera otra secuencia equivalente en el dominio frecuencial. En las señales de
audio, cada muestra suele representarse mediante un número real, por lo que en este caso la
entrada a la DFT será una sucesión de números reales ,…, de longitud .
La salida de la transformada será una sucesión de números complejos ,…, ,
donde cada elemento de la salida se calcula de la siguiente como muestra la ecuación
2.13:
∑
(2.16)
Donde es el valor k-ésimo de la señal resultado, N es la longitud de la señal y
es el valor i-ésimo de la señal de entrada.
Existe una técnica llamada transformada rápida de Fourier (Fast Fourier Transform,
FFT) (Brigham, 2002) la cual reduce el número de operaciones de cómputo necesarias para
puntos de a , que, por razones de cómputo, será utilizada en el presente
proyecto.
19
Análisis espectral de señales digitales
A continuación se verán algunas consideraciones acerca del análisis espectral y la
DFT en su aplicación sobre señales digitales:
Cada valor de salida de la DFT representa la amplitud (y fase) de la componente
espectral . El rango de dichas componentes varía entre 0 y la frecuencia de
muestreo. Desde el punto de vista del análisis, se tiene en cuenta fundamentalmente
al módulo (amplitud) de los números complejos que forman la secuencia de salida.
La resolución de la transformada viene dada por el número de puntos de la señal de
entrada. Si la entrada a la DFT es una secuencia de números reales, la salida será
simétrica respecto al eje definido por el valor de la mitad de la frecuencia de
muestreo. Por tanto, sólo la primera mitad de la DFT es realmente considerada en el
análisis, siendo la resolución real igual a la mitad del número de muestras de
entrada.
A la hora de analizar una señal de audio, ésta se divide en fragmentos de duración
limitada (donde se asume que la señal es cuasi-estacionaria). La DFT se aplica a
cada fragmento por separado.
Por diversos motivos, entre otros la resolución, la salida de la DFT no siempre se
corresponde de forma precisa con el espectro real de la señal. Este problema puede
atenuarse multiplicando la señal de entrada por una función ventana (Hamming,
Hanning, Blackman, etc.).
2.1.4. Técnicas básicas de síntesis de audio
En este subapartado procederemos al estudio de diversas técnicas usadas para la
síntesis de audio, las cuales utilizaremos más adelante. Dichas técnicas son descritas en
(Moore, 1990) y (Roads, 1996).
Osciladores
Los osciladores constituyen la forma más básica de generar sonidos por computador.
Un oscilador genera una señal a partir de una función periódica. Si la frecuencia del
oscilador se encuentra dentro de los límites humanos de audición (20 Hz– 20 KHz), dicha
señal es percibida como un sonido. La frecuencia del oscilador determina la altura (pitch)
del sonido.
20
Un oscilador normalmente genera señales con formas de ondas conocidas
(sinusoidales, pulsos, cuadradas, triangulares, etc.).
Figura 2.13: Formas de onda básicas
El oscilador más común está basado en una función sinusoidal, definida por la
ecuación 2.18:
( ) ( ) ( ) ( ) (2.17)
Donde:
es la amplitud máxima de la señal
es la frecuencia angular ( y
)
es la fase
Véase como ejemplo en las Figuras 2.14 y 2.15 la onda y el espectro generado por un
oscilador sinusoidal a 440 Hz. (correspondientes a la nota musical La).
Figura 2.14: Onda generada por un oscilador senoidal
Figura 2.15: Espectro generado por un oscilador senoidal
21
Como puede observarse en la Figura 2.15, al haber solamente una componente
senoidal, en el espectro aparece una sola frecuencia y debido a la poca resolución de la
transformada, la energía de la componente frecuencial se encontrará parcialmente
repartida entre sus componentes vecinas.
También se puede utilizar una forma de onda triangular para generar un sonido con
mayor número de componentes espectrales (en este caso con armónicos impares). Una
onda triangular se puede generar con la ecuación 2.19, en la que es la amplitud máxima y
es el periodo:
( )
( ( )) (2.18)
El resultado de ésta ecuación puede verse en las Figuras 2.16 y 2.17:
Figura 2.16: Onda generada por un oscilador triangular
Figura 2.17: Espectro generado por un oscilador triangular
Otro tipo de oscilador diferente es el oscilador en diente de sierra, el cual genera un
espectro que contiene armónicos pares e impares. Una onda en diente de sierra se puede
generar de acuerdo a la ecuación 2.26, mostrándose su resultado en las Figuras 2.18 y 2.19:
( ) , - (2.20)
22
Figura 2.18: Onda generada por un oscilador de diente de sierra
Figura 2.19: Espectro generado por un oscilador de diente de sierra
Envolventes
La envolvente es un término utilizado en música, acústica y psicoacústica.
Constituye una manera de definir, en términos de cuatro parámetros globales, la evolución
temporal, generalmente en amplitud, de cualquier sonido.
Los ejemplos de osciladores anteriores presentaban una amplitud constante. No
obstante, la amplitud de los sonidos normalmente evoluciona con el tiempo (es dinámica).
Una envolvente no es más que una función de la amplitud de un sonido respecto al tiempo.
Dicha envolvente se aplica a un sonido mediante la multiplicación del sonido con la propia
envolvente.
Existen muchas formas de envolvente, pero por lo general siguen un patrón común.
La forma más común de envolvente se denomina ADSR (attack, decay, sustain, release)
por su abreviatura. Puede verse en la Figura 2.20.
23
Figura 2.20: Envolvente ADSR y sus fases
La envolvente ADSR está determinada por cuatro principales parámetros:
Ataque (attack): Es el tiempo de entrada. Lo que tarda en escucharse el sonido
después de haber sido ejecutado el instrumento.
Decaimiento (decay): Es el tiempo que tarda la amplitud en reducirse a la de
sostenimiento, después de haber alcanzado la amplitud máxima, sin despegar la
tecla o punto de inducción vibratoria.
Sostenimiento (sustain): Después del decaimiento, es la amplitud que se mantiene
constante hasta despegar la tecla o punto de inducción vibratoria.
Liberación (release): El tiempo que tarda el sonido en perder toda su amplitud
después de despegar la tecla o punto de inducción vibratoria.
24
Como ejemplo, aplicaremos una envolvente a una señal pudiendo verse el resultado de la
operación en la Figura 2.21, en la que en la parte superior de la figura se muestra la señal
original, a continuación la envolvente y finalmente el resultado de la aplicación de la
envolvente a la señal original.
Figura 2.21: Señal a la que se le aplica una envolvente ADSR
Síntesis aditiva y substractiva
Cualquier sonido, por complejo que sea, puede ser descrito como la suma de un
determinado número de formas de onda senoidales que lo componen, cada una de ellas con
diferentes fases y amplitudes. Estos son los parciales del sonido, que también reciben el
nombre de armónicos si sus frecuencias son múltiplos enteros de la frecuencia
fundamental.
El método para generar el espectro de un sonido complejo por medio de la suma de
un determinado número de senoidales simples se denomina síntesis de Fourier. Si las
formas de onda sumadas para conseguir el sonido resultante no son senoidales, el proceso
recibe el nombre más genérico de síntesis aditiva.
Para realizar este tipo de síntesis, son necesarios muchos osciladore senoidales; su
número dependerá del rango necesario y de la riqueza armónica del sonido que se busca.
Por ejemplo, una nota grave muy brillante, como la que corresponde a un bajo, puede
precisar más de un centenar de senoidales, mientras que un sonido de tono elevado y un
contenido armónico discreto puede conseguirse con tan sólo una docena.
En contraposición a esta técnica, la síntesis sustractiva se basa en tomar un sonido (o
forma de onda), preferentemente que posea un espectro muy rico (por ejemplo, formas de
25
onda diente de sierra, cuadrada o simplemente ruido blanco) y hacerla pasar por un
conjunto de filtros y un amplificador modulables, de forma que se pueda alterar su timbre y
dinámica. Es decir, normalmente se refiere a la configuración clásica “oscilador / filtro /
amplificador”.
Se trata del método clásico de síntesis utilizado en la inmensa mayoría de
sintetizadores analógicos y en muchos sintetizadores basados en la reproducción de
muestras (Lanau, 2004).
Síntesis por modulación
En las técnicas de modulación se parte de dos señales, de forma que se hace variar la
primera (señal portadora) de acuerdo a la segunda (señal moduladora), obteniéndose como
resultado una nueva señal (señal modulada).
Figura 2.22: Ejemplo de modulación
En la Figura 2.22 se puede observar que la señal portadora es modificada basándose
en la amplitud de la señal moduladora y la señal resultante es la que se muestra en el lado
derecho de dicha figura.
La síntesis por modulación permite “enriquecer” el sonido añadiendo armónicos. Es
una técnica muy popular debido al reducido número de parámetros que se utilizan
(respecto a la síntesis aditiva) y a su reducida complejidad computacional.
El espectro resultante de un proceso de síntesis por modulación contiene la
frecuencia de la portadora, así como toda una serie de frecuencias distribuidas de forma
simétrica alrededor de la frecuencia portadora, a distancias iguales a todos los múltiplos
enteros de la frecuencia moduladora. Los grupos de componentes de un lado y del otro de
la portadora se denominan bandas laterales.
26
Dentro de las diferentes técnicas de modulación, las más comunes son:
Modulación en anillo (Ring Modulation, RM)
Modulación en amplitud (Amplitude Modulation, AM)
Modulación en frecuencia (Frequency Modulation, FM)
Síntesis RM
Modulación en anillo es una técnica de síntesis basada en la multiplicación de dos
señales, donde la señal moduladora es típicamente una onda sinusoidal u otra forma de
onda simple.
Figura 2.23: Ejemplo de modulación en anillo
Dadas dos funciones senoidales c (portadora) y m (moduladora). Por simplicidad se
supondrá que la fase de ambas es 0:
( ) (2.20)
( ) (2.21)
El producto de estas dos señales viene dado por la ecuación 2.23:
( ) ( ) ( ) ( ) (2.22)
Cómo:
( ) ( )
( ) ( )
(2.23)
27
Se tiene:
(( ) )
(( ) ) (2.24)
Al modular (multiplicar) las dos señales, hemos obtenido una señal compuesta por
dos señales sinusoidales de idéntica amplitud y frecuencias iguales a la suma y la resta de
las frecuencias de la portadora y moduladora respectivamente.
Como consecuencia, tenemos dos componentes frecuenciales en el espectro. A estas
componentes se les denomina bandas laterales, cuyas frecuencias son las únicas
componentes espectrales de la señal (la componente de la portadora ha desaparecido).
Figura 2.24: Espectro generado por una modulación en anillo
Síntesis AM
AM es el acrónimo de Amplitude Modulation (Modulación en aplitud), la cual es un
tipo de modulación lineal que consiste en modificar la amplitud de una señal de alta
frecuencia, denominada portadora (tono), en función de una señal periódica de baja
frecuencia, denominada moduladora, de tal forma que se hace variar la amplitud de la onda
portadora de forma que esta cambie de acuerdo con las variaciones de nivel de la señal
moduladora. La modulación consiste en multiplicar la portadora y la moduladora para
obtener una nueva señal.
A diferencia de la modulación en anillo, la moduladora es una señal unipolar
(desplazada hacia arriba un factor ).
28
Figura 2.25: Ejemplo de modulación en amplitud
Dadas dos funciones senoidales c (portadora) y m (moduladora) (Por simplicidad se
supondrá que la fase de ambas es 0):
( ) (2.25)
( ) (2.26)
Tomar garantiza obtener una señal unipolar. El producto de estas dos
señales viene dado por la ecuación 2.27:
( ) ( ) ( ) ( ) (2.27)
Nuevamente se aplica la ecuación 2.28 para llegar a:
(( ) )
(( ) ) ( ) (2.28)
Al modular (multiplicar) las dos señales, se obtiene una señal compuesta por tres
señales sinusoidales, dos de ellas con frecuencias iguales a la suma y la resta de las
frecuencias de la portadora y moduladora y una de ellas con frecuencia similar a la
portadora. Como consecuencia, tenemos tres componentes frecuenciales en el espectro: la
componente original de la portadora y las dos bandas laterales.
29
Figura 2.26: Espectro generado por una modulación en amplitud
Síntesis FM
Al estar experimentando con diferentes tipos y tasas de vibrato y tremolo en la voz,
Chowning descubrió que con frecuencias por encima de lo audible, comienzan a aparecer
componentes armónicos proporcionales a mas o menos la frecuencia portadora del tono
que se estaba haciendo vibrar (Chowning, 1973). Esta investigación dio como resultado
uno de los métodos de síntesis de sonido en la categoría de manipulación de formas de
onda y conocida como síntesis por frecuencia modulada o simplemente síntesis FM. Esta
técnica es el método utilizado en la serie de instrumentos “DX” popularizada por Yamaha
en los años 80.
El vibrato consiste en introducir en una señal pequeñas variaciones periódicas de su
frecuencia. Dicho vibrato puede generarse variando la frecuencia de una onda senoidal de
manera periódica (por ejemplo, mediante otra onda senoidal) (Reyes, 2004):
Cuando la frecuencia de la moduladora es lo suficientemente elevada se produce un
cambio en el timbre del sonido como consecuencia de la aparición de bandas laterales.
En síntesis FM se pueden generar espectros sonoros complejos con relativa simpleza.
El hecho de que la evolución temporal del espectro pueda ser controlada de forma
relativamente fácil se convierte en su principal atributo y hace que la FM sea una técnica
muy atractiva y con cualidades para manipular una forma de onda directamente.
En FM, la frecuencia instantánea de una onda portadora varía de acuerdo a la
frecuencia de una onda moduladora.
Sean , , las amplitudes y frecuencias de la moduladora y de la portadora.
Una señal viene definida por la ecuación 2.37:
( ( )) (2.29)
30
Se define el índice P:M (o índice C:M) como:
(2.30)
Asimismo, se define el índice de modulación como la desviación máxima de
frecuencia sobre la portadora (dada por la amplitud de la moduladora), aunque en computer
music se suele denominar índice de modulación al cociente entre esta desviación y la
frecuencia de la moduladora:
(2.31)
En modulación FM se genera un conjunto completo de bandas laterales. La
frecuencia de la banda lateral n-ésima viene dada por la ecuación 2.33:
(2.32)
Por ejemplo, con y , se generarían las siguientes bandas:
Figura 2.27: Espectro de una señal FM con índices de modulación de 0.1, 1 y 10
respectivamente
31
El ancho de banda4 de una señal FM viene dado por la ecuación 2.34:
( ) (2.33)
Como puede observarse en las anteriores figuras, cuanto mayor es el índice de
modulación, mayor es el número de bandas laterales generadas.
La amplitud de cada banda lateral varía de acuerdo a un tipo de funciones
matemáticas conocidas como funciones Bessel.
A partir de aquí se puede reescribir la función de una señal FM como:
∑ ( ) ( [ * +])
(2.34)
Donde ( ) es una función Bessel de tipo y orden (siendo n entero) viene
definida por la ecuación 2.36:
( ) ∑
( )
( ).
/
(2.35)
Siendo la función una extensión de la función factorial para valores no enteros.
Expresar la FM mediante las funciones de Bessel permite calcular de forma sencilla
el espectro resultante sin tener que generar las señales.
En FM, la frecuencia fundamental5 se obtiene a partir de la siguiente relación:
(2.36)
4 El ancho de banda de una señal nos indica la diferencia entre la frecuencia máxima y mínima
presentes en la señal. Si el oído humano puede percibir frecuencias comprendidas entre los 20 y los 20000
Hz, el ancho de banda de nuestro oído es de unos 20 KHz. 5 La frecuencia fundamental o primer armónico es el sinusoide con más energía en un sonido. Una
misma nota musical tocada en varios instrumentos musicales puede sonar de forma diferente, pero la
frecuencia fundamental (o pitch) será la misma.
32
Donde son enteros sin factores comunes. La frecuencia fundamental viene
dada por:
(2.37)
Por ejemplo, con y , tenemos que
y por tanto
Figura 2.28: Efecto de un ratio C:M de 1:2, 2:1 y 4:1
Como podemos observar en la Figura 2.28 (figura inferior), el ratio C:M aplicado era
demasiado alto, generando aliasing. Las componentes espectrales inferiores a 0 Hz “se
reflejan” contra el eje y aparecer como bandas de frecuencia que no deberían estar (2ª y 4ª
componente). Se puede comprobar, por ejemplo, observando la componente
correspondiente a 2640 Hz, la cual no debería aparecer. No obstante, esa componente es la
correspondiente a -3520 Hz reflejada contra el eje ( ). En la
Figura 2.31 (figura central) sucede algo similar, lo cual explica el hecho de que aparezcan
menos bandas laterales de las que deberían. Esto es debido a que las bandas laterales
reflejadas se solapan con el resto (Véase explicación de aliasing en apartado 2.1.1 –
Frecuencia de muestreo).
33
Algunas relaciones C:M generan espectros armónicos6 mientras que otras generan
espectros inarmónicos7:
1:1, 1:2, 1:3, 1:4, 1:5, 1:6, 1:7, 1:8, 1:9 (armónicos)
2:9, 2:7, 3:8, 2:5, 2:7, 4:9 (inarmónicos)
Para conseguir un sonido más real puede aplicarse una envolvente al índice de
modulación. También se puede aplicar envolventes de frecuencia al índice C:M, para que
la posición de los parciales no sea estática, aunque esto no es tan común.
La síntesis FM descrita hasta ahora presenta algunos inconvenientes a la hora de
generar sonidos más o menos complejos ya que los parciales generados siguen una
distribución muy simple (son equidistantes unos de otros en el espectro). Además, en la
FM “tradicional” no se puede controlar la evolución de los parciales por separado.
Una forma de generar sonidos más “flexibles” en FM consiste en utilizar múltiples
portadoras moduladas por una misma señal moduladora, lo que se conoce como síntesis
FM con múltiple portadora. Este tipo de síntesis viene dada por la ecuación 2.39:
( , ( )-) ( , ( )-) (2.38)
Donde:
es la amplitud de la portadora i
es la frecuencia de la portadora i
es la frecuencia de la moduladora
es el índice de modulación para la portadora i
6 Un espectro discreto en el cual todas las frecuencias son múltiplos de una fundamental. Corresponde
a señales periódicas. Por ejemplo, el generado por un instrumento de viento. 7 Un espectro cuyas frecuencias no están relacionadas entre sí armónicamente (es decir, no son
múltiplos de ninguna frecuencia fundamental. Por ejemplo, el generado por un instrumento de percusión.
34
Figura 2.29: Espectro de dos señales FM individuales y combinadas
Puede verse como ejemplo en la Figura 2.29 la combinación de dos señales FM en
una nueva señal multiportadora.
El hecho de utilizar múltiples portadoras permite controlar el espectro de un modo
más preciso. Pueden utilizarse envolventes de amplitud e índice de modulación diferentes
para cada portadora con el fin de conseguir un sonido más natural.
El emplear modulación con múltiples portadoras permite generar formantes, los
cuales describen ciertas regiones del espectro donde la amplitud de las componentes
espectrales es considerable. Dichos formantes son típicos de muchos instrumentos
acústicos. En la voz humana, una vocal puede caracterizarse por los formantes que posee
(Smyth, 2007).
Figura 2.30: Formantes de la vocal “i”
35
Al igual que pueden emplearse varias portadoras, también es posible aumentar el
número de señales moduladoras. Por ejemplo, una misma portadora puede ser modulada
por una sucesión de moduladoras. En este caso se distingue entre modulación en paralelo y
modulación en serie.
Figura 2.31: Espectro generado por una señal FM con doble moduladora
Por ejemplo, sean y la amplitud y la frecuencia de la portadora. Sean
y las amplitudes y frecuencias de dos moduladoras, y sean e los
índices de modulación. Las ecuaciones para una señal FM con doble moduladora en
paralelo y en serie vienen dadas por:
* , ( )- , ( )-+ (2.39)
* , ( , ( )-)-+ (2.40)
En el presente proyecto se utilizará síntesis FM con múltiple portadora y simple
moduladora.
36
2.2. INTELIGENCIA ARTIFICIAL, METAHEURÍSTICAS Y
ALGORITMOS GENÉTICOS
Inteligencia artificial
Se denomina inteligencia artificial a la rama de la ciencia informática dedicada al
desarrollo de agentes racionales no vivos (Russell, y otros, 2006).
Para explicar la definición anterior, entiéndase a un agente como cualquier cosa
capaz de percibir su entorno (recibir entradas), procesar tales percepciones y actuar en su
entorno (proporcionar salidas). Y entiéndase a la racionalidad como la característica que
posee una elección de ser correcta, más específicamente, de tender a maximizar un
resultado esperado. (Este concepto de racionalidad es más general y por ello más adecuado
que inteligencia para definir la naturaleza del objetivo de esta disciplina).
Por lo tanto, y de manera más específica la inteligencia artificial es la disciplina que
se encarga de construir procesos que al ser ejecutados sobre una arquitectura física
producen acciones o resultados que maximizan una medida de rendimiento determinada,
basándose en la secuencia de entradas percibidas y en el conocimiento almacenado en tal
arquitectura.
Se distinguen varios tipos de procesos válidos para obtener resultados racionales, que
determinan el tipo de agente inteligente. De más simples a más complejos, los cinco
principales tipos de procesos son:
Ejecución de una respuesta predeterminada por cada entrada (análogas a actos
reflejos en seres vivos).
Búsqueda del estado requerido en el conjunto de los estados producidos por las
acciones posibles.
Algoritmos genéticos (Análogo al proceso de evolución de las cadenas de ADN).
Redes neuronales artificiales (Análogo al funcionamiento físico del cerebro de
animales y humanos).
Razonamiento mediante una Lógica formal (Análogo al pensamiento abstracto
humano).
37
Algoritmos heurísticos
Un algoritmo es una lista bien definida, ordenada y finita de operaciones que permite
hallar la solución a un problema. Dado un estado inicial y una entrada, a través de pasos
sucesivos y no ambiguos se llega a un estado final, en un número finito de iteraciones,
obteniendo una solución.
En computación, dos objetivos fundamentales son encontrar algoritmos con buenos
tiempos de ejecución y buenas soluciones (las óptimas, cuando sea posible). Una heurística
es un algoritmo que abandona uno o ambos objetivos; por ejemplo, normalmente
encuentran buenas soluciones, aunque no hay pruebas de que la solución no pueda ser
arbitrariamente errónea en algunos casos; o se ejecuta razonablemente rápido, aunque no
existe tampoco prueba de que siempre será así. Las heurísticas generalmente son usadas
cuando no existe una solución óptima bajo las restricciones dadas (tiempo, espacio, etc.), o
cuando no existe del todo.
A menudo, pueden encontrarse instancias concretas del problema donde la heurística
producirá resultados muy malos o se ejecutará muy lentamente. Aún así, estas instancias
concretas pueden ser ignoradas porque no deberían ocurrir nunca en la práctica por ser de
origen teórico. Por tanto, el uso de heurísticas es muy común en el mundo real (Nilsson,
2001).
En cualquier problema de búsqueda donde hay opciones en cada nodo y una
profundidad al nodo objetivo, un algoritmo de búsqueda ingenuo (búsqueda ciega)
deberá buscar potencialmente entre nodos antes de encontrar la solución. Las
heurísticas mejoran la eficiencia de los algoritmos de búsqueda reduciendo el factor de
ramificación de a (idealmente) una constante .
Metaheurísticas
Una metaheurística es un método heurístico para resolver un tipo de problema
computacional general, usando los parámetros dados por el usuario sobre unos
procedimientos genéricos y abstractos de una manera que se espera eficiente.
Normalmente, estos procedimientos son heurísticos.
Las metaheurísticas generalmente se aplican a problemas que no tienen un algoritmo
o heurística específica que dé una solución satisfactoria; o bien cuando no es posible
implementar ese método óptimo. La mayoría de las metaheurísticas tienen como objetivo
los problemas de optimización combinatoria, aunque se pueden aplicar a cualquier
38
problema que se pueda reformular en términos heurísticos, por ejemplo en resolución de
ecuaciones booleanas (Herrera). Las metaheurísticas suelen ser menos eficientes que las
heurísticas específicas, en varios órdenes de magnitud, en problemas que aceptan este tipo
de heurísticas crudas.
El objetivo de la optimización combinatoria es encontrar un objeto matemático finito
(por ejemplo, un vector de bits o permutación) que maximice (o minimice, dependiendo
del problema) una función especificada por el usuario de la metaheurística. A estos objetos
se les suele llamar estados, y al conjunto de todos los estados candidatos se le llama
espacio de búsqueda. La naturaleza de los estados y del espacio de búsqueda son
usualmente específicos del problema.
La función a optimizar se llama función objetivo, y se da al usuario como un
procedimiento caja-negra que evalúa el estado actual o la función. Dependiendo de la
metaheurística, el usuario puede tener que dar otras funciones caja-negra que produzcan
un nuevo estado, generan variantes del estado actual, elijan un estado entre varios, aporten
valores máximos o mínimos para la función objetivo en un conjunto de estados.
Algunas metaheurísticas mantienen en cada instante de ejecución un único estado
actual, y lo cambian en cada iteración por uno nuevo. Este paso básico se conoce como
transición de estado, movimiento o actualización del estado. El nuevo estado puede estar
construido desde la nada por un generador de estados dado por el usuario.
Alternativamente, el nuevo estado puede derivar del estado actual por un mutador
proporcionado por el usuario; en este caso, el nuevo estado se conoce como vecino del
estado actual. Generadores y mutadores son habitualmente procedimientos probabilísticos.
El conjunto de todos los nuevos estados dados por el mutador es el vecindario del estado
actual.
Metaheurísticas más sofisticadas mantienen, en vez de un único estado actual, un
conjunto de varios estados candidato. Así, el paso básico añade o elimina estados de este
conjunto. En este caso, los procedimientos dados por el usuario seleccionan estados para
ser descartados, y generan nuevos estados a añadir. El último estado puede ser generado
como combinación o cruce de dos o más estados del conjunto.
Una metaheurística puede guardar información del óptimo actual, escogiendo el
estado óptimo entre todos los óptimos actuales obtenidos en varias etapas del algoritmo.
Dado que el número de candidatos puede ser muy grande, normalmente, las
metaheurísticas están diseñadas de manera que puedan ser interrumpidas por un tiempo
máximo especificado por el usuario. Si no se interrumpen, algunas metaheurísticas exactas
examinaran todos los candidatos, y usarán métodos heurísticos sólo para escoger el orden
39
de la enumeración; de hecho, siempre devolverán un óptimo real, si el tiempo máximo es
lo suficientemente grande. En cambio, otras metaheurísticas dan sólo una garantía
probabilística pobre de poder alcanzar el óptimo, de manera que cuando el tiempo máximo
se aproxima a infinito, la probabilidad de examinar cada candidato tiende a 1.
2.2.1. Algoritmos genéticos
En los años 1970, de la mano de John Henry Holland, surgió una de las líneas más
prometedoras de la inteligencia artificial, la de los algoritmos genéticos (Holland, 1975).
Son llamados así porque se inspiran en la evolución biológica y su base genético-
molecular. Estos algoritmos hacen evolucionar una población de individuos sometiéndola a
acciones aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y
recombinaciones genéticas), así como también a una selección de acuerdo con algún
criterio, en función del cual se decide cuáles son los individuos más adaptados, que
sobreviven, y cuáles los menos aptos, que son descartados.
Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad.
Bajo una condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde
siempre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrar
que el algoritmo converge en probabilidad al óptimo (Eiben, y otros, 2003).
Los algoritmos genéticos establecen una analogía entre el conjunto de soluciones de
un problema, llamado fenotipo, y el conjunto de individuos de una población natural,
codificando la información de cada solución en una cadena, generalmente binaria, llamada
cromosoma. Los símbolos que forman la cadena son llamados los genes. Cuando la
representación de los cromosomas se hace con cadenas de dígitos binarios se le conoce
como genotipo. Los cromosomas evolucionan a través de iteraciones, llamadas
generaciones. En cada generación, los cromosomas son evaluados usando alguna medida
de aptitud. Las siguientes generaciones (nuevos cromosomas), llamada descendencia, se
forman utilizando dos operadores genéticos; cruce y mutación.
Funcionamiento de un algoritmo genético
En contraposición a otras técnicas metaheurísticas como la búsqueda local, los
algoritmos evolutivos llevan a cabo una búsqueda global mediante el uso de un conjunto de
soluciones en lugar de una sola, mediante la evolución de una población de individuos.
Estos algoritmos evolutivos, basados en la teoría de Darwin sobre la evolución
natural se basan en los siguientes principios:
40
Los individuos tienen capacidad para reproducirse.
Existe una población de tales individuos.
Existe variedad / diferencia entre dichos individuos.
La adaptación al medio y la capacidad de supervivencia depende de dichas
diferencias.
Los individuos mejor adaptados obtienen normalmente mayor descendencia.
La evolución es un proceso que opera sobre cromosomas más que sobre las
estructuras de la vida que están codificadas en ellos.
La simulación de este proceso evolutivo en un computador resulta ser una técnica de
optimización probabilística que con frecuencia mejora a otros métodos clásicos en
problemas difíciles.
Figura 2.32: Ciclo básico de un algoritmo genético
Podríamos definir el algoritmo genético estándar de la siguiente manera:
Algoritmo 2.1: Procedimiento Algoritmo Genético
1.- t = 0
2.- inicializar Poblaciónt
3.- evaluar Poblaciónt
4.- Mientras (no se cumpla la condición de parada) hacer
4.1.- t = t + 1
4.2.- seleccionar Población’t desde Población’t-1
4.3.- recombinar Población’t
4.4.- mutación Población’t
4.5.- evaluar Población’t
4.6.- Población(t) = combinar (Población’t , Poblaciónt-1)
41
Para definir un AG hay que especificar las siguientes componentes:
Representación: codificación de las soluciones en las individuos
Función de evaluación / fitness
Mecanismo de selección
Operadores de variación
Mecanismo de sustitución de la población
Representación
Sin duda, la codificación más usada ha sido la representación binaria. Esta
representación se ha usado no sólo para problemas cuya codificación natural es binaria,
sino también para problemas cuyos parámetros toman valores enteros o reales.
También puede usarse la representación entera, la cual es muchos más natural que la
binaria cuando tenemos un conjunto mayor que dos y finito para cada parámetro del
problema.
Otras representaciones usadas son las permutaciones (muy utilizada sobre todo en
problemas relacionados con grafos) y la codificación real, en la que cada parámetro es
representado por un número pseudo-real, no siendo necesario sustituirlo por una cadena de
bits con precisión limitada.
Función de evaluación
La función de evaluación mide el gado de adecuación o bondad de un individuo. Esa
función de evaluación, en ocasiones es directa (por ejemplo, una función matemática), pero
en otras ocasiones, el individuo debe ser decodificado en otra representación y entonces ser
evaluado.
Existe otro tipo de algoritmos genéticos llamados interactivos, en los que la
evaluación de un individuo es aportada por un experto humano.
En ocasiones, la función de evaluación es tan costosa que es necesario usar una
función sucedánea (surrogate).
42
Población de individuos
Una población es un conjunto de individuos o soluciones potenciales. A la hora de
utilizar un AG debemos considerar aspectos relativos a la población, como son el tamaño
de la misma o bien si será generada de forma informada o aleatoria.
Si el tamaño de la población es pequeño se tendrá poca diversidad y un alto riesgo
de convergencia prematura a un óptimo local. No obstante, si el tamaño es grande habrá
gran diversidad de individuos pero el proceso de convergencia será más lento y el coste en
el número de evaluaciones será mayor. Normalmente se unan poblaciones de tamaño fijo,
pero dicho tamaño puede ser variable, empezando con una población grande (diversidad) e
ir acotando el tamaño de la misma conforme la búsqueda avanza (intensificación).
Respecto a la generación inicial de los individuos, una población aleatoria tiene la
ventaja de distribuir las soluciones por todo el especio de búsqueda, pero una población
informada aporta buenas configuraciones al principio que pueden acelerar la convergencia.
No obstante, una población muy informada nos puede llevar rápidamente a una
convergencia prematura a óptimos locales.
Mecanismo de selección
El mecanismo de selección juega un papel muy importante puesto que se encarga de
decidir qué individuos van a pasar directamente a la generación siguiente o serán padres de
los futuros descendientes. Algunos métodos de selección son la selección proporcional al
fitness, la selección basada en rango y la selección por torneo.
En la selección proporcional al fitness cada individuo tiene probabilidad
directamente proporcional al fitness de ser seleccionado. El principal peligro es que un
superindividuo cope rápidamente la población. Véase un ejemplo en la Tabla 2.1:
Tabla 2.1: Selección proporcional al fitness
( ) 40 25 12 9 4 3 3 2 1 1
( ) 0.4 0.25 0.12 0.09 0.04 0.03 0.03 0.02 0.01 0.01
Por último, la selección por tornero intenta disminuir todavía más la presión selectiva
seleccionando cada individuo mediante el siguiente procedimiento: Se efectuará un torneo
(procedimiento en el cual se enfrenta un conjunto individuos resultando ganador el que
mayor fitness posea), en el cual, siendo k (3, 4, 5,…) el tamaño del dicho torneo, se
escogerá aleatoriamente k individuos de la población y se seleccionará al mejor individuo
43
de los k escogidos. Nótese que cada individuo de la población intervendrá (en media) en k
torneos, independientemente de su fitness.
Operadores de variación: cruce
En los AGs el operador de variación consiste en la aplicación de dos operadores
genéticos: cruce y mutación. El operador de cruce o recombinación consiste en combinar la
información de dos padres para crear (habitualmente) dos descendientes.
Dada una pareja de padres, el cruce se aplica con probabilidad (suele ser alta,
muchas veces ). El cruce es explorativo, ya que probablemente conducirá a zonas
entre los dos padres, pero no introduce nuevo material genético (diversidad).
Algunos de operadores de cruce más típicos son el cruce por uno o varios puntos y el
cruce uniforme para codificación entera o binaria, los cruces aritméticos simples o
completos para codificación real y el cruce PMX para permutaciones.
En el cruce por un punto (Figura 2.33) se elije una posición como punto de cruce y
hasta ella se copia la información de los padres en los hijos, pero a partir de dicha posición
se copia del otro padre.
Figura 2.33: Cruce por un punto
Una extensión del método anterior es el cruce por varios puntos (Figura 2.34) en el
que se usan varios puntos de cruce en lugar de solamente uno.
Figura 2.34: Cruce por varios puntos
44
En el cruce uniforme (Figura 2.35) se crea una máscara y se va copiando gen a gen
en uno u otro padre en función de dicha máscara.
Figura 2.35: Cruce uniforme
Cuando los individuos se representan por vectores de números reales (codificación
real), los operadores anteriores pierden mucho valor, siendo buenos sustitutos de ellos los
cruces aritméticos.
En el cruce aritmético simple (Figura 2.36) se elige un punto de cruce (k) y hasta él
se copia la información de los padres en los hijos. A partir de ese k, el valor de la posición
i-ésima se calcula como:
, - , - ( ) , - (2.41)
, - , - ( ) , - (2.42)
Figura 2.36: Cruce aritmético simple
En este caso, representa la cantidad de información que se proporcionará a los
hijos de un padre respecto al otro padre. Normalmente, no suelen usarse valores de
iguales a 0.5, ya que eso provocaría que los dos hijos fuesen idénticos.
Una variante de este método es el cruce aritmético completo (Figura 2.37), en el que
la expresión anterior se aplica a todas las posiciones.
45
Figura 2.37: Cruce aritmético completo
Nótese que no es una opción demasiado buena, siendo mejor utilizar, por
ejemplo, .
En las permutaciones los cruces anteriores no tienen ningún sentido y dan, en la
mayoría de los casos, soluciones no válidas. Para solucionar este problema se propone el
cruce PMX (Partially Mapped Crossover) (Figura 2.38), al cual consiste en la siguiente
sucesión de operaciones:
1. Elegir dos posiciones aleatoriamente ( ).
2. Copiar el segmento , - de en .
3. Se comienza a buscar los elementos de dicho segmento en que no han sido
copiados en .
4. Sea , - uno de estos valores.
5. Identificar el valor , -
6. Sea la posición en que se encuentra en , es decir, , - .
7. Copiar , - en , -.
8. Repetir este proceso para todos los valores mencionados en el paso 3.
9. El resto de valores de se copian directamente de .
El otro hijo se crearía análogamente.
Figura 2.38: Ejemplo de aplicación del cruce PMX
46
Operadores de variación: mutación
El operador de mutación consiste en cambiar levemente el genotipo de un individuo
(por ejemplo, invirtiendo el valor de un bit). La probabilidad de mutación se aplica
(normalmente) a nivel de gen y suele ser muy pequeña (0.01, 0.0001,…). Es de carácter
explorativo puesto que pequeños cambios hacen explorar la vecindad próxima de un
individuo.
La mutación es el único operador que introduce material genético (diversidad). Si se
trabaja con codificación binaria o entera se cambiará (aleatoriamente) el valor de una
posición por otro de los posibles valores para ese gen (Figura 2.39).
Figura 2.39: Mutación en codificación binaria
Cuando se usa codificación real se cambia el valor de un gen por un número aleatorio
generado uniformemente en el intervalo en que dicho gen toma valores.
En el caso de las permutaciones lo que se hará será un intercambio e inserción de
genes.
Figura 2.40: Mutación en permutaciones
Criterios de parada
La evolución de la población de in dividuos en un AG se continúa hasta que se
alcance el criterio de parada que se designe. Existen varios de estos criterios, siendo los
más utilizados los siguientes:
Hasta que la población converja, cuando todos o casi todos los individuos de la
población son el mismo, o bien, tienen el mismo valor para cada gen.
Hasta alcanzar un número fijo de generaciones.
Hasta alcanzar un número fijo de evaluaciones de fitness.
Hasta alcanzar un número fijo de generaciones sin mejorar el mejor individuo, o
bien, la media del fitness de la población.
47
Ejemplo de ejecución de un algoritmo genético
A continuación se mostrará la evolución de la ejecución de un AG en el que se tiene
una población de tamaño fijo de 4 individuos con codificación binaria cuya función de
evaluación es ( ) y usando un mecanismo de selección proporcional al fitness
(Eiben, y otros, 2003).
Lo primero que se observa en la Tabla 2.2 es la evaluación del fitness de los
individuos y la consecuente probabilidad de selección como padres de los individuos de la
siguiente generación:
Tabla 2.2: Ejemplo de evaluación de fitness y selección en un AG
Como se observa en la tabla anterior, tras la evaluación de la población, el individuo
nº 2 participará dos veces en el proceso de generación de la siguiente generación. Los
individuos nº 1 y nº 4 lo harán una vez cada uno, no participando el individuo nº 3 en este
proceso.
Para la generación de los individuos de la siguiente generación se utilizará un
operador de cruce binario por un punto, generándose de esta manera los siguientes hijos:
Tabla 2.3: Ejemplo de cruce de individuos en un AG
48
Una vez generados los individuos, se procederá a aplicar un operador de mutación, el
cual, tras realizar un sorteo aleatorio, afectará solamente a los individuos nº 1 y nº 4:
Tabla 2.4: Ejemplo de mutación de individuos en un AG
Con esto ya se tendría a los individuos de la segunda generación generados.
Obsérvese que mientras que la media del fitness de la primeria generación era de 293, en la
segunda generación ha aumentado hasta 588,5.
2.2.2. Búsqueda local
Los algoritmos de búsqueda local parten de una solución inicial, y, aplicándole
operadores de variación, la van alterando; si la solución alterada es mejor que la original,
se acepta, si no lo es, se vuelve a la inicial. El procedimiento se repite hasta que no se
consigue mejora en la solución (K. Ahuja, y otros, 1999).
Los procedimientos de búsqueda local más usados son los basados en el gradiente: en
este caso, el operador de variación selecciona una nueva solución teniendo en cuenta la
derivada de la función que se quiere optimizar en el punto, tratando de ascender o
descender usando el gradiente hasta llegar a un punto de inflexión donde no se puede
obtener ninguna mejora adicional.
Estos procedimientos se suelen llamar de hillclimbing, o de escalado de colinas y se
basan en escoger correctamente el tamaño de paso para ascender y el punto de inicio. Pero
se trata de algoritmos de búsqueda locales, y, como tales, sólo van a encontrar el máximo
local más cercano al punto de inicio. Esto se puede resolver usando una estrategia de
multicomienzo, pero no garantizan que se encuentre el máximo global. En todo caso, tiene
la ventaja de que, en cada iteración del algoritmo, se tiene una solución válida, aunque no
tiene por qué ser la mejor.
En la Figura 2.41 se puede observar en procedimiento de hillclimbing, en el cual el
punto representa el estado actual del proceso. Como puede verse, en dos pasos hacia la
49
derecha (considerando un paso como el movimiento a una de las cuatro intersecciones de
líneas adyacentes) hallará un óptimo local. No obstante, como se observa en la figura, no
conseguirá encontrar la solución óptima.
Figura 2.41: Hillclimbing
Funcionamiento de la búsqueda local
El término local se utiliza para hacer referencia a una búsqueda en estructuras de
entornos o vecindades. La idea principal es que desde un punto en el espacio de búsqueda
sólo se puede pasar a otro punto vecino, pero no saltar a cualquier otro punto del espacio
de búsqueda (búsqueda global).
Un vecino de es un nuevo punto del espacio de búsqueda que está próximo a ,
es decir, que puede obtenerse desde mediante pequeñas modificaciones. Esto hace que
tengamos que definir la vecindad de una configuración ( ( )).
El primer paso para resolver un problema de búsqueda local es definir la vecindad o
entorno, para lo cual habrá que fijar una codificación para las soluciones y definir un
operador de generación de vecinos.
Por ejemplo, para el problema del viajante de comercio, si nuestro problema tiene 5
ciudades (A, B, C, D, E), una configuración / solución será una permutación que indique el
camino a seguir, la cual podría ser (A, C, E, B, A).
Los vecinos se generarán a partir de intercambiando un par de posiciones, por
ejemplo:
( )
{
( ) ( )( ) ( )( ) ( )( ) ( )( ) ( )
(2.43)
50
Los algoritmos basados en trayectorias efectúan un estudio local del espacio de
búsqueda y analizan el entorno de la solución actual para decidir cómo continuar el
recorrido de la búsqueda.
Búsqueda por escalada
La búsqueda por escalada (ascensión de colinas o hillclimbing) es uno de los
algoritmos más simples y utilizados. Su funcionamiento es básicamente el descrito en el
Algoritmo 2.2:
Algoritmo 2.2: Búsqueda por escalada (se asume un problema de minimización)
En éste algoritmo, conocido como búsqueda por máximo gradiente, ( ( ))
devuelve el vecino de con mejor función de evaluación. Una variante del algoritmo
consiste en elegir un valor mejor que , pero no necesariamente el mejor de ( ).
La principal ventaja de la búsqueda por escalada es que es muy eficiente y su
principal problema es que suele quedarse en óptimo local. De hecho, como puede
observarse en la Figura 2.42, hay problemas con las crestas, las mesetas y los óptimos
locales.
Figura 2.42: Búsqueda por escalada (minimizando)
1.- Sea 𝑥 una configuración arbitraria o aleatoriamente elegida
2.- Iterar
2.1.- Calcular 𝑁(𝑥)
2.2.- 𝑥 ← 𝑚𝑒𝑗𝑜𝑟(𝑁(𝑥))
2.3.- Si 𝑓(𝑥 ) 𝑓(𝑥) entonces 𝑥′ 𝑥
2.4.- En otro caso devolver 𝑥 como solución
51
Para evitar este inconveniente, podemos encontrar distintas opciones para escapar de
los óptimos locales:
Búsqueda local con reinicios (RLS)
Búsqueda local iterada (ILS)
Búsqueda en entornos variables (VNS)
Integración de la búsqueda local con los algoritmos genéticos
A los algoritmos creados a partir de la combinación de un algoritmo genético junto a
técnicas de búsqueda local se les denomina algoritmos meméticos. La idea básica del
algoritmo es la de incorporar la mayor cantidad de conocimiento del dominio que sea
posible durante el proceso de generación de una nueva población (Cotta, 2007).
Así como en búsqueda local teníamos definida una vecindad para un solo individuo,
la vecindad de una población de individuos se puede obtener mediante la composición de
los individuos.
La idea es crear un conjunto de soluciones nuevas a partir de las actuales. Esto se
puede hacer identificando y combinando los atributos de las soluciones actuales. Los
operadores de recombinación ciegos, como los usados tradicionalmente por los algoritmos
genéticos, no incorporan ningún conocimiento del dominio al momento de generar nuevos
individuos, como por ejemplo, el cruce uniforme.
El argumento principal para no introducir conocimiento es no sesgar la búsqueda, y
evitar convergencias prematuras a soluciones subóptimas, sin embargo, esto último ha sido
cuestionado últimamente.
El conocimiento se puede incorporar en:
La selección de los atributos de los padres que van a ser transmitidos a los
hijos.
La selección de los atributos que no son de los padres que van a ser
transmitidos a los hijos.
El algoritmo describe una estructura genérica de un algoritmo memético. Se
construye inicialmente una población, a partir de ésta, se crea una nueva población, y
finalmente de decide que parte se reemplaza de la población anterior para quedarse con una
nueva población y repetir el proceso. En caso de converger se puede reiniciar el proceso
con otra población.
52
Algoritmo 2.3: Algoritmo memético
Para generar una nueva población (reinicio), se pueden mantener algunos de los
mejores individuos (inclusive uno solo) o se puede hacer una mutación muy fuerte.
Los dos tienen sus ventajas y desventajas. Cuando se deja uno o más anteriores, se
tiene que tener cuidado de que no invadan rápidamente la población, ya que debido a su
alto fitness serán elegidos con frecuencia para generar individuos a partir de ellos. Cuando
se hace por mutación, se puede perder información valiosa con mucha mutación o se puede
regresar al punto anterior con poca mutación.
La diferencia viene en la generación de una nueva población a partir de operadores
genéticos. Los algoritmos meméticos utilizan conocimiento del dominio para guiar mejor
la búsqueda y decidir qué elementos incorporar y cuáles desechar al momento de crear
nuevos individuos.
Los algoritmos meméticos se pueden ver como algoritmos genéticos en donde se
introduce conocimiento del dominio para crear una nueva generación de individuos.
comenzar
POBL ← GeneraPoblInic()
repetir
POBLNVA ← GenNvaPobl(POBL)
POBL ← ActualizaPobl(POBL, POBLNVA)
si POBL convergió entonces
POBL ← reinicia(POBL)
hasta criterio de paro
53
3. DISEÑO E IMPLEMENTACIÓN
Para la realización del presente proyecto, dada la cantidad de parámetros de que
consta el modelo a generar, así como debido al tipo de los mismos, se opta desde un
principio por el empleo de algoritmos genéticos como técnica de búsqueda metaheurística.
Más adelante, como se explicará en éste capítulo, se decide la combinación de
técnicas de búsqueda local con el algoritmo genético. Esta combinación de técnicas
(conocida como algoritmo memético) mejorará enormemente los resultados del algoritmo
genético en solitario (sobre todo tras la incorporación de envolventes a los resultados).
Para la generación de los modelos que imiten a los instrumentos originales, será
necesaria la generación de un conjunto de parámetros que se agruparán en dos categorías.
Por un lado, se tienen los parámetros asociados a las distintas portadoras que
generarán la señal FM. Normalmente se usarán entre una y cinco portadoras (dependiendo
de la complejidad del sonido que se deba imitar). Por cada una de esas portadoras se
deberán hallar tres parámetros: la amplitud de la misma, el índice de modulación y la
relación entre las señales portadora y moduladora. Por ejemplo, al trabajar con cinco
moduladoras, tendrán que optimizarse 15 parámetros, lo cual causa una gran complejidad
computacional a los algoritmos.
Por otro lado están los parámetros correspondientes a la forma de la señal, o
envolvente. Este conjunto de parámetros pueden ser globales a todas las envolventes o
estar asociados a cada una de ellas. En el caso de que se asocien a cada una de las
portadoras, los algoritmos tendrán que buscar cuatro nuevos parámetros por portadora,
correspondientes a los puntos de una envolvente ADSR, aumentando el número de
parámetros del modelo a generar a , siendo el número de señales portadoras de las
que estará formada nuestra señal generada.
En el caso de que los parámetros de la envolvente sean comunes a todas las
portadoras, pueden ser generados de igual manera, usando los puntos de una envolvente
ADSR, o bien mediante técnicas de interpolación sobre la forma de onda a imitar,
independizándolos de ésta manera de la generación del resto de parámetros, dado que se
generarán en una fase independiente.
Una vez que el algoritmo de búsqueda haya terminado la generación del modelo, se
procederá a la creación de un fichero de forma de onda, el cual contendrá una muestra del
resultado del proceso. Esto es posible gracias a que el presente proyecto implementa un
sintetizador FM interno, el cual será usado para comprobar la similaridad entre el sonido
54
objetivo y los generados por los algoritmos, así como para generar señales de muestra a
partir de un conjunto de parámetros dados.
A continuación se verán cuestiones relativas al diseño e implantación de los distintos
componentes que forman el presente proyecto.
3.1. DISEÑO
En los siguientes subapartados se irán viendo los detalles de diseño de cada una de la
funcionalidades de la aplicación.
3.1.1. Sintetizador FM
La primera de funcionalidad desarrollada fue un sintetizador FM multiportadora, el
cual, a partir de unos parámetros de entrada correspondientes a cada una de las portadoras
y de la envolvente (ya sea ADSR o por interpolación) genera una señal FM con una
duración y frecuencia dadas.
La señal resultado de este proceso, una vez que todas sus muestras han sido
normalizadas, puede ser usada tanto para la creación de un individuo de la población con la
que trabajará el algoritmo genético, como para la generación de un fichero .wav de
muestra, el cual contenga el resultado de la síntesis.
Los parámetros de entrada para el sintetizador, en el caso de que una envolvente
ADSR vaya a ser aplicada tienen el siguiente formato:
amp,modIndex,ratio,attackTime,decayTime,sustainLevel,releaseTime:amp,modIndex,ratio,attackT
ime,decayTime,sustainLevel,releaseTime:...:amp,modIndex,ratio,attackTime,decayTime,sustainL
evel,releaseTime
El significado de cada uno de los anteriores parámetros puede verse en el
subapartado 3.1.3.
55
Como ejemplo, se sintetizará una onda correspondiente a los siguientes parámetros:
1,1,1,0.1,0.2,0.7,0.3:0.25,0.5,2,0.2,0.4,0.8,0.1. El resultado puede ser visto en la siguiente
figura:
Figura 3.1: Resultado de sintetizador FM para una señal dada
3.1.2. Comparador de señales de audio
Dado que el algoritmo genético requiere de una función fitness que proporcione el
nivel de adecuación de un instrumento de la población al instrumento original a imitar, se
implementa este comparador de señales de audio.
Este comparador toma como entrada dos instrumentos (el instrumento a imitar y el
individuo de la población a comparar) y realiza la comparación mediante la trasformada
rápida de Fourier, para lo cual se dividirán las señales de entrada en ventanas de tamaño
predefinido (normalmente se usará 512) e irá comparando una a una dichas ventanas de
ambas señales mediante la distancia euclídea punto a punto entre los espectros. Una vez
concluida esa operación, se calculará la media de cada una de las comparaciones, la cual
será proporcionada como función fitness del individuo tras tu multiplicación por -1,
obteniendo así un problema de maximización en el cual el individuo perfecto tendrá un
fitness de 0.
A continuación se verá un ejemplo de comparación de dos señales similares (Figuras
3.2 y 3.3) y de dos señales muy dispares (Figuras 3.3 y 3.4), obteniéndose en el primero de
los casos un fitness de -13819 y en el segundo uno de - 320936.
56
Figura 3.2: Señal FM con parámetros (1, 1, 1, 0.2, 0.1, 0.8, 0.3)
Figura 3.3: Señal FM con parámetros (1, 1.1, 1, 0.2, 0.1, 0.8, 0.3)
Figura 3.4: Señal FM con parámetros (1, 4, 2, 0.1, 0.2, 0.5, 0.4)
Se valoró el uso de combinar esta técnica de comparación espectral con otra, como es
el centro de gravedad del espectro. No obstante esta técnica fue descartada porque además
de aumentar el tiempo de cómputo, empeoraba los resultados en la mayoría de los casos.
3.1.3. Algoritmo genético
Este algoritmo trabajará con una población inicial de individuos (instrumentos FM)
generados aleatoriamente, los cuales serán evolucionados generación tras generación, hasta
llegar a un número de generaciones dado. Al llegar a la última de las generaciones, el
mejor individuo de la misma será considerado la solución al problema de búsqueda.
57
La codificación de un individuo formado por n portadoras es la siguiente:
(
)
Figura 3.5: Codificación de un individuo
En la figura anterior, las comunas representan a las distintas portadoras de las que
está compuesto un individuo. Los parámetros que forman cada portadora son los
siguientes:
: Amplitud de la portadora
: Índice de modulación
: Relación portadora / moduladora
: Fracción de tiempo de ataque de la envolvente ADSR
: Fracción de tiempo de decaimiento
: Nivel del sostenimiento
: Fracción de tiempo de desvanecimiento
Para el desarrollo de éste algoritmo se ha considerado trabajar con un número de
individuos constante generación tras generación.
El procesamiento de la población para una población dada es el siguiente:
1. Se generará una lista de candidatos a formar parte de la siguiente generación, la
cual estará formada en un principio por todos los individuos de la población.
2. Se decidirá qué instrumentos serán candidatos a reproducirse mediante una
selección por torneo.
3. Una vez seleccionados los padres se procederá al cruce de los mismos,
atendiendo a una probabilidad de cruce dada aumentando con sus hijos la lista de
candidatos a parar de generación.
4. Con la lista de candidatos formada por los individuos iniciales y los nuevos
creados a partir de los cruces, se procederá a la mutación de los individuos
atendiendo a una probabilidad de mutación dada y evitando que el mejor da los
individuos de la generación anterior sea mutado con el fin de no distorsionar una
posible buena solución.
58
5. Se procederá a realizar una búsqueda local sobre un porcentaje de los mejores
candidatos.
6. Para mantener un tamaño constante dentro de la población, los peores individuos
serán descartados y no pasarán a la generación siguiente.
A continuación se verán los detalles del procedimiento anterior.
Selección
La selección de los individuos candidatos a reproducirse se realizará mediante la
técnica de selección por torneo.
Esta técnica consiste en seleccionar a un número de individuos dado entre toda la
población de forma aleatoria (en éste caso, ese número será igual a 5). Una vez obtenido el
conjunto de candidatos a participar en el torneo se seleccionará al mejor de todos ellos (el
de mayor función fitness) como candidato a participar en una operación de cruce.
Esta técnica evitará que un posible individuo con una función de fitness alta
condicione a la siguiente generación, ya que de no realizar una selección por torneo,
tendría una probabilidad muy alta de ser siempre elegido para participar en los cruces, lo
cual conduciría la búsqueda a un espacio de soluciones muy cercanas a él, descartándose
de esta forma posibles mejores soluciones en otros espacios de búsqueda.
Cruce
Una vez que dos individuos han sido seleccionados para participar en el cruce se
procederá a la generación de dos hijos, cuyos parámetros serán generados a partir de la las
siguientes ecuaciones:
( ) (3.1)
( ) (3.2)
Siendo un número comprendido entre 0 y 1. Nótese que si tiende a 0 o a 1, solo
uno de los padres aportará sus características, mientras que si tiende a 0.5, todos los
parámetros tenderán a un valor central y los dos hijos serian idénticos. En éste caso se
seleccionará .
Otro aspecto a considerar es que al ser distinto de 0.5, algunos valores podrían
sobrepasar el valor máximo para un parámetro dado, lo cual tiene que ser tenido en cuenta,
59
si como en el caso de que se trabajase con envolventes ADSR, la combinación de los
parámetros que la forman podría no ser coherente, dado que la suma de los tiempos de
ataque, decaimiento y desvanecimiento no pueden ser mayores de 1, ya que el tiempo de
sostenimiento viene dado por:
( ) (3.3)
De ser la suma de éstos tres valores superior a uno, el tiempo de sostenimiento sería
negativo, lo cual es imposible.
En la Figura 3.6 puede verse el cruce de dos individuos (izquierda) y los hijos
resultantes de dicha operación (derecha).
Los parámetros de los individuos intervinientes en el cruce son los siguientes:
Padre 1: (1, 1, 1, 0.2, 0.1, 0.8, 0.3)
Padre 2: (1, 4, 2, 0.1, 0.2, 0.5, 0.4)
Hijo 1: (1, 2.95, 1.65, 0.135, 0.165, 0.605, 0.365)
Hijo 2: (1, 2.05, 1.35, 0.165, 1.135, 0.695, 0.335)
Figura 3.6: Ejemplo de cruce de individuos
Mutación
Cuando un individuo ha sido seleccionado para ser sometido a una operación de
mutación se selecciona aleatoriamente uno de sus genes (parámetros) para que sea mutado.
En este caso, el proceso de mutación consistirá en la regeneración del parámetro
seleccionado por otro generado de forma aleatoria, dentro de los límites de dicho
parámetro.
60
Ilustraremos el proceso en la Figura 3.7 en la que se observará el proceso se
mutación de un individuo (arriba) y el resultado de la operación (abajo). En este caso, se ha
seleccionado aleatoriamente la mutación del tercer gen (relación portadora / moduladora).
Los parámetros de los individuos son los siguientes:
Original: (1, 1, 1, 0.2, 0.1, 0.8, 0.3)
Mutante: (1, 1, 2.5, 0.2, 0.1, 0.8, 0.3)
Figura 3.7: Ejemplo de mutación de un individuo
3.1.4. Búsqueda local
Con el fin de mejorar los resultados del algoritmo genético se incorpora a éste un
algoritmo de búsqueda local.
Este algoritmo se basa en una búsqueda por escalada, la cual será aplicada a un
porcentaje determinado de individuos de la población al término de cada generación.
El proceso para la mejora de un individuo consiste en generar nuevos individuos
variando cada uno de sus parámetros. Se generarán individuos, siendo el número de
parámetros de que consta el individuo original. Los parámetros se variarán aumentando y
disminuyendo el valor original en una distancia dada.
Tras la generación de los individuos, si la función fitness de ninguno de ellos mejora
la del individuo original, el proceso acaba y los individuos generados son descartados. No
obstante, si el fitness de uno o varios individuos supera al del individuo original, este será
sustituido por el mejor de todos ellos, volviendo a aplicarse el mismo algoritmo sobre éste
último y descartándose el resto de los que hayan sido generados.
61
3.2. IMPLEMENTACIÓN
La implementación del proyecto, a la cual se decide llamar “GeneticSynthesys”, está
realizada en Java debido a que en un principio se pensó en utilizar como base la librería
LiO (Mateo, y otros), escrita en dicho lenguaje. Pese a que más adelante se descartó el uso
de LiO, se siguió optando por Java, principalmente por su potencia y portabilidad.
En los siguientes apartados se verá la descomposición en clases de la
implementación, así como una descripción de las mismas.
3.2.1. Diagrama de clases
En la siguiente figura podrá observarse la distribución en clases de la aplicación, así
como las relaciones de herencia entre las mismas.
Por claridad, otro tipo de relaciones entre clases como las de dependencia y
asociación serán mostradas en el apartado siguiente.
Figura 3.8: Relaciones de herencia entre clases
62
3.2.2. Descripción de las clases
A continuación se explicará la funcionalidad de cada una de las clases del sistema,
incluyendo figuras que muestren los métodos y atributos de las mismas.
Sonido
Esta clase implementa todas las operaciones necesarias para trabajar con sonido:
Sintetizador FM
Entrada / salida de ficheros .wav
Comparación de instrumentos
Otras operaciones (normalizar muestras, obtener las frecuencias asociadas a
determinadas notas…)
Como puede verse en la Figura 3.9, ésta clase usa dos librerías externas para la
lectura / escritura en disco de ficheros de audio (JMusic) y para el cálculo de la
Transformada de Fourier (MEAPsoft), ambas de libre distribución y código abierto.
La librería JMusic ha sido levemente modificada para poder ser usada en éste
proyecto.
Figura 3.9: Clase Sonido
63
Instrumentos y portadoras
Como la aplicación trabaja con dos tipos de envolventes (ADSR e interpoladas8) se
crea una interfaz Instrumento que implementaran las clases InstrumentoInterpolacion e
InstrumentoADSR, siendo estas dos clases las que realmente codifican los instrumentos
musicales.
Cada una de estas dos clases estará formada por un conjunto de clases Portadora
(PoradoraInterpolacion o PortadoraADSR, dependiendo de cada caso particular) que
implementaran una única portadora de un instrumento FM.
Las clases que codifican los instrumentos tienen tres métodos principales:
getFitness(): Proporcionará el valor del fitness del instrumento usando los
métodos de la clase Sonido.
getSample(): Sintetizará una muestra del instrumento usando la agregación de
todas sus portadoras.
toString(): Genera una representación textual del individuo (fitness y
parámetros de las portadoras).
8 Véase explicación de la técnica en el capítulo 4
64
Figura 3.10: Interfaz Instrumento y clases InstrumentoInterpolacion,
PoratadoraInterpolacion, InstrumentoADSR, PortadoraADSR
Envolventes
Como se mencionaba en el subapartado anterior, una envolvente puede ser
interpolada o ADSR. Debido a ello, y como en el caso anterior, se usará un interfaz
Envolvente que será implementada por los dos tipos de envolventes.
En el caso de la envolvente ADSR, será aplicada individualmente sobre cada una de
las portadoras y sus parámetros serán generados por el algoritmo genético y mejorados por
la búsqueda local.
Por el contrario, cuando usamos envolventes por interpolación, serán generadas antes
de la puesta en funcionamiento del algoritmo genético con la técnica de interpolación
logarítmica por splines, implementada una librería externa (Flanagan Math).
65
Figura 3.11: Interfaz Envolvente y clases ADSR y EnvolventeInterpolacion
Genéticos
Esta clase implementa las operaciones para evolucionar una población de individuos,
incluyendo los operadores de selección (por torneo), cruce, mutación, descarte de
individuos e invocación a la búsqueda local.
Los detalles del método principal, avanzarGeneracion(), pueden ser vistos en detalle
en el apartado 3.1.3.
Figura 3.12: Clase Geneticos
66
Voraz
En esta clase se ha implementado el algoritmo de búsqueda local, el cual, mediante el
método Mejorar() aceptará un instrumento; si la búsqueda local consigue un instrumento
mejorado a partir del original, se devolverá dicho instrumento mejorado. En caso contrario
se devolverá el mismo instrumento original.
En el subapartado 3.1.4. pueden verse más detalles de éste proceso.
Figura 3.13: Clase Voraz
Configuración
Esta clase es la encargada de establecer los parámetros que usará la aplicación. Esto
parámetros se establecerán externamente mediante un fichero de texto (Configuracion.cfg
si no se indica el uso de otro distinto por línea de comandos).
Los parámetros que manejará la aplicación serán los siguientes:
modo: Determina si usaremos el algoritmo genético o si solamente queremos
hacer uso del sintetizador FM para generar un fichero WAV.
poblacion: Tamaño de la población con la que trabajará el algoritmo genético.
generaciones: Al alcanzar ese número de generaciones, el algoritmo genético
se detendrá.
pCruce: Probabilidad de que se dé un cruce entre dos individuos.
pMutacion: Probabilidad de que un individuo sea mutado.
iMejora: Porcentaje de individuos que el algoritmo de búsqueda local
intentará mejorar al término de cada generación.
nPort: Número máximo de portadoras con la que estará formada la solución.
puntosInterpolacion: Cantidad de puntos usados para la generación de
envolventes por interpolación.
67
semilla: Semilla aleatoria que será usada para poder reproducir los
experimentos.
wav: Determina si se desea obtener como salida un fichero WAV.
verbose: Establece si se desea una salida textual de la ejecución de la
aplicación.
duracion: Tiempo en segundos de la salida del sintetizador interno, en el caso
de que sea usado.
paramPort: Parámetros pasados al sintetizador FM para generar un fichero
WAV.
Figura 3.14: Clase Configuracion
Estadísticas
Durante la ejecución de los algoritmos, esta clase recogerá una serie de datos
estadísticos. Estos datos que serán mostrados al término de proceso de búsqueda son los
siguientes:
Valor de la función fitness del mejor individuo encontrado, así como sus
parámetros.
Número de evaluaciones del fitness de los individuos realizadas.
68
Número de cruces entre individuos.
Número de mutaciones de individuos.
Número de mejoras que la búsqueda local ha sido capaz de realizar.
Duración de la ejecución.
Además de la recopilación de estos datos, también es generada otra salida en formato
fichero de texto con los parámetros de la mejor solución.
Figura 3.15: Clase Estadisticas
Constantes
Esta interfaz funciona como librería de constantes que será implementada por todas
las clases de la aplicación. Almacena los siguientes valores (entre paréntesis su valor):
alhpa: valor de α para el cruce entre individuos (0.35)
DIST_AMP: Distancia en la que el alritmo de búsqueda local aumentará y
disminuirá la amplitud de una portadora(0.01)
DIST_MODINDEX: Similar para el índice de modulación (0.1)
MAX_AMP: Máxima amplitud de una portadora (1)
MAX_MODINDEX: Similar para el índice de modulación (10)
MAX_RATIO: Similar para la relación portadora / moduladora (10)
nota: La nota en la que se generarán los individuos (La)
octava: La octava9 en la que se generarán los individuos (3)
sample_rate: Frecuencia de muestreo con la que se trabajará (44100)
tam_torneo: Tamaño del torneo en la selección de individuos
ventanaFourier: Tamaño de la ventana en el cálculo de la FFT
9 Una octava es el intervalo que separa dos sonidos cuyas frecuencias fundamentales tienen una
relación de dos a uno. Ejemplo de octava: el la4 de 880 Hz está una octava por encima respecto a la3 de 440
Hz.
69
Además, se definen otras constantes para numerar las notas musicales.
Figura 3.16: Clase Constantes
GeneticSynthesis
Esta clase forma el núcleo principal e hilo conductor de la aplicación. Tras cargar la
configuración e inicializar las estadísticas, pone en funcionamiento el algoritmo genético.
Tras la inicialización de la población, cuyos individuos contarán con una sola
portadora generada de forma aleatoria, ésta se irá evolucionando hasta el número de
generaciones determinado por el parámetro de configuración.
Una vez concluido este proceso, se procederá a realizar otra nueva ejecución del
algoritmo genético con una población inicial formada ésta vez por dos portadoras: la
primera corresponderá al mejor individuo de la generación anterior y la segunda será
generada, como en el caso anterior, aleatoriamente.
70
El anterior proceso acabará cuando el número máximo de portadoras dado por la
configuración sea alcanzado, o bien cuando la solución encontrada con portadoras no sea
mejor que la encontrada con ( ) portadoras.
Al término del algoritmo genético se hará uso de los módulos de estadísticas y
sonido para presentar los datos estadísticos y generar un fichero WAV con la solución
obtenida.
Figura 3.17: Clase GeneticSynthesis con envolventes por interpolación
La sintaxis para iniciar la aplicación es la siguiente:
java –jar GeneticSynthesis.jar [instrumento] [config]
Si no se definen instrumento o config se toman como valores por defecto
Original.wav y Configuracion.cfg.
Tras la ejecución de la aplicación se obtendrán como resultado dos ficheros (en los
que X se sustituiría por el nombre del fichero con el instrumento original a imitar):
generado_X.wav: Fichero con una muestra de la mejor solución encontrada
resultado_X.log: Fichero de texto con los parámetros de la mejor solución
71
En la Figura 3.18 puede verse un ejemplo de ejecución de la aplicación en un entorno
Windows:
Figura 3.18: Ejecución de la aplicación en un entorno Windows
72
4. EXPERIMENTOS
Antes de comenzar a explicar los experimentos, debemos señalar que a pasar de que
el teorema central de límite10
y la ley de los grandes números11
indican que han de
realizarse 30 experimentos para que los resultados sigan una distribución normal, en este
proyecto se realizarán 10 ejecucuciones, debido a que el tiempo de cómputo de algunos
experimentos llego a durar en torno a dos días.
Para cada experimento me mostrarán los parámetros de una de las 10 soluciones
encontradas, su forma de onda (siempre y cuando no sea generada a partir de una
envolvente trivial) y espectro, así como la media ( ) y la desviación típica ( ) del fitness
de las soluciones encontradas. Los valores exactos de todos los experimentos pueden ser
consultados en el apéndice A.
Como objetivo inicial, tras haber desarrollado el núcleo del algoritmo genético capaz
de buscar instrumentos formados por una sola portadora sin ninguna envolvente, se
intentará obtener los parámetros un instrumento FM generado con el sintetizador interno,
con parámetros (1, 1, 1)12
.
Para la realización de los experimentos se utilizarám los siguientes parámetros:
Tamaño de la población: 1000
Nº de generaciones: 25
Probabilidad de cruce: 80%
Probabilidad de mutación: 10%
Tras la realización del experimento se obtienen los siguientes resultados:
Tabla 4.1: Resultado con una portadora sin envolvente
Parámetros
(1.0 1.000 1.001) -12 0
10
El teorema central del límite indica que, en condiciones muy generales, la distribución de la suma
de variables aleatorias tiende a una distribución normal (también llamada distribución gaussiana o curva de
Gauss o campana de Gauss) cuando la cantidad de variables es muy grande. 11
La ley de los grandes números es un teorema en probabilidades que describe el comportamiento del
promedio de una sucesión de variables aleatorias según el número total de variables aumenta. El teorema
describe hipótesis suficientes para afirmar que dicho promedio converge (en los sentidos explicados abajo)
al promedio de las esperanzas de las variables aleatorias involucradas. 12
El formato de los parámetros de una portadora es (Amplitud, Índice de modulación, Relación
portadora / moduladora)
73
En la Figura 4.1 pueden verse representados el instrumento original (arriba) y el
resultado de la última ejecución del experimento.
Figura 4.1: Resultado con una portadora sin envolvente
El siguiente experimento consistirá en una búsqueda de instrumentos con un número
variable de portadoras, pero aún sin envolvente. En esta nueva versión, los parámetros de
la población inicial cuando se usa más de una portadora son generados de forma aleatoria
(ignorando los obtenidos en la búsqueda con una portadora menos).
Además, en esta versión comienza a usarse la búsqueda local, aplicada solamente
sobre el mejor individuo tras la última generación.
Tras la modificación del algoritmo para trabajar con múltiples portadoras, se
realizarán experimentos sobre instrumentos de 2 y 3 portadoras con los siguientes
parámetros:
(1, 1.5, 0.5) (0.5, 1, 1)
(1, 1.5, 0.5) (0.5, 1, 1) (0.25, 0.5, 1.5)
Tras la realización del instrumento se obtienen los siguientes resultados de las que
podrán comprobarse gráficamente en las siguientes figuras, en las cuales representaremos
el resultado del último experimento para dos y tres portadoras. Al igual que en el caso
anterior, en la parte superior tendremos el instrumento original y en la inferior la mejor de
las soluciones.
74
Tabla 4.2: Resultado con dos portadoras sin envolvente
Parámetros
(0.997 1.419 0.506) (0.568 0.919 1.001) -28190,9 6122,3
Figura 4.2: Resultado con dos portadoras sin envolvente
Tabla 4.3: Resultado con tres portadoras sin envolvente
Parámetros
(0.988 1.456 0.497) (0.409 0.817 1.003) (0.197 0.049 0.187) -44150,6 21142,9
Figura 4.3: Resultado con tres portadoras sin envolvente
75
Como puede observarse en las anteriores figuras, el resultado de la búsqueda, si bien
no es prácticamente perfecto como en el caso de una única portadora, es bastante
aceptable.
Ha de recalcarse la especial importancia de la búsqueda local en éstos resultados.
Éste algoritmo aplicado solamente sobre el mejor individuo de la última generación,
mejora el resultado en el caso de dos portadoras en un 77%, en un 200% en el caso de tres
portadoras.
Tras la obtención de éstos resultados, se procede a generar una nueva versión de la
aplicación, la cual sea capaz de trabajar con envolventes ADSR simples (la misma
envolvente es aplicada sobre todas las portadoras). Repetiremos los experimentos
anteriores sobre los siguientes instrumentos:
(1, 1, 1) [0.2, 0.1, 0.7, 0.3]13
(1, 1.5, 0.5) (0.5, 1, 1) [0.1, 0.4, 0.3, 0.1]
(1, 1.5, 0.5) (0.5, 1, 1) (0.25, 0.5, 1.5) [0.2, 0.1, 0.7, 0.3]
El resultado de la búsqueda sobre los anteriores instrumentos fue el siguiente (puede
observarse en las Figuras 4.4, 4.5 y 4.6 comparados con los instrumentos originales,
situados en la parte superior de las mismas):
Tabla 4.4: Resultado con una portadora y envolvente simple
Parámetros
(1 1 1) [0.2 0.1 0.7 0.3] -11,3 7,5
Figura 4.4: Resultado con una portadora y envolvente simple
13
El formato de una envolvente ADSR es [Tiempo de ataque, Tiempo de decaimiento, Nivel de
sostenimiento, Tiempo de liberación]
76
Tabla 4.5: Resultado con dos portadoras y envolvente simple
Parámetros
(0.9 1.49 0.5) (0.45 1.02 1) [0.1 0.4 0.3 0.1] -73,4 66,8
Figura 4.5: Resultado con dos portadoras y envolvente simple
Tabla 4.6: Resultado con tres portadoras y envolvente simple
Parámetros
(1 1.54 0.5) (0.3 0.03 1.07) (0.22 0 0.7) [0.21 0.04 0.69 0.31] -227,9 124
Figura 4.6: Resultado con tres portadoras y envolvente simple
Los resultados en el caso de una y dos portadoras rozan la perfección, siendo
bastante aceptables en el caso de 3 portadoras. Al igual que en el caso anterior, la búsqueda
local ha mejorado enormemente la solución obtenida.
77
Hay que mencionar que la función de evaluación, implementada dentro del paquete
JMusic ha sido sustituida por otra computacionalmente más veloz, la cual forma parte del
paquete Meapsoft, proporcionando esta última valores en una escala menor que la anterior.
Con el fin de poder imitar instrumentos reales, incorporamos a la aplicación las
envolventes múltiples. Con esta técnica, cada portadora que forma un instrumento poseerá
su propia envolvente, obteniendo así un sonido más realista.
Además, considerando el éxito que tuvo la búsqueda local en los anteriores
experimentos, se ampliará el uso de la misma, siendo aplicada al término de cada
generación (en vez de hacerlo al término de la última solamente) sobre un porcentaje dado
de los mejores individuos (en contraposición con los casos anteriores, que solo se aplicaba
sombre el mejor individuo).
Otra mejora que se incorporará al algoritmo genético será que cuando una generación
de individuos con portadores sea generada (siendo ), las primeras portadoras
de cada individuo serán copiadas del mejor individuo de la anterior ejecución. Esta
heurística ayudará al algoritmo genético a encontrar una mejor solución de dos formas
distintas:
1. La búsqueda de la solución desde el comienzo no será completamente
“ciega”, sino que el algoritmo podrá basarse en la solución anterior para
encontrar otra.
2. A pesar de que una ejecución del algoritmo genético haya agotado su máximo
número de generaciones, una ejecución posterior podrá seguir la búsqueda
durante más generaciones, mejorando el resultado anterior.
Debido a que el número de parámetros a descubrir para cada instrumento ha
aumentado hasta , siendo el número de portadoras, aumentando con ello el tiempo
de búsqueda, se incluye un nuevo criterio de parada al algoritmo: si el resultado de la
ejecución del algoritmo con portadoras no es capaz de mejorar el resultado de la
ejecución con portadoras, se finaliza el proceso de búsqueda.
78
Se procederá a la evaluación de la nueva versión de la aplicación con individuos de
dos y tres portadoras (no usaremos el de una sola portadora debido a que el resultado sería
equivalente al obtenido en el experimento anterior). Los individuos a imitar serán los
siguientes:
( (1, 1.5, 0.5) [0.1, 0.4, 0.3, 0.1] ) ( (0.5, 1, 1) [0.2, 0.1, 0.7, 0.3] )
( (1, 1.5, 0.5) [0.1, 0.4, 0.3, 0.1] ) ( (0.5, 1, 1) [0.2, 0.1, 0.7, 0.3] ) ( (0.25, 0.5,
1.5) [0.4, 0.2, 0.9, 0.2] )
Se realizan los experimentos sobre los anteriores instrumentos, obteniéndose
siguientes resultados que serán mostrados en las Figuras 4.7 y 4.8:
Tabla 4.7: Resultado con dos portadoras y envolvente múltiple
Parámetros
(0.43 1.51 0.5 [0.1 0.4 0.3 0.1]) (0.23 0.99 1 [0.22 0.07 0.66 0.3]) -6472,5 7969,3
Figura 4.7: Resultado con dos portadoras y envolvente múltiple
79
Tabla 4.8: Resultado con tres portadoras y envolvente múltiple
Parámetros
(0.39 1.73 0.5 [0.1 0.4 0.29 0.1]) (0.26 0.44 1 [0.19 0.45 0.88 0.23]) (0.03 4.38 0.5 [0.41 0 1 0.24]) -7868,4 773,9
Figura 4.8: Resultado con tres portadoras y envolvente múltiple
Como puede observarse, el resultado de los experimentos con las nuevas mejoras
incorporadas ha sido bastante satisfactorio, si bien cabe mencionar que el aumento de
número de parámetros a descubrir y el uso mucho más intensivo de la búsqueda local ha
aumentado considerablemente al tiempo de ejecución, pasando de unos cuantos minutos en
los experimentos anteriores a alrededor de 3 horas en el experimento con dos portadoras y
algo más de seis en el caso de tres portadoras.
Tras los resultados positivos con los instrumentos generados por el sintetizador
interno, se procede a imitar instrumentos generados por un sintetizador comercial como es
Yamaha DX714
. Para ello generaremos instrumentos de cuerda (piano), viento (clarinete),
percusión (bloque de madera15
) y tipo campana (campanas tubulares16
).
14
El sintetizador Yamaha DX7 (versión inicial) llegó al mercado en 1983 y se fabricó hasta el año 86,
calculándose una cantidad de 160 mil unidades. En esa época era un instrumento musical realmente
novedoso, por ser digital (no se desafina, suena más limpio que los analógicos), emplear la síntesis FM, tener
MIDI y ser polifónico. Por esto mismo, se transformó en uno de los que mayor éxito y demanda tuvo.
15
Se denomina bloque de madera a un instrumento de percusión muy utilizado en el flamenco. Se
trata de un bloque de madera con el interior hueco. El bloque de madera se percute con una baqueta y el
sonido resultante es seco. Comenzó a ser utilizado, más allá de la música popular, a partir del siglo XIX,
cuando los compositores empezaron a introducirlo en sus piezas musicales.
16
Las campanas tubulares son un instrumento musical, en concreto, se trata de un idiófono percutido
de metal. Se llaman campanas tubulares porque, de hecho, su sonido es similar al de las grandes campanas de
las iglesias. Su invención fue un modo de evitar llevar las grandes y poco prácticas campanas originales a la
orquesta.
80
Se procede a la aplicación del algoritmo de búsqueda sobre los instrumentos
anteriormente mencionados, obteniéndose los siguientes resultados (que podrán observarse
en las cuatro siguientes figuras):
Tabla 4.9: Resultado para un instrumento de cuerda con envolvente ADSR
Parámetros
(0.58 0.95 1 [0 0.2 0.01 0.3]) (0.14 3 0.5 [0 0 0.03 0.81]) (0.02 2.22 1 [0.25 0.29 0.01 0.41]) -27432,1 391,3
Figura 4.9: Resultado para un instrumento de cuerda con envolvente ADSR
Tabla 4.10: Resultado para un instrumento de viento con envolvente ADSR
Parámetros
(0.59 1.23 2 [0.44 0 0.86 0.39]) (0.04 3.5 0.71 [0.01 0.32 0.41 0.05]) (0.03 3.46 1.01 [0 0.21 0.49 0.3]) -217458,6 747,9
Figura 4.10: Resultado para un instrumento de viento con envolvente ADSR
81
Tabla 4.11: Resultado para un instrumento de percusión con envolvente ADSR
Parámetros
(0,28 0,01 1,41 [0,15 0,02 0,13 0,68]) (0,03 0,47 1,6 [0,24 0,23 0,29 0,53]) (0,02 0,69 1,99 [0,23 0,13 1 0,54]) -4717,6 113,6
Figura 4.11: Resultado para un instrumento de percusión con envolvente ADSR
Tabla 4.12: Resultado para un instrumento tipo campana con envolvente ADSR
Parámetros
(0.46 0.44 1.51 [0 0 0.01 0.99]) (0.12 0.56 7 [0 0.18 0.01 0.82]) (0 3.36 1 [0.28 0.24 0.51 0.33]) -42863 577,5
Figura 4.12: Resultado para un instrumento tipo campana con envolvente ADSR
Para el instrumento de cuerda, el resultado es bastante aceptable, a excepción del
cambio abrupto realizado por la envolvente ADSR, debido a que el oído humano interpreta
las frecuencias de manera casi logarítmica.
82
En el instrumento de viento, pese a no sonar de manera similar al original, la
envolvente no tiene nada que ver con la original, sonando de forma extraña.
El instrumento de percusión generado, además de tener una envolvente que poco o
nada tiene que ver con el original, suena de una forma completamente artificial, siendo
bastante dispar del instrumento a imitar.
El peor resultado lo obtenemos con el instrumento tipo campana. Si bien su
envolvente puede tener alguna relación con la original, su sonido (puede comprobarse en el
espectro) difiere completamente del objetivo.
A pesar de que los resultados obtenidos al comparar los instrumentos generados por
el algoritmo genético a los generados por el sintetizador FM interno fueron muy positivos,
no sucede lo mismo cuando los comparamos con los generados por el DX7. Esto nos hace
replantearnos el uso de envolvente ADSR.
Para subsanar este problema se barajaron dos opciones: usar un conjunto de
envolventes predefinidas y aplicar a cada instrumento la más similar o bien generar una
envolvente a través de técnicas de interpolación.
Se decide utilizar la segunda de las técnicas anteriores, para lo cual se utilizará
interpolación polinómica17
por splines18
, gracias a lo que se independizará la generación de
la envolvente del algoritmo genético, restando así parámetros que encontrar al mismo.
Con la aplicación de esta técnica, la envolvente será generada antes de la puesta en
marcha del algoritmo genético. Para ésta generación, se extraerá un conjunto de puntos del
instrumento original, dividiendo el mismo en tantos bloques como nos diga un parámetro
de la configuración. El punto obtenido de cada bloque será obtenido mediante la
siguiente ecuación:
∑ | |
(4.1)
Siendo el número de puntos del bloque e cada uno de los puntos del bloque. Una
vez obtenidos todos los puntos se aplicará interpolación para obtener un polinomio que
17
En análisis numérico, la interpolación polinómica es una técnica de interpolación de un conjunto de
datos o de una función por un polinomio. Es decir, dado cierto número de puntos obtenidos por muestreo o a
partir de un experimento se pretende encontrar un polinomio que pase por todos los puntos.
18
En el subcampo matemático del análisis numérico, un spline es una curva definida en porciones
mediante polinomios. En los problemas de interpolación, se utiliza a menudo la interpolación mediante
splines porque da lugar a resultados similares requiriendo solamente el uso de polinomios de bajo grado,
evitando así las oscilaciones, indeseables en la mayoría de las aplicaciones, encontradas al interpolar
mediante polinomios de grado elevado.
83
pase por topos esos puntos. Dicho polinomio corresponderá a la función que representará
la envolvente del instrumento.
Con esta técnica se generarán envolventes mucho más realistas, adecuadas a la
respuesta logarítmica del oído humano. No obstante, sacrificaremos la posibilidad de
aplicar a cada una de las portadoras una envolvente distinta, perdiendo algo de realismo en
los instrumentos obtenidos.
Debido que hemos reducido la carga de trabajo del algoritmo genético al evitarle
calcular la envolvente, los siguientes experimentos que se realizarán para probar esta nueva
mejora tendrán un límite de cinco portadoras.
Se vuelven a realizar los experimentos con los nuevos cambios implementados y se
obtienen los siguientes resultados:
Tabla 4.13: Resultado para un instrumento de cuerda con envolvente por interpolación
Parámetros
(0.54 0.99 1) (0.03 1.62 1) (0.02 3.9 0.67) (0.02 3.3 0.5) (0.01 3.3 0.5) -29427,6 211
Figura 4.13: Resultado para un instrumento de cuerda con envolvente por interpolación
84
Tabla 4.14: Resultado para un instrumento de viento con envolvente por interpolación
Parámetros
(0.76 1.17 2) (0.02 3.53 0.71) (0 8 1.02) (0.01 3.41 1.1) (0.08 1.41 2.02) -234527,3 521
Figura 4.14: Resultado para un instrumento de viento con envolvente por interpolación
Tabla 4.15: Resultado para un instrumento de percusión con envolvente por interpolación
Parámetros
(0.35 0.21 0.38) (0.39 0.46 0.19) (0.08 3.81 0.1) (0.06 1.78 0.15) (0.02 3.35 1.01) -5052,9 31,1
Figura 4.15: Resultado para un instrumento de percusión con envolvente por interpolación
85
Tabla 4.16: Resultado para un instrumento tipo campana con envolvente por interpolación
Parámetros
(0.49 1.29 3.5) (0.17 3.42 1.75) (0.38 1.38 3.51) (0.16 3.62 1.76) (0.15 3.6 1.76) -46910,5 585,9
Figura 4.16: Resultado para un instrumento tipo campana con envolvente por interpolación
A simple vista puede observarse que los resultados de estos experimentos mejoran
enormemente los obtenidos con envolventes ADSR, en especial en lo referente a la forma
de la onda de los instrumentos, la cual proporciona una respuesta logarítmica interpretable
por el oído como un sonido proveniente de un instrumento musical real.
El resultado del instrumento de cuerda ya era bastante aceptable con envolventes
ADSR, no obstante, con la forma de onda más suavizada, obtenemos una imitación casi
perfecta del original.
El instrumento de viento, pese a no poseer una envolvente perfecta, imita casi a la
perfección el espectro. Audiblemente, no hay prácticamente ninguna diferencia entre el
instrumento original y el generado.
El espectro del instrumento de percusión es similar al obtenido en el caso anterior,
pero su envolvente, que antes era completamente diferente a la original, ahora es obtenida
correctamente, generándose así un instrumento de bastante similaridad con el original.
Si anteriormente el instrumento tipo campana no tenía nada que ver con el original,
en esta ocasión es prácticamente idéntico tanto en lo concerniente a su envolvente como a
su espectro. Audiblemente son prácticamente iguales.
86
5. CONCLUSIONES
Tras la realización de todos los experimentos se puede concluir que las los
algoritmos metaheurísticos son una buena técnica para la obtención de los parámetros para
generar instrumentos FM, sobre todo tras la combinación de varias técnicas como los
algoritmos genéticos y la búsqueda local.
El uso de estas técnicas puede ser de gran ayuda a la hora de crear un sintetizador
FM, ya que facilitaría el trabajo al establecer los parámetros de cada uno de los
instrumentos, evitando que tengan que ser completamente descubiertos “a oído”.
Como propuesta para un futuro podría mencionarse la modificación de la función de
evaluación de los instrumentos. Esta nueva función de evaluación podría dividir el espectro
en varios conjuntos, correspondientes a cada una de las portadoras del instrumento,
facilitando de esta manera la búsqueda de parámetros. No obstante, habría que estudiar si
esta mejora funcionaría adecuadamente con instrumentos inarmónicos, como por ejemplo
los de percusión.
Dado que la búsqueda local mejora notablemente los resultados, podía considerarse
la mejora de la misma mediante el uso de técnicas como la búsqueda en entornos variables,
la cual podría proporcionar mejores resultados.
Otra mejora posible es la paralelización de los algoritmos genéticos y de búsqueda
local para que puedan ser ejecutados en un entorno multiprocesador, dado que algunos de
los experimentos que han sido realizados han tardado en ejecutarse varios días. Esta mejora
podría consistir en la evaluación en paralelo de varios individuos de la población, dado que
es la operación más costosa que realiza la aplicación.
También podría mejorarse la usabilidad de la aplicación mediante el desarrollo de
algún tipo de interfaz gráfica, ya que actualmente la aplicación está desarrollada para ser
usada mediante consola.
87
6. BIBLIOGRAFIA
Bateman, Wayne. 1980. Introduction to Computer Music. 1980.
Bracewell, Ronald N. 1999. The Fourier Transform & Its Applications. s.l. :
McGraw-Hill, 1999.
Brigham, E.O. 2002. The Fast Fourier Transform. New York : Prentice-Hall, 2002.
Chowning, John. 1973. The Synthesis of Complex Audio Spectra by Means of
Frequency Modulation. s.l. : Journal of the Audio Engineering Society 21, 1973.
Cotta, Carlos. 2007. Una Visión General de los Algoritmos Meméticos. 2007.
Eiben, A. E. y Smith, J. E. 2003. Introduction to Evolutionary Computing. s.l. :
Springer, 2003.
Fries, Bruce y Fries, Marty. 2005. Audio digital práctico. s.l. : Anaya Multimedia,
2005.
García, Ricardo A. 2001. Automatic generation of sound synthesis techniques. s.l. :
Massachusetts institute of technology, 2001.
—. 2001. Automating the design of sound synthesis techniques using evolutionary
methods. Limerick, Ireland : COST G-6 Conf. on DAFX-01, 2001.
—. 2000. Toward the automatic generation of sound synthesis techniques:
preparatory steps. Los Angeles : AES 109th convention, 2000.
Hansen, P. y Mladenovic, N. A tutorial on variable Neighborhood search.
Herrera, Francisco. Introducción a los algoritmos metaheurísticos.
Holland, John Henry. 1975. Adaptation in Natural and Artificial Systems. 1975.
Horner, A. 1998. Nested modulator and feedback FM matching of instrument tones.
s.l. : IEEE Trans, Speech and Audio Processing. vol. 6 , no. 4 , pp.:398 – 409, 1998.
Horner, A, Beauchamp, J y Haken, L. 1993. Genetic algorithms and their
application to FM matching synthesis. s.l. : Comput. Music J., vol. 17, pp. 17-29, 1993.
Iglesias Simón, Pablo. 2004. El diseñador de sonido: función y esquema de trabajo.
2004. págs. 199-215.
K. Ahuja, Ravindra, y otros. 1999. Estudio de técnicas de búsqueda por vecindad a
muy gran escala. 1999.
Lai, Yuyo, y otros. 2006. Automated optimization of parameters for FM sound
synthesis with genetic algorithms. s.l. : International Workshop on Computer Music and
Audio Technology, 2006.
—. 2005. Simulation of FM Synthesis and Timbral Charaterization of Sounds:
Toward the Automatic Determination of Parameters for FM Synthesis. s.l. : Workshop on
Computer Music and Audio Technology, 2005.
Lanau, Javier. 2004. Métodos de síntesis. 2004.
Lavry, Dan. Teoría de muestreo. s.l. : Lavry Engineering, Inc.
Lindsay, Bruce. Acoustics. s.l. : Dowden - Hutchingon Books Publishers.
88
Mateo, Juan Luis y de la Ossa, Luis. LiO: an easy and flexible library of
metaheuristics. [En línea] http://www.dsi.uclm.es/simd/SOFTWARE/LIO/.
Mierswa, I. y Morik, K. 2005. Automatic feature extraction for classifying audio
data. s.l. : Machine Learning 58(2-3): 127-149, 2005.
Moore, Richard. 1990. Elements of Computer Music. s.l. : Prentice Hall PTR, 1990.
Morchen, F., y otros. 2005. MusicMiner: Visualizing timbre distances of music as
topographical maps. s.l. : Technical Report No. 47, Dept. of athematics and Computer
Science, University of Marburg, Germany, 2005.
Nilsson, Nils J. 2001. s.l. : McGraw-Hill, 2001.
Ramalhino Lourenco, Helena, Martin, Olivier y Stützle, Thomas. 2001. A
Beginner's Introduction to Iterated Local Search. s.l. : In Proceedings of MIC, 2001.
Rayleigh, J. W. S. 1984. The Theory of Sound. New York, NY, United States :
Dover, 1984.
Reyes, Juan. 2004. Fundamentos de Sintesis de Audio con Frecuencia Modulada.
Stanford, California, EUA. : CCRMA, Center for Computer Research in Music and
Acoustics, 2004.
Risset, Jean Claude. 1996. Introductory catalogue of computer synthesized sounds.
s.l. : Computer Music Currents 13. Wergo, 1996.
Roads, Curtis. 1996. The Computer Music Tutorial. s.l. : The MIT Press, 1996.
Rodríguez del Río, Roberto y Zuazua, Enrique. Series de Fourier y fenóomeno de
Gibbs. s.l. : Universidad Complutense de Madrid.
Russell, Stuart J. y Norvig, Peter. 2006. Inteligencia artificial : un enfoque
moderno. 2ª ed. s.l. : Pearson, 2006.
Simmons, George F. 2007. Ecuaciones Diferenciales. s.l. : Mcgraw-Hill, 2007.
Smyth, Tamara. 2007. Frequency Modulation (FM) Synthesis. Simon Fraser
University : School of Computing Science, 2007.
Tzanetakis, George. 2002. Musical genre classification of audio signals. s.l. : IEEE
Trans, Speech and Audio processing, vol. 10, no. 5, 2002.
Ultsch, A. 2003. Pareto density estimation: probability density estimation for
knowledge discovery. Cottbus : Proc. Conf. Soc. for Information and Classification, 2003.
West, K. y Cox, S. 2004. Features and classifiers for the automatic classification of
musical audio signal. s.l. : International Conference on Music Information Retrieval. 531-
7, 2004.
89
ANEXO A. RESULTADOS DE LOS EXPERIMENTOS
En este anexo se mostrarán los resultados de las distintas ejecuciones de los
experimentos referidos en el capítulo cuarto.
Tabla A.1: Resultado con una portadora sin envolvente
Ejecución Parámetros Fitness
1 (1.0 1.000 1.001) -12
2 (1.0 1.000 1.001) -12
3 (1.0 1.000 1.001) -12
4 (0.999 1.000 1.001) -12
5 (1.0 1.000 1.001) -12
6 (1.0 1.000 1.000) -12
7 (1.0 1.000 1.001) -12
8 (1.0 1.000 1.001) -12
9 (1.0 1.000 1.001) -12
10 (1.0 1.000 1.001) -12
Media -12
Tabla A.2: Resultado con dos portadoras sin envolvente
Ejecución Parámetros Fitness
1 (0.99 1.379 0.507) (0.640 0.907 1.001) -31053
2 (1.0 1.528 0.499) (0.440 0.986 1.003) -18375
3 (0.995 1.305 0.508) (0.677 0.852 1.002) -31071
4 (0.992 1.369 0.505) (0.581 0.965 1.000) -24660
5 (0.999 1.309 0.507) (0.669 0.881 1.002) -30978
6 (0.999 1.375 0.506) (0.638 0.879 1.002) -24458
7 (0.994 1.385 0.508) (0.652 0.857 1.002) -31159
8 (0.903 1.412 0.505) (0.522 0.979 1.001) -24125
9 (0.965 1.403 0.503) (0.338 0.226 0.499) -41845
10 (0.997 1.419 0.506) (0.568 0.919 1.001) -24185
Media -28190.9
Tabla A.3: Resultado con tres portadoras sin envolvente
Ejecución Parámetros Fitness
1 (0.98 1.311 0.508) (0.640 0.908 1.003) (0.290 0.008 0.310) -44342
2 (1.0 1.416 0.502) (0.560 0.878 0.998) (0.310 0.572 1.491) -32018
3 (1.0 1.502 0.500) (0.440 0.909 1.007) (0.240 0.086 0.830) -25933
4 (0.985 1.484 0.497) (0.328 0.956 0.997) (0.231 0.426 1.676) -30839
5 (0.99 1.485 0.493) (0.340 0.892 0.994) (0.220 0.195 0.200) -40222
6 (0.900 1.420 0.508) (0.470 0.22 1.041) (0.290 0.810 0.330) -55262
7 (0.998 1.464 0.504) (0.354 0.282 1.981) (0.296 0.719 1.490) -45364
8 (0.999 1.412 0.498) (0.468 0.957 0.999) (0.208 0.005 0.198) -31415
9 (0.898 0.598 2.993) (0.997 0.889 1.740) (0.726 1.365 0.831) -102468
10 (0.988 1.456 0.497) (0.409 0.817 1.003) (0.197 0.049 0.187) -33643
Media -44150.6
90
Tabla A.4: Resultado con una portadora y envolvente simple
Ejecución Parámetros Fitness
1 (1 1.01 1) [0.2 0.1 0.7 0.29] -3
2 (0.79 1.05 1) [0.2 0.12 0.68 0.28] -21
3 (1 1.02 1) [0.21 0.07 0.7 0.29] -13
4 (1 0.99 1) [0.19 0.14 0.69 0.29] -9
5 (1 0.97 1) [0.2 0.07 0.72 0.3] -14
6 (0.3 0.97 1) [0.2 0.11 0.68 0.28] -16
7 (0.81 0.99 1) [0.19 0.12 0.69 0.29] -7
8 (0.78 0.99 1) [0.2 0.1 0.7 0.31] -3
9 (0.79 0.95 1) [0.2 0.16 0.7 0.31] -25
10 (1 1 1) [0.2 0.1 0.7 0.3] -2
Media -11.3
Tabla A.5: Resultado con dos portadoras y envolvente simple
Ejecución Parámetros Fitness
1 (1 1.51 0.5) (0.37 0.05 0.83) [0.11 0.36 0.31 0.28] -137
2 (1 1.4 0.5) (0.43 0.1 2) [0.11 0.06 0.71 0.79] -165
3 (1 1.48 0.5) (0.51 0.99 1) [0.11 0.39 0.3 0.1] -8
4 (1 1.5 0.5) (0.51 0.97 1) [0.1 0.4 0.3 0.1] -9
5 (1 1.44 0.5) (0.38 0 1.04) [0.11 0.35 0.33 0.27] -138
6 (1 1.49 0.5) (0.38 0.08 1.08) [0.11 0.34 0.34 0.28] -142
7 (1 1.51 0.5) (0.5 1.05 1) [0.11 0.39 0.31 0.1] -12
8 (1 1.48 0.5) (0.37 0.03 0.75) [0.1 0.38 0.29 0.1] -114
9 (1 1.5 0.5) (0.49 1.02 1) [0.1 0.4 0.3 0.1] -4
10 (0.9 1.49 0.5) (0.45 1.02 1) [0.1 0.4 0.3 0.1] -5
Media -73.4
Tabla A.6: Resultado con tres portadoras y envolvente simple
Ejecución Parámetros Fitness
1 (1 1.53 0.5) (0.31 0 1.26) (0.23 0 0.75) [0.2 0.11 0.68 0.29] -147
2 (1 1.53 0.5) (0.32 0 1) (0.24 0.04 1.67) [0.2 0.05 0.73 0.33] -152
3 (0.63 0 0.22) (0.82 0.77 1) (0.47 0 3.05) [0.22 0.11 0.42 0.19] -436
4 (1 0.02 0.62) (1 0.04 0.7) (1 0.8 1.5) [0.21 0.08 0.46 0.34] -465
5 (1 8.12 0.5) (1 0 0.41) (0.67 0 5.25) [0.14 0 0.86 0.26] -333
6 (1 1.53 0.5) (0.29 0.03 1.19) (0.24 0.07 0.66) [0.19 0.1 0.7 0.29] -147
7 (1 1.48 0.5) (0.33 0 0.72) (0.24 0.01 1.22) [0.21 0.04 0.69 0.29] -153
8 (1 1.57 0.5) (0.26 0 1.1) (0.2 0.02 0.81) [0.21 0.05 0.68 0.29] -150
9 (1 1.55 0.5) (0.3 0 0.66) (0.23 0.03 0.55) [0.21 0.1 0.68 0.29] -147
10 (1 1.54 0.5) (0.3 0.03 1.07) (0.22 0 0.7) [0.21 0.04 0.69 0.31] -149
Media -227.9
Tabla A.7: Resultado con dos portadoras y envolvente múltiple
Ejecución Parámetros Fitness
1 (0.58 1.52 0.5 [0.1 0.4 0.3 0.1]) (0.26 0.98 1 [0.17 0.16 0.78 0.3]) -2319
2 (0.44 1.5 0.5 [0.1 0.4 0.3 0.1]) (0.18 1 1 [0.15 0.2 0.85 0.3]) -2772
3 (0.61 1.52 0.5 [0.1 0.4 0.3 0.1]) (0.31 0.98 1 [0.21 0.09 0.69 0.3]) -1874
4 (0.8 1.47 0.5 [0.1 0.4 0.3 0.1]) (0.39 1.01 1 [0.2 0.1 0.7 0.3]) -2291
5 (0.41 1.86 0.5 [0.1 0.4 0.31 0.1]) (0.18 0.17 2 [0.14 0.32 0.61 0.26]) -22360
6 (0.55 1.52 0.5 [0.1 0.4 0.3 0.1]) (0.25 0.98 1 [0.17 0.16 0.77 0.3]) -2510
7 (0.42 1.87 0.5 [0.1 0.4 0.31 0.1]) (0.19 0.1 3 [0.14 0.33 0.63 0.26]) -22402
8 (0.63 1.47 0.5 [0.1 0.4 0.31 0.1]) (0.28 0.99 1 [0.17 0.17 0.78 0.3]) -3790
9 (0.45 1.48 0.5 [0.1 0.39 0.3 0.1]) (0.22 1.02 1 [0.19 0.11 0.72 0.3]) -2286
10 (0.43 1.51 0.5 [0.1 0.4 0.3 0.1]) (0.23 0.99 1 [0.22 0.07 0.66 0.3]) -2121
Media -6472.5
91
Tabla A.8: Resultado con tres portadoras y envolvente múltiple
Ejecución Parámetros Fitness
1 (0.67 1.71 0.5 [0.1 0.39 0.28 0.1]) (0.35 0.63 1 [0.19 0.48 0.91 0.26]) (0.09 0.96 1.5 [0.16 0 0.79 0.18]) -7767
2 (0.6 1.67 0.5 [0.1 0.4 0.29 0.1]) (0.36 0.52 1 [0.18 0.59 0.91 0.23]) (0.05 4.94 0.5 [0.44 0 0.82 0.22]) -8076
3 (0.61 1.64 0.5 [0.1 0.4 0.29 0.09]) (0.35 0.67 1 [0.17 0.14 0.89 0.27]) (0.06 1.12 1.5 [0.4 0.22 0.93 0.18]) -5835
4 (0.52 1.66 0.5 [0.1 0.4 0.29 0.1]) (0.32 0.46 1 [0.18 0.45 0.93 0.24]) (0.05 4.39 0.5 [0.44 0 0.77 0.23]) -7783
5 (0.84 1.68 0.5 [0.1 0.39 0.29 0.1]) (0.52 0.5 1 [0.19 0.54 0.9 0.23]) (0.07 4.78 0.5 [0.41 0 0.91 0.23]) -8056
6 (0.55 1.69 0.5 [0.1 0.4 0.29 0.1]) (0.35 0.43 1 [0.19 0.57 0.89 0.23]) (0.05 4.27 0.5 [0.36 0.1 1 0.24]) -7590
7 (0.59 1.82 0.5 [0.1 0.4 0.3 0.1]) (0.39 0.51 1 [0.18 0.39 0.8 0.24]) (0.05 1.23 1.5 [0.49 0.12 0.91 0.19]) -8600
8 (0.65 1.7 0.5 [0.1 0.4 0.29 0.1]) (0.43 0.54 1 [0.2 0.07 0.89 0.25]) (0.06 5.3 0.5 [0.46 0 0.81 0.24]) -8913
9 (0.65 1.62 0.5 [0.1 0.4 0.29 0.1]) (0.44 0.51 1 [0.23 0 0.83 0.25]) (0.06 4.65 0.5 [0.38 0 0.91 0.23]) -8058
10 (0.39 1.73 0.5 [0.1 0.4 0.29 0.1]) (0.26 0.44 1 [0.19 0.45 0.88 0.23]) (0.03 4.38 0.5 [0.41 0 1 0.24]) -8006
Media -7868.4
Tabla A.9: Resultado para un instrumento de cuerda con envolvente ADSR
Ejecución Parámetros Fitness
1 (0.28 0.96 1 [0 0.18 0.01 0.35]) (0.01 3.15 0.5 [0.27 0.27 0.01 0]) (0.01 2.8 1 [0.02 0.13 0.01 0.44]) -27446
2 (0.07 0.97 1 [0 0.2 0.02 0.36]) (0.02 1.43 1 [0 0.07 0.01 0.92]) (0 3.13 0.5 [0.13 0.23 1 0.59]) -26844
3 (0.02 0.96 1 [0 0.18 0.01 0.32]) (0 2.16 1 [0.27 0.25 0.02 0.42]) (0 6.87 1.03 [0.07 0.08 0.47 0.16]) -27609
4 (0.5 0.95 1 [0 0.18 0.01 0.32]) (0.02 2.1 1 [0.12 0.01 0.01 0.42]) (0.02 1.98 1 [0.24 0.25 0.03 0.43]) -27347
5 (0.3 0.94 1 [0 0.18 0.01 0.32]) (0.01 2.1 1 [0.25 0.25 0.01 0]) (0 3.01 0.5 [0.28 0.43 0.13 0]) -27513
6 (0.02 0.96 1 [0 0.18 0.02 0.46]) (0 4.02 0.67 [0.05 0.1 0.01 0.64]) (0 4.86 2.64 [0.17 0.25 0.63 0.18]) -27948
7 (0.7 0.97 1 [0 0.18 0.01 0.34]) (0.03 4.05 0.67 [0.06 0.1 0.01 0.84]) (0.01 4.7 0.25 [0.28 0.31 0.02 0]) -27575
8 (0.03 0.96 1 [0 0.18 0.01 0.32]) (0 2.11 1 [0.27 0.22 0.03 0.51]) (0 3.74 1.26 [0.07 0.06 0.47 0.24]) -27614
9 (0.46 0.96 1 [0 0.18 0.02 0.39]) (0.05 3.03 1 [0.03 0.02 0.01 0.81]) (0 4.67 0.25 [0.21 0.31 0.87 0.48]) -27814
10 (0.58 0.95 1 [0 0.2 0.01 0.3]) (0.14 3 0.5 [0 0 0.03 0.81]) (0.02 2.22 1 [0.25 0.29 0.01 0.41]) -26611
Media -27432.1
Tabla A.10: Resultado para un instrumento de viento con envolvente ADSR
Ejecución Parámetros Fitness
1 (0.65 1.24 2 [0.47 0.27 0.66 0.25]) (0.06 3.51 0.71 [0.05 0.03 0.3 0.05]) (0.1 1.4 2.01 [0.28 0.11 0.86 0.42]) -216509
2 (0.48 1.14 2 [0.5 0.02 0.89 0.42]) (0.1 1.23 2.02 [0.36 0 1 0.64]) (0.09 0.92 4 [0.31 0.11 0.82 0.09]) -216570
3 (0.52 1.23 2 [0.44 0 0.87 0.4]) (0.03 3.51 0.71 [0.03 0.26 0.35 0.02]) (0.04 3.55 1.01 [0.31 0.2 0.15 0.45]) -218104
4 (0.58 1.13 2 [0.44 0 0.83 0.43]) (0.03 3.51 0.71 [0.01 0.34 0.56 0.05]) (0.09 0.8 4 [0.54 0.44 0.95 0.02]) -217967
5 (0.48 1.22 2 [0.43 0.02 0.86 0.39]) (0.03 3.45 0.71 [0.04 0.27 0.37 0.05]) (0.04 3.49 1.01 [0.17 0.36 0.19 0.29]) -218182
6 (0.5 1.22 2 [0.44 0 0.9 0.39]) (0.04 3.49 0.71 [0.04 0.31 0.35 0.05]) (0.07 1.5 2.01 [0.1 0 0.77 0.43]) -216547
7 (0.43 1.21 2 [0.44 0 0.86 0.4]) (0.04 3.45 1.01 [0.1 0 0.37 0.7]) (0.03 3.44 0.71 [0.04 0.25 0.34 0.05]) -218236
8 (0.45 1.23 2 [0.5 0.02 0.88 0.4]) (0.03 3.52 0.71 [0.04 0.3 0.32 0.05]) (0.06 1.44 2.01 [0.28 0.18 0.62 0.16]) -216794
9 (0.55 1.25 2 [0.5 0.02 0.83 0.39]) (0.06 0.88 4.01 [0.34 0.34 1 0.28]) (0.08 9.25 0.25 [0 0.44 0.01 0.55]) -217320
10 (0.59 1.23 2 [0.44 0 0.86 0.39]) (0.04 3.5 0.71 [0.01 0.32 0.41 0.05]) (0.03 3.46 1.01 [0 0.21 0.49 0.3]) -218357
Media -217458.6
Tabla A.11: Resultado para un instrumento de percusión con envolvente ADSR
Ejecución Parámetros Fitness
1 (0.06 0.01 1.6 [0.15 0.01 0.25 0.68]) (0.01 4.5 0.6 [0.17 0.02 0.03 0.78]) (0 2.87 1.01 [0.17 0.45 0.04 0.38]) -4786
2 (0.44 0.01 1.6 [0.15 0.02 0.25 0.69]) (0.03 1.58 2.07 [0.17 0.08 0.01 0.59]) (0 4.37 1.62 [0 0.04 0.54 0.44]) -4814
3 (0.08 0.01 1.41 [0.15 0.01 0.22 0.68]) (0.01 3.98 0.76 [0.16 0 0.01 0.34]) (0 0.8 2 [0.24 0.58 0.14 0.03]) -4736
4 (0.04 0.07 1.61 [0.15 0.01 0.13 0.68]) (0.01 0.32 1.8 [0.39 0.01 0.42 0.53]) (0 1.56 1.41 [0.01 0.55 1 0.44]) -4762
5 (0.51 0.1 1.73 [0.15 0.01 0.01 0.71]) (0.18 0.22 1.99 [0.23 0.57 0.17 0.03]) (0.06 4.2 0.6 [0.17 0.02 0.07 0.76]) -4681
6 (0.09 0 2.39 [0.15 0.01 0.07 0.69]) (0.02 0.39 2 [0.23 0.08 1 0.68]) (0 7.61 0.58 [0.16 0.06 0.03 0.35]) -4733
7 (0.02 0.02 1.41 [0.15 0.01 0.21 0.68]) (0 0.81 1.6 [0.32 0.33 0.01 0.33]) (0 4.48 0.6 [0.16 0.5 0.01 0.33]) -4750
8 (0.01 0.21 1.41 [0.14 0.01 0.37 0.6]) (0.03 0.03 1.6 [0.16 0 0.11 0.61]) (0 4.96 0.53 [0.16 0.15 0.01 0.13]) -4392
9 (0.12 0.02 1.6 [0.15 0.02 0.21 0.68]) (0.01 1.27 0.38 [0.32 0.19 0.01 0.48]) (0 3.65 0.53 [0.1 0.09 0.31 0.28]) -4774
10 (0,28 0,01 1,41 [0,15 0,02 0,13 0,68]) (0,03 0,47 1,6 [0,24 0,23 0,29 0,53]) (0,02 0,69 1,99 [0,23 0,13 1 0,54]) -4748
Media -4717.6
92
Tabla A.12: Resultado para un instrumento tipo campana con envolvente ADSR
Ejecución Parámetros Fitness
1 (0.12 0 1.17 [0 0.1 0.01 0.89]) (0.01 3.27 1.75 [0.36 0.12 0.01 0.48]) (0.36 0.5 3.53 [0 0 0.01 0.99]) -42822
2 (0.04 1.5 3.51 [0 0 0.01 0.97]) (0 3.31 1.75 [0.37 0.11 0.01 0.39]) (0 3.54 0.85 [0.27 0.28 0.41 0.44]) -43291
3 (0.06 0.4 1.61 [0 0 0.01 0.99]) (0 3.99 1.17 [0.33 0.07 0.01 0.3]) (0 3.41 0.95 [0.31 0.22 0.45 0.37]) -43478
4 (0.3 0.18 0.2 [0 0 0.01 1]) (0 3.42 0.95 [0.37 0.08 0.09 0.44]) (0.05 0 0.93 [0.07 0.11 0.01 0.82]) -42440
5 (0.01 0.4 1.59 [0 0 0.01 0.99]) (0 3.33 1.75 [0.36 0.11 0.01 0.41]) (0 4.19 1.68 [0.21 0.18 0.65 0.14]) -43403
6 (0.01 0.98 3.5 [0 0.01 0.01 0.97]) (0 3.31 1.75 [0.38 0.11 0.01 0.39]) (0 5.58 0.71 [0.04 0.08 0.43 0.33]) -43368
7 (0.68 0.4 1.61 [0 0 0.01 0.99]) (0.12 0.35 3.51 [0.06 0.13 0.01 0.81]) (0.02 6.36 1.75 [0.12 0.28 0.01 0.38]) -42052
8 (0.14 0.33 1.58 [0 0 0.01 0.99]) (0.02 0 0.77 [0.08 0.1 0.01 0.82]) (0 3.41 0.95 [0.15 0.34 0.47 0.45]) -42517
9 (0.03 0.62 3.51 [0 0 0.01 0.99]) (0 3.35 1.75 [0.37 0.11 0.01 0.44]) (0 4.43 1.26 [0.08 0.12 0.41 0.41]) -43391
10 (0.46 0.44 1.51 [0 0 0.01 0.99]) (0.12 0.56 7 [0 0.18 0.01 0.82]) (0 3.36 1 [0.28 0.24 0.51 0.33]) -41868
Media -42863
Tabla A.13: Resultado para un instrumento de cuerda con envolvente por interpolación
Ejecución Parámetros Fitness
1 (0.49 0.99 1) (0.03 1.58 1) (0.02 3.95 0.67) (0.02 3.37 0.5) (0.01 3.28 0.5) -29480
2 (0.54 0.99 1) (0.02 3.98 0.67) (0.03 1.8 1) (0.02 3.28 0.5) (0.02 1.94 0.99) -29498
3 (0.59 0.99 1) (0.02 3.92 0.67) (0.04 1.7 1) (0.01 4.08 0.46) (0.02 2.02 0.99) -29519
4 (0.75 1 1) (0.03 3.36 0.5) (0.01 3.65 0.67) (0.07 1 2) (0.02 3.34 0.5) -29160
5 (0.63 0.99 1) (0.02 3.99 0.67) (0.02 3.27 0.5) (0.01 4.14 0.46) (0.04 1.65 1) -29503
6 (0.5 0.99 1) (0.02 3.93 0.67) (0.02 3.35 0.5) (0.01 4.26 0.46) (0.01 3.31 0.5) -29626
7 (0.49 0.99 1) (0.02 3.92 0.67) (0.03 1.58 1) (0.02 3.33 0.5) (0.01 3.31 0.5) -29479
8 (0.76 0.99 1) (0.03 3.9 0.67) (0.02 3.34 0.5) (0.02 4.19 0.46) (0.01 3.29 0.5) -29623
9 (0.59 0.99 1) (0.01 4.83 0.2) (0.04 2.28 1) (0.02 3.3 0.5) (0.06 1.06 2) -28909
10 (0.54 0.99 1) (0.03 1.62 1) (0.02 3.9 0.67) (0.02 3.3 0.5) (0.01 3.3 0.5) -29479
Media -29427.6
Tabla A.14: Resultado para un instrumento de viento con envolvente por interpolación
Ejecución Parámetros Fitness
1 (0.53 1.17 2) (0.02 3.5 0.71) (0.06 1.46 2.01) (0.01 6.33 0.8) (0 5.03 1.4) -233947
2 (0.59 1.17 2) (0.02 3.53 0.71) (0 3.22 1.01) (0.01 4.08 0.73) (0.05 1.43 2.02) -234129
3 (0.59 1.17 2) (0.02 3.53 0.71) (0 9.3 1.01) (0.01 3.45 1.1) (0.06 1.45 2.01) -234009
4 (0.52 1.17 2) (0.02 3.48 0.71) (0.01 4 0.73) (0.01 5.41 0.4) (0.01 3.43 1.01) -235088
5 (0.72 1.17 2) (0.02 3.53 0.71) (0.02 3.43 1.01) (0.01 3.34 1.1) (0.01 3.95 0.73) -235063
6 (0.33 1.19 2) (0.04 1.38 2.01) (0.01 3.53 0.71) (0 8.71 0.86) (0 4.75 1.4) -233947
7 (1 1.17 2) (0.04 3.53 0.71) (0.03 3.4 1.01) (0.03 3.81 2.01) (0.02 3.91 0.73) -234949
8 (0.79 1.17 2) (0.03 3.47 0.71) (0.02 3.4 1.01) (0.01 3.36 1.1) (0.01 3.97 0.73) -235055
9 (0.48 1.17 2) (0.02 3.54 0.71) (0.01 3.38 1.01) (0.01 3.4 1.1) (0.01 3.92 0.73) -235070
10 (0.76 1.17 2) (0.02 3.53 0.71) (0 8 1.02) (0.01 3.41 1.1) (0.08 1.41 2.02) -234016
Media -234527.3
Tabla A.15: Resultado para un instrumento de percusión con envolvente por interpolación
Ejecución Parámetros Fitness
1 (0.47 0.27 0.19) (0.07 3.52 0.1) (0.01 7.67 0.69) (0.03 4.89 0.21) (0.09 0.53 0.38) -5020
2 (0.69 0.3 0.19) (0.08 3.23 0.11) (0.14 0.44 1.8) (0.21 0.52 0.38) (0.05 2.93 0.3) -5089
3 (0.88 0.09 0.58) (0.62 0.6 0.19) (0.09 2.15 0.15) (0.11 4.1 0.12) (0.17 3.5 0.1) -5031
4 (0.41 0.25 0.19) (0.04 2.93 0.15) (0.04 2.78 0.14) (0.05 0.72 1.8) (0.04 0.6 1.6) -5109
5 (0.67 0.23 0.18) (0.08 3.17 0.1) (0.02 8.6 0.54) (0.05 4.65 0.11) (0.03 4.52 0.41) -5051
6 (0.45 0.27 0.19) (0.05 1.89 0.15) (0.01 5.06 1.03) (0.04 4 0.12) (0.01 8.43 0.54) -5077
7 (0.61 0.24 0.19) (0.06 3.8 0.13) (0.04 1.07 1.8) (0.02 8.42 0.58) (0.01 7.6 0.69) -5078
8 (0.46 0.2 0.38) (0.11 3.01 0.1) (0.02 10 0.49) (0.43 0.51 0.18) (0.02 7.24 0.77) -5031
9 (0.54 0.25 0.19) (0.06 3.6 0.1) (0.02 8.4 0.54) (0.02 4.52 0.41) (0.03 4.7 0.12) -5024
10 (0.35 0.21 0.38) (0.39 0.46 0.19) (0.08 3.81 0.1) (0.06 1.78 0.15) (0.02 3.35 1.01) -5019
Media -5052.9
93
Tabla A.16: Resultado para un instrumento tipo campana con envolvente por interpolación
Ejecución Parámetros Fitness
1 (0.28 0.25 7) (0.08 3.63 1.76) (0.08 3.47 1.75) (0.08 3.72 1.76) (0.07 3.67 1.77) -47697
2 (0.53 0.6 3.5) (0.14 3.63 1.76) (0.14 3.43 1.75) (0.13 3.67 1.77) (0.13 3.74 1.76) -47064
3 (0.59 0.96 3.5) (0.16 3.62 1.76) (0.13 3.64 1.75) (0.26 1.89 3.51) (0.14 3.41 1.75) -46387
4 (0.53 0.29 7) (0.25 2.8 0.01) (0.14 3.4 1.75) (0.14 3.59 1.76) (0.13 3.71 1.76) -46960
5 (0.57 0.25 7) (0.16 3.62 1.76) (0.16 3.46 1.75) (0.16 3.73 1.76) (0.15 3.67 1.77) -47697
6 (0.57 1.29 3.5) (0.2 3.41 1.75) (0.45 1.38 3.51) (0.19 3.64 1.76) (0.18 3.61 1.76) -46292
7 (0.63 0.25 7) (0.18 3.62 1.76) (0.18 3.48 1.75) (0.17 3.73 1.76) (0.16 3.68 1.77) -47698
8 (0.51 0.63 3.5) (0.13 3.51 1.75) (0.13 3.66 1.76) (0.12 3.71 1.75) (0.12 3.7 1.76) -46815
9 (0.71 1.73 3.5) (0.52 2 3.51) (0.31 3.43 1.75) (0.32 3.57 1.76) (0.67 0.5 7) -46201
10 (0.49 1.29 3.5) (0.17 3.42 1.75) (0.38 1.38 3.51) (0.16 3.62 1.76) (0.15 3.6 1.76) -46294
Media -46910.5
94
ANEXO B. CONTENIDO DEL CD ADJUNTO
En el CD podrán encontrarse los siguientes directorios:
memoria: Esta misma memoria en formato PDF.
programa: Las distintas versiones de la aplicación que se han generado. Para
cada una de las versiones se incluyen dos carpetas:
o bin: Programa ejecutable en formato Jar, fichero de configuración y
fichero de forma de onda con un instrumento para realizar pruebas.
o src: código fuente Java de la versión correspondiente de la aplicación.
resultados: Ficheros de audio con los resultados de los experimentos
mostrados en las distintas figuras del cuarto capítulo de la presente memoria.