En esta prctica vamos a estudiar cmo calcular el espectro de una seal de audio. El espectro, por definicin, es el mdulo de los coeficientes complejos de Fourier.
Los sonidos naturales estn constituidos por una sumatoria de sonidos puros o sinusoidales con diferentes fases, amplitudes y frecuencias. Los seres humanos somos especialmente sensibles a la frecuencia de los sonidos cuando vamos a reconocerlos. Por lo tanto, una forma conveniente de caracterizar los sonidos es describir la frecuencia de las componentes puras de los mismos.
Un analizador de espectro es un sistema que es capaz de visualizar y dar informacin en tiempo real acerca del espectro de una seal. Para el caso de una seal unidimensional (como es el caso de una seal de audio), el espectro es una grfica cartesiana donde en el eje X se indica la frecuencia (generalmente en Hz) y en el eje Y la amplitud de dicha frecuencia (generalmente sin dimensiones).
La DFT (Discrete Fourier Transform) o Transformada Discreta de Fourier es la herramienta matemtica que permite representar un sonido digitalizado en funcin de sus componentes de frecuencia. Algortmicamente hablando, la rutina DFT calcula a partir de un conjunto de muestras de audio digitalizadas otro conjunto de coeficientes de Fourier. Por definicin, cada coeficiente de Fourier es un nmero complejo. La forma natural de representacin de estos nmeros es mediante su notacin fase-magnitud, donde la magnitud expresa la amplitud del sonido que da lugar a dicha componente de frecuencia y la fase, su fase. Sin embargo, es comn representar dichos nmeros complejos tambin como un nmero real y otro imaginario (dependiendo del formato de entrada/salida requerido por dicha rutina). Generalmente, la rutina DFT necesita que tanto el conjunto de entrada como el de salida de muestras complejas se almacenen en un array. En el array de entrada la posicin dentro del array depende del instante de tiempo en el que la muestra all almacenada se gener. En el array de salida la posicin dentro del array indica la banda de frecuencia a la que corresponde dicho coeficiente de Fourier.
En esta prctica vamos a utilizar un algoritmo de clculo rpido de la DFT conocido como FFT (Fast Fourier Transform). El nmero de operaciones de la DFT es proporcional a N2 donde N es el nmero de muestras procesadas. Por el contrario, la FFT tiene una complejidad de N log 2(N).
Ya que vamos a trabajar con sonidos, el tamao del array (el nmero de muestras del array) junto con la frecuencia de muestreo nos va a determinar el tamao temporal de la ventana de anlisis que estamos utilizando en nuestro analizador de espectro de audio. Por ejemplo, si la frecuencia de muestreo utilizada es 8.000 Hz y el tamao de la ventana medido en muestras es de 1.000 muestras, entonces cada uno de los 500 coeficientes de Fourier calculados por la rutina DFT hablara de un ancho de banda igual a
El primer coeficiente (primer nmero complejo) se refiere a la banda [0,8) Hz, el segundo a la banda [8,16) y as sucesivamente. Ntese que el Teorema del Muestreo Uniforme indica que si f es la frecuencia de muestreo utilizada, entonces f∕2 es la mxima componente de frecuencia registrada. Por esta razn, aunque pasamos 1.000 muestras a la rutina DFT, obtenemos slo 500 coeficientes.
Por tanto, el tamao de la ventana de anlisis controla la resolucin del espectro en el dominio de la frecuencia y la frecuencia de muestreo el rango de frecuencias capturado.
Antes de calcular la FFT de la ventana de anlisis las muestras son multiplicadas por una funcin que minimiza la distorsin espectral. Dicha distorsin est provocada por la duracin no-infinita (por motivos prcticos) de la ventana de anlisis.
Si analizamos desde el punto de vista de la frecuencia qu estamos haciendo cuando calculamos la FFT de la ventana de anlisis, veremos que en realidad estamos calculando el espectro de la seal resultante de multiplicar las muestras por una funcin cuadrada que vale distinto de 0 (en concreto, 1) justamente en el intervalo de tiempo que se toman las muestras.
Si aplicamos el Teorema de Convolucin, el espectro resultante es la convolucin en el dominio de la frecuencia de los espectros de la seal de audio y de la funcin cuadrada. Como el espectro de la funcin cuadrada es una Sinc (la funcin muestreo), el espectro de la seal de audio se presenta distorsionado por dicha Sinc.
Para minimizar esta distorsin podemos hacer dos cosas:
El programa usado en esta prctica para calcular el espectro de una seal de audio se llama RTASA (Real Time Audio Spectrum Analyzer).
RTASA acepta una secuencia RAW (sin cabecera) de muestras a travs de entrada estndar. Debe tratarse de una secuencia de muestras de 16 bits, con signo, en formato little endian (el usado en las mquinas Intel). Se esperan dos canales.
RTASA acepta parmetros iniciales desde la lnea de comandos e interactivamente (durante la ejecucin), a travs de diferentes elementos de entrada.
Los parmetros iniciales son:
Los otros controles interactivos son:
La nica salida del programa es la grfica del espectro (ventana Spectrum). En la parte superior aparece el espectro del canal izquierdo y abajo, el del canal derecho. La ventana es redimensionable.
Como viene siendo habitual, usaremos la utilidad make para facilitar esta tarea.