Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseño e Implementacion de Filtros Digitales Recursivos y No Recursivos Usando DSP PDF
Diseño e Implementacion de Filtros Digitales Recursivos y No Recursivos Usando DSP PDF
11-17, 1999
Universidad Nacional de Ingeniería
Lima - Perú
RESUMEN
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.
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:
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).
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:
Dando a esta función de transferencia una forma apropiada para poder representarla en variables de estado:
tal que:
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.
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.
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.
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.
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.
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.
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].
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.
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.
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.