Logo Studenta

2409-2007-ESIME-CUL-MAESTRIA-cruz-gonzalez-rodrigo

¡Este material tiene más páginas!

Vista previa del material en texto

IMPLEMENTACIÓN DE FILTROS DIGITALES 
EN LÓGICA RECONFIGURABLE 
 
 
 
 
TESIS QUE PRESENTA 
 
Rodrigo Cruz González 
 
 
 
PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS 
 
 
Asesor: Dr. Gonzalo I. Duchén Sánchez 
 
 
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y 
ELÉCTRICA UNIDAD CULHUACÁN – IPN 
 
 
 
 
SECCIÓN DE ESTUDIOS DE POSGRADO E 
INVESTIGACIÓN 
 
 
 
 
 
 
 
 
Agradezco a mis padres por el apoyo incondicional que siempre me otorgaron y 
regalarme la herencia más grande que es la educación que con mucho sacrificio lograron 
darme para ser el profesionista que el día de hoy he logrado ser. También agradezco a mi 
asesor por compartir sus conocimientos y enseñanzas para desarrollar mi investigación. 
 
Agradezco a CONACYT y COFAA por la beca que se me otorgó para poder realizar 
mis estudios de posgrado así como agradezco al Instituto por otorgarme la beca tesis al final 
de mis estudios. 
 
Agradezco a todos los profesores que durante mi vida estudiantil me inculcaron a 
aprovechar el gran legado que tiene la humanidad: el conocimiento. 
 
Asimismo agradezco a toda la gente que en alguna etapa de mi vida me enseñaron algo 
para ser una mejor persona y un buen profesionista. 
 i
Índice. 
 
 
Índice de tablas iii 
Índice de figuras iv 
Resumen 1 
Abstract 1 
Capítulo 1. Introducción 2 
 1.1 Objetivo 2 
 1.2 Aportación de la investigación 3 
 1.3 Descripción del proyecto de investigación 3 
 1.4 Organización de la tesis 5 
 Conclusiones 5 
Capítulo 2. Diseño de filtros digitales 6 
 2.1 Filtros de Respuesta al Impulso Finito (FIR) 6 
 2.1.1 Respuesta de fase lineal y sus implicaciones 6 
 2.1.2 Especificaciones de los filtros FIR 10 
 2.1.3 Método para calcular los coeficientes del filtro FIR basado en ventanas 11 
 2.2 Filtros de Respuesta al Impulso Infinito (IIR) 21 
2.2.1 Especificaciones de los filtros IIR 22 
2.2.2 Uso de la transformada bilineal (BZT) y los filtros analógicos clásicos para 
diseñar filtros IIR 24 
 2.2.2.1 Resumen del método BZT para el cálculo de los coeficientes 25 
 2.2.2.2 Características de los filtros analógicos clásicos 26 
2.2.3 Cálculo de los coeficientes del filtro IIR por mapeo de polos y ceros en el 
plano s 28 
 2.2.3.1 Ejemplos ilustrativos 34 
 Conclusiones 36 
Capítulo 3. C2VHDL 37 
 3.1 Estructura de C2VHDL 37 
 ii
 3.1.1 Descripción de C2VHDL 37 
 3.1.1.1 Archivo filtro.cpp 40 
 3.1.1.2 Archivo xxxfilt.cpp 42 
 3.1.1.3 Archivo lecxxx.cpp 48 
 3.1.2 C2VHDL descriptivo 49 
 3.1.2.1 Descripción de los archivos vhd 50 
 Conclusiones 56 
Capítulo 4. Ejemplos de aplicación de C2VHDL 57 
 4.1 Filtros FIR 57 
 4.1.1 Filtro pasa bajas (LPF) 57 
 4.1.2 Filtro pasa banda (BPF) 59 
 4.1.3 Filtro rechaza banda (BSF) 60 
 4.1.4 Filtro pasa altas (HPF) 63 
 Conclusiones 70 
Conclusiones 71 
Bibliografía 75 
Apéndice A. Publicaciones 79 
Apéndice B. Programas realizados en VHDL 85 
Apéndice C. Programas realizados en Turbo C++ 94 
 
 
 
 
 
 
 
 
 
 
 
 iii
Índice de tablas 
 
 
 
Tabla 2.1 Resumen de las características principales de los filtros FIR de fase lineal 8 
Tabla 2.2 Aplicación de los filtros FIR de fase lineal 10 
Tabla 2.3 Resumen de las respuestas al impulso ideales para filtros estándar selectivos en 
frecuencia 14 
Tabla 2.4 Funciones ventana para el diseño de filtros FIR 15 
Tabla 2.5 Características del espectro con ventanas 17 
Tabla 2.6 Coeficientes del filtro FIR del ejemplo 2.1 20 
Tabla 3.1 Representación de la posición de los bits de la mantisa para el formato de los datos 
convertidos 44 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 iv
Índice de figuras 
 
 
 
Figura 1.1 Diagrama a bloques del proyecto de investigación 4 
Figura 2.1 Características de filtros FIR de fase lineal de tipo (a) 1, (b) 2, (c) 3 y (d) 4 9 
Figura 2.2 Especificaciones de respuesta en magnitud para un filtro pasa bajas 11 
Figura 2.3 (a) Respuesta en frecuencia ideal de un filtro pasa bajas. (b) Respuesta 
impulsional de un filtro pasa bajas ideal 13 
Figura 2.4 Esquema de tolerancia para un filtro IIR pasa banda 23 
Figura 2.5 Esquemas de respuestas en frecuencia de algunos filtros analógicos clásicos a) 
repuesta Butterworth; b) Chebyshev tipo I 24 
Figura 2.6 Mapeo de ceros de un filtro pasa bajas prototipo de segundo orden hacia (a) pasa 
bajas, (b) pasa altas, (c) pasa banda y (d) rechaza banda 30 
Figura 3.1 Diagrama de la estructura general de C2VHDL programable 38 
Figura 3.2 Pantalla de (a) bienvenida y (b) presentación y descripción de C2VHDL 38 
Figura 3.3 Pantalla de (a) elección del filtro y (b) toma de parámetros de diseño 39 
Figura 3.4 Pantalla de elección (a) de ventana y (b) aproximación analógica 40 
Figura 3.5 Pantallas de la presentación final de C2VHDL programable para un filtro FIR 41 
Figura 3.6 Programa principal del código fuente de filtro.cpp 41 
Figura 3.7 Programa principal del código fuente de (a) firfilt.cpp y (b) iirfilt.cpp 42 
Figura 3.8 (a) Diagrama de flujo y (b) código fuente de la función tipo_de_filtro() 43 
Figura 3.9 Criterio del código para mostrar la lista de las ventanas 44 
Figura 3.10 (a) Diagrama de flujo para una iteración de la conversión de los coeficientes y (b) 
código del proceso de conversión para un dato negativo 46 
Figura 3.11 Líneas de código de la función filtro() 48 
Figura 3.12 Diagrama de flujo de lectura y creación de archivos vhd 48 
Figura 3.13 (a) Estructura directa para filtros FIR y (b) estructura cascada para filtros IIR 49 
Figura 3.14 (a) Estructura de un tap y (b) bloque de segundo orden 50 
Figura 3.15 Representación en hardware de un (a) tap y (b) bloque de segundo orden 51 
 v
Figura 3.16 Líneas de instrucción para describir la arquitectura (a) behav y (b) struct de un 
flip-flop tipo D y un registro de n bits respectivamente 52 
Figura 3.17 Multiplicador de Booth [4]: (a) diagrama de flujo y (b) representación en 
hardware 53 
Figura 3.18 Descripción en VHDL de (a) filtfir.vhd y (b) filtiir.vhd 54 
Figura 3.19 Metodología de diseño top-down de un sistema [6] 54 
Figura 4.1 (a) Señal de entrada y (b) su TDF 58 
Figura 4.2 Respuesta en frecuencia del filtro pasa bajas 59 
Figura 4.3 (a) Señal de salida y (b) su TDF realizado por software de un LPF 60 
Figura 4.4 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un LPF 61 
Figura 4.5 (a) Señal de salida y (b) su TDF realizado por software de un BPF 62 
Figura 4.6 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un BPF 63 
Figura 4.7 Respuesta en frecuencia del filtro pasa banda 64 
Figura 4.8 (a) Señal de salida y (b) su TDF realizado por software de un BSF 65 
Figura 4.9 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un BSF 66 
Figura 4.10 Respuesta en frecuencia del filtro rechaza banda 67 
Figura 4.11 Respuesta en frecuenciadel filtro pasa altas 67 
Figura 4.12 (a) Señal de entrada y (b) su TDF realizado por software de un HPF 68 
Figura 4.13 (a) Señal de entrada y (b) su TDF simulado en MAX+PLUS® II de un HPF 69 
Figura 1 Fotografía de las señales C y U del filtro a través de un osciloscopio 73 
 1
Resumen. 
En la presente investigación se desarrolla una interfaz de usuario para el diseño e 
implementación de filtros digitales, la cual al recibir parámetros de diseño, realiza el cálculo 
de los coeficientes del filtro y entrega los archivos con formato VHDL necesarios para la 
posterior compilación, sintetización e implementación en dispositivos FPGA. 
Es presentada la introducción y métodos de diseño para filtros FIR e IIR así como 
ejemplos ilustrativos que servirán de guía al usuario para realizar un correcto diseño. La 
interfaz desarrollada llamada C2VHDL está constituida por programas desarrollados en 
lenguaje C++ para realizar un cálculo eficiente de los coeficientes, así como la creación de los 
archivos en lenguaje de descripción de hardware (VHDL) conteniendo estructuras para su 
implementación. 
Se realizan implementaciones de los filtros pasa bajas, pasa altas, pasa banda y rechaza 
banda para ejemplificar la interfaz en dispositivos FPGA de ALTERA® y XILINX®. Se 
describe un desarrollo futuro para el mejoramiento de la interfaz así como la implementación 
el la tarjeta de desarrollo S3ESK de XILINX®. 
 
 
Abstact. 
In the present research an interface to design and implement digital filters is 
developed, which receives design parameters, calculates the filters’s coefficients and gives 
files in VHDL fomat in order to compile, synthetize and implement them in FPGA devices. 
An introduction and methods to design FIR and IIR filters is presented. Ilustrative 
examples will serve as an user’s guide to make a correct design. The developed interface is 
called C2VHDL. It is made by C++ programs to calculate efficient coefficients and then to 
create hardware description language (HDL) files with structures for its implementation. 
Examples of the LP, HP, BP and BS filters are implemented in ALTERA®’s and 
XILINX®’s FPGA devices in order to use the interface. A future development to enhance the 
interface is decribed. In order to implement the proposed designs the XILINX®’s S3ESK 
board is used. 
 2
Capítulo 1. Introducción. 
 
 
Un filtro es un sistema o red que cambia de una manera deseada la forma de onda, 
características de amplitud y/o fase de una señal. El objetivo común del filtrado es mejorar la 
calidad de la señal, extraer información de las señales o separar dos o más señales 
previamente combinadas para hacer uso eficiente, por ejemplo, de un canal de comunicación 
disponible [1]. 
Un filtro digital es un algoritmo matemático implementado en software y/o hardware 
que opera sobre una señal de entrada digital para producir una señal de salida digital con el 
propósito de mejorar el objetivo de filtrado [1]. Aunque los filtros digitales tienen algunas 
limitantes, entre sus ventajas se encuentran: inmunidad a no linealidades de los dispositivos, 
exactitud (limitada por el error de redondeo en la aritmética de la computadora), fácil 
modificación de las características del filtro, libertad de variaciones en los componentes y bajo 
costo [3]. 
Los filtros digitales tienen muchas ventajas sobre los filtros analógicos, por lo cual ha 
sido muy amplia la utilización y aplicación de éstos. Sin embargo, la implementación de los 
filtros digitales en hardware no resulta simple, o en ocasiones el diseño se enfoca a alguna 
aplicación específica dando como resultado la dificultad de rediseñarlos. 
La utilización de filtros para aplicaciones en el procesamiento digital de señales (DSP) 
se ha incrementado tanto que es necesario usar algoritmos complejos para su diseño óptimo, 
sin embargo su implementación en VHDL también puede ser complejo. Existe una amplia 
bibliografía sobre diseño de filtros digitales, y los métodos para diseñarlos pueden no ser tan 
complejos computacionalmente. 
 
1.1 Objetivo. 
 
En muchas ocasiones se hace el diseño de filtros digitales para filtros FIR o IIR, y 
para aplicaciones, por ejemplo en cancelación de eco, se hace el diseño de ambos con 
características específicas. Se han realizado trabajos sobre la implementación en FPGAs de 
 3
filtros FIR de propósito general [8], así como herramientas que sirven para la aceleración de 
la simulación de hardware [9], donde se utilizan herramientas como MATLAB® y C para el 
diseño de filtros; con dichas herramientas de software se tienen disponibles funciones 
predeterminadas, como fir2 de MATLAB® [8], la cual calcula los coeficientes del filtro; sin 
embargo no se ha desarrollado una herramienta que sirva de interfaz de usuario para vincular 
el diseño de los filtros digitales y su implementación en hardware para FPGA. 
El proyecto de investigación de la presente tesis consiste en una interfaz de 
usuario en la cual se pueda vincular al diseño de filtros digitales FIR e IIR y su 
implementación en hardware utilizando dispositivos FPGA (ver figura 1.1). 
 
1.2 Aportación de la investigación. 
 
Se creó C2VHDL, que sirve como interfaz para el diseño de filtros e internamente 
realiza la vinculación con el VHDL para su implementación. Con esta interfaz, se pretende 
que el usuario pueda realizar diseños para cualquier aplicación, teniendo como limitación el 
dispositivo FPGA a utilizar, el cual entre más bloques lógicos contenga, mayor será su 
capacidad para implementar filtros de orden superior. 
 
1.3 Descripción del proyecto de investigación. 
 
C2VHDL es un programa para el diseño de filtros FIR e IIR, cuyo propósito es servir 
como una interfaz de usuario para la implementación de los mismos en dispositivos FPGA. 
C2VHDL presenta una pantalla donde el usuario puede elegir entre filtros FIR o IIR, 
posteriormente proporciona parámetros de diseño para un filtro deseado, de los cuales 
C2VHDL se basa para determinar el tipo de filtro a tratar. 
Si el usuario elige diseñar filtros FIR, C2VHDL presenta algunas ventanas de diseño 
basado en la atenuación en la banda de rechazo Ap. Por otra parte, si elige diseñar filtros IIR, 
C2VHDL presenta las aproximaciones analógicas con las que el usuario puede diseñarlos, 
Butterworth y Chebyshev Tipo I. Posteriormente, C2VHDL presenta una pantalla indicando el 
 4
 
Figura 1.1 Diagrama a bloques del proyecto de investigación. 
 
tipo de filtro, pasa bajas (LPF), pasa altas (HPF), pasa banda (BPF) o rechaza banda (BSF), 
así como la ventana o aproximación analógica para los filtros FIR e IIR, respectivamente. 
Internamente realiza el cálculo del orden del filtro, los coeficientes y su conversión a cadena 
de 12 bits. 
Después se presenta una pantalla indicando el orden del filtro, FIR, y el número de 
bloques de segundo orden, IIR. C2VHDL, al ser una interfaz transparente para el usuario, crea 
dos archivos con extensión vhd, de los cuales uno contiene el orden o el número de bloques de 
segundo orden así como los coeficientes del filtro deseado en su representación de cadena de 
bits, coexxx.vhd, y el archivo filtxxx.vhd contiene la estructura del mismo, donde xxx 
representa FIR o IIR. 
Posteriormente, se presenta una pantalla indicando la ubicación de los archivos arriba 
mencionados, siendo ésta una carpeta de trabajo dentro del sintetizador MAX+PLUSII de 
ALTERA. Una pantalla final indica al usuario que debe realizar en primer lugar la 
compilación del archivo coexxx.vhd y después la del archivo filtxxx.vhd en un sintetizador de 
 5
VHDL para su posterior implementación en dispositivos FPGA. La ubicación de los archivos 
puede cambiar dependiendo del sintetizador que el usuario utilice. 
 
1.4 Organización de la tesis. 
 
La tesis consiste de tres partes: la primera consiste en el capítulo 2, donde se hace 
referencia al diseñode filtros digitales tanto FIR como IIR y los diversos métodos para el 
cálculo de sus coeficientes. 
La segunda parte consiste en el capítulo 3, en el cual se hace una descripción con más 
detalle de C2VHDL, haciendo hincapié en los programas utilizados para la realización del 
mismo. También se hace referencia a los componentes utilizados para la descripción en 
hardware así como las líneas de código importantes que conforman el programa. 
La tercera parte consiste en el capítulo 4, en el cual se hacen ejemplos y simulaciones 
de los filtros, haciendo una comparación de los resultados obtenidos en C2VHDL con respecto 
a la simulación del filtrado realizado en C++. 
Finalmente en el capítulo 5 se realizan las conclusiones del trabajo de investigación 
junto con la experiencia adquirida así como un desarrollo más amplio que podría tener este 
trabajo, como es el diseño e implementación de filtros adaptables así como el diseño en modo 
asincrónico. 
 
Conclusiones. 
 
La importancia de los filtros para el procesamiento digital de señales (DSP) ha sido 
cada vez más aclamada para desarrollar proyectos y aplicaciones para soluciones de propósito 
general así como de propósito específico. 
A lo largo de la realización del trabajo de investigación se encontró que las posibles 
soluciones para el DSP no siempre están desarrolladas a nivel hardware. Sin embargo, lo 
poco desarrollado en hardware no es reutilizable con todas las aplicaciones. 
 6
Capítulo 2. Diseño de filtros digitales. 
 
 
2.1 Filtros de Respuesta al Impulso Finito (FIR). 
 
Los filtros ideales son no causales, lo que los hace físicamente irrealizables. Los filtros 
ideales tienen una repuesta en frecuencia con características deseables, por lo que se tiene la 
necesidad de realizar filtros causales con respuesta en frecuencia aproximada a los filtros 
ideales con tanta precisión como se desee [1]. 
La causalidad tiene muchas implicaciones importantes en el diseño de filtros selectivos 
en frecuencias, (a) la respuesta en frecuencia H(ω) no puede ser cero, excepto en un conjunto 
finito de puntos en frecuencia; (b) la magnitud |H(ω)| no puede ser constante en ningún 
intervalo finito de frecuencias y la transición de la banda de paso a la banda de rechazo no 
puede ser infinitamente abrupta (consecuencia del fenómeno de Gibbs causado por el 
truncamiento de h(n) para lograr causalidad); y las partes real e imaginaria de H(ω) son 
independientes y están relacionadas por la transformada de Hilbert discreta. Como 
consecuencia la magnitud |H(ω)| y la fase θ(ω) de H(ω) no se pueden elegir arbitrariamente 
[2]. 
 
2.1.1 Respuesta de fase lineal y sus implicaciones. 
 
Una señal al ser procesada por un filtro, modifica su amplitud y fase. La naturaleza y 
extensión de la modificación de la señal depende de las características de fase y amplitud del 
filtro. Para poder conocer la modificación de las características de la señal filtrada, se utiliza 
lo que se llama retraso de fase o retraso de grupo. 
Para una señal que consiste de diversas componentes de frecuencia como la voz o una 
señal modulada, el retraso de fase del filtro es la cantidad de retraso de tiempo que sufre cada 
componente de frecuencia de la señal cuando para a través del filtro. Por otra parte, el retraso 
de grupo es el promedio de retraso de tiempo que la señal compuesta sufre en cada 
 7
componente en frecuencia. Matemáticamente, el retraso de fase es el negativo del ángulo de 
fase dividido por la frecuencia, mientras que el retraso de grupo es el negativo de la derivada 
de la fase con respecto a la frecuencia, es decir 
 
ωωθ /)(−=pT (2.1) 
ωωθ ddTg /)(−= (2.2) 
 
Un filtro de fase no lineal causará distorsión de fase a la señal. Una distorsión 
indeseable puede evitarse haciendo uso de filtros con características de fase lineal sobre las 
bandas de frecuencia de interés. Un filtro tiene una respuesta en fase lineal si su respuesta en 
fase cumple con las siguientes relaciones: 
 
αωωθ −=)( (2.3) 
αωβωθ −=)( (2.4) 
 
donde α y β son constantes. Cuando un filtro satisface la condición dada por (2.3), 
tendrá una repuesta con retraso de fase y de grupo constantes. La condición (2.3) se satisface 
cuando la repuesta al impulso del filtro tiene simetría positiva. En este caso, la respuesta en 
fase es simplemente una función de la longitud del filtro. 
 



−=
−=
−=
−−= 2/)1(,
)(1)2/(,,1,0
)(2/)1(,,1,0
),1()( N
parNNn
imparNNn
nNhnh α
K
K
 
 
Cuando solo se satisface (2.4), el filtro solamente presentará un retraso de grupo 
constante. En este caso, la respuesta al impulso del filtro tiene simetría negativa [1]. 
 
2/,2/)1(),1()( πβα =−=−−−= NnNhnh 
La tabla 2.1 muestra las características principales con respecto a los cuatro tipos de 
filtros FIR de fase lineal. 
 8
La figura 2.1 muestra las diferencias de las repuestas al impulso de los cuatro tipos de 
filtros FIR de fase lineal. La respuesta en frecuencia de un filtro del tipo 2 siempre es cero a 
f = 0.5 (la mitad de la frecuencia de muestreo), por lo que no es realizable como un filtro pasa 
altas. Los tipos 3 y 4 presentan un desplazamiento en fase de 90°. La respuesta en frecuencia 
siempre es cero a f = 0, no permitiendo su realización como filtros pasa bajas. Además, la 
respuesta del tipo 3 siempre es cero a f = 0.5, por lo que tampoco puede realizarse como un 
filtro pasa altas. Los tipos 3 y 4 frecuentemente son usados para diseñar diferenciadores y 
transformadores Hilbert. El tipo 1 es el más versátil de los cuatro. 
El retraso de fase para los filtros del tipo 1 y 2, o el retraso de grupo para los cuatro 
tipos de filtros puede expresarse en términos del número de coeficientes del filtro así como 
puede ser ajustado para obtener una respuesta de retraso de fase o de grupo nulo. 
 
Tabla 2.1 Resumen de las características principales de los filtros FIR de fase lineal. 
Simetría de la respuesta al 
impulso 
Número de 
coeficientes N 
Respuesta en frecuencia 
H(ω) 
Tipo de fase 
lineal 
 
Impar 
( ) ( ) ( )
( )
∑
−
=
−−
2/1
0
2/1 cos
N
n
Nj nnae ωω 
 
1 
 
Simetría Positiva, 
)1()( nNhnh −−= 
Par 
( ) ( ) ( )[ ]∑
=
−− −
2/
1
2
12/1 cos
N
n
Nj nnbe ωω 
 
2 
 
Impar 
( )[ ] ( ) ( )
( )
∑
−
=
−−−
2/1
1
2/2/1 sin
N
n
Nj nnae ωπω 
 
3 
 
Simetría Negativa, 
)1()( nNhnh −−−= 
Par 
( )[ ] ( ) ( )[ ]∑
=
−−− −
2/
1
2
12/2/1 sin
N
n
Nj nnbe ωπω 
 
4 
]2/)1[(2)(];2/)1[()0( nNhnaNha −−=−= 
)2/(2)( nNhnb −= 
 9
 
 
Figura 2.1 Características de filtros FIR de fase lineal de tipo (a) 1, (b) 2, (c) 3 y (d) 4. 
 
Por ejemplo, para los filtros del tipo 1 y 2, el retraso de fase está dado por (2.5) y para 
los tipos 3 y 4 el retraso de grupo está dado por (2.6) [1, 3]. La tabla 2.2 resume las 
características para su aplicación que tienen los cuatro tipos de filtros. 
 
TNTp 




 −=
2
1 (2.5) 
TNTg 




 −−=
2
1 π (2.6) 
 
donde T es el periodo de muestreo. 
 10
Tabla 2.2 Aplicación de los filtros FIR de fase lineal. 
Tipo H(F) = 0 en Aplicación 
1 Todos los tipos de filtros. Secuencia sólo para BSF 
2 F = 0.5 Sólo LPF y BPF 
3 F = 0, F = 0.5 BPF, diferenciadores, transformadores de Hilbert 
4 F = 0 HPF, BPF, diferenciadores, transformadores de Hilbert 
 
 
2.1.2 Especificaciones de los filtros FIR. 
 
Para que el usuario pueda diseñar filtros FIR se necesitan establecer los requerimientos 
del filtro que desee implementar, como son las características de la señal, las características 
del filtro, la manera de implementarlo y otras consideraciones de diseño. Sin embargo, para la 
respuesta en fase sólo se necesita establecer si el filtro requiere simetría positiva o simetría 
negativa, asumiendo fase lineal. 
Para la respuesta en amplitud normalmente se especifica en forma de un esquema de 
tolerancia. La figura 2.2 muestraun esquema para un filtro pasa bajas, cuyos parámetros de 
interés son: 
 
δp Máxima desviación (ondulación) en la banda de paso 
δs Máxima desviación (ondulación) en la banda de rechazo 
fp Frecuencia de borde en la banda de paso 
fs Frecuencia de borde en la banda de rechazo 
Fs Frecuencia de muestreo 
 
En la práctica es muy común expresar δp y δs en decibeles para especificar el rizo en la 
banda de paso y la mínima atenuación en la banda de rechazo respectivamente. La diferencia 
entre fs y fp proporciona el valor del ancho de transición del filtro. Otro parámetro a considerar 
es la longitud del filtro N, el cual define el número de coeficientes a calcular. En la mayoría de 
 11
 
Figura 2.2 Especificaciones de respuesta en magnitud para un filtro pasa bajas. 
 
los casos, éstos parámetros definen completamente la respuesta en frecuencia de un filtro FIR 
[1]. 
 
( ) ss rechazodebandalaenatenuaciónA δ10log20−= (2.7) 
( ) ( )pp pasodebandalaenrizoA δ+= 1log20 10 (2.8) 
 
En resumen, el problema de diseño de filtros FIR es simplemente el de determinar N 
coeficientes h(n), n = 0, 1,..., N – 1, a partir de una especificación de la respuesta en frecuencia 
deseada Hd(ω) del filtro FIR. Los parámetros importantes en la especificación de Hd(ω) se 
dan en la figura 2.2 [2]. 
 
2.1.3 Método para calcular los coeficientes del filtro FIR basado en ventanas. 
 
Con la especificación de la respuesta en frecuencia deseada se determina la 
correspondiente respuesta al impulso hd(n). Ambas se relacionan mediante la transformada de 
Fourier (2.9) y (2.10). 
 
( ) ( )∑
∞
=
−=
0n
nj
dd enhH
ωω (2.9) 
 12
y 
 
( ) ( )∫−=
π
π
ω ωω
π
deHnh njdd 2
1 (2.10) 
 
La respuesta al impulso hd(n) obtenida en (2.9) es infinita en duración y debe ser 
truncada en algún punto, por ejemplo en n = N – 1, para producir un filtro FIR de longitud N. 
El truncamiento de hd(n) a una longitud N es equivalente a multiplicar hd(n) por una ventana 
rectangular, definida como 
 
( )


 −=
=
casootroen
Nn
nw
,0
1,,1,0,1 K
 (2.11) 
 
y su transformada de Fourier está definida como 
 
( ) ( )∑
−
=
−=
1
0
N
n
njenwW ωω (2.12) 
 
Así, la respuesta impulsional del filtro FIR se convierte en 
 
( ) ( ) ( )nwnhnh d= 
( )


 −=
=
casootroen
Nnnhd
,0
1,,1,0, K
 (2.13) 
 
La figura 2.3 muestra la respuesta ideal de un filtro pasa bajas donde ωc es la 
frecuencia de corte y la escala de frecuencia está normalizada, T = 1. Si se permite a la 
respuesta ir desde −ωc hasta ωc la operación de integración se simplifica, obteniendo la 
respuesta al impulso como 
 
 13
( ) ∫∫ −− =×=
c
c
dedenh njnjd
ω
ω
ω
π
π
π
ω
π ωω 2121 1 
( )
∞≤≤∞−≠= nn
n
nf
c
cc ,0,
sin2
ω
ω
 (2.14) 
( )HôpitalLdereglalausandonfc '0,2 == 
 
Las respuestas al impulso para los filtros ideales pasa altas, pasa banda y rechaza banda 
se obtienen del caso del pasa bajas de la ecuación (2.14) y se muestran en la tabla 2.3 [1]. 
La convolución de Hd(ω) con W(ω) tiene el efecto de suavizar Hd(ω). A medida que 
crece N, W(ω) se hace más estrecho y el suavizado producido por W(ω) se reduce. Por otro 
lado, los lóbulos laterales grandes de W(ω) producen unos efectos indeseables de rizado en la 
respuesta en frecuencia del filtro FIR H(ω), y también en los lóbulos laterales relativamente 
grandes de H(ω). Estos efectos indeseables se alivian mediante el uso de ventanas que no 
contienen discontinuidades abruptas en sus características del dominio temporal, mostrando 
así, lóbulos laterales bajos en sus características en el dominio de la frecuencia [2]. 
 
 
 
Figura 2.3 (a) Respuesta en frecuencia ideal de un filtro pasa bajas. (b) Respuesta impulsional de un 
filtro pasa bajas ideal. 
 
 
 14
Tabla 2.3 Resumen de las respuestas al impulso ideales para filtros estándar selectivos en frecuencia. 
 Respuesta al impulso ideal, hd(n) 
Tipo de filtro hd(n), n ≠ 0 hd(0) 
 
Pasa bajas 
( )
c
c
c n
n
f
ω
ωsin
2 
 
cf2 
 
Pasa altas 
( )
c
c
c n
n
f
ω
ωsin
2− 
 
cf21− 
 
Pasa banda 
( ) ( )
1
1
1
2
2
2
sin2sin2
ω
ω
ω
ω
n
nf
n
nf − 
 
( )122 ff − 
 
Rechaza banda 
( ) ( )
2
2
2
1
1
1
sin
2
sin
2
ω
ω
ω
ω
n
n
f
n
n
f − 
 
( )1221 ff −− 
fc, f1 y f2 son las frecuencias de borde en la banda de paso o rechazo normalizadas. 
fc = 0.5 (fp + fs) 
 
La tabla 2.4 lista varias funciones ventana que poseen características de respuesta en 
frecuencia deseable. Todas estas funciones ventana tienen lóbulos laterales significativamente 
más bajos, comparados con la ventana rectangular. Sin embargo, para el mismo valor de N, el 
ancho del lóbulo principal es también más amplio para estas ventanas comparado con la 
ventana rectangular. Como consecuencia, estas funciones ventana proporcionan mayor 
suavizado a través de la operación de convolución en el dominio de la frecuencia, y como 
resultado la región de transición en la respuesta del filtro FIR es más amplia. Para reducir el 
ancho de esta región de transición podemos incrementar la longitud de la ventana [2]. 
La mayoría de las ventanas se han desarrollado utilizando algún criterio de 
optimización. La solución intermedia es un balance entre los requisitos conflictivos de un 
lóbulo principal estrecho y los niveles pequeños de los lóbulos laterales. Algunas ventanas se 
basan en combinaciones de ventanas más simples, por ejemplo, la ventana de Von Hann (o 
Hanning) es la suma de una ventana rectangular y una coseno, la ventana de Barlett es la 
convolución de dos ventanas rectangulares. Otras ventanas se diseñan para enfatizar ciertas 
características deseables, como la ventana de Von Hann, que mejora el decaimiento de la alta 
frecuencia; la ventana de Hamming minimiza el nivel del lóbulo lateral [3]. 
 15
Tabla 2.4 Funciones ventana para el diseño de filtros FIR. 
 
Nombre de la ventana
Secuencia en el dominio del tiempo w(n), 
0 ≤ n ≤ 0.5 (N – 1) 
 
Coseno 




−1
cos
N
nπ
 
 
Riemann 0,1
2
>





−
L
N
nSa L π 
 
Barlett (Triangular) 1
2
1
−
−
N
n
 
 
Von Hann (Hanning) 




−
+
1
2cos5.05.0
N
nπ
 
 
Hamming 




−
+
1
2cos46.054.0
N
nπ
 
 
Blackman 




−
+





−
+
1
4cos08.0
1
2cos5.042.0
N
n
N
n ππ
 
 
Kaiser 
( )[ ]( )
( )πβ
πβ
0
2
0 1/41
I
NnI −−
 
( ) ( )
t
ttSa
ω
ωω sin= ; ( ) ( ) 25,
!
2/1
1
2
0 <





+= ∑
=
L
k
xxI
L
k
k
 
 
El ancho de transición del espectro con ventanas disminuye con la longitud N, pero no 
hay manera exacta de establecer la longitud N mínima del filtro que satisfaga las 
especificaciones de diseño. Las estimaciones empíricas se basan en la comparación del ancho 
de transición normalizado ∆F = fs – fp, que es inversamente proporcional a la longitud de la 
ventana [3], obteniendo así 
 
ps ff
CN
−
= (2.15) 
 16
 
donde C es una constante para cada ventana. La tabla 2.5 muestra esta relación para 
determinar la longitud N así como la atenuación máxima en la banda de rechazo (lóbulo 
lateral). 
Debido a que no existe un método exacto para el cálculo de la longitud N para filtros 
FIR, se han desarrollado diversas relaciones empíricas, una es con base en la ventana de 
Kaiser, donde primero se calculan las ondulaciones en la banda de paso y rechazo, δp y δs 
respectivamente para elegir a la más pequeña como parámetro de ondulación δ: 
 
110
110
20/
20/
+
−
=
p
p
A
A
pδ 
20/10 sAs
−=δ ( )sp δδδ ,min= (2.16) 
 
Se recalcula la atenuación real en la banda de rechazo por medio del parámetro de 
ondulación δ en decibeles 
 
dBA δlog20−= (2.17) 
 
Finalmente, la longitud N se calcula con 
 






<+
∆
≥+
∆
−
≥
dBA
F
dBA
F
A
N
21,19222.0
21,1
36.14
95.7
 (2.18) 
 
El parámetro de ventana Kaiser β se estima a partir de la atenuación real en la banda de 
rechazo A de lasiguiente manera 
 
( ) ( )
( )



≥−
<<−+−
≤
=
dBAA
dBAdBAA
dBA
50,7.81102.0
5021,2107886.0215842.0
21,0
4.0β (2.19) 
 17
Tabla 2.5 Características del espectro con ventanas. 
Ventana Atenuación máxima en la banda 
de rechazo (lóbulo lateral) (dB) 
Ancho de transición 
∆F = C / N 
Boxcar (Rectangular) 13.3 C = 0.92 
Coseno 23 C = 2.1 
Riemann 26.4 C = 2.5 
Barlett 26.5 - 
Von Hann (Hanning) 31.5 C = 3.21 
Hamming 42.7 C = 3.47 
Blackman 58.1 C = 5.71 
Kaiser 60 - 
 
Otra manera empírica para calcular la longitud N para un filtro pasa bajas y un filtro 
pasa banda se determinan a través de (2.20) y (2.21) respectivamente. 
 
Filtro pasa bajas (Herrman et al., 1973) 
 
( ) ( ) 1,, +∆−
∆
≈ ∞ Ff
F
D
N sp
sp δδ
δδ
 (2.20) 
 
donde 
 
( ) ( )[ ]3102210110 logloglog, aaaD ppssp ++=∞ δδδδδ 
( )[ ]61052104 loglog aaa pp +++ δδ 
( ) [ ]spspf δδδδ 1010 loglog51244.001217.11, −+= 
1
6
1
5
3
4
1
3
2
2
3
1
10278.4;10941.5
1066.2;10761.4
10114.7;10309.5
−−
−−
−−
×−=×−=
×−=×−=
×=×=
aa
aa
aa
 
 
Filtro pasa banda (Mintzer and Liu, 1979) 
 
 18
( ) ( ) 1,, +∆+
∆
≈ ∞ Fg
F
C
N sp
sp δδ
δδ
 (2.21) 
 
donde 
 
( ) ( )[ ]3102210110 logloglog, bbbC ppssp ++=∞ δδδδδ 
( )[ ]61052104 loglog bbb pp +++ δδ 
( ) 9.16log6.14, 10 −





−=
s
p
spg δ
δ
δδ 
44314.0;5705.0
00203.0;51325.0
09664.0;01201.0
65
43
21
−=−=
=−=
==
bb
bb
bb
 
 
Ejemplo 2.1 
 
Obtener los coeficientes de un filtro FIR pasa bajas utilizando el método de ventanas 
con las siguientes especificaciones. 
 
 Frecuencia de borde en la banda de paso 1.5 kHz 
 Ancho de transición 0.5 kHz 
 Atenuación en la banda de rechazo >40 dB 
 Frecuencia de muestreo 8 kHz 
 
Solución. 
 
De la tabla 2.3, se selecciona hd(n) para un LPF. La tabla 2.5 indica que la ventana 
Hamming, Blackman o Kaiser satisfacen los requerimientos de la atenuación en la banda de 
rechazo. Por simplicidad se usará la ventana de Hamming. Para obtener el orden del filtro, 
 19
∆F = 0.5 / 8 = 0.0625, y N = 3.47 / ∆F = 52.8, redondeado a N = 53. Los coeficientes del 
filtro se obtienen de 
hd(n)w(n) −26 ≤ n ≤ 26 
 
Se calcula la frecuencia de corte: 
 
fc = fp + (∆F / 2) = (1.5 + 0.25) kHz = 1.75 kHz → 1.75 / 8 = 0.21875 
 
Se observa que h(n) es simétrica, por lo tanto sólo se calculan los valores para h(0), 
h(1), ..., h(26) y se usa la propiedad de simetría para calcular los otros coeficientes. 
 
n = 0: hd(0) = 2fc = 2 x 0.21875 = 0.4375 
 w(0) = 0.54 + 0.46 cos(0) = 1 
 h(0) = hd(0)w(0) = 0.4375 
 
n = 1: hd(1) = sin(360° x 0.21875) / π = 0.31219 
 w(1) = 0.54 + 0.46 cos(360° / 53) = 0.99677 
 h(1) = h(−1) = hd(1)w(1) = 0.31118 
 
n = 2: hd(2) = sin(157.5°) / 2π = 0.06013 
 w(2) = 0.54 + 0.46 cos(720° / 53) = 0.98713 
 h(2) = h(−2) = hd(2)w(2) = 0.06012 
. . . . 
. . . . 
. . . . 
 
n = 26: hd(26) = sin(26 x 2π x 0.21875) / 26π = −0.01131 
 w(26) = 0.54 + 0.46 cos(9360° / 53) = 0.08081 
 h(26) = h(−26) = hd(26)w(26) = −0.000914 
 
 20
Se observa que los índices de los coeficientes están desde –26 hasta 26. Para lograr la 
causalidad se debe sumar 26 a los índices para que inicie desde cero. Los coeficientes del 
filtro con los índices ajustados se muestran en la tabla 2.6. 
 
Tabla 2.6 Coeficientes del filtro FIR del ejemplo 2.1 (N = 53, ventana Hamming, fc = 1750 Hz). 
h[ 0] = −9.1399895e−04 = h[52]
h[ 1] = 2.1673690e−04 = h[51]
h[ 2] = 1.3270280e−03 = h[50]
h[ 3] = 3.2138355e−04 = h[49]
h[ 4] = −1.9238177e−03 = h[48]
h[ 5] = −1.4683633e−03 = h[47]
h[ 6] = 2.3627318e−03 = h[46]
h[ 7] = 3.4846558e−03 = h[45]
h[ 8] = −1.9925839e−03 = h[44]
h[ 9] = −6.2837232e−03 = h[43]
h[10] = 4.5320247e−09 = h[42]
h[11] = 9.2669460e−03 = h[41]
h[12] = 4.3430586e−03 = h[40]
h[13] = −1.1271299e−02 = h[39]
h[14] = −1.1402453e−02 = h[38]
h[15] = 1.0630714e−02 = h[37]
h[16] = 2.0964392e−02 = h[36]
h[17] = −5.2583216e−03 = h[35]
h[18] = −3.2156086e−02 = h[34]
h[19] = −7.5449714e−03 = h[33]
h[20] = 4.3546153e−02 = h[32]
h[21] = 3.2593190e−02 = h[31]
h[22] = −5.3413653e−02 = h[30]
h[23] = −8.5682029e−02 = h[29]
h[24] = 6.0122145e−02 = h[28]
h[25] = 3.1118568e−01 = h[27]
h[26] = 4.3750000e−01 = h[26]
 21
2.2 Filtros de Respuesta al Impulso Infinito (IIR). 
 
Los filtros digitales IIR están caracterizados por la siguiente ecuación recursiva: 
 
( ) ( ) ( ) ( ) ( )∑∑∑
==
∞
=
−−−=−=
M
k
k
N
k
k
k
knyaknxbknxkhny
100
 (2.22) 
 
donde h(k) es la respuesta al impulso teóricamente infinita en duración, bk y ak son los 
coeficientes del filtro, y x(n) y y(n) son la entrada y salida del filtro. La función de 
transferencia para un filtro IIR está dada por 
 
 ( )
∑
∑
=
−
=
−
−−
−−
+
=
+++
+++
= M
k
k
k
N
k
k
k
M
M
N
N
za
zb
zaza
zbzbb
zH
1
0
1
1
1
10
11 K
K
 (2.23) 
 
 Una parte importante del proceso de diseño de los filtros IIR es encontrar los valores 
adecuados para los coeficientes bk y ak tales que algún aspecto de las características del filtro, 
como la respuesta en frecuencia, se comporte de una manera adecuada. 
 Se debe notar que en la ecuación (2.22), la muestra de salida actual y(n) es una función 
de las salidas pasadas, y(n – k), así como muestras de entrada presentes y pasadas, x(n – k), 
esto hace que los filtros IIR se comporten como sistemas con retroalimentación. La solidez de 
los filtros IIR proviene de la flexibilidad que el arreglo de retroalimentación provee. Por 
ejemplo, un filtro IIR normalmente requiere menos coeficientes que un filtro FIR para el 
mismo conjunto de especificaciones; esto se debe a que los filtros IIR son usados cuando el 
corte abrupto y el alto rendimiento son los requerimientos importantes. El precio de esto es 
que el filtro IIR puede volverse inestable o su rendimiento decae significativamente si no se 
tiene un cuidado adecuado en su diseño. 
 La función de transferencia de los filtros IIR, dada por la ecuación (2.23), puede ser 
factorizada como 
 22
 ( ) ( )( ) ( )( )( ) ( )M
N
pzpzpz
zzzzzzK
zH
−−−
−−−
=
K
K
21
21 (2.24) 
 
donde z1, z2, ... son los ceros de H(z), aquellos valores de z para los cuales H(z) se vuelve cero, 
y p1, p2, ... son los polos de H(z), aquellos valores de z para los cuales H(z) es infinito [1]. 
 Para el diseño de filtros digitales IIR existen dos posibles métodos. Un método popular 
se basa en el uso de los bien establecidos métodos para diseñar filtros analógicos, seguidos de 
una proyección que convierte el filtro analógico en digital. Un método alternativo se basa en 
diseñar el filtro digital directamente, usando equivalentes digitales de aproximaciones 
analógicas. Debido a los efectos del muestreo, difícilmente cualquier transformación de un 
filtro analógico en digital conserva la respuesta y la estabilidad del filtro analógico [3]. 
 
 
2.2.1 Especificaciones de los filtros IIR. 
 
Al igual que en los filtros FIR, el diseño de los filtros IIR comienza por establecer los 
requerimientos de especificación del filtro deseado como son las características de la señal, las 
características de la respuesta en frecuencia del filtro, la manera de implementación y otras 
limitaciones de diseño. En general, los requerimientos arriba mencionados son dependientes 
para las aplicaciones. Sin embargo, no es necesario contar con todos los requerimientos para 
especificar al filtro [1]. 
Para filtros selectivos en frecuencia, tales como los filtros pasa bajas y pasa banda, las 
especificaciones de respuesta en frecuencia son representadas en forma de esquema de 
tolerancia. La figura 2.4 describe dicho esquema para un filtro IIR pasa banda, donde las 
líneas horizontales sombreadas indican los límites de tolerancia [1]. 
Los siguientes parámetros normalmente son usados para especificar la respuesta en frecuencia. 
 
 ε 2 Parámetro de rizo en la banda de paso 
 δp Desviación en la banda de paso 
 
 23
 
Figura2.4 Esquema de tolerancia para un filtro IIR pasa banda. 
 
 δs Desviación en la banda de rechazo 
 fp1 y fp2 Frecuencias de borde en la banda de paso 
 fs1 y fs2 Frecuencias de borde en la banda de rechazo 
 
Las frecuencias de borde en ocasiones se proporcionan en forma normalizada (f / Fs). 
Las desviaciones en la banda de paso y rechazo pueden ser expresadas como números 
ordinarios o en decibeles; así, el rizo en la b anda de paso en decibeles es 
 
 ( ) ( )ppA δε −−=+= 1log201log10 10210 (2.25) 
y la atenuación en la banda de rechazo en decibeles es 
 
 ( )ssA δ10log20−= (2.26) 
 
Para los filtros IIR, el rizo en la banda de paso es la diferencia entre la desviación 
máxima y mínima en la banda de paso, mientras que para los filtros FIR es la diferencia entre 
la respuesta ideal y la desviación máxima (o mínima) en la banda de paso [1]. 
 24
2.2.2 Uso de la transformada z bilineal (BZT) y los filtros analógicos clásicos para 
diseñar filtros IIR. 
 
En muchos casos prácticos, la función de transferencia analógica H(s), de la cual se 
obtiene H(z), puede no estar disponible y tendrá que ser determinada de las especificaciones 
de los filtros digitales deseados. Para pruebas de filtrado digital de frecuencias selectivas, H(s) 
se puede derivar de los filtros clásicos con características Butterworth o Chebyshev (ver figura 
2.5) [1]. 
 
 
Figura 2.5 Esquemas de respuestas en frecuencia de algunos filtros analógicos clásicos a) repuesta Butterworth; 
b) Chebyshev tipo I. 
 25
2.2.2.1 Resumen del método BZT para el cálculo de los coeficientes. 
 
Para filtros IIR selectivos en frecuencia, los pasos para utilizar la BZT pueden ser 
resumidos como sigue [1]: 
 
(1) Utilizar las especificaciones del filtro digital para encontrar un filtro pasa bajas 
analógico prototipo normalizado H(s). 
(2) Determinar y transformar las frecuencias críticas o de borde del filtro deseado. Para 
los filtros LP o HP solo existe una frecuencia de corte o de borde. Para los filtros 
BP y BS, se tienen frecuencias de borde en la banda de paso alta y baja, ωp1 y ωp2, 
cada una de las cuales necesita ser transformada (las frecuencias de borde en la 
banda de rechazo también pueden ser especificadas): 
 






=′
2
tan
Tp
p
ω
ω (2.27a) 






=′





=′
2
tan;
2
tan 22
1
1
TT p
p
p
p
ω
ω
ω
ω (2.27b) 
 
(3) Desnormalizar el filtro prototipo analógico reemplazando s en la función de 
transferencia H(s), usando una de las siguientes transformaciones, dependiendo del 
tipo de filtro requerido: 
 
p
ss
ω′
= LP2LP (2.28a) 
s
s p
ω′
= LP2HP (2.28b) 
Ws
s
s
2
0
2 ω+
= LP2BP (2.28c) 
2
0
2 ω+
=
s
Wss LP2BS (2.28d) 
 26
donde 
 1212
2
0 , pppp W ωωωωω ′−′=′′= 
 
(4) Aplicar la BZT para obtener la función de transferencia del filtro digital deseado 
H(z) reemplazando s en la función de transferencia de frecuencia escalada H’(s) 
como sigue: 
 
1
1
+
−
=
z
zs 
 
2.2.2.2 Características de los filtros analógicos clásicos. 
 
Filtro Butterworth. 
 
El filtro pasa bajas Butterworth está caracterizado por la siguiente respuesta en 
frecuencia de magnitud cuadrada: 
 
 ( ) N
p
p
H 2
2
1
1








+
=
ω
ω
ω (2.29) 
donde N es el orden del filtro y ppω es la frecuencia de corte a 3 dB del filtro pasa bajas (para 
el filtro prototipo normalizado, 1=ppω ). El orden del filtro N está dado por 
 
 


















−
−
≥
p
p
p
s
A
A
p
s
N
ω
ω
log2
110
110log
10
10
 (2.30) 
 
 27
donde Ap y As son, respectivamente, el rizo en la banda de paso y la atenuación en la banda de 
rechazo en dB, y psω es la frecuencia de borde en la banda de rechazo. 
La función de transferencia del filtro analógico Butterworth normalizado, H(s), 
contiene ceros en infinito y polos, los cuales están espaciados uniformemente en un círculo 
unitario en el plano s en las siguientes ubicaciones [1]: 
 
( ) ( ) ( ) ,
2
12sin
2
12cos2/12 


 −++


 −+== −+
N
Nkj
N
Nkes NNkjk
πππ 
 k = 1, 2,. . ., N (2.31) 
 
Los polos ocurren en pares de complejos conjugados y caen en el lado izquierdo del 
plano s. 
 
Filtro Chebyshev. 
 
La característica Chebyshev provee una manera alternativa para obtener una función de 
transferencia adecuada H(s). Las características del filtro Chebyshev tipo I se muestran en la 
figura 2.5, con rizo equitativo en la banda de paso y sin variación en la banda de rechazo. 
Los filtros Chebyshev tipo I están caracterizados por la respuesta en magnitud 
cuadrada: 
 
( ) ( )pNC
KH
ωωε
ω
′′+
=′ 22
2
1
 (2.32a) 
 
donde ( )pNC ωω ′′ es un polinomio Chebyshev el cual exhibe en rizo equitativo en la banda de 
paso, N es el orden del polinomio así como del filtro, y ε determina el rizo en la banda de 
paso, el cual en decibeles está dado por 
 
 ( ) ( )ppasodebandalaenrizo δε −−=+≤ 1log201log10 10210 (2.32b) 
 28
El orden del filtro N está dado por 
 
 


















−
−
≥
−
−
p
p
p
s
A
A
p
s
N
ω
ω1
10
10
1
cosh
110
110cosh
 (2.33) 
 
donde Ap y As son, respectivamente, el rizo en la banda de paso y la atenuación en la banda de 
rechazo en dB, y psω es la frecuencia de borde en la banda de rechazo [1]. 
Los polos del LPF Chebyshev normalizado yacen sobre una elipse en el plano s y 
tienen coordenadas dadas por 
 
 ( ) ( ) ( ) ( )kkk js βαβα sincoshcossinh += (2.34) 
 
donde 
 
 ( ) Nk
N
Nk
N k
,,2,1,
2
12;1sinh1 1 K=−+=




= −
πβ
ε
α 
 
2.2.3 Cálculo de los coeficientes del filtro IIR por mapeo de polos y ceros en el plano s. 
 
El procedimiento para calcular los coeficientes IIR por mapeo de polos y ceros en el 
plano s al plano z se resume a continuación [1]. 
 
Paso 1. 
 
El diseñador comienza con un filtro pasa bajas prototipo normalizado de orden N del 
tipo Butterworth o Chebyshev tipo I, dependiendo de los requerimientos del diseño. Los polos 
 29
del LPF normalizado se obtienen de las ecuaciones (2.31) y (2.34) para filtros Butterworth o 
Chebyshev, respectivamente. 
Para los filtros Butterworth y Chebyshev tipo I, los ceros para el LPF prototipo se 
localizan en infinito. En general, la ubicación de los ceros del LPF normalizado son más 
fáciles de determinar que los polos. 
En casos donde el LPF prototipo no exista, se deben transformar las frecuencias 
críticas o de borde del filtro digital como se describe en la sección (2.2.2.1) [1]. 
 
Paso 2. 
 
Los polos y ceros del LPF analógico normalizado son convertidos para un LP, HP, BP 
o BSF usando una transformación adecuada de las ecuaciones (2.28a) a (2.28d). 
 
Filtros pasa bajas y pasa altas. 
 
Para un filtro digital pasa bajas o pasa altas, los N-polos del LP normalizado son 
transformados como sigue: 
 
 Nkss pklkl ,,2,1,, K=′= ω LP2LP (2.35a) 
 Nkss klpkh ,,2,1,, K=′= ω LP2HP (2.35b) 
 
donde pω′ es la frecuencia de borde en la banda de paso deseada, sl,k son los polos del LPF 
analógico y sh,k son los polos del HPF analógico. 
Para los filtros clásicos – Butterworth y Chebyshev tipo I – las transformaciones de las 
ecuaciones (2.35a) y (2.35b) mapean los ceros del LPF prototipo hacia el eje imaginario del 
plano s. Los ceros del filtro prototipo están en infinito. En cualquier caso, las transformaciones 
mapean los ceros de infinito a infinito (para filtros pasa bajas) o de infinito al origen (para 
filtros pasa altas), como se muestran en las figuras 2.6(a)(ii) y 2.6(b)(ii). 
 
 30
Filtros pasa banda y rechaza banda. 
 
Para los filtros pasa banda digitales, los polos BPF analógicos se obtienen del LPF 
prototipo normalizado usando la transformación 
 
 
kb
kb
kl Ws
s
s
,
2
0
2
,
,
ω+
=(2.36) 
 
donde sl,k son los polos del LPF prototipo analógico, sb,k son los pares de polos del BPF 
analógico intermedio, 12 ωω ′−′=W es el ancho de la banda de paso del filtro y 21
2
0 ωωω ′′= 
proporciona la frecuencia central en la banda de paso. La ecuación (2.36) da la siguiente 
ecuación cuadrática en sb,k: 
 020,,
2
, =+− ωkbklkb sWss (2.37) 
 
Figura 2.6 Mapeo de ceros de un filtro pasa bajas prototipo de segundo orden hacia (a) pasa bajas, (b) pasa altas, 
(c) pasa banda y (d) rechaza banda. 
 31
Resolviendo para sb,k se llega a la siguiente expresión para los polos analógicos pasa 
banda: 
 
 














−±=
21
2
2
02
,,,
4
2 W
ssWs klklkb
ω
 (2.38) 
 
Se puede ver de la ecuación (2.38) que de cada polo LP analógico, sl,k conduce a un par 
de polos BPF analógico como resultado del término s2 en la transformación. En general, el 
polo del filtro pasa bajas analógico sl,k es complejo y por lo tanto el término de la raíz 
cuadrada es complejo [1]. 
Para los filtros rechaza banda digitales, se puede utilizar la siguiente transformación 
LP2BS: 
 
 2
0
2
,
.
, ω+
=
kr
kr
kl s
Ws
s (2.39) 
 
donde sl,k son los polos del LPF prototipo analógico, sr,k son los polos del filtro rechaza banda 
analógico intermedio, W es el ancho de la banda de rechazo y 20ω es la frecuencia central en la 
banda de rechazo. La ecuación (2.39) conduce a la siguiente expresión para obtener los polos 
rechaza banda analógicos del LPF prototipo: 
 
 














−±= −−
21
2
2
02
,
1
,,
4
2 W
ssWs klklkr
ω
 (2.40) 
 
Como en el caso de los filtros pasa bajas y pasa altas, las transformaciones de las 
ecuaciones (2.39) y (2.40) mapean los ceros hacia el eje imaginario. Para los filtros 
Butterworth y Chebyshev tipo I, la transformación LP2BP mapea los N-ceros del LPF 
prototipo de infinito a infinito y al origen en el plano s (ver figura 2.6(c)). Por otra parte, la 
 32
transformación LP2BS mapea los N-ceros del LPF prototipo de infinito a ±jω0 en el plano s; 
ver figura 2.6(d) [1]. 
 
Paso 3. 
 
La BZT es usada para mapear los polos y ceros del plano s hacia el plano z digital. 
Cada polo del plano s, sp,k, es mapeado como sigue: 
 
 
kp
kp
kp s
s
z
,
,
, 1
1
−
+
= (2.41) 
 
Similarmente, cada cero del plano s, sz,k de los filtros analógicos transformados, es 
mapeado hacia el plano z como sigue: 
 
 
kz
kz
kz s
s
z
,
,
, 1
1
−
+
= (2.42) 
 
Las figuras 2.6(a)−2.6(b) ilustran la manera en que los ceros son mapeados del plano s 
al plano z vía BZT para los filtros Butterworth y Chebyshev tipo I. Nótese, por ejemplo, que 
para los filtros pasa bajas, figura 2.6(a)(ii), los ceros están en infinito en el plano s y la BZT de 
la ecuación (2.42) mapea a éstos al punto z = −1 en el plano z, figura 2.6(a)(iii), mientras que 
para el filtro pasa banda, los ceros en el plano s, figura 2.6(c)(ii), son mapeados del origen al 
punto z = 1, y de infinito a z = −1 [1]. 
 
Paso 4. 
 
El paso final es determinar los coeficientes del numerador y denominador de las 
secciones del filtro de primer y/o segundo orden. Esto se logra combinando pares de polos y 
ceros complejos conjugados como sigue: 
 33
 ( ) ( )( )( )( )∗
∗
−−
−−
=
kpkp
kzkz
i zzzz
zzzz
zH
,,
,, (2.43a) 
 2
2
1
1
2
2
1
1
1
1
−−
−−
++
++
=
zaza
zbzb
ii
ii (2.43b) 
 
En general, un par de cero o polo complejo ubicado en α ± jβ conduce a una cuadrática 
en z de la forma 
 
 ( )[ ] ( )[ ] 222 2 βααβαβα ++−=−−+− zzjzjz 
 ( ) 222121 −− ++−= zz βαα (2.44a) 
 
Un cero o polo simple sobre el eje real (esto es, en z = ±α) conduce a un factor de 
primer orden de la forma 
 
 11 −±=± zz αα (2.44b) 
 
Frecuentemente encontramos que un filtro de orden N tiene N-ceros reales sobre el eje 
real del plano z. En este caso, podemos emparejar los ceros del plano z tales que el numerador 
de cada sección del filtro sea un cuadrático de la forma 
 
 2121 −− +± zz (2.44c) 
 
La función de transferencia global, H(z), está dada por 
 
 ( ) ( ) ( ) ( )zHzHzKHzH MK21= 
 
donde K es un factor de ganancia el cual se usa para ajustar la respuesta en magnitud en la 
banda de paso a un nivel deseado. En la mayoría de los casos, a K se le asigna un valor para 
hacer a la máxima respuesta en la banda de paso igual a la unidad. 
 34
2.2.3.1 Ejemplos ilustrativos 
 
Ejemplo 2.2 
 
Se requiere un filtro digital pasa banda con características Butterworth y una banda de 
paso entre 200 y 300 Hz a una frecuencia de muestreo de 2 kHz. Determinar la función de 
transferencia del filtro por el método de mapeo de polos y ceros en el plano s. 
 
Solución. 
 
Se requiere un LPF normalizado de primer orden, ya que el orden del filtro será el 
doble por la transformación del pasa banda. 
 
( )
1
1
+
=
s
sH 
 
Esta función de transferencia tiene un polo simple en s1,1 = −1. Fs = 2 kHz = 1 / T. Por 
lo que las frecuencias transformadas son 
 
3249.0
20002
2002tan
2
tan 1'1 =





×
×
=




=
πωω
T 
5095.0
20002
3002tan
2
tan 2'2 =





×
×
=




=
πωω
T 
 
De esta manera ω0 y W están determinadas por 
 
1846.0,1655.0 '1
'
2
'
2
'
1
2
0 =−=== ωωωωω W 
 
El polo simple para el LPF es transformado en dos polos para el BPF, usando la 
ecuación 2.38 como sigue: 
 35
( )
( ) 












 ×
−−+−=
2
1
2
2
1, 1846.0
1655.0411
2
1846.0
bs 
 = −0.0923 + 0.4172j 
( )
( ) 












 ×
−−−−=
2
1
2
2
2, 1846.0
1655.0411
2
1846.0
bs 
 = −0.0923 − 0.4172j = ∗ 1,bs 
 
De la transformación BZT, ecuación 2.41, se tiene 
 
j
j
jz p 6103.05979.04172.00923.01
4172.00923.01
1, +=−+
+−
= 
∗= 1,2, pp zz 
 
El LPF prototipo tiene un cero simple en infinito, el cual es mapeado por la 
transformación LP2BP al origen e infinito en la banda de paso en el plano s, esto es sz,1 = 0 y 
sz,1 = ∞. La BZT mapea estos ceros a los puntos z = 1 y z = −1 en el plano z. 
 
1;1 2,2,1,1, −=→=→ zzzz zszs 
 
Ahora se puede determinar la función de transferencia discreta, H(z), de los polos y 
ceros. 
 
( ) ( )( )( )( )2,1,
11
pp zzzz
zzzH
−−
+−
= 
21
2
2
2
7995.01958.11
1
7995.01958.1
1
−−
−
+−
−
=
+−
−
=
zz
z
zz
z 
 
 
 36
Conclusiones. 
 
Existen diversos métodos para diseñar filtros digitales, sin embargo algunos utilizan 
matemáticas complejas. Lo cierto es que computacionalmente puede hacerse más fácil esta 
tarea. Sin embargo, se tiene que tener cierto cuidado para elegir el método correcto si se desea 
un diseño eficiente. 
Observamos que el método más simple para el diseño de filtros FIR es el de ventanas, 
simplemente se multiplican la ventana y la respuesta al impulso del filtro deseado, y se 
obtienen los coeficientes. Aunque existen otros métodos de diseño, éste es el más utilizado ya 
que al tener diversas ventanas, el diseñador puede elegir la más adecuado para sus 
necesidades. 
En el caso de los filtros IIR, los métodos de diseño son más complejos, sin embargo se 
pudo demostrar que el método de la BZT es el más eficiente, ya que al basarse en un LPF 
prototipo y en aproximaciones analógicas la transformación bilineal y mapeo de los polos y 
ceros entre el plano s y el plano z es más sencilla. 
 37
Capítulo 3. C2VHDL. 
 
 
3.1 Estructura de C2VHDL. 
 
La estructura de C2VHDL se compone de dos partes, una parte programable y la otra 
descriptiva del filtro. 
 
3.1.1 Descripción de C2VHDL. 
 
En esta parte de C2VHDL se hace el diseño por software de los filtros digitales, es 
decir, se realiza el cálculo de los coeficientes así como la longitud del filtro (orden del filtro). 
Por medio del lenguaje de programación C++, utilizando Turbo C++ v3.0 para MS-
DOS, se crea una interfaz de usuario en laque los parámetros del filtro deseado son 
proporcionados, analizados y procesados para entregar dichos coeficientes y longitud del filtro 
como resultado. 
En forma general, C2VHDL programable se estructura de tres archivos: filtro.cpp, 
xxxfilt.cpp y lecxxx.cpp, donde xxx representa FIR o IIR. El archivo filtro.cpp contiene una 
introducción, elección del filtro y una presentación final; xxxfilt.cpp contiene la toma de 
datos, elección de ventana o aproximación analógica, dependiendo de si el filtro es FIR o IIR, 
determinación del tipo de filtro, el procesamiento de los datos (cálculo de los coeficientes y 
longitud del filtro), así como su conversión a cadena de 12 bits y la creación del archivo 
coexxx.vhd; lecxxx.cpp contiene la creación del archivo filtxxx.vhd. La figura 3.1 muestra un 
diagrama de la estructura de C2VHDL programable. 
La introducción simplemente presenta una bienvenida al usuario y una breve 
descripción del programa, haciendo hincapié en el tipo de filtros FIR, tipo 1 (simetría par, 
longitud impar), y la aproximación analógica para los filtros IIR, Butterworth y Chebyshev 
Tipo I. 
 38
 
Figura 3.1 Diagrama de la estructura general de C2VHDL programable. 
 
 
Figura 3.2 Pantalla de (a) bienvenida y (b) presentación y descripción de C2VHDL. 
 
 39
En la selección del filtro se presenta una pantalla donde el usuario tiene la opción de 
elegir entre filtro FIR e IIR. Una vez que el usuario determine el filtro a diseñar, se presenta 
una pantalla donde tiene que proporcionar parámetros de diseño, como son las frecuencias de 
paso, rechazo, muestreo y atenuaciones en la banda de paso y rechazo. 
Como se observa en la figura 3.3(b) existen dos frecuencias de paso y rechazo, fp1, fp2, 
fs1 y fs2. Esto se debe al esquema que se utiliza para el diseño de filtros (ver figura 2.4), en el 
cual C2VHDL permite al usuario asignar valores de cero a parámetros no necesarios en su 
diseño. 
En el caso de que se elija filtros FIR, se presenta una pantalla con una lista de 
ventanas que el usuario puede elegir para el diseño. La lista que aparece depende de la 
atenuación en la banda de rechazo. Para los filtros IIR, se presenta una pantalla con la opción 
de elegir la aproximación analógica que se desee. 
 
Figura 3.3 Pantalla de (a) elección del filtro y (b) toma de parámetros de diseño. 
 
 40
 
Figura 3.4 Pantalla de elección (a) de ventana y (b) aproximación analógica. 
 
En la presentación final se muestran cinco pantallas secuencial mente, indicando en la 
primera el tipo de filtro, LP, HP, BP o BSF, seguida de el orden del filtro o el número de 
bloques de segundo orden, seguida de indicaciones con el resultado final, ubicación del 
resultado e indicaciones con respecto a la compilación del mismo. 
 
3.1.1.1 Archivo filtro.cpp. 
 
La figura 3.6 muestra la parte principal del código fuente de filtro.cpp, donde las tres 
funciones que la componen realizan la presentación de C2VHDL, función nombre() y 
presentacion(), y la selección del filtro, función menu(), en la cual se hace una interrupción 
del proceso para dar lugar a la ejecución de un proceso hijo con la función spawn propia del 
lenguaje C++. 
 41
 
Figura 3.5 Pantallas de la presentación final de C2VHDL programable para un filtro FIR. 
 
 
Figura 3.6 Programa principal del código fuente de filtro.cpp. 
 
r = spawnlp(P_WAIT,xxx,xxx,"spawnlp","xxx",NULL); 
 
La línea de código presentada arriba indica la interrupción del proceso de filtro.cpp 
para iniciar la ejecución del proceso hijo mediante P_WAIT y xxx, donde P_WAIT indica en la 
función spawn que se hará una pausa al proceso padre y comenzar la ejecución del proceso 
 42
hijo; una vez terminada la ejecución del proceso hijo se continúa ejecutando el proceso padre 
desde el punto donde se hizo la pausa; xxx indica qué proceso hijo se ejecutará, FIR o IIR. 
Al término del proceso hijo, se realiza la presentación final con la función final() 
dentro de la función menu(). 
 
3.1.1.2 Archivo xxxfilt.cpp. 
 
Existen dos archivos de este tipo, iirfilt.cpp y firfilt.cpp, dentro de los cuales se realiza 
todo el procesamiento de los parámetros proporcionados por el usuario para determinar los 
coeficientes y longitud del filtro, así como entregar el resultado dentro de la ubicación 
especificada. 
En forma general, los dos archivos tienen casi la misma estructura de la función 
principal del código fuente (ver figura 3.7). Sin embargo, en las funciones menu(), 
conv_datos(), paquete(), final() y filtro() existen diversas diferencias para el diseño del filtro. 
Las funciones parametros() y tipo_de_filtro() son las mismas para ambos archivos. 
La función parametros() es la parte donde se le pide al usuario que proporcione 
aquellos datos que se utilizarán para el diseño del filtro. Con los datos almacenados, se hace el 
proceso de selección del tipo de filtro mediante la función tipo_de_filtro(). Este proceso se 
basa en las frecuencias de paso y rechazo, donde es muy importante que el usuario asigne 
valores de cero a aquellos datos que no son necesarios. 
 
 
Figura 3.7 Programa principal del código fuente de (a) firfilt.cpp y (b) iirfilt.cpp. 
 43
 
Figura 3.8 (a) Diagrama de flujo y (b) código fuente de la función tipo_de_filtro(). 
 
Basándose en la figura 2.4, las frecuencias de paso y rechazo fp2 y fs2 para un filtro LP 
y HP no existen, por lo que deben tener un valor de cero para poder cumplir con las 
condiciones de diseño, como se muestra en la figura 3.8. En el caso de los filtros BP y BS, las 
frecuencias fp2 y fs2 deben cumplir con las condiciones de diseño, de lo contrario existiría un 
error. En caso de existir un error, se le pide nuevamente al usuario proporcionar los datos. 
Si fp2 y fs2 cumplen con las condiciones de diseño deseadas se ejecutará la función lp(), 
hp(), bp() o bs(), dentro de las cuales se realiza el cálculo de los coeficientes y la longitud del 
filtro. 
 
Función menu(). 
 
Dentro del archivo firfilt.cpp la función menu() muestra una lista con las ventanas 
disponibles para el diseño. La lista mostrará algunas o todas las ventanas dependiendo de la 
atenuación en la banda de rechazo Ap (ver tabla 2.5). La figura 3.9 muestra el código del 
criterio utilizado para mostrar dicha lista. 
 
 44
 
Figura 3.9 Criterio del código para mostrar la lista de las ventanas. 
 
Para el caso del archivo iirfilt.cpp la función menu() muestra dos opciones para elegir 
la aproximación analógica del diseño, Butterworth y Chebyshev Tipo I (ver figura 3.4(b)). 
 
Función conv_datos(). 
 
Para ambos archivos, esta función realiza la conversión de los coeficientes del filtro en 
su representación de cadena de 12 bits. El formato de los datos como cadena de bits se 
conforma de tres partes: signo S, representado por el bit más significativo (MSB); la mantisa 
M, representada en 11 bits con un excedente de –11, FIR, y de –8, IIR; y el exponente E, que 
internamente C2VHDL asigna a cada dato. 
La tabla 3.1 muestra una representación de las posiciones de los bits con respecto a el 
excedente de la mantisa para los datos convertidos. 
Este formato fue seleccionado debido a que las multiplicaciones se realizan por medio 
del multiplicador de Booth [4], el cual se basa en el complemento a dos para utilizar números 
positivos y negativos [5]. El excedente se utiliza, así como el exponente, para dar mayor 
precisión a la conversión. 
 
Tabla 3.1 Representación de la posición de los bits de la mantisa para el formato de los datos convertidos. 
Posición 
 Normal 210 29 28 27 26 25 24 23 22 21 20 
FIR Estandarizado 2–1 2–2 2–3 2–4 2–5 2–6 2–7 2–8 2–9 2–10 2–11 
IIR Estandarizado 22 21 20 2–1 2–2 2–3 2–4 2–5 2–6 2–7 2–8 
 
 
 45
El proceso de conversión se divide en dos partes: la precisión de los datos, 
multiplicando el exponente; y la conversión de los datos negativos y de los datos positivos. 
La precisión de los datossimplemente es hacer un desplazamiento a la izquierda, es 
decir, multiplicar el dato por 2E. Para el caso de filtros FIR, el valor del coeficiente es menor a 
la unidad, por lo que al hacer el desplazamiento se trata de aproximar al dato a la unidad para 
dar mayor precisión. En el caso de filtros IIR, el valor del coeficiente es mayor a la unidad, 
por lo que el desplazamiento se utiliza para la precisión. 
La conversión de los datos consiste en asignar a una variable de tipo vector 12 ceros, 
datos positivos, o 12 unos, datos negativos. Se compara el valor absoluto del dato con el valor 
2k + x, donde k toma valores desde 10 hasta 0 y x es el excedente de la mantisa. Si el dato es 
mayor o igual al valor de comparación, al dato se le resta dicho valor y se invierte el valor del 
k-ésimo bit donde se cumple la comparación. Este proceso se repite k veces para asignar los 
valores adecuados a cada bit. 
Si el dato es negativo, al MSB se le asigna un uno, y al dato positivo se le asigna un 
cero. Con este procedimiento se logra el complemento a uno para los datos negativos. Para 
realizar el complemento a dos, se invierten desde el bit menos significativo (LSB) hasta el bit 
donde se encuentre un cero, éste último se reemplaza por un uno. 
Este procedimiento de conversión se repite n veces para los filtros FIR y m veces para 
los filtros IIR, donde n es la longitud del filtro y m el número de bloques de segundo orden. 
La figura 3.10 muestra este procedimiento para una iteración, así como se muestra el código 
de la conversión de un dato negativo. 
 
Funciones lp(), hp(), bp() y bs(). 
 
Como su nombre lo indican, estas funciones realizan el cálculo de los coeficientes del 
tipo de filtro seleccionado. Las cuatro funciones se basan de la tabla 2.3 para los filtros FIR, y 
de las ecuaciones (2.27a) a (2.27b) y (2.28a) a (2.28d) para los filtros IIR. Dentro de los 
filtros FIR, las cuatro funciones ejecutan la función ventana elegida previamente. Dicha 
función calculará los coeficientes de la función ventana y los multiplicará por los coeficientes 
del filtro (ecuación 2.13). Las funciones ventana llevan el nombre de la ventana elegida y se 
 46
 
Figura 3.10 (a) Diagrama de flujo para una iteración de la conversión de los coeficientes y (b) código del 
proceso de conversión para un dato negativo. 
 
basan en la tabla 2.4 para realizar el cálculo. 
Dentro de las funciones ventana se calcula la longitud del filtro basados en la ecuación 
(2.15) (ver tabla 2.5). En algunos casos, se debe utilizar la función orden() que calcula la 
longitud del filtro basándose en la ventana de Kaiser (ecuaciones (2.16) a (2.18)) [1, 3]. 
En el caso de los filtros IIR, las cuatro funciones ejecutan la función de la 
aproximación analógica previamente elegida. Dicha función lleva el nombre de la 
aproximación y se basa en las ecuaciones (2.30) y (2.33). Estas ecuaciones calculan la 
longitud del filtro basándose en los filtros analógicos de Butterworth y Chebyshev, 
respectivamente. 
Las funciones butterworth() y chebyshev_1() también realizan el cálculo de los polos 
del filtro. El número de polos es calculado en base a la longitud del filtro N. El cálculo de los 
polos del LPF prototipo (ver BZT en capítulo 2) se realiza por medio de las funciones 
spolosxx(), para el plano-s; zpolos(), para el plano-z; y z_zerosxx() para el cálculo de los ceros 
 47
en el plano-z basados en la figura 2.6; donde xx es de LP, HP, BP o BS. Dentro de la función 
zpolos() se calcula el número de bloques de segundo orden M. 
Dentro de la función z_zerosxx() se lleva a cabo el cálculo de los coeficientes bik del 
filtro respectivo. La función coeficientes() realiza el cálculo de los coeficientes aik, donde k 
toma valores de 1, 2,..., M; i toma valores de 1 y 2 representando bloques de segundo orden. 
 
Función paquete(). 
 
Esta función realiza la creación del archivo coexxx.vhd, el cual es un paquete en 
VHDL que contiene los coeficientes del filtro en su representación de cadena de 12 bits así 
como la longitud del filtro N, en coefir.vhd, y el número de bloques de segundo orden M, en 
coeiir.vhd. Los coeficientes son asignados a las variables coe_k, para filtros FIR, y aik y bik 
para filtros IIR, donde k toma valores desde 0 hasta N – 1 y desde 1 hasta M para filtros FIR e 
IIR respectivamente; i toma valores de 1 y 2 para representar bloques de segundo orden. 
 
Función final(). 
 
Esta función simplemente presenta una pantalla indicando el valor de la longitud del 
filtro para ambos, filtros FIR e IIR. Para los filtros IIR además de la longitud, también 
presenta el número de bloques de segundo orden a utilizar. 
 
Función filtro(). 
 
Por medio de la función spawn (ver sección 3.2.1.1), la función filtro() realiza la 
ejecución de otro proceso hijo llamado lecxxx, donde xxx es de FIR o IIR. 
 
 48
 
Figura 3.11 Líneas de código de la función filtro(). 
 
3.1.1.3 Archivo lecxxx.cpp. 
 
Existen dos archivos de este tipo, lecfir.cpp y leciir.cpp. Ambos realizan la lectura de 
un archivo externo y la creación de otro, conteniendo información necesaria del proceso 
anterior (xxxfilt.cpp). La figura 3.12 muestra el diagrama de flujo de lectura y creación de 
archivos con extensión vhd. 
 
 
Figura 3.12 Diagrama de flujo de lectura y creación de archivos vhd. 
 49
Realiza la lectura del archivo prototipo protxxx.vhd el cual contiene la estructura del 
filtro, directa para filtros FIR y cascada para filtros IIR. El archivo prototipo no contiene los 
coeficientes del filtro diseñado, por lo que no habría manera de implementarlo. La tarea 
principal del lecxxx.cpp es insertar variables que relacionen los coeficientes del filtro ubicados 
en el paquete coexxx.vhd y utilizarlas en la estructura del filtro. 
Conforme se está leyendo caracter por caracter al archivo prototipo, simultáneamente 
se rescribe en un archivo nuevo, filtxxx.vhd, hasta que se encuentre con el caracter ‘*’. Una 
vez hallado dicho caracter, se interrumpe la lectura y reescritura simultánea para dar lugar a la 
inserción de las variables co(k), para filtros FIR, y co_ai(k) y co_bi(k) para filtros IIR, donde 
k toma valores desde 0 hasta N – 1, para filtros FIR, y desde 1 hasta M para filtros IIR; i tiene 
valores de 1 y 2 representando bloques de segundo orden. 
Ya insertadas estas variables, asignándoles los valores de coe_k y aik y bik, se lleva a 
cabo la finalización del archivo filtxxx.vhd, rescribiendo en él la última parte del archivo 
prototipo. 
 
3.1.2 C2VHDL descriptivo. 
 
Esta parte de C2VHDL realiza la descripción en hardware del filtro diseñado por medio 
de VHDL utilizando la estructura directa para filtros FIR y la estructura en cascada para 
filtros IIR. La figura 3.13 muestra las estructuras de los filtros. 
 
 
Figura 3.13 (a) Estructura directa para filtros FIR y (b) estructura cascada para filtros IIR. 
 50
 
Figura 3.14 (a) Estructura de un tap y (b) bloque de segundo orden. 
 
La longitud del filtro se representa por medio de los taps, donde un tap está compuesto 
por un retardo, un multiplicador y un sumador. La figura 3.14 muestra la estructura de un tap 
así como un bloque de segundo orden. 
El bloque de segundo orden está representado por dos taps, reduciendo por la mitad la 
longitud del filtro en su representación cascada. 
La figura 3.15 muestra la representación en hardware de un tap y un bloque de 
segundo orden, para filtros FIR e IIR respectivamente. 
 
3.1.2.1 Descripción de los archivos vhd. 
 
Aquí se describirán con más detalle los archivos vhd que representan las estructuras del 
filtro diseñado, resultado del proceso de C2VHDL programable. VHDL, al ser un lenguaje 
descriptivo de hardware, utiliza tanto la arquitectura comportamental (behav) como estructural 
(struct) para los componentes que describen a los filtros. La arquitectura behav describe el 
comportamiento de un proceso, y la arquitecturastruct describe la composición de varios 
elementos en un proceso. La figura 3.16 muestra un ejemplo en lenguaje VHDL tanto de la 
arquitectura behav como struct. 
 
 51
 
 
 
Figura 3.15 Representación en hardware de un (a) tap y (b) bloque de segundo orden. 
 
 
 
 
 52
Las estructuras de los filtros utilizan, en gran parte, los mismos componentes para 
describirlos. El retardo se puede representar por medio de un registro basado en flip-flops tipo 
D (FFD), el cual guarda su valor anterior hasta que se utilice un pulso. El sumador está basado 
en un sumador completo de dos bits con propagación de acarreo y el multiplicador está basado 
en el multiplicador de Booth. La figura 3.17 muestra el proceso de multiplicación así como 
una representación en hardware de dicho multiplicador. 
Por comodidad, el filtro está diseñado en arquitectura struct, es decir que los 
componentes que describen al filtro son pequeños archivos vhd, algunos descritos en 
arquitectura behav y otros también en arquitectura struct. Dichos componentes son llamados 
por medio de un paquete a través de la línea de instrucción 
 
USE work.componentes.ALL;. 
 
Esto es de mucha utilidad para el análisis global o parcial del filtro. De la misma 
manera, los coeficientes convertidos en cadena de bits son llamados por medio del paquete 
que C2VHDL programable genera al final de su proceso, cuya línea de instrucción es 
 
USE work.coexxx.ALL; 
 
 
Figura 3.16 Líneas de instrucción para describir la arquitectura (a) behav y (b) struct de un flip-flop tipo D y un 
registro de n bits respectivamente. 
 
 
 53
 
Figura 3.17 Multiplicador de Booth [4]: (a) diagrama de flujo y (b) representación en hardware. 
 
Archivo filtxxx.vhd. 
 
Como se mencionó, filtxxx.vhd contiene la descripción de la estructura del filtro, 
conformado por un lazo (loop) que genera N o M taps, y la relación de las variables que 
almacenan a los coeficientes. De esta manera, se utiliza el componente tapxxx.vhd. La figura 
3.18 muestra las líneas de código que describen a filtfir.vhd y a filtiir.vhd. 
El componente tapxxx.vhd a su vez se conforma de los componentes reg.vhd, 
full_booth.vhd y sumres.vhd, que describen a la figura 3.15. Los componentes mencionados 
también están conformados por componentes más simples que los describen. A esta 
metodología de diseño se le conoce como top-down [6]. Esta metodología es la descripción de 
un sistema desde sus elementos más básicos, siendo éstos en arquitectura behav, y en 
arquitectura struct de forma ascendente hasta el componente final. La figura 3.19 muestra esta 
metodología. 
 54
 
Figura 3.18 Descripción en VHDL de (a) filtfir.vhd y (b) filtiir.vhd. 
 
 
Figura 3.19 Metodología de diseño top-down de un sistema [6]. 
 
 
 55
El componente tapxxx.vhd se considera como el componente final, ya que filtxxx.vhd 
simplemente es la reproducción de N o M veces tapxxx.vhd. 
 
Archivos package.vhd. 
 
Los archivos package.vhd son paquetes que contienen datos, tipos de variables, 
componentes, etc., que ayudan para una mejor comprensión en el análisis de un proyecto en 
VHDL. Los paquetes son de mucha utilidad para no hacer repetitiva la declaración de una 
variable o componente dentro de un proyecto, simplemente se hace un llamado al paquete por 
medio de la instrucción 
 
USE work.package.ALL; 
 
Los paquetes utilizados para el filtro son utilidades.vhd, componentes.vhd y 
coexxx.vhd. El paquete utilidades.vhd contiene la declaración de subtipos y tipos de variables 
de std_logic_vector, un tipo de variable estándar de VHDL. Este tipo de variables son 
utilizados para representar cadenas de 12 bits, 24 bits y arreglos de matrices de ambos. Esto es 
de utilidad para evitar confusiones dentro de los archivos vhd. 
El paquete componentes.vhd contiene la declaración de los componentes y elementos 
básicos, de esta manera no es necesario declarar elemento por elemento a utilizar dentro de 
cada archivo vhd. 
El paquete coexxx.vhd contiene tanto la longitud del filtro como los coeficientes 
calculados y representados en cadena de 12 bits. Este último es creado como resultado de 
C2VHDL programable. 
 
 
 
 
 
 
 56
Conclusiones. 
 
La implementación de un filtro digital no es tan sencilla como parece. Aunque existen 
programas que facilitan la ayuda del cálculo de los coeficientes del filtro, no se ha 
desarrollado un programa que facilite el diseño e implementación de una manera transparente 
al usuario. 
Por tal motivo, C2VHDL es realizado a base de programas en los cuales el cálculo de 
los coeficientes, la representación en bits de los mismos, y la creación de los archivos vhd para 
la rápida implementación es algo que el usuario no percibe y facilita su óptimo diseño con una 
gran eficiencia. 
 57
Capítulo 4. Ejemplos de aplicación de C2VDHL 
 
En el presente capítulo se mostrarán los resultados obtenidos de las simulaciones 
realizadas en MAX+PLUS® II de ALTERA® de los filtros pasa bajas, pasa altas, pasa banda 
y rechaza banda así como se hará una comparación con resultados obtenidos por medio de 
software. 
El comportamiento de los filtros será analizado por medio de la transformada discreta 
de Fourier (TDF) y será comparada con la TDF de la señal de entrada propuesta. 
 
4.1 Filtros FIR. 
 
La señal de entrada propuesta para los filtros FIR es la suma de tres señales sinusoidales 
de 0.45, 3.1 y 5.8 kHz con una frecuencia de muestreo de 12 kHz. La figura 4.1 muestra dicha 
señal así como su TDF. 
 
4.1.1 Filtro pasa bajas (LPF). 
 
Se propuso un filtro con una frecuencia de corte (fc) de 1491.5 Hz con una frecuencia 
de rechazo de 2483 Hz y una frecuencia de muestreo de 12 kHz, con un rizo de 2 dB y una 
atenuación de 25 dB utilizando la ventana de Hamming. La figura 4.2 muestra la respuesta en 
frecuencia del filtro. 
Al utilizar C2VHDL resulta un filtro de orden 21. Se observa que la atenuación en la 
frecuencia de rechazo es aproximadamente de 46.5 dB, basándose en la tabla 2.5, y la 
frecuencia de corte atenúa en aproximadamente 5.99 dB, indicando que nuestro diseño está 
correcto1. La figura 4.3 muestra el resultado esperado, tanto la señal de salida como su TDF, 
realizado por software. La figura 4.4 muestra la señal de salida como su TDF del resultado 
obtenido de la simulación en MAX+PLUS® II de ALTERA®. 
 
 
1 Ver figura 20.7 de [3]. 
 58
 
Figura 4.1 (a) Señal de entrada y (b) su TDF. 
 
Observamos que la señal de salida en la figura 4.4(a) no es tan clara como en la figura 
4.3(a), esto se debe a que el método de conversión de datos binarios no es exacto, además de 
que existe un truncamiento de los mismos para su aplicación. Este efecto puede observarse en 
la figura 4.4(b), el cual permite pasar una alta frecuencia con una gran atenuación, mientras la 
figura 4.3(b) permite paras únicamente las bajas frecuencias. 
 59
 
Figura 4.2 Respuesta en frecuencia del filtro pasa bajas. 
 
4.1.2 Filtro pasa banda (BPF). 
 
Para este ejemplo se propuso diseñar un filtro con frecuencias de corte fc1 = 2.2 kHz y 
fc2 = 4.1 kHz, con frecuencias de rechazo fs1 = 1.6 kHz y fs2 = 4.7 kHz, a una frecuencia de 
muestreo de 12 kHz con un rizo de 2 dB y una atenuación de 20 dB, utilizando una ventana 
Coseno. Se obtuvo un filtro de orden 21. Las figuras 4.5 y 4.6 muestran tanto la señal de 
salida como su TDF obtenidas por software y simulado en MAX+PLUS® II respectivamente. 
Observamos de nuevo en la figura 4.6(b) que frecuencias altas y bajas con una 
considerable atenuación están presentes, y esto se debe a la representación no exacta de los 
datos en binario. La figura 4.7 muestra la respuesta en frecuencia del filtro pasa banda, donde 
se observa que las frecuencias de rechazo se atenúan en 31.25 y 33.28 dB respectivamente. 
Las frecuencias de corte se atenúan a 6.029 y 5.93 dB respectivamente,

Continuar navegando