Está en la página 1de 12

TECNIA,Vol 8 N°03, págs.

11-17, 1999
Universidad Nacional de Ingeniería
Lima - Perú

DISEÑO E IMPLEMENTACION DE FILTROS DIGITALES


RECURSIVOS Y NO RECURSIVOS USANDO UN DSP
Carlos Valeriano Cuba, Arturo Rojas-Moreno, José Paz-Campaña

Sección de Postgrado, Facultad de Ingeniería Eléctrica y Electrónica,


Universidad Nacional de Ingeniería, Lima, Perú

RESUMEN

Este artículo presenta los procedimientos de diseño (vía software) e implementación de


filtros digitales recursivos y no recursivos en tiempo real, utilizando el Procesador Digital
de Señales DSP56002. Además, se presentan varias implementaciones para comprobar la
validez del método.

ABSTRACT

This article presents design (via software) and implementation procedures of recursive and
non-recursive real-time digital filters using a DSP56002. Several implementations are
depicted to demonstrate the validity of the method

I. INTRODUCCIÓN

El filtrado digital es una parte muy importante en el procesamiento digital de señales [1] debido a las numerosas
aplicaciones en las que los filtros digitales son empleados. Estas aplicaciones que pueden ser biomédicas,
acústicas, sísmicas, de instrumentación y comunicaciones de audio y data, [2] se resumen en dos usos generales:
la separación de señales que han sido mezcladas y la restauración de señales que han sido distorsionadas.

Los filtros digitales implementados sobre Procesadores Digitales de Señales (DSP) tienen una muy alta
performance, se pueden obtener variaciones del orden de 100dB en una transición de un solo hertz. Esta es una
de las razones por las que los DSP se han vuelto tan populares.

Las implementaciones aquí tratadas consisten principalmente en un algoritmo basado en sumas y multiplicaciones
aplicadas al lenguaje ensamblador del Procesador Digital de Señales DSP56002 [3,4] (se usó ensamblador para
optimizar el tiempo de procesamiento en relación a programas de generación de código como C o Ptolemy).
Estos algoritmos implementados serán usados como plantillas de filtros digitales recursivos (de respuesta infinita
al impulso o IIR) y de filtros digitales no recursivos (de respuesta finita al impulso o FIR), ambos en sus formas
básicas: pasabajos, pasaaltos, pasabandas, y supresores de banda.

Los filtros digitales pueden ser diseñados fácilmente usando una gran variedad de software como el QEDesign
2000 o el FDAS (Filter Design and Analisis System), ambos programas costosos. En el presente artículo, los
filtros se diseñan basándose en la versión para estudiantes de MATLABâ 4.0. Sobre este software, el diseño
de filtros se resume en el manejo de un número de comandos que son mencionados con cierto detalle en la
sección VI. Una vez diseñados los filtros pueden llevarse al ensamblador del DSP como se verá en la sección
VII.

II. GENERALIDADES ACERCA DE LOS FILTROS

FILTRO NO RECURSIVO O DE RESPUESTA FINITA AL IMPULSO (FIR):

La estructura básica de este filtro es una línea de retardos como muestra la FIGURA 1.

En esta estructura la salida es la suma ponderada de la entrada actual y un cierto número de entradas pasadas
x(n), que se puede expresar en la siguiente forma:

donde b(i) son los coeficientes de la respuesta al impulso del filtro y N es el número de coeficientes. Dichos
coeficientes representan las características del filtro (valores característicos). La transformada Z de la ecuación 1
es:

FILTRO RECURSIVO O DE RESPUESTA INFINITA AL IMPULSO (IIR):

La secuencia de salida y(n) de un filtro IIR, es función de las salidas pasadas y de las entradas actuales y
pasadas.
La relación entrada-salida de un filtro recursivo puede expresarse como:

Al menos uno de los valores a(j) es diferente a cero (si no se trataría de un filtro no recursivo).

La función de transferencia Z de la ecuación 3 es:

Para lograr reducir H(z) a un producto de secciones denominadas bicuadradas (de segundo orden), se
consideró a N como un entero par, en consecuencia:

donde M es igual a 0.5N y K es una ganancia positiva.

La sección bicuadrada i-ésima puede representarse de la siguiente forma:

Dando a esta función de transferencia una forma apropiada para poder representarla en variables de estado:

tal que:

Tomando la transformada Z inversa a las dos últimas ecuaciones obtenemos:

En estas dos últimas ecuaciones, se puede apreciar que tanto la entrada como la salida están en función de una
tercera variable Xi(z) o xi(n). A los valores Xi.z-1 o xi(n-1) y Xi.z-2 o xi(n-2) los llamamos estados (dos estado
por cada sección bicuadrada). Y a los valores a1i, a2i, b1i y b2i se les denomina valores característicos de la
sección bicuadrada i-ésima.
La realización de las ecuaciones 8 y 9 es mostrada en la FIGURA 2.

Una cadena de M de estas secciones con entrada y salida generales de la forma:

es la que representa al filtro del orden deseado, esto se muestra en la FIGURA 3. Note que la salida de la i-
ésima sección bicuadrada yi+1 (n) es la entrada de la (i+1)-ésima sección bicuadrada.

III. DESCRIPCION DEL SISTEMA SOBRE EL QUE SE IMPLEMENTARAN


LOS FILTROS [5]

Este sistema de procesamiento en tiempo real consiste de un conversor Análogo-Digital (A/D), de un


DSP56002 y de un conversor Digital-Análogo (D/A). Las etapas las podemos observar en la FIGURA 4.
El DSP56002EVM utilizado posee un CODEC (Codificador-Decodificador) con el que se implementan los
conversores. El DSP56002 (donde se implementan los filtros) se comunica con el CODEC usando el puerto C
del procesador, puerto que es configurado como Interfase Síncrona Serial (SSI), una de tres posibles que
soporta el puerto C. Esta configuración requiere una etapa de inicialización que comprende:

Selección de los pines de entrada salida del puerto C para ser usados como SSI y controlar al CODEC.

Inicialización de los registros de control de dicho puerto, para que pueda recibir y transmitir data por los
convertidores.

Habilitación de las interrupciones del puerto SSI para que pueda darse la comunicación serial.

IV. DESCRIPCION DEL SISTEMA DE ALMACENAMIENTO

En ambas implementaciones para poder calcular la muestra de salida en tiempo real, se necesita que el sistema
de procesamiento tenga acceso inmediato a los valores más recientes de los estados. En el caso de los filtros no
recursivos, estos estados son los N-1 valores de las entradas pasadas x(n) y en el caso de los filtros recursivos,
son los valores xi(n-1) y xi(n-2) de cada una de las M secciones bicuadradas; estos valores cambian
continuamente según varía la señal procesada. La mejor manera de manejar este almacenamiento es utilizando
buffers circulares y en el DSP56002 eso puede realizarse. Se usa para tal efecto un espacio de memoria RAM
apuntado por uno de ocho registros de dirección R y se define un valor, indicando el tamaño del buffer en un
registro de módulo M. Obsérvese en la FIGURA 5 estos buffers en el DSP56002.
Para poder optimizar al máximo el tiempo de procesamiento, tanto los estados como los valores característicos
de los filtros son almacenados en buffers circulares.

V. IMPLEMENTACION DE LOS ALGORITMOS DE FILTRADO

Como observamos en la FIGURA 4, ambos algoritmos trabajan sobre el sistema de procesamiento en tiempo
real. Es decir toman una muestra de entrada del CODEC, la procesan, y entregan como resultado una muestra
de salida también al CODEC [6]. Los dos algoritmos usan igualmente un sistema de almacenamiento basado en
buffers circulares, dividido en un sistema de almacenamiento de estados y en otro de almacenamiento de los
valores característicos del filtro.

Ambas implementaciones, tanto la de los filtros recursivos como la de los filtros no recursivos, están basadas en
sumas realizadas sobre un acumulador. Estas sumas corresponden a un cierto número de productos de los
valores almacenados en el buffer de estados, multiplicados por los valores almacenados en el buffer de valores
característicos. Estos valores irán multiplicándose según sean apuntados por el registro de dirección
característico de cada uno de los buffers. En la FIGURA 6, podemos observar como se han implementado este
tipo de algoritmos.
La idea de este conjunto de sumas y multiplicaciones es conseguir generar las ecuaciones características de los
filtros. En el caso de los filtros no recursivos, se desea generar la ecuación 1. En el caso de los filtros recursivos,
se desea obtener primeramente la ecuación de entrada (ecuación 12) y después generar las secciones
bicuadradas; es decir, se debe realizar una cadena de las ecuaciones 10 y 11.

Una gran cantidad de movimientos paralelos permitidos, y la multiplicación - acumulación - redondeo -


movimientos paralelos en un sólo ciclo de instrucción (equivalente a 100ns) son características del ensamblador
DSP56002 que han permitido realizar de una manera muy eficiente estos algoritmos.

VI. DISEÑO DE FILTROS DIGITALES USANDO MATLABâ

La edición para estudiantes de MATLABâ [7] contiene varias funciones dentro del Signal Processing Toolbox
(caja de herramientas para procesamiento de señales) [8], estas funciones son juegos de herramientas
opcionales que se pueden adquirir con la versión profesional de MATLABâ . En esta sección veremos
funciones "MATLABâ Signal processing toolbox" para diseñar filtros recursivos y no recursivos, que luego
podremos implementar usando el método antes descrito.

DISEÑO DE FILTROS RECURSIVOS

MATLABâ contiene funciones para diseñar cuatro tipos de filtros digitales recursivos, basados todos en
técnicas de diseño de filtros analógicos: Butterworth, Chevychev I y II y elíptico.Los filtros Butterworth son
máximamente planos tanto en la banda de paso como en la banda prohibida, los filtros Chebychev Tipo I tienen
rizo en la banda de paso, los filtros Chebychev Tipo II tienen rizo en la banda prohibida y los filtros elípticos
tienen rizo tanto en la banda de paso como en la banda prohibida.

Por otro lado, para un orden de filtros dado, los filtros elípticos tienen la transición más abrupta (banda de
transición más angosta) de todos estos filtros. Los filtros Chebychev tienen una transición más abrupta que un
filtro Butterworth con las mismas especificaciones de diseño.
Las funciones de diseño de filtros calculan los coeficientes de la ecuación 4 de la siguiente manera:
H(z)=B(z)/A(z). Aunque también se pueden obtener valores de los ceros, polos y ganancia (Z, P, K). En la
tabla 1 se muestra el correcto uso de dichas funciones.

MATLABâ contiene una función para realizar diseño directo de filtros digitales recursivos del tipo Yule-
Walker. Podemos usar esta técnica para diseñar una respuesta en frecuencia de forma arbitraria. El comando
usado para diseñar un filtro basado en esta función es [B,A]=[Z,P,K]=yulewalk(N,f,m), donde N es el orden
del filtro, y los valores f y m representan el arreglo de valores de magnitud versus frecuencia deseados, es decir
f=[f1,f2,...fx], y m=[m1,m2,..mx].

DISEÑO DE FILTROS NO RECURSIVOS

Existen dos funciones MATLABâ relacionadas con el diseño de filtros digitales FIR o no recursivos: la función
fir1, que usa el método de ventanas; y la función REMEZ, que diseña directamente filtros digitales no
recursivos del tipo Parks-McClellan. En la FIGURA 7 podemos apreciar algunas de las ventanas que puede
utilizar la función FIR1 para diseñar filtros FIR.

La estructura B = FIR1(N,Wn,Ventana(N+1)) nos permite diseñar un filtro no recursivo pasabajos de orden


N, de frecuencia de corte normalizada Wn y que use una ventana que puede ser: Boxcar (rectangular),
Hanning, Bartlett, Blackman (por defecto se usa la ventana Hamming).
Adicionalmente se pueden usar las ventanas Chebychev y Kaiser. Para esos casos, "Ventana" debe
especificarse de la siguiente manera: chebwin(N+1,R), donde la ventana Chebychev trabaja con R dB de
atenuación. Si se usa la ventana Kaiser, "Ventana" debe especificarse de la siguiente manera: KAISER(N+1,g
), donde g es el orden de la función modificada de Bessel de orden cero que se usa en el cálculo de la función
Kaiser. Si deseamos obtener un filtro pasaalto, al igual que en el diseño de filtros recursivos, debemos agregar la
sentencia 'high'. Si deseamos diseñar un filtro pasabanda, debemos especificar en vez de Wn un par de valores
[Wn1 Wn2] y si se desea diseñar un filtro de rechazo de banda debe agregarse a esta última estructura la
sentencia 'stop'. Al igual que en el diseño de filtros recursivos Yule-Walker, es posible diseñar filtros no
recursivos Parks McLellan con la siguiente estructura: B=remez(N,f,m), donde N es el orden del filtro, y los
valores f y m representan un arreglo de valores frecuencia-magnitud.

VII. IMPLEMENTACIÓN DE EJEMPLOS DE FILTROS RECURSIVOS Y NO


RECURSIVOS

Se ha diseñado a manera de ejemplo un filtro pasabanda no recursivo de orden 20, que opera entre 42% y 48%
la frecuencia de Nyquist (es decir la mitad de la frecuencia de muestreo) y que trabaja con la ventana de
Hamming. Para ello, en la ventana de comandos de MATLABâ se escribió lo siguiente: a=fir1(20,[0.42
0.48]), esto hará que a sea un arreglo que contenga los siguientes valores: a=[0.0000 0.0170 0.0089 -0.0423
-0.0420 0.0697 0.1022 -0.0688 -0.1635 0.0290 0.1896 0.0290 -0.1635 -0.0688 0.1022 0.0697 -0.0420
-0.0423 0.0089 0.0170 0.0000], con el comando freqz(a,1) se puede visualizar el comportamiento teórico del
filtro.

También se ha diseñado un filtro recursivo pasabajos elíptico de orden 8, con una frecuencia de corte en el 50%
la frecuencia de Nyquist, con 0.5dB de rizo en la banda de paso y 30dB en la banda prohibida. Para ello, en la
ventana de comandos de MATLABâ se escribió lo siguiente: [B,A]=ellip(8,0.5,30,0.5), esto hará que B y A
contengan los siguientes valores respectivamente: B=[0.1252 0.2365 0.5830 0.7157 0.9157 0.7157 0.5830
0.2365 0.1252] y A=[1.0000 -0.7125 3.0696 -1.8381 3.3246 -1.5543 1.4410 -0.4286 0.1860], otra vez con
el comando freqz(B,A) se puede visualizar el comportamiento teórico de este filtro.

Ahora se va a realizar un análisis comparativo entre las respuestas en frecuencia teórica y experimental de la
magnitud de ambos filtros. Pueden observarse las respuestas en frecuencia teóricas, en la parte superior de las
FIGURAS 8 y 9 y las respuestas experimentales, en la parte inferior de las mismas. Dichas figuras
corresponden al filtro no recursivo y al recursivo respectivamente. En las respuestas experimentales, sólo se
pueden observar valores en determinados rangos (en las bandas de paso), por lo que se han trazado líneas en el
límite de observación.

VIII. OBSERVACIONES Y CONCLUSIONES

El presente trabajo brinda una herramienta para la implementación en el ensamblador del DSP56002 de
algoritmos de filtrado conocidos en el procesamiento digital de señales. Un método similar debe seguirse
si se desea hacer filtrado usando otro DSP. Además el código DSP56002 es fácilmente transportable a
otros procesadores de la familia DSP56000 de Motorola.
Los códigos que implementan los algoritmos presentados en este artículo, están basados en dos
características del DSP56002: el uso de los registros circulares, que son necesarios en este tipo de
aplicaciones iterativas en tiempo real; y la Multiplicación-acumulación agregado al redondeo y
movimientos paralelos en una sola instrucción, que ayuda a ahorrar líneas de código, haciendo a los
filtros más rápidos.

Este trabajo está orientado a realizar aplicaciones generales de filtrado de señales, Un filtro digital
cualquiera es definido por los coeficientes de la respuesta al impulso del filtro (también llamado
el "kernel" del filtro). Estos coeficientes deben diseñarse partiendo de las características en
frecuencia del filtro deseado, ya sea usando teoría de Procesamiento Digital de Señales o algún
software (en nuestro caso estamos usando MATLABâ ). Luego de introducidos los coeficientes de la
respuesta al impulso del filtro a un registro circular, son convolucionados con la señal digitalizada de
entrada.

Uno de los objetivos de este trabajo es que el procedimiento de implementación de filtros digitales
presentado pueda ser usado como parte aplicativa de los cursos relacionados con el procesamiento digital
de señales.

Se puede apreciar que existe una gran similitud entre las respuestas en frecuencia teóricos y
experimentales, esto es en parte debido a la gran precisión que se puede alcanzar usando DSPs para el
filtrado de señales. En la FIGURA 9 se observa un filtro elíptico, puede notarse que el corte entre la
banda de paso y la banda prohibida es bastante abrupto, algo que no se puede lograr con filtros
analógicos.
IX. REFERENCIAS

[1] Aljama Tomás, Cadena Miguel, Charleston Sonia y Yañez Oscar: Procesamiento Digital de
Señales: Unidad Iztapalapa - Universidad Autónoma Metropolitana, 1992.
[2] Smith Steven: The Scientist and Engineer's Guide to Digital Signal Processing: California
Technical Publishing, 1997.
[3] Motorola´s DSP Division: DSP56000 24 bit Digital Signal Processor Family Manual, 1994.
[4] Motorola´s DSP Division: DSP56002 24 bit Digital Signal Processor User´s Manual, 1994.
[5] El-Sharkawy Mohamed: Digital Signal Processing Applications with Motorola´s DSP56002
Processor: Prentice Hall, 1996.
[6] Lane John and Hillman Garth - Motorola´s DSP Division: Implementing IIR/FIR filters with
Motorola´s DSP56000/DSP56001, 1993.
[7] Etter Delores: Solución de problemas de ingeniería con MATLABâ - Prentice Hall, 1997.
[8] Burrus Sidney, McClellan James, Oppenheim Alan, Parks Thomas, Schafer Ronald,
Schuessler Hans: Ejercicios de tratamiento de la señal utilizando MATLABâ V.4 - Prentice
Hall, 1998.

Para mayores referencias diríjase a la siguiente dirección


igi@uni.edu.pe

También podría gustarte