Transcripción
El phase vocoder se basa en la Transformada de Fourier de Tiempo Corto o Short-Time Fourier Transform, abreviada STFT. A diferencia de otras técnicas de transformadas de Fourier, la STFT considera únicamente una pequeña porción de tiempo de la señal de entrada para realizar su análisis. Cada porción se denomina frame o window, lo cual se traduce como marco y ventana, respectivamente. De esta manera, se obtiene una especie de foto instantánea del contenido espectral de la señal de entrada en un momento específico. Es posible aplicar STFT a señales de entrada continuas o discretas.
Al combinar múltiples windows y aplicar la STFT a cada una, es posible observar cómo el contenido espectral de la señal de audio varía a lo largo del tiempo. Asimismo, al modificar el contenido espectral de cada window, es posible lograr efectos difícilmente reproducibles con procesamiento en función del tiempo.
Estudiemos el funcionamiento general de un phase vocoder digital. Este proceso es el mismo para todos los efectos que se pueden lograr con un phase vocoder. Se cuenta con una señal de entrada de una longitud cualquiera. En primer lugar, se debe escoger el tamaño de cada window, el cual corresponde a N muestras o samples de la señal digital. La cantidad N de muestras en cada window es el window size o frame size.
Nótese que cada window se superpone con otra, en lugar de tener un único límite claramente definido. La amplitud de la señal se mantiene igual en el centro de la window y se atenúa, conforme se aleja del centro, de manera que se forme una especie de crossfade entre cada window. Esto se logra a través de una window function o función de ventana. Se define que la window function tendrá valores diferentes a 0 durante N muestras. Asimismo, para cualquier otro punto en el tiempo fuera de las N muestras consecutivas, se define que su valor será 0.
De esta manera, al multiplicar la señal de entrada por la window function, únicamente se conservarán los valores dentro del rango de N muestras. El resto de valores será 0. Podríamos visualizar una window function como un tipo de filtro band-pass. Cada window tiene su propia función, por lo que se debe multiplicar la señal por cada una. Luego de hacerlo, decimos que la señal ha sido windowed o pasada por ventanas.
En este punto, se debe aplicar una Transformada Rápida de Fourier, Fast Fourier Transform o FFT a cada window. Ahora bien, ¿qué es una FFT? Pues bien, primero debemos conocer el concepto de Transformada de Fourier Discreta, Discrete Fourier Transform o DFT.
Una DFT consiste, al igual que la STFT, en la transformación de una función de tiempo en una función de frecuencia con números complejos. Lo que define a la DFT es que requiere que la función original sea una serie discreta de muestras uniformemente distribuidas a lo largo del tiempo, es decir, que haya el mismo espacio entre cada muestra. Un ejemplo de una serie de este tipo, es una señal de audio digital. La función de salida de la DFT es una serie discreta de muestras distribuidas uniformemente de una función de frecuencia con números complejos, la cual tendrá la misma longitud que la señal de entrada.
Una FFT es un algoritmo que permite reducir considerablemente la complejidad de los cálculos necesarios para realizar una DFT. De esta manera, permite obtener los valores con mayor rapidez y facilidad.
Debido a que cada window posee una cantidad N de muestras, se debe aplicar una FFT que considere una cantidad de muestras M igual o mayor a N. Normalmente, la cantidad M es igual a la N. Sin embargo, en ciertos casos, la FFT considera una cantidad M mayor de muestras. Asimismo, por motivos de practicidad en el mundo digital, la cantidad M de muestras suele ser una potencia de 2. La combinación de cada window function con una Fast Fourier Transform constituye una Short-Time Fourier Transform.
Figura 13.5. Proceso general de un phase vocoder
La información de salida de cada FFT es un conjunto de un número M de bins. Este es el término utilizado para designar las muestras luego de aplicarles FFT. Cada bin contiene información de la amplitud y fase de cada una de las frecuencias presentes en la señal de audio original. Es en este punto donde cada uno de los tipos de phase vocoder aplica un procesamiento diferente en el dominio de la frecuencia, según su objetivo.
Posteriormente, se aplica una Transformada Inversa Rápida de Fourier, Inverse Fast Fourier Transform o IFFT, a cada una de las señales de salida del procesamiento aplicado a las bins. De esta manera, se producen M cantidad de muestras en función del tiempo para cada window. Esta serie de muestras tiene una distribución uniforme y no contiene números complejos. Resulta nuevamente, una señal convencional de audio discreta o digital, pero dividida en múltiples windows.
Antes de estudiar cómo se obtiene la señal de audio final, recapitulemos el proceso. Inicialmente se selecciona arbitrariamente una cantidad N de muestras que conformarán el tamaño de cada frame o window. Luego, se multiplica la señal de entrada por una window function que únicamente conserva los valores dentro de la ventana. Posteriormente, estos valores se someten a una FFT, un procesamiento en el dominio de la frecuencia y luego una IFFT.
Finalmente, las M muestras de la window reconstruida por la IFFT se suman al búfer de salida. El proceso completo inicia de nuevo, pero esta vez con una window cuyo centro se encuentra una cantidad H de muestras más adelante del centro de la window previa. La magnitud H se denomina hop size o tamaño del salto. En ocasiones, el hop size es igual al tamaño de la window. Sin embargo, es más común que el hop size sea una fracción del tamaño de una window, como por ejemplo la mitad o un cuarto.
El búfer de salida almacena temporalmente el conjunto de muestras de cada window conforme estas llegan y se suman en el proceso llamado overlapp-add, en referencia a los traslapes entre las diferentes windows. Durante este proceso de suma, se analizan las windows originales de la señal de entrada y cómo se traslapan; se comparan con cada window de salida después del procesamiento; y se alinean de manera que pueda conformarse la señal de salida.