XV Workshop Iberchip, Buenos Aires - Argentina, 25 - 27 de Marzo de 2009 DISEÑO DE UNA ARQUITECTURA PARA LA IMPLEMENTACION DE UN FILTRO ADAPTATIVO RLS SOBRE UN FPGA Jorge Benavides Aspiazu, Walter Calienes Bartra, Carlos Silva Cárdenas Grupo de Microelectrónica de la Pontificia Universidad Católica del Perú Sección de Electricidad y Electrónica jbenavidesa@pucp.edu.pe , wcalienes@pucp.edu.pe, csilva@pucp.edu.pe sistemas basados en algoritmos adaptivos son implementados en Microcontroladores o Procesadores Digitales de Señales (DSP), los cuales no cuentan con una arquitectura adecuada y no logran un procesamiento en tiempo real [3]. El presente trabajo pretende mostrar una arquitectura capaz de realizar procesamiento en tiempo real del algoritmo RLS, para lo cual se plantea el diseño del mismo en VHDL y su posterior implementación en un FPGA. La hipótesis inicial para este trabajo es que aprovechando el paralelismo en el FPGA se pueden realizar varias tareas del algoritmo en simultáneo como para lograr una aplicación en tiempo real. El trabajo está dividido como sigue: La sección 2 explicará los conceptos básicos sobre algoritmos adaptivos en general, además del algoritmo RLS en particular. La sección 3 muestra la arquitectura diseñada. La sección 4 muestra los resultados obtenidos a partir del diseño planteado y finalmente la sección 5 recoge las conclusiones obtenidas después de analizar los resultados. ABSTRACT Adaptive systems are becoming an interesting research field due to their capacity to deal with signals that have an unpredictable behavior or to model plants with unknown parameters. Although currently there are several applications that make use of adaptive algorithms, the use of a more accurate algorithm like the Recursive Least Square (RLS) has not been taken into Real Time applications, due to its extremely high computational requirements. This paper approaches the problem of designing an RLS adaptive filter on an FPGA to deal with Real Time computations. The adaptive filter is designed to be implemented later on an Altera’s Cyclone II FPGA. 1. INTRODUCCIÓN Los sistemas adaptivos en la actualidad han encontrado su lugar en muchas aplicaciones donde la capacidad de aprendizaje del sistema es un factor importante. Estas aplicaciones van desde el modelamiento de plantas con propiedades desconocidas, hasta el uso de estos sistemas en filtros capaces de cancelar el ruido [1]. Existen varios algoritmos para lograr el cálculo de los coeficientes en un sistema dado, los cuales varían en complejidad. Entre los más sencillos se encuentra el algoritmo Least Mean Square (LMS). Este algoritmo es muy usado debido a su facilidad de implementación y baja utilización de recursos computacionales [1] [2]. En el otro lado del espectro encontramos al algoritmo Recursive Least Square (RLS), cuya característica principal es su gran nivel de precisión en el cálculo de los nuevos coeficientes debido a que cuenta con la posibilidad de un factor de ganancia variable, esto se traduce en algunas aplicaciones como la de control activo de ruido en mayores niveles de atenuación [1] [2]. Debido a estas características los recursos computacionales para implementar el algoritmo son muy grandes, esto imposibilita la utilización del mismo en aplicaciones en tiempo real. Debido a que la mayoría de 2. CONCEPTOS BASICOS DE ALGORITMOS ADAPTIVOS Un sistema adaptivo puede modelarse según lo mostrado en la figura 1. Como se puede apreciar se tiene una planta con características definidas, cuya salida es ingresada al mecanismo adaptivo luego de ser restada de una señal deseada, con lo que dicho mecanismo puede calcular los coeficientes nuevos necesarios para adaptar la respuesta de la planta a la señal deseada. Las ecuaciones mostradas modelan el funcionamiento de un sistema adaptivo [3]. 23 y (t ) u (t ) * w(t ).................................(1) e(t ) d (t ) y (t )................................(2) XV Workshop Iberchip, Buenos Aires - Argentina, 25 - 27 de Marzo de 2009 en cada iteración del algoritmo, lo cual traducido a una implementación real implica muchos más recursos computacionales y un mayor tiempo de procesamiento. Es posible hacer el cálculo de la matriz P(n) mucho más veloz, ya que lo que interesa para el cálculo es su diagonal [2]. Para este caso, en el cual se desea cancelar el ruido acústico, se deberá usar como señal deseada d(n) a la señal a filtrar y como señal de entrada u(n) al ruido autocorrelacionado [5]. También se usará una cantidad de coeficientes de w(n) de N=32 [3] para realizar los cálculos del filtro. Figura 1. Diagrama de Bloques de un Modelo Adaptivo genérico. 3. DISEÑO DE LA ARQUITECTURA PROPUESTA Donde u(t) es la señal de entrada, y(t) es la señal de salida ya filtrada, d(t) es la señal deseada a la salida y e(t) es el error entre d(t) e y(t). En este caso, la señal de entrada u(n) pasa a la Planta que contiene los coeficientes w(n) (un filtro FIR) y devuelve una señal y(t) cuyo resultado se muestra en (1). En el momento que la planta entrega el resultado y(t), esta resta a una señal d(t) y produce una señal de error e(t) cuyo resultado se muestra en la ecuación (2), la cual es el parámetro que le permite saber al mecanismo adaptivo que tan “lejos” se encuentra la planta de tener una respuesta similar a la señal deseada d(t). Conjuntamente con la señal u(t) se calculan los nuevos coeficientes w(t) para la planta usando un Mecanismo Adaptivo de Control de Coeficientes [4]. Con la descripción de un sistema adaptivo genérico pasaremos a describir rápidamente el funcionamiento del algoritmo RLS, el cual está gobernado por cuatro ecuaciones [1], mostradas a continuación. K ( n) . e( n ) A partir de lo mencionado en la parte anterior se inició el diseño planteando los parámetros para los cuales el sistema deberá responder. Para el diseño se eligió como aplicación un sistema de cancelación de ruido acústico, para lo cual tomaremos las consideraciones de diseño descritas en [3], utilizando una frecuencia de muestreo de 40 kHz y un formato de representación del número de 16 bits en signo magnitud. La decisión de utilizar signo magnitud es simplemente por el hecho de simplificar el Hardware de la unidad de procesamiento aritmético, sin embargo esto no afecta significativamente el resultado en el cálculo de los coeficientes. Una vez determinados los parámetros se procedió a analizar el conjunto de ecuaciones para determinar una arquitectura capaz de resolver estas ecuaciones. Utilizando como referencia la arquitectura de [6], se planteó un arreglo de máquinas de estados finitas (FSM) capaces de resolver las ecuaciones, con una unidad aritmética que permita resolver las operaciones básicas (sumas, restas, multiplicaciones, divisiones) y un arreglo de memoria para almacenar los resultados. Un esquema general de la arquitectura es mostrada en la figura 2. U 1P(n 1)u (n) .................(3) 1 U 1u + P (n 1)u (n) /+ d (n) w (n 1)u (n)......................(4) w(n) w(n 1) K (n)e(n)......................(5) P ( n) U 1P(n 1) U 1k (n)u + (n) P(n 1).....(6) De estas ecuaciones es importante resaltar algunos elementos, en primer lugar u(n) y w(n) corresponden a los vectores de señal de entrada y coeficientes respectivamente. P (n) es la matriz de autocorrelación inversa de u(n), K(n) es el vector de ganancia de Kalman y U es el factor de olvido, el cual es un valor muy cercano a uno. De la ecuación (5) podemos observar que para el cálculo de nuevos coeficientes utilizamos el factor de ganancia de Kalman, este factor permite una mejor convergencia del sistema, sin embargo como podemos ver de la ecuación (3) el cálculo de este factor se realiza Figura 2. Esquema general de la arquitectura propuesta. La implementación de la Unidad Aritmética (UA) se realizó de manera modular con lo que se facilita la modificación de la cantidad de números a operar de manera sencilla y rápida, dado que las únicas operaciones necesarias para el algoritmo son las cuatro operaciones aritméticas básicas. Para la arquitectura propuesta en este trabajo se propuso calcular 4 operaciones por vez, con lo que el diseño de la UA queda mostrado en la figura 3. 24 XV Workshop Iberchip, Buenos Aires - Argentina, 25 - 27 de Marzo de 2009 dividendo cociente División divisor residuo División 2n concatenador Figura 5. Bloque de División Respecto a la Unidad Central de Control (UCC), esta se basará en una Máquina de Estado Arbitral (AFSM), la cual activa a las Máquinas de Estado Operativas (OFSM) en el momento adecuado. La AFSM sólo se encarga de activar la OFSM adecuada y recibe una señal de esta OFSM cuando acaba su operación, pasando a activar la siguiente OFSM de acuerdo a su secuencia. Las OFSMs se encargan de realizar cada una de las operaciones para poder obtener los resultados de las ecuaciones (3), (4), (5) y (6), además de ordenar la lectura o escritura de los bloques de RAM, direccionar los Datos de y hacia la UA y ordenar el “OpCode” de la UA. Las operaciones de las OFSMs se describen en [6] y son las siguientes: Figura 3. Diseño de la UA Las operaciones de suma y resta son directamente implementables en Hardware por lo que no se requiere de una mayor explicación sobre ellas. Por otro lado la multiplicación y división si requieren una atención especial pues ambas son de relativa complejidad al momento de ser llevadas a Hardware. Para la multiplicación se realizó un diseño que hace uso de operaciones en serie de sumas y operaciones lógicas AND, un diseño simplificado se muestra en la figura 4. La ventaja de utilizar este diseño es que la utilización de área es menor dado que se utilizan solo sumadores y compuertas AND. P (n 1) u (n ) ½ ° Den 1 u (n ) Z1 (n ) ° ° K (n ) Z1 (n) / Den ° WhU (n) w H (n 1)u (n) ° ° X i (n) d (n ) WhU (n ) ¾(7) W (n) w(n 1) K (n) X i (n)° ° ° Z 2 (n) u H (n) P (n 1) ° P (n) P (n 1) Z 2 (n) K (n) ° ° Y W (n ) u ( n) ¿ Z1 ( n ) H La AFSM realiza estas operaciones en el mismo orden que se indica en (7), lo cual significa que esta requiere de once estados (las nueve operaciones, un estado de Reinicio y un estado de Término de Ejecución). Si se utilizan los resultados de las operaciones mostradas en (7), se puede llegar a la conclusión que se requieren de once bloques de RAM, las cuales varían de tamaño dependiendo que si son escalares, vectores o matrices. Esto se puede inferir de observar el conjunto de ecuaciones, pero si se observan con cuidado es puede llegar a la conclusión de que se pueden reutilizar valores y con esto reducir la cantidad de memoria RAM a usarse para guardar valores temporales; entonces se modifican el conjunto de ecuaciones (7) de la siguiente forma: haciendo Z1(n)=K(n), w(n-1)=W(n) y P(n-1)=P(n). Entonces: Figura 4. Diseño simplificado del bloque de multiplicación [7]. Respecto al bloque de división se utilizó un algoritmo de desplazamiento de dividendo y divisor [7], la cual introduce la ventaja de utilizar sólo operaciones de concatenación y comparación. Para realizar la división de cada una de las partes de un número (parte real y parte fraccionaria) se divide primero el dividendo entre el divisor; luego el residuo de esta división (parte real) se multiplica por un factor 2n para pasar nuevamente por el bloque de división y dividirla nuevamente por el divisor, obteniendo la parte fraccionaria. La figura 5 muestra un esquema de cómo está compuesto el bloque de división. 25 XV Workshop Iberchip, Buenos Aires - Argentina, 25 - 27 de Marzo de 2009 Tabla 2. Multiplicación de 16 bits. ½ ° Den 1 u (n) K (n) ° ° K (n) K (n) / Den ° H WhU (n) W (n) u (n) ° ° X i (n) d (n) WhU (n) ¾(8) W ( n) W ( n) K ( n) X i ( n) ° ° ° Z 2 ( n) u H ( n) P ( n) ° P ( n) P ( n) Z 2 ( n) K ( n) ° ° Y W ( n) u ( n) ¿ K ( n) P ( n ) u ( n) H Tipo de Diseño Tiempo de Ejecución Velocidad Balanceado Área 48.091ns 48.091ns 50.798ns Tipo de Diseño Tiempo de Ejecución Velocidad Balanceado Área 95.363ns 97.517ns 98.001ns K(n) WhU(n) Xi(n) W(n) Z2(n) P(n) Den Y Dimensiones de la RAM (N=32) Nx1 1x1 (escalar) 1x1 (escalar) Nx1 1xN NxN Escalar Escalar 117.34mW 117.39mW 117.39mW Elementos Lógicos usados 976 970 970 Disipación de Potencia 117.47mW 117.46mW 117.42mW Tabla 4. Unidad Aritmética de 16 bits (uno de los cuatro módulos) Tipo de Diseño Tiempo de Ejecución Velocidad Balanceado Área 86.360ns 88.678ns 90.827ns Tabla 1. Bloques de RAM Valor que Almacena Disipación de Potencia Tabla 3. División de 16 bits. Si se observa el conjunto de ecuaciones (8), ahora se necesitarán sólo 8 bloques de RAM, los cuales manejan números de 16 bits en signo magnitud y usa una cantidad de coeficientes de N=32. Las memorias RAM a usar se detallan en la Tabla 1. El total de bits usados para implementar el Bloque de RAM será de 17984. Nombre del Bloque de RAM RAM_K RAM_WU RAM_XI RAM_W RAM_Z2 RAM_P RAM_Den RAM_Y Elementos Lógicos usados 523 509 509 Número de bits que almacena 512 16 16 512 512 16384 16 16 Elementos Lógicos usados 1662 1621 1621 Disipación de Potencia 117.59mW 117.81mW 117.74mW Para el caso de la arquitectura completa, la cual incluye la UA compuesta de 4 UAs de 16bits, la AFSM, las 9 OFSMs y el Bloque de RAM, arrojó los resultados mostrados en la tabla 5. Tabla 5. Filtro RLS completo. Adicionalmente hay dos registros que sirven para sincronizar la entrada de los datos u(t) y d(t). En el caso de u(t), se toman N muestras para entrar al filtro. Para el caso de d(t), sólo se toma una muestra (la que está presente en ese momento) para realizar la operación. Tipo de Diseño Tiempo de Ejecución Velocidad Balanceado Área 51.136us 53.935us 62.108us Elementos Lógicos usados 6697 6563 6477 Disipación de Potencia 120.59mW 120.81mW 120.74mW 5. CONCLUSIONES 4. RESULTADOS El algoritmo RLS es una excelente forma de filtrar una señal cualquiera usando una señal deseada d(t) como modelo, pero, lamentablemente, si se implementa usando las ecuaciones de este filtro tal cual se dan en la teoría, su implementación en Hardware y costo computacional se eleva, además de que se requiere de una velocidad de cálculo muy alta. Los mayores problemas son los cálculos de la matriz de autocorrelación inversa P(n), la cual es de NxN, y del vector de ganancia Kalman K(n) (ya que contiene divisiones de números reales). Es importante notar que dado que las operaciones involucradas son operaciones entre vectores y matrices, significa que existen muchos accesos a memoria los El diseño del filtro RLS se realizó utilizando el lenguaje de descripción de hardware VHDL, previamente validada usando LabVIEW 8 [4], considerando una descripción genérica y modular, y fue sintetizado usando las herramientas del Quartus II v.7.2. El dispositivo utilizado para la implementación fue el FPGA Cyclone II EP2C35F672C6 de Altera. Los resultados del proceso de síntesis de la multiplicación, división y de la UA completa se muestran en las tablas 2, 3 y 4, en la cuales se puede ver los resultados entre el uso de un diseño balanceado, de alta velocidad y de área pequeña. 26 XV Workshop Iberchip, Buenos Aires - Argentina, 25 - 27 de Marzo de 2009 cuales pueden perjudicar el desempeño del sistema. Es por esto que es recomendable realizar un estudio minucioso del algoritmo con el objetivo de realizar pasos en paralelo y optimizar las operaciones de álgebra lineal. 6. REFERENCIAS [1]“Active Noise Control Systems: Algorithms and DSP Implementations ”. Kuo, Sen M. and Morgan, Dennis R. Wiley Series in Telecommunications and Signal Processing. 1996. [2]“Comparación de algoritmos feed-forward adaptativos para el control activo de ruido en un conducto” M.A.Cugueró, R.S.Sánchez Peña, A.Masip, B.Morcego, J.Quevedo, V.Puig, T.Pàmies, J.Romeu. Universitat Politècnica de Catalunya. 2005. [3]“Diseño de un Procesador para el Cálculo del algoritmo RLS”. Tesis de Licenciatura. Benavides Aspiazu, Jorge. Pontificia Universidad Católica del Perú. 2007. [4]”Simulación de un Filtro Adaptativo RLS para su Futura Implementación en un ASIC” J. Benavides, W. Calienes. Pontificia Universidad Católica del Perú, Electro Electrónica N° 30, 2do Semestre 2008. [5]“Estudio Comparativo y Aplicaciones de Algoritmos de Filtrado Adaptable”. Escobar Salguero, Larry Hipólito. Universidad Nacional Autónoma de México. 2004. [6]“Implementation of RLS Adaptive Filter Algorithm Using MaxPlusII Software Tools”. Lakshmanan, Masuri Othman and Mohamad Alauddin Mohd, Ali. Signal Processing Research Group. Department of Electrical, Electronic and Systems Engineering. University Kebangsaan Malaysia. 2002. [7] “Circuit Design with VHDL”, Volnei A. Pedroni, MIT Press, 2004. 27