Anda di halaman 1dari 7

Comparacin de Implementaciones en C y Matlab de Filtros Adaptativos para DSP

Bernardo Morcego Dept. ESAII (UPC), Rbla. Sant Nebridi 10 (Terrassa, Barcelona), bernardo@esaii.upc.es Miquel ngel Cuguer Dept. ESAII (UPC), Rbla. Sant Nebridi 10 (Terrassa, Barcelona)

Resumen
En este artculo se presenta un estudio comparativo de dos tcnicas de implementacin de filtros adaptativos con el equipo DSP DS1003 de dSPACE. Se realiza la implementacin de diferentes algoritmos de adaptacin mediante tcnicas de generacin de cdigo automticas y mediante transcripcin manual en C. Se evala la eficiencia de los dos tipos de implementacin en trminos de los tamaos de los filtros que cada una permite realizar. Palabras Clave: Filtros adaptativos, cancelacin de ruido, algoritmo RLS.

de generar la seal sonora que sumada al ruido original producir silencio en el punto de cancelacin. Es decir, ha de modelar la propagacin del ruido a travs del conducto.

Conducto

Seal de control ( y) Error ( e)

Seal de referencia ( x)

Figura 1: Esquema de un sistema de cancelacin de ruido en un conducto Este esquema de control presenta diversos problemas que han de tratarse con sumo cuidado si se quieren conseguir resultados positivos. En este artculo abordamos el problema de la implementacin del algoritmo de cancelacin, comparando la realizacin con un lenguaje de cuarta generacin y la realizacin directa en C. 1.2 PLATAFORMA DE TRABAJO

INTRODUCCIN

Esta aportacin se enmarca en un proyecto de mayor envergadura, Control Activo de Perturbaciones (CAP), cuya finalidad es el estudio y puesta en marcha de esquemas de control para eliminar, de forma activa, el efecto de las perturbaciones mecnicas. 1.1 CONTROL ACTIVO DE PERTURBACIONES MECNICAS EN UN CONDUCTO

Dentro del control activo de perturbaciones mecnicas, que es un tema amplio y con multitud de variantes y particularidades (ver [2]), se ha escogido el control activo de perturbaciones en un conducto. Este problema consiste en la eliminacin (atenuacin) de perturbaciones sonoras (ruido) que se propagan a lo largo de un conducto. Se trata de un problema frecuente, por ejemplo en grandes instalaciones de aire acondicionado. Para resolver este problema se suelen utilizar captadores de ruido (micrfonos generalmente, pero tambin acelermetros, etc.) y generadores de sonido (altavoces). El sonido original es transformado digitalmente, mediante una DSP, para generar un contrasonido que se emite en el punto de cancelacin (ver figura 1). El papel de la DSP es el

La plataforma de trabajo que se ha utilizado en este proyecto consta de los siguientes elementos: el conducto de propagacin del sonido, los transductores y acondicionadores, la DSP y un PC para programar el sistema. El conducto de propagacin es un paraleleppedo de conglomerado de madera de 3.54 m. de longitud y 0.30 m. de lado. Los transductores son dos altavoces (Beyma 5 MP60/N de 50W) y un micrfono (Behringer ECM8000). Ambos trabajan ptimamente en rangos bajos de frecuencias. Adems de estos transductores se dispone de acondicionadores de seales: un preamplificador (Behringer Eurorack MX602A) y un amplificador (Ecler MPA 6-80). La DSP es una DS1003 de dSPACE, uno de los modelos ms potentes de este fabricante. Consta de un procesador TMS320C40 de Texas Instruments y de una tarjeta de comunicaciones con capacidad para 20 entradas y 10 salidas analgicas.

Para finalizar, el PC de programacin no tiene una incidencia importante en el rendimiento del sistema de cancelacin. Lo nico importante es que tenga capacidad para ejecutar Matlab v5.1. De este programa se utilizan, como requisitos especiales, la DSP Blockset y la Real Time Workshop. 1.3 ESTRUCTURA DEL ARTCULO

y su funcin de transferencia discreta es


Y ( z ) L 1 = wl z l X ( z ) l =0

Este artculo se divide en la presente introduccin y 5 partes ms. La seccin 2 plantea los algoritmos de cancelacin, que son filtros adaptativos. Las secciones 3 y 4 describen dos formas de implementar estos algoritmos. En la seccin 5 se comparan ambas implementaciones, especialmente en cuanto a la cantidad mxima de parmetros que cada implementacin puede realizar. Finalmente se dan las conclusiones resultantes en la seccin 6.

Un filtro FIR siempre es estable, pues no aade polos al sistema. Por otro lado, no puede realizar funciones de transferencia racionales con un nmero finito de parmetros. 2.1.2 Filtros IIR Los filtros IIR, de respuesta impulsional infinita, deben su nombre al hecho de que su salida puede depender tanto de la entrada como de la propia salida del filtro, de forma que el efecto de un impulso en la entrada puede no extinguirse en tiempo finito. La respuesta de un filtro IIR de N y M coeficientes, an y bm, para una entrada x(k) es y (k ) = a n x(k n) + bm y (k m)
n=0 m =1 N M

FILTROS ADAPTATIVOS

El elemento principal de procesado, en esta aplicacin, es un filtro digital adaptativo. Se trata de un filtro digital clsico, con la particularidad de que sus parmetros pueden variar a lo largo del tiempo. El encargado de modificar estos parmetros es un algoritmo de optimizacin que, con la finalidad de minimizar algn criterio, calcula constantemente los parmetros ms adecuados. Seguidamente se exponen ms detalladamente los tipos y funciones ms habituales de filtros digitales y los algoritmos de optimizacin ms utilizados. 2.1 TIPOS DE FILTROS

(2)

y su funcin de transferencia discreta es

Y ( z) = X ( z)

a
n =0 M m =1

z n

1 bm z m

Un filtro digital realiza una transformacin (en este caso lineal) de la seal de entrada, alterando su contenido espectral, la magnitud y la fase para acomodarla a unas especificaciones. En este artculo se describen los dos filtros ms utilizados en la cancelacin activa de perturbaciones, que son: el filtro FIR (Finite Impulse Response) y el filtro IIR (Infinite Impulse Response). 2.1.1 Filtros FIR Los filtros FIR, de respuesta impulsional finita, deben su nombre al hecho de que su salida depende nicamente de la entrada, de forma que el efecto de un impulso en la entrada se extingue en tiempo finito. La respuesta de un filtro FIR de de L coeficientes, wi , para una entrada x(k) es y (k ) = wl x (k l )
l =0 L 1

Los filtros IIR son sistemas genricos de procesado de seales. Su principal ventaja es que pueden realizar cualquier transformacin lineal y discreta con un nmero finito de parmetros, resultando ms eficientes que los filtros FIR. Por otro lado, tienen inconvenientes importantes, como la falta de garanta en su estabilidad o los problemas derivados de la cuantizacin y redondeo de sus coeficientes, mucho mayores que en el caso de los filtros FIR. 2.2 ALGORITMOS DE ADAPTACIN

Los algoritmos de adaptacin son algoritmos de optimizacin cuya finalidad es obtener los parmetros (de un filtro, en este caso) que minimicen algn criterio preestablecido. En esta aplicacin el criterio a minimizar gira entorno a la seal capturada en el punto de cancelacin, el error de cancelacin. Antes de describir los algoritmos que se utilizan en este artculo es conveniente introducir una expresin ms general para las ecuaciones (1) y (2).
y (k ) = r T (k ) p

(1)

(3)

donde los vectores p y r corresponden a los parmetros del filtro (wi , an y bm en las expresiones anteriores) y a los regresores, que son valores conocidos e independientes del vector de parmetros. Por otro lado, definimos el error de cancelacin como
e( k , p ) = d ( k ) y ( k ) .

2.2.2 Criterio RLS El criterio RLS (Recursive Least Squares) es la versin exacta del anterior algoritmo. Se utiliza el mismo criterio de optimizacin pero se calcula la solucin exacta en cada iteracin. Como resultado se obtiene una expresin ms compleja, que es (k ) = P (k 1)r ( k ) 1 + r (k )P (k 1)r (k )
T

(4)

La seal d(k) es la seal que se desea cancelar, es decir, es el ruido que se propaga por el conducto hasta el punto de cancelacin. Esta seal no est fsicamente disponible (ver figura 1) pero s que disonemos de la lectura del error. En la ecuacin (4) se hace evidente que el error depende tanto de la seal de ruido como del conjunto de parmetros empleados en la cancelacin. Con todo ello, el tipo de algoritmos de optimizacin que se utiliza en esta aplicacin calcula los parmetros de forma recursiva. Es decir, en cada paso de clculo se actualizarn los parmetros segn
p ( k + 1) = p ( k ) + ( k ) e ( k , p ) ,

(7)

en la que la matriz P (ms concretamente su diagonal) caracteriza la incertidumbre de los parmetros estimados y tambin se calcula de forma recursiva segn
P ( k ) = P( k 1) ( k ) r T ( k ) P( k 1)

(8)

(5)

Como se observa en las ecuaciones (7) y (8) el algoritmo RLS tiene un producto de matrices y su coste computacional es cuadrtico con respecto al nmero de parmetros a optimizar. 2.2.3 Criterio RLS simplificado El algoritmo RLS no se utiliza, generalmente, en aplicaciones de procesado de seales porque exige velocidades de clculo demasiado altas a los procesadores. Sin embargo, existen versiones simplificadas del algoritmo que, aunque convergen en un nmero mayor de iteraciones, comparten la optimalidad de RLS y son mucho menos costosas computacionalmente. Aqu utilizaremos una simplificacin atribuida a Kaczmarz y descrita en [1], normalmente referida como projection algorithm. El clculo de (k) se realiza de la siguiente manera: (k ) = c r (k 1) + r (k 1)r (k 1)
T

donde (k) es un vector que se obtiene a partir del criterio concreto a minimizar. En este artculo se utilizan tres criterios de minimizacin que se explican seguidamente. 2.2.1 Criterio LMS El criterio LMS (Least Mean Squares) es un mtodo de clculo de (k) ampliamente utilizado, especialmente en aplicaciones de procesado de seales en las que la velocidad de clculo es alta. En este algoritmo se parte de la funcin de coste cuadrtica del error, pero se utiliza una solucin aproximada en la que se evalan los gradientes instantneos de esta funcin. Como resultado, el clculo de (k) se realiza segn
(k ) = r (k )

(9)

(6)

donde es una constante que determina la velocidad de convergencia, pero que necesita ser ajustada empricamente en cada caso. A pesar de su gran popularidad no prestaremos ms atencin al criterio LMS porque la experimentacin nos ha permitido comprobar que este algoritmo cancela peor y con mayor nmero de parmetros que los que se explican en los siguientes apartados.

donde es una constante positiva y c debe cumplir que 0 c 2. no tiene ms finalidad que la de evitar indeterminaciones cuando el vector de regresores se anula y c permite sintonizar la velocidad de convergencia del algoritmo. 2.3 ESTRUCTURA GENRICA DE LOS ALGORITMOS DE ADAPTACIN

Antes de entrar en los detalles de las implementaciones que se discuten posteriormente presentamos la estructura genrica de los algoritmos de adaptacin, que se basa en las ecuaciones esbozadas hasta el momento.

Este algoritmo se ha de ejecutar con una frecuencia que vara en cada aplicacin. En este caso, la frecuencia de muestreo es de 5000Hz, que corresponde a la frecuencia mxima de cancelacin mutliplicada por 10. El algoritmo de adaptacin, en pseudolenguaje, queda de la siguiente manera: 1.2.3.4.5.6.7.8.Bucle de cancelacin Adquisicin: x(k) y e(k) Formacin del vector r(k) Clculo de y(k) ec. 3 Escritura: y(k) Clculo de (k)

lectura y escritura para no complicarla, pero es evidente que habr que incluir los bloques que realizan estas operaciones en el diagrama final.
1 In

r(k)

Buffer
1 z p(k)

y[k]

1 Out

2 () e(k)

RLS ec. 7 y 8 RLS simp. ec. 9 Clculo de p(k+1) ec. 5

Figura 2: Diagrama de bloques de las ecuaciones (3) y (5) Cabe destacar, tambin, que en la figura 2 se muestra un filtro FIR. En el caso de implementar un filtro IIR habra que mantener las secuencias de entradas y salidas en sendos bloques buffer y unirlos para obtener el vector r(k). 3.3 Clculo de (k)

Fin del bucle

CANCELACIN CON SIMULINK

En esta seccin se describen los bloques de Simulink mediante los que se puede programar la DSP DS1003 de dSPACE para implementar el algoritmo de cancelacin. El proceso de generacin de cdigo nativo para el procesador TMS320C40 es muy sencillo cuando la aplicacin que se desea ejecutar se crea en el entorno Simulink. Se parte de un modelo de Simulink que puede incluir cualquiera de los bloques usuales de este entorno y los bloques de la librera rtilib (real time interface library), que permiten realizar operaciones de lectura y escritura de seales con la DSP. Este modelo se transforma y transfiere a la DSP automticamente mediante los mens del Real Time Workshop, que han de configurarse adecuadamente para cada procesador. A partir de este momento, la DSP ya est lista para ejecutar nuestra aplicacin. Para entender los algoritmos de cancelacin programados a partir de modelos de Simulink bastar con comprender el funcionamiento de los bloques que implementan estos algoritmos. 3.2 Clculo de la salida

El clculo de (k) es diferente para cada uno de los algoritmos de optimizacin tratados en la seccin 2. Por este motivo los diagramas de bloques que implementan el clculo son diferentes en cada caso.
1 e(k) 1 () 1 () e(k)

2 r(k) P(k-1)

U*V

U*V

1 z

Figura 3: Clculo de (k)e(k) en RLS El algoritmo RLS contiene varios productos vectoriales, tal y como se aprecia en la figura 3. El bloque U*V de la izquierda calcula P(k-1)r(k) y el de la derecha realiza parte del clculo de la ecuacin (8).
1 e(k)
c

Las lneas 3, 4 y 7 del algoritmo de cancelacin, en la seccin previa, llevan a cabo la lectura de datos y el clculo de la salida correspondiente. Esta operacin se realiza mediante el diagrama de bloques de la figura 2. En concreto, la parte superior del diagrama prepara el vector r(k) y la parte inferior mantiene y actualiza el vector de los parmetros, p(k). De hecho, en esta figura no se hacen explcitas las operaciones de

1 () e(k)

2 r(k) alpha

Figura 4: Clculo de (k)e(k) en RLS simplificado El diagrama de la figura 4 representa el algoritmo RLS simplificado. La diferencia entre este diagrama y el anterior es que los bloques que calculan y

actualizan P(k) han sido suprimidos. Adems aparecen dos constantes, c y alpha, que corresponden a las constantes c y descritas en el apartado 2.2.3. Pues bien, el algoritmo de cancelacin definitivo no es ms que la correcta combinacin de estos bloques con los que representan las operaciones de entrada y salida de la DSP. No ha sido necesario programar ni una sola lnea de cdigo.

sentido temporal creciente o decreciente. En la figura 5 se muestra una representacin de un vector circular de n+1 valores. Este vector se va rellenando de izquierda a derecha y se puede consultar en ambos sentidos, dependiendo de lo que nos convenga. El clculo explcito de los ndices en matrices y vectores es una consecuencia de la utilizacin de vectores circulares. En las matrices se poda haber utilizado un esquema de direccionamiento indirecto, tal como se hace en libreras matemticas como las numerical recipes, pero se ha optado por disponer la ocupacin de memoria de forma lineal, para acceder a los valores de la forma ms directa posible. El siguiente cdigo muestra la implementacin de una de las rutinas del algoritmo de cancelacin. Se trata del producto de una matriz y un vector. La variable indice_r mantiene el puntero al origen del vector apuntado por v, el resultado se escribe en la direccin apuntada por v_res y nParams es una constante que indica el nmero de valores del vector.
matrizXvector (float *m,*v,*v_res) { int aux=indice_r; for(f=0;f<nParams;f++) { v_res[f]=0; for(c=0;c<nParams;c++) { aux=nParams*f+c; v_res[f] += m[aux]*v[indice_r]; indice_r--; if (indice_r < 0) indice_r=nParams-1; } } }

CANCELACIN EN C

El algoritmo de cancelacin en C es, esencialmente, el que se ha presentado en el apartado 2.3. Tiene dos puntos problemticos que requieren un cierto cuidado a la hora de escribir el cdigo. Se trata de las operaciones matemticas y del tratamiento del tiempo en el programa. 4.1 Codificacin de operaciones matemticas

El primer paso que conviene dar, antes de codificar cualquier algoritmo de clculo, es la simplificacin de las expresiones matemticas del mismo. A menudo, es posible aplicar propiedades, por ejemplo sobre la regularidad de las matrices, que conducen a expresiones equivalentes menos costosas en tiempo de clculo. Sin embargo, los algoritmos de la seccin 2.2 no permiten realizar simplificaciones significativas. Por este motivo, se ha puesto un nfasis especial en codificar el algoritmo de cancelacin de la forma ms eficiente posible. Para ello se han tomado las siguientes medidas: declaracin esttica de todas las variables, tratamiento circular de vectores y clculo explcito de los ndices de matrices y vectores.

4.2

Tratamiento del tiempo

...

x(k-1) x(k)

x(k-n)

Todas las aplicaciones que se ejecutan en tiempo real o con la necesidad de cumplir unas restricciones temporales, han de llevar un control, ya sea implcito o explcito, del transcurso del tiempo. ste es el caso de los algoritmos de control digital. Para ello existen diversos mecanismos, aunque el ms fiable y extensamente utilizado es el de servirse de un hardware externo que interrumpe al procesador a intervalos regulares. Estas interrupciones pueden ser capturadas por el sistema operativo, que informa a las aplicaciones que lo requieran del tiempo transcurrido. Tambin pueden ser capturadas directamente por la propia aplicacin, siendo entonces responsabilidad de sta el control de los sucesos que tengan darse en cada instante. La DSP DS1003 de dSPACE no sigue ninguno de estos dos esquemas, sino que utiliza uno intermedio.

ltima muestra incorporada

Figura 5: Un vector circular De estas tres medidas, la ms destacable es la del tratamiento circular de vectores. Esto permite mantener ordenada la informacin de un vector en todo momento sin tener que realizar ningn movimiento interno de datos. Para ello es necesario mantener un puntero al ltimo dato introducido en el vector y de esta forma es posible recorrerlo en

Por un lado, es posible programar interrupciones para que se ejecuten a intervalos regulares dando, de esta manera, el control del tiempo y sus consecuencias a la aplicacin. Pero tambin dispone de funciones para comprobar la temporizacin correcta de las interrupciones programadas. El algoritmo esquematizado en el apartado 2.3 debe ejecutarse cada 0.2 milisegundos (es decir, a una frecuencia de 5000Hz) y no hay otras operaciones que se tengan que realizar, ni a velocidades menores ni como procesos de fondo (background). As pues, la implementacin en C del algoritmo de cancelacin se ha realizado ntegramente dentro de la rutina de interrupcin. La aplicacin se compone de dos partes: el programa principal, cuya tarea es inicializar todas las variables y activar las interrupciones; y la interrupcin de control, que realiza la adquisicin y entrega de datos y todo el clculo necesario en cada iteracin. En el caso de que el algoritmo de cancelacin no pudiera ejecutarse en menos de 0.2 milisegundos el sistema se parara dando un error de sistema.

particularidades de una sintaxis rgida y de consideraciones que van ms all de los propios algoritmos (como la codificacin de subrutinas muy bsicas, las interrupciones, etc.) se est popularizando actualmente, pero al mismo tiempo tiene poca credibilidad entre la comunidad informtica. Pues bien, aqu tenemos un ejemplo de las altas prestaciones que se puede lograr con esta metodologa. 5.1 Resultados de cancelacin

Aunque la finalidad de este artculo no sea la de evaluar la capacidad de cancelacin de los algoritmos descritos, seguidamente se presentan unos resultados, sobretodo para poder comprobar que ambos realizan su tarea de forma equivalente. En este ejemplo se utiliza como ruido una seal generada a partir de la superposicin de 5 tonos puros, cuya representacin frecuencial se da en la figura 6.
Mdulo de la seal de ruido sin cancelacin (dB) 35 30 25 20 15 10 5 0 0 50 100 150 200 250 300 350 400 450 500 frecuencia (Hz)

COMPARACIN DE LAS REALIZACIONES EN MATLAB Y EN C

En esta seccin se comparan las implementaciones de los algoritmos vistos hasta el momento. Estamos interesados especialmente en evaluar la velocidad de ejecucin de cada implementacin. Esto es equivalente a evaluar el tamao de los filtros puesto que, como ya se ha comentado, todo el algoritmo se ejecuta dentro de la rutina de interrupcin. El resultado que hemos obtenido ha sido sorprendente. El tamao mximo de los filtros que cada implementacin permite albergar se detalla en la tabla 1. En ella se observa que no es posible conseguir un incremento significativo con la programacin en C, como se poda esperar a priori. Es decir que, aparentemente, no tiene especial relevancia implementar los filtros de cancelacin activa en C o en Matlab. C 12 51 Matlab 7 55

Figura 6: Representacin frecuencial del ruido La cancelacin de este ruido se ha llevado a cabo con el algoritmo RLS simplificado, utilizando un filtro de 48 coeficientes. La grfica de atenuacin para la implementacin en C corresponde a la figura 7 y la figura 8 muestra los resultados de la implementacin en Matlab. Lo ms destacable de ambas es que para las frecuencias de inters (100Hz, 150Hz, 280Hz, 350Hz y 400Hz) la atenuacin est entre 30dB y 40dB. En el resto de frecuencias es posible observar valores muy dispares, incluso de amplificacin, pero esto es debido a que la propia seal de entrada es insignificante para estas frecuencias. En conclusin, se puede observar que ambas implementaciones trabajan de forma similar.

RLS RLS simplificado

Tabla 1: Tamaos mximos de los filtros De hecho, si se considera el tiempo de desarrollo de esta aplicacin en ambos lenguajes, queda patente la potencia de utilizar un lenguaje de cuarta generacin. Este tipo de programacin, alejado de las

40 30 20 Atenuacin (dB) 10 0 -10 -20 -30 -40 -50 0 50 100 150 200 250 300 350 400 450 500 frecuencia (Hz)

Esta comparacin, por otra parte, nos ha permitido valorar el esfuerzo de realizar un programa en C para una plataforma tan especfica como la DSP que utilizamos. Hemos podido constatar que en esta aplicacin, y suponemos que en otras, utilizar la plataforma al mximo de su capacidad es poco robusto. Es decir, que si conseguimos cancelar con n parmetros, deberamos utilizar filtros mayores para garantizar robustez en la cancelacin. Por ello es poco interesante realizar un esfuerzo importante en la implementacin si ste slo nos va a permitir aumentar el orden del filtro en unos pocos parmetros. Sin embargo, existen otras soluciones que pueden ser muy fructferas. La ms destacable es la que contempla el clculo de los parmetros off-line, [3]. En esta solucin s que es necesario realizar el programa de control en C, puesto que hay que distribuir de forma cuidadosa las tareas que se realizan en la interrupcin y las que se van ejecutando entre tanto.

Figura 7: Atenuacin en la implementacin en C


40 30 20 Atenuacin (dB) 10 0 -10 -20 -30 -40 -50 0 50 100 150 200 250 300 350 400 450 500 frecuencia (Hz)

Agradecimientos Este trabajo ha sido parcialmente financiado por la CICYT ref. TAP 1999-0748 y por la Generalitat de Catalunya. Los autores son miembros del grupo de investigacin consolidado SAC (ref. 1999-SGR00134 SAC). Referencias

Figura 8: Atenuacin en la implementacin de Matlab

CONCLUSIONES

En este artculo se han comparado dos implementaciones de un mismo algoritmo de cancelacin activa de ruido. Cada una de estas implementaciones ha sido programada utilizando lenguajes diferentes. Por un lado se ha utilizado el C, como un lenguaje de alto nivel que permite maximizar la eficiencia de los programas que con l se crean. Por otro lado, se ha utilizado una herramienta de cuarta generacin (Simulink y Matlab) que permite al usuario concentrarse en los problemas del algoritmo ms que en los de su implementacin, pues le oculta a ste detalles de la misma. En esta comparacin se ha podido comprobar que la implementacin en Matlab alcanza niveles de eficiencia (medida como el tamao mximo del filtro de cancelacin) comparables a los de la implementacin en C.

[1] strm, K.J., Wittenmark, B. (1989). Adaptive Control. Addisson Wesley. [2] Kuo, S.M., Morgan, D.R. (1996). Active Noise Control Systems. John Wiley & Sons. [3] Walter, E., Pronzato, L. (1997). Identification of Parametric Models. Masson.

Anda mungkin juga menyukai