Síntesis FM

En esta entrada voy a hablar de síntesis FM (Frequency Modulation) en Pure Data. En principio puedo recomendar leer un poco más a fondo la teoría que hay detrás de este tipo de síntesis en este artículo de John Chowning. Así mismo recomiendo fuertemente ver cómo el compositor que acabo de mencionar cuenta cómo llegó a esta síntesis en éste video y, una obra muy interesante con este tipo de síntesis: Turenas (1972), también se puede leer sobre la misma acá.

Imagen 1. Vibrato
Comencemos por la implementación de un vibrato para un sonido sinusoidal, desde la cual vamos a generar posteriormente nuestra primera aproximación a la síntesis FM.

El vibrato que se ha implementado en la imagen 1 toma un oscilador y en su entrada de frecuencia se introduce una frecuencia que es el resultado de la suma de una frecuencia fija, en adelante onda portadora, y la multiplicación de la intensidad de otro oscilador por un factor, que en este caso actúa entre los valores de 1 y -1 y lo hace a razón de la frecuencia que tiene dicho oscilador. Entre más pequeño el factor menos va a variar la frecuencia que entra a la onda portadora, pero entre más amplio sea, más escucharemos fluctuar su frecuencia.

Por otro lado, si tenemos una frecuencia pequeña en el segundo oscilador, en adelante onda moduladora, podemos escuchar muy bien cómo varía, pero si lo hace con mayor velocidad lo asociaremos con nuestra idea de vibrato y luego como una rugosidad a medida que se acerca a los 20Hz. Si el factor sigue siendo pequeño  no tendremos mucho más que escuchar que lo ya descrito, pero a medida que aumente la frecuencia y se prueba con diferentes amplitudes para sumar y restar a la frecuencia portadora, ocurre lo que describe Chowning en el video, aparecen otras frecuencias: un timbre nuevo.

La manera más sencilla de crear una relación entre la amplitud de salida y la frecuencia usada es multiplicar la frecuencia usada como moduladora con un factor al que llamaremos índice. En la animación 1 se puede observar cómo cambia la forma de onda a medida que se aumenta el índice. El cambio se ve reflejado precisamente en la aparición de esos nuevos componentes que se mencionaron previamente.
Animación 1. y = sin(2bx + ab(sin(bx)). Elaborado con Desmos y ScreenToGif
En la animación 2 se puede observar la modificación que se mencionó en el párrafo anterior, así como la inclusión de un espectroscopio en Pure Data para observar el resultado de la modulación. En este caso se ha usado una frecuencia portadora de 1000Hz y una moduladora con la misma frecuencia, es decir una relación de 1:1. Se puede observar al principio sólo la frecuencia portadora y posteriormente cómo se suman los demás componentes, de lo que vale la pena resaltar que al aparecer cambia la relación de intensidad de los componentes, esto se puede calcular a través de las funciones Bessel (Chowning, 2007, pág. 2).

Animación 2. Cambio de índice y nuevos componentes.

La relación entre las frecuencias portadora y moduladora determina el tipo de timbre que se va a obtener y también nuestra percepción de dónde ocurre la fundamental. Podemos pensar que cada componente se genera a través de la siguiente ecuación: Ci = Fp - iFm, Cs = Fp + iFm. La frecuencia moduladora produce componentes inferior y superior (Ci y Cs), donde podemos observar que la frecuencia moduladora (Fm) se multiplica por el índice (i), pero podemos establecer que i es en realidad una colección de 1 al valor de i, por lo cual tendríamos que hacer la operación para cada i (1, 2, 3, ... i).

Algunos resultados pueden obtenerse como número negativo, lo que implica un cambio de fase para el componente, pero no una frecuencia negativa o inaudible. La interacción de los componentes inferiores que arrojan números negativos con los que se producen como positivos son precisamente los cambios que observamos en la intensidad de los componentes cuando cambia el índice.

Por otro lado, si la relación entre la la frecuencia portadora y moduladora es un factor diferente a la unidad, también surgen valores que pueden ser inferiores a la portadora, lo que hace que percibamos una fundamental diferente al valor de la frecuencia portadora. En la animación 3 se puede observar el resultado de diferentes proporciones (en Chowning ratio) entre las dos frecuencias, comenzando por las que mantienen la relación de portadora como fundamental y luego otras en las que se convierte en armónico o parte de un timbre con difícil identificación de la fundamental (el último ejemplo).

Para implementarlo igual a como se observa, debe tenerse en cuenta que he usado envíos "inalámbricos" a través de los objetos s index y s tobang, en ambos casos s es send, se debe modificar en la caja numérica del índice y en el bang del la derecha la propiedad de recibir símbolo para que coincida con el nombre del send respectivo.

Animación 3. Diferentes proporciones entre las frecuencias portadora y moduladora.
Al atar la frecuencia moduladora a una proporción dependiente de la frecuencia portadora, se va a mantener la relación tímbrica cuando cambie esta última, lo que resulta muy conveniente para la creación de un sintetizador que genere timbres con fundamentales en cualquier temperamento.

Finalmente, para cerrar esta entrada, vale la pena considerar lo que habla Chowning acerca de la relación de la envolvente con el índice. Si bien para este momento ya la implementación realizada permite generar timbres ricos es interesante como agregar variabilidad en el tiempo al timbre puede darle vida. Como la envolvente describe en buena manera como se va a comportar la intensidad en el tiempo, atar ese comportamiento al del índice también le va a agregar esa vida o variación, lo que puede ser observado en la animación 4.

Animación 4. FM con índice atado a la envolvente.

Como tarea para añadir a este desarrollo, propongo que se agregue vibrato al sintetizador de la animación 4.

Comentarios

Entradas populares de este blog

Conociendo lo básico de Pure Data

Pure data - Vanilla, lo básico, añadir externos

Síntesis aditiva