Distorsión de Sonidos con Redes Neuronales Introducción A continuación se presenta una investigación realizada como Trabajo Final de Carrera para la Universidad de Belgrano, en la cual se desarrolló un software capaz de distorsionar grabaciones digitales efectuadas con guitarras eléctricas, y se encuentra orientado a actuar como soporte durante el proceso de producción musical. Específicamente, se empleó el modelo de Perceptrón Multicapa Feed-Forward para aprender e imitar el comportamiento que tienen los efectos distorsionadores para guitarras eléctricas sobre las señales provenientes del instrumento. Efectos Distorsionadores Podemos definir distorsión como toda “deformación que sufre una señal eléctrica a causa de elementos del propio circuito (resistencias, condensadores, bobinas), o externos a él” [1]. En el caso de los distorsionadores de guitarra eléctrica lo que se busca, puntualmente, es modificar la señal original proveniente del instrumento, con el objetivo de obtener distintos matices y tonalidades que resultarían imposibles de generar de forma natural. La motivación principal de nuestra investigación fue la de comprobar si resulta posible generar de forma automatizada un modelo matemático equivalente a un efecto distorsionador, realizando únicamente un análisis sobre las salidas generadas por el dispositivo frente a determinadas entradas. Solución Propuesta Muestras de Entrenamiento Para poder muestrear el comportamiento que presenta un efecto distorsionador determinado – y así poder entrenar una red neuronal para imitar su funcionamiento -, es necesario capturar y digitalizar la respuesta A’ (Señal Distorsionada) que genera el dispositivo, frente a una entrada A (Señal Original) dada. Para ello, el primer paso consistió en crear un archivo digital de audio el cual contuviera una representación de posibles entradas del sistema. Se generaron tres formas de onda distintas, situadas una a continuación de la otra: sinusoidal, cuadrada y dentada. [Onda Sinusoidal….] [ Onda Cuadrada…] [ Dentada.…...] Onda Señal Original A para Entrenamiento Para generar la muestra de Señal Distorsionada A’, se conectó un distorsionador marca Boss, modelo DS1, entre la salida y entrada de audio de la placa de sonido. Luego, reprodujimos en la salida de audio de la PC la Señal Original A, y simultáneamente capturamos en la entrada de audio de la PC la Señal Distorsionada A’. [Onda Sinusoidal….] [ Onda Cuadrada…] [ Onda Dentada…….] Señal Distorsionada A’ para Entrenamiento Algoritmos Desarrollados Para ambos: el proceso de entrenamiento de la red neuronal, y posterior distorsión de una señal digital, hemos diseñado dos algoritmos que nos permiten tratar las señales de forma segmentada, dependiendo de la arquitectura de red neuronal a emplear, cuyo pseudo-código presentaremos a continuación: Pre-condiciones: Una Red Neuronal Artificial FeedForward, con N neuronas en la capa de entrada y M neuronas en la capa de salida. Las señales digitales Original y Distorsionada, ambas de longitud Z La variable ‘ i ‘, inicializada en 0. 1. Tomar los bytes de la señal Original correspondientes al segmento [ i, N + i ], y los bytes del segmento [ i, M + i ] de la señal Distorsionada. 2. Aplicar el algoritmo RPROP[2], utilizando los segmentos tomados de ambas señales en el paso anterior como entrada de la red y respuesta deseada. 3. En caso en que (M + i + 1) sea menor que Z, incrementar la variable i en 1 unidad, y repetir desde el paso 2. En caso contrario, finalizar la ejecución. Algoritmo de Entrenamiento por Segmentos Análogamente, el algoritmo que empleamos para aplicar el efecto de distorsión sobre una señal digital que hemos empleado es el siguiente: Pre-condiciones: Una Red Neuronal Artificial entrenada, con N neuronas en la capa de entrada y M neuronas en la capa de salida. La señal digital Original, de longitud Z (siendo Z mayor que N). Un bloque de memoria libre, de tamaño Z, el cual denominaremos Distorsionado. Dicho bloque, al final de la ejecución, contendrá la señal distorsionada de salida. La variable ‘ i ‘, inicializada en 0. 1. Tomar los bytes de la señal Original correspondientes al segmento [ i, N + i ]. 2. Calcular la salida de la red neuronal, utilizando el segmento de Original obtenido en el punto anterior, y almacenarlo en el segmento [ i, M + i ] del bloque Distorsionado. 3. En caso en que (M + i + 1) sea menor que Z, incrementar la variable i en una unidad, y repetir desde el paso 2. De no ser así, finalizar la ejecución. Algoritmo de Distorsionado por Segmentos Conclusiones Las redes neuronales artificiales son una tecnología básicamente empírica, puesto que no nos ofrecen una precisión del 100% en sus resultados. Debido a que no existe método para calcular analíticamente la arquitectura óptima que una red neuronal debe tener para realizar una tarea determinada, hemos entrenado y probado numerosas arquitecturas de tres, cuatro y cinco capas, alternando el número de neuronas empleadas en las distintas capas. Los mejores resultados que hemos logrado obtener fueron producidos por una red neuronal de cinco capas, con 32 neuronas de entrada, 16, 8 y 8 neuronas respectivamente en las capas ocultas, y 1 neurona en la capa de salida, la cual fue entrenada durante un total de 100 épocas. [Onda Sinusoidal….] [ Onda Cuadrada…] [ Onda Dentada…...] Señal Distorsionada generada con Arquitectura de Cinco Capas [32-16-8-8-1] Toda la documentación de consulta que hemos utilizado para nuestro trabajo indicaba que un perceptrón de tres capas formado por N neuronas de entrada, H ocultas y M de salida, debería tener la capacidad suficiente como para poder aproximar el comportamiento de una función f matemática dada, y poder predecir sus respuestas ante X entradas. A pesar de ello, sin embargo, empíricamente en nuestro caso hemos comprobado que resulta necesario utilizar arquitecturas de hasta cinco capas para lograr los resultados deseados. La tecnología de Redes Neuronales Artificiales nos ha demostrado poseer un grado de versatilidad realmente interesante. A pesar de que ambos, el modelo de red y el algoritmo de entrenamiento empleados no fueron diseñados originalmente con el objetivo de distorsionar señales de guitarra eléctrica, no resultó necesario efectuar ningún tipo de adaptación específica para cumplir con nuestro objetivo, lo que nos sugiere que los posibles campos de aplicación de esta herramienta no poseen límite alguno. [1] J.R. FUSARIO y A.R. CASTRO. Teleinformática para ingenieros en sistemas de información, segunda edición, Reverté, 2001. [2] M. RIEDMILLER y H. BRAUN. The RPROP algorithm, IEEE International Conference on Neural Networks, Vol. 1, pp.586 – 591, 1993. Ing. Jorge Leandro Pérez Ingeniero en Informática Graduado de la Facultad de Tecnología Informática – UB NOTA: Artículo basado en el trabajo final de carrera "Distorsión de Sonidos con Redes Neuronales" de Jorge Leandro Pérez, Tutor: Ing. Sergio Omar Aguilera, 2008.