jueves, 19 de febrero de 2009

Procesamiento de señales a tiempo real basados en PC: WaveProc

Introducción

Desarrollar un algoritmo de audio implica una primera fase donde se ajusta y depura el algoritmo hasta obtener el funcionamiento y la calidad deseada. El objetivo es proponer un prototipo para un sistema rentable y rápido. La forma más sencilla de conseguirlo es con un ordenador personal, un software matemático como MatLab y DSP’s para manejar el procesamiento a tiempo real.

Habitualmente, es preciso para el tratamiento de señales a tiempo real un hardware dedicado, compuesto normalmente por convertidores analógico-digital, digital-analógico y procesadores DSP. La idea es aprovechar las facilidades que ofrece un PC como interfaz del prototipo (pantalla, teclado, ratón…).

Un PC como plataforma de un DSP

Un software adecuado para programar es, por ejemplo C ++, aunque para la fase de desarrollo del algoritmo se recomienda Matlab ya facilita la representación de datos, funciones, implementación de algoritmos, creación de interfaces de usuario (GUI) y comunicación con programas en otros lenguajes y dispositivos hardware.

Procesadores de señal orientados a objeto

Al procesar una señal de audio, son frecuentes las repeticiones de código usado una y otra vez en un algoritmo, por lo que se pensó en emplear un objeto como componente básico. El sistema, llamado WaveProc, ha sido desarrollado con ventanas DLL así que puede ser llamado como una función de MatLab.






El controlador ASIO (Audio Stream Input Output) es compatible con muchas tarjetas de sonido de alta calidad (24 bits, con tasas de de muestreo de hasta 96 KHz) y permite trabajar con VST, DirectX y demás protocolos, con lo que es posible su uso en la mayoría de aplicaciones de audio. Por medio de la aplicación waveproc.dll se consigue que los bloques que más se utilicen durante la ejecución del programa se añadan a un nuevo algoritmo.

El número de canales en cada bloque y el enrutamiento de la señal entre los mismos, es programable. Otra cuestión importante es que el tratamiento de la señal en cada bloque se realiza tomando una muestra por muestra. Si fuera necesario un bucle de realimentación, MatLab decidirá que secuencia trata en cada bloque. El sistema WaveProc, permite a cada bloque ejecutar una vez por muestra de entrada, P veces por muestra de entrada o una vez cada muestra de entrada de Q.

Funcionamiento

El funcionamiento de un DSP sobre una plataforma PC depende de muchos factores, no sólo la frecuencia de reloj principal. En muchos casos se produce un embotellamiento en el acceso a memoria, en particular cuando el algoritmo requiere ejecutar grandes bloques en como por ejemplo filtros FIR o FFT. En la aplicación WaveProc el componente básico es un filtro IIR, que tiene la siguiente función de transferencia:



Los datos manejados por el filtro son de coma flotante de 64 bits. Sobre un PC estándar de oficina (1.8 GHz el Pentium) una cascada de 500 biquads que controlan una tasa de muestreo de 48 KHz en solo canal, consume el 65 % del uso de CPU. Sobre DSP dedicado, 24 bit Motorola de coma fija, un biquad puede ser ejecutado en más o menor 7 ciclos.

Ejemplo: Si la tasa de muestreo es 48.000 Hz y la frecuencia de reloj del DSP es 150 MHz, sólo (150M/48K) / 7 = 446 biquads pueden ser ejecutados por muestra.

El código de control empleado en MatLab es:



La función WaveProc permite poner en práctica su propio tratamiento de señal (muestra por muestra) y utiliza la flexibilidad y la facilidad de MatLab como un regulador. La principal desventaja del sistema es la latencia de la entrada digital a la salida digital, que hace el sistema inaplicable si por ejemplo en el empleo de bucles de realimentación. Esta latencia es debido a los buffers de entrada/salida, los cuales aíslan el tratamiento de señal del sistema operativo. Es posible reducir la latencia mediante buffers de protección, y es recomendable el uso de sistemas operativos como Linux.

Artículo original: TC electronic MATLAB libraries.

No hay comentarios:

Publicar un comentario