generación automática de instrumentos fm a partir …i resumen la síntesis de audio por...

104
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

Upload: others

Post on 06-Jan-2020

13 views

Category:

Documents


0 download

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.

II

A mi madre

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.