COMPARACIÓN ENTRE ESTRUCTURA CANÓNICA Y TRANSPUESTA DE FILTROS IIR IMPLEMENTADOS EN UN DSPIC Autores: Matías Autores: Matías L. Martini, Gastón Oviedo (
[email protected]) Tutor: Ing. Tutor: Ing. Franco Salvático (
[email protected]) Departamento de Ingeniería I ngeniería Electrónica Facultad Regional Villa María – Universidad Tecnológic T ecnológica a Nacional Avda. Universidad Universidad 450, (5900) (5900) Villa María, María, Córdoba
Resumen En el presente trabajo se diseñó un filtro digital pasa banda tipo IIR (Infinite Impulse Response – Respuesta Infinita al Impulso) por síntesis de Butterworth que opera en la banda de frecuencias de audio. Los diseños fueron realizados con herramientas de MATLAB y mediante programación en lenguaje C++ han sido implementados en un controlador digital de señales, dsPIC, de 16 bits de ancho de palabra de datos. Se contrastó entre la implementación implementación por estructura de procesamiento procesamiento canónica y transpuesta para filtros IIR, propuestas propuestas por el fabricante del microcontrolador. microcontrolador. Luego se medió en el laboratorio la respuesta en frecuencia y se realizó una comparación entre las dos estructuras, observando las exigencias exigencias que pueden hacerse sobre cada una y el efecto de la longitud finita de la palabra de datos. Como conclusión se determinó qué tipo de estructura se puede aplicar para realizar el filtro especificado. 1. Introducción La adquisición de un nuevo kit de desarrollo por parte de la facultad, motivó a realizar este trabajo para evaluar las características de desempeño del controlador digital de señales y aprender sobre las dos estructuras de procesamiento para filtros IIR propuestas por el fabricante. Para esto se implementó un filtro IIR pasa banda como el de la Fig. 1, con las especificaciones indicadas en la tabla 1.
Fig. 1. Respuesta de un filtro pasa banda Tabla 1. Especificaciones del filtro Característica Frecuencia de parada 1 Frecuencia de paso 1 Frecuencia de paso 2 Frecuencia de parada 2 Frecuencia de muestreo Atenuación en la banda rechazo 1 Rizado en la banda de paso Atenuación en la banda rechazo 2
Nomenclatura
1 1 2
2
1
2
Valor 500 1000 1500 2000 8000 80 1 80
Unidad Hz Hz Hz Hz Hz dB dB dB
Se realizó el diseño con la herramienta “FDATool” de “ MATLAB” donde se obtuvo su respuesta en frecuencia, longitud del filtro y otros parámetros descriptivos [1]. La estructura resultante está
formada por " " bloques y una ganancia de salida ( ), donde cada bloque (ec. 1) está compuesto por una sección bicuadrática y una ganancia ( ), como se muestra en la Fig. 2.
Fig. 2. Estructura del filtro entregada por MATLAB . − + . − + = . − + . − + ; 1 ≤ ≤ 2
2
2
2
1
1
1
1
0
(1)
0
Una vez obtenido esto, se adaptó la estructura matemática, según se haya implementado en una estructura canónica o transpuesta. Los coeficientes del filtro fueron convertidos a un formato especial (fraccional Q15) y escritos en una estructura de lenguaje C++ en el compilador “MPLAB XC16”, para poder ser implementados en el kit de desarrollo “STARTER KIT FOR DSPIC” [2] [3]. Finalmente se excitó al filtro real con una señal senoidal de frecuencia variable, utilizando un generador de señales “BK PRECISION” modelo “4045”, y midiendo con un osciloscopio, del fabricante “TEKTRONIX” modelo “TDS 1001B”, se obtuvieron su respuesta en frecuencia y sus parámetros característicos. 2. Implementación en el microcontrolador El kit de desarrollo incluye como componentes principales un microcontrolador “dsPIC33FJ256GP506” de “Microchip ” [4], el cual se encarga de realizar el proceso de la señal, y un códec de audio “WM8510” de “Wolfson” [5], que se encarga de las conversiones analógica/digital y digital/analógica. Además posee pulsadores, filtros y amplificadores entre otros componentes. Inicialmente se configura el microcontrolador y luego este mediante un bus de comunicación I 2C configura el códec para operar a la frecuencia de muestreo deseada. El microcontrolador adquiere a través de un bus DCI un bloque de datos digitalizados provenientes del códec y se almacena en un vector en la memoria RAM. Dependiendo del estado de un pulsador este vector es filtrado o no y el resultado se envía al códec para su reproducción. La estructura de lenguaje C++ también se encuentra almacenada en la RAM. Esta contiene los coeficientes del filtro y además contiene las muestras demoradas en el tiempo necesarias para el proceso de filtrado (delays). Tanto los datos de la señal muestreada como los coeficientes y delays tienen un formato de 16 bits representados en formato fraccional [3]. Para realizar el proceso de filtrado se emplea una función de C++ proporcionada por el fabricante del microcontrolador [3]. Dicha función recibe como parámetros de entrada el vector con las muestras de la señal de audio, la estructura que contiene los coeficientes del filtro y los delays. Ésta entrega como resultado otro vector con los datos filtrados que se envía al códec por el bus DCI para su reproducción. 3. Diseño e implementación 3.1. Estructura Canónica Para implementar un filtro en su forma canónica fue necesario representarlo como conexión en cascada de las estructuras bicuadráticas, y una ganancia global que es la concatenación de las ganancias de cada bloque y la ganancia de salida (ec. 2) [3]. La misma, junto con los coeficientes de cada sección fue convertida para crear el código.
= =1
(2)
Tras la implementación del filtro especificado, se comprobó que el comportamiento del sistema era inestable. Esto se debe a que en el momento en que se realizó la conversión del formato “double” de 32 bits de punto flotante (en MATLAB) al formato “fractional” de 16 bits de punto fijo, se cometió un error debido a que la ganancia global era más pequeña que el menor número que se puede representar mediante el formato Q15. Por lo tanto el sistema tenía una ganancia excesiva. Al reducir la atenuación en la banda de rechazo disminuyeron las bandas de transición y el sistema se volvió estable ya que la ganancia tomó un valor que puede ser representado por el formato fraccional. Utilizando los parámetros 1 y 2 igual a 20 dB se obtuvieron las respuestas de la Fig. 3.
(a) (b) Fig. 3. Respuestas en frecuencia para estructura canónica. (a) En MATLAB. (b) En el kit (*). 3.2. Estructura Transpuesta Para implementar un filtro en su forma transpuesta fue necesario distribuir la ganancia de cada bloque en el numerador de la sección bicuadrática (ec. 3) y la ganancia de salida en cualquiera de los numeradores [3]. . − + . − + = . − + . − + ; 1 ≤ ≤ 2
2
2
2
1
1
1
1
0
(3)
0
Los coeficientes resultantes fueron convertidos para formar la estructura. La implementación del filtro especificado arrojó como resultado las respuestas de la Fig. 4:
(a) . (b) Fig. 4. Respuestas en frecuencia para estructura transpuesta. (a) En MATLAB. (b) En el kit (*). (*)Los niveles de atenuación por debajo de 56dB no pudieron ser medidos con el osciloscopio empleado ya que se alcanza el piso de ruido del mismo. 4. Comparaciones Dadas las especificaciones del filtro propuesto, la implementación a través de una estructura de procesamiento canónica no fue posible. En cambio empleando la estructura transpuesta, se logró cumplir las características deseadas. Esto indica que con la estructura transpuesta se pueden obtener filtros más exigentes.
El algoritmo de procesamiento empleado por la estructura transpuesta requiere mayor cantidad de operaciones que la estructura canónica para un filtro idéntico [2]. Es decir que con la estructura canónica se obtienen mayor velocidad de procesamiento. Al ser la estructura de procesamiento transpuesta más compleja ocupa mayor lugar en la memoria de programa que la estructura canónica para un f iltro de características idénticas [3]. 5. Conclusión El rango de valores representables por el tipo de variable de punto fijo es mucho menor al de punto flotante. Siendo un agravante en este caso que el formato de punto flotante utilizado en MATLAB es de 32 bits y el de punto fijo utilizado en C++ es de 16 bits. Por lo tanto, valores muy pequeños de una variable en punto flotante no pueden ser representados en punto fijo. Tal situación se observó en el filtro canónico en el cual la ganancia global, que es la concatenación de varias ganancias cuyos valores son muy reducidos, es más pequeña que el mínimo valor que se puede representar con punto fijo. Por este motivo, el filtro especificado no pudo ser implementado en el kit y se tuvieron que restablecer algunas características del filtro para poder hacerlo. Utilizando la estructura transpuesta no se tiene este inconveniente ya que las ganancias están distribuidas en cada sección. Por lo tanto, se tienen muchos coeficientes pequeños pero representables en formato de punto fijo y no un solo valor que no es representable como en el caso de la estructura canónica. Utilizando la estructura transpuesta no se tiene este inconveniente ya que las ganancias están distribuidas en cada sección. Por lo tanto, se tienen muchos coeficientes pequeños pero representables en formato de punto fijo y no un solo valor que no es representable como en el caso de la estructura canónica. En virtud de lo analizado, no se pudo implementar el filtro especificado con la estructura canónica pero sí con la transpuesta. La estructura de procesamiento transpuesta permite obtener filtros con características más exigentes, a costa de una velocidad de procesamiento más lenta. Por otro lado con la estructura canónica se obtiene mayor velocidad de procesamiento, con la posibilidad de implementar filtros menos exigentes. 6. Referencias [1] MathWorks Inc., MATLAB User Guide, MathWorks. (2010) [2] Airoldi Alejandro A., Saravia Andres R.; Diseñando sistemas embebidos con librerías de microchip 1ed.; Mcelectronics (2012). [3] 16-bit language tools libraries, Microchip [4] dsPIC 33FJ256GP506 Data Sheet, Microchip [5] WM8510 Data Sheet, Wolfson microelectronics.