implementaciÓn de filtros digitales en lÓgica …

103
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

Upload: others

Post on 07-Nov-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 2: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …
Page 3: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …
Page 4: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 5: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 6: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 7: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 8: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 9: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 frecuencia del 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

Page 10: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 11: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 12: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 13: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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+PLUSII 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

Page 14: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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ño de 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.

Page 15: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 16: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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()( NparNNn

imparNNnnNhnh α

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.

Page 17: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 cosN

n

Nj nnae ωω

1

Simetría Positiva,

)1()( nNhnh −−=

Par ( ) ( ) ( )[ ]∑

=

−− −2/

1212/1 cos

N

n

Nj nnbe ωω

2

Impar ( )[ ] ( ) ( )

( )

∑−

=

−−−2/1

1

2/2/1 sinN

n

Nj nnae ωπω

3

Simetría Negativa,

)1()( nNhnh −−−=

Par ( )[ ] ( ) ( )[ ]∑

=

−−− −2/

1212/2/1 sin

N

n

Nj nnbe ωπω

4

]2/)1[(2)(];2/)1[()0( nNhnaNha −−=−=

)2/(2)( nNhnb −=

Page 18: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

−−

=21 π (2.6)

donde T es el periodo de muestreo.

Page 19: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 muestra un 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

Page 20: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

njdd enhH ωω (2.9)

Page 21: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Nnnw

,01,,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

,01,,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

Page 22: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

13

( ) ∫∫ −−=×= c

c

dedenh njnjd

ω

ω

ωπ

π

π

ωπ ωω 2

121 1

( )∞≤≤∞−≠= nn

nnf

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.

Page 23: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

cc n

nf

ωωsin

2

cf2

Pasa altas ( )

c

cc n

nf

ωωsin

2−

cf21−

Pasa banda ( ) ( )

1

11

2

22

sin2sin2ωω

ωω

nnf

nnf −

( )122 ff −

Rechaza banda ( ) ( )

2

22

1

11

sin2

sin2

ωω

ωω

nn

fn

nf −

( )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].

Page 24: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

−1cos

Nnπ

Riemann 0,1

2>

−L

NnSa L π

Barlett (Triangular) 12

1−

−N

n

Von Hann (Hanning)

−+

12cos5.05.0N

Hamming

−+

12cos46.054.0N

Blackman

−+

−+

14cos08.0

12cos5.042.0

Nn

Nn ππ

Kaiser ( )[ ]( )

( )πβπβ

0

20 1/41

INnI −−

( ) ( )t

ttSaωωω sin

= ; ( ) ( ) 25,!2/1

1

2

0 <

+= ∑

=

Lk

xxIL

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 ffCN−

= (2.15)

Page 25: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 δ:

110110

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

dBAF

A

N21,19222.0

21,136.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 la siguiente manera

( ) ( )( )

≥−<<−+−≤

=dBAAdBAdBAAdBA

50,7.81102.05021,2107886.0215842.021,0

4.0β (2.19)

Page 26: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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,,

+∆−∆

≈ ∞ FfF

DN sp

sp δδδδ

(2.20)

donde

( ) ( )[ ]31022

10110 logloglog, aaaD ppssp ++=∞ δδδδδ

( )[ ]61052

104 loglog aaa pp +++ δδ

( ) [ ]spspf δδδδ 1010 loglog51244.001217.11, −+=

16

15

34

13

22

31

10278.4;10941.51066.2;10761.4

10114.7;10309.5

−−

−−

−−

×−=×−=×−=×−=×=×=

aaaaaa

Filtro pasa banda (Mintzer and Liu, 1979)

Page 27: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

18

( ) ( ) 1,,

+∆+∆

≈ ∞ FgF

CN sp

sp δδδδ

(2.21)

donde

( ) ( )[ ]31022

10110 logloglog, bbbC ppssp ++=∞ δδδδδ

( )[ ]61052

104 loglog bbb pp +++ δδ

( ) 9.16log6.14, 10 −

−=

s

pspg

δδ

δδ

44314.0;5705.000203.0;51325.009664.0;01201.0

65

43

21

−=−==−===

bbbbbb

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,

Page 28: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 29: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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]

Page 30: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

21

2.2 Filtros de Respuesta al Impulso Infinito (IIR).

Los filtros digitales IIR están caracterizados por la siguiente ecuación recursiva:

( ) ( ) ( ) ( ) ( )∑∑∑==

=

−−−=−=M

kk

N

kk

k

knyaknxbknxkhny100

(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

kk

N

k

kk

MM

NN

za

zb

zazazbzbb

zH

1

01

1

110

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

Page 31: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

22

( ) ( )( ) ( )( )( ) ( )M

N

pzpzpzzzzzzzK

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

Page 32: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

23

Figura 2.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 102

10 (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].

Page 33: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 34: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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):

=′

2tan

Tpp

ωω (2.27a)

=′

=′

2tan;

2tan 2

21

1

TT pp

pp

ωω

ωω (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)

ss pω′= LP2HP (2.28b)

Wss

s20

2 ω+= LP2BP (2.28c)

20

2 ω+=

sWss LP2BS (2.28d)

Page 35: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

26

donde

121220 , 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:

11

+−

=zzs

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

pp

H 22

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

pp

ps

A

A

p

s

N

ωω

log2

110

110log10

10

(2.30)

Page 36: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

12sin2

12cos2/12

−+

+

−+

== −+

NNkj

NNkes NNkj

kπππ

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:

( ) ( )pNCKH

ωωεω

′′+=′

222

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 102

10 (2.32b)

Page 37: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

28

El orden del filtro N está dado por

≥−

pp

ps

A

A

p

s

N

ωω1

10

101

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

( ) NkNNk

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

Page 38: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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).

Page 39: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

kbkl Ws

ss

,

20

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 2120 ωωω ′′=

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.

Page 40: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

31

Resolviendo para sb,k se llega a la siguiente expresión para los polos analógicos pasa

banda:

−±=

21

2

202

,,,4

2 WssWs 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:

20

2,

., ω+=

kr

krkl s

Wss (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

202

,1,,

42 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

Page 41: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

kpkp s

sz

,

,, 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

kzkz s

sz

,

,, 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:

Page 42: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

33

( ) ( )( )( )( )∗

−−

−−=

kpkp

kzkzi zzzz

zzzzzH

,,

,, (2.43a)

22

11

22

11

11

−−

−−

++++

=zazazbzb

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.

Page 43: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.020002

2002tan2

tan 1'1 =

××

=

=

πωω

T

5095.020002

3002tan2

tan 2'2 =

××

=

=

πωω

T

De esta manera ω0 y W están determinadas por

1846.0,1655.0 '1

'2

'2

'1

20 =−=== ωωωωω W

El polo simple para el LPF es transformado en dos polos para el BPF, usando la

ecuación 2.38 como sigue:

Page 44: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

35

( )( )

×−−+−=

21

22

1, 1846.01655.0411

21846.0

bs

= −0.0923 + 0.4172j

( )( )

×−−−−=

21

22

2, 1846.01655.0411

21846.0

bs

= −0.0923 − 0.4172j = ∗1,bs

De la transformación BZT, ecuación 2.41, se tiene

jjjz p 6103.05979.0

4172.00923.014172.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 zzzzzzzH−−+−

=

21

2

2

2

7995.01958.111

7995.01958.11

−−

+−−

=+−

−=

zzz

zzz

Page 45: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 46: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 la que 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.

Page 47: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 48: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 49: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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++.

Page 50: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 51: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 52: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 53: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 54: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 datos simplemente 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

Page 55: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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

Page 56: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 57: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 58: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 59: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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 arquitectura struct 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.

Page 60: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

51

Figura 3.15 Representación en hardware de un (a) tap y (b) bloque de segundo orden.

Page 61: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 62: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 63: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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].

Page 64: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 65: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 66: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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].

Page 67: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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.

Page 68: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

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, lo que indica que

nuestro diseño está correcto (ver nota 1).

Page 69: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

60

Figura 4.3 (a) Señal de salida y (b) su TDF realizado por software de un LPF.

4.1.3 Filtro rechaza banda (BSF).

Otro diseño propuesto fue en filtro con frecuencias de corte fc1 = 1737 Hz y fc2 = 4263

Hz, frecuencias de rechazo fs1 = 2 kHz y fs2 = 4 kHz, frecuencia de muestreo de 12 kHz con un

rizo de 2dB y una atenuación de 13 dB, utilizando una ventana rectangular. Se obtiene un

filtro de orden 21. Las figuras 4.8 y 4.9 muestran la señal de salida y su TDF obtenida por

software y simulado en MAX+PLUS® II respectivamente.

Page 70: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

61

Figura 4.4 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un LPF.

De la figura 4.8(b) se observa que la frecuencia media tiene ganancia de

aproximadamente 2.06 dB, mientras que en la figura 4.9(b) se observa que dicha frecuencia

tiene una ganancia de aproximadamente 3.35 dB. Significa que las frecuencias medias se

atenúan adecuadamente, sin embargo, las frecuencia bajas y altas también se atenúan en más

del 50 % con respecto a la señal obtenida por software, indicativo de que el multiplicador

utilizado afecta considerablemente para algunos filtros.

Page 71: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

62

Figura 4.5 (a) Señal de salida y (b) su TDF realizado por software de un BPF.

La figura 4.10 muestra la respuesta en frecuencia del filtro propuesto, de la cual se

observa que las frecuencias de rechazo se atenúan en 19.67 y 19.73 dB respectivamente,

mientras que las frecuencias de corte se atenúan en 6.21 y 6.21 dB respectivamente, indicando

que nuestro diseño está correcto (ver nota 1).

Page 72: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

63

Figura 4.6 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un BPF.

4.1.4 Filtro pasa altas (HPF).

Se propuso el diseño de un filtro con una frecuencia de corte fc = 4582.5 Hz, frecuencia

de rechazo fs = 3665 Hz y una frecuencia de muestreo de 12 kHz, con un rizo de 2 dB y una

atenuación de 25 dB utilizando una ventana Hanning. Se obtuvo un filtro de orden 21. La

figura 4.11 muestra la respuesta en frecuencia del filtro, de la cual se observa que la

Page 73: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

64

Figura 4.7 Respuesta en frecuencia del filtro pasa banda.

frecuencia de rechazo se atenúan en 40.95 dB, mientras la frecuencia de corte se atenúa en

6.02 dB, indicando que el diseño es correcto (ver nota 1).

Las figuras 4.12 y 4.13 muestran la señal de salida y su TDF obtenida por software y

simulado en MAX+PLUS® II respectivamente.

En la figura 4.13(b) se observa que las frecuencias bajas tienen una ganancia de 2.16 y

7.42 dB, lo cual afecta en la señal de salida, sin embargo la frecuencia deseada obtuvo mayor

ganancia. También se observa de las figuras 4.12(a) y 4.13(a) que la señal parece estar

modulada, esto se debe a que la señal de entrada original está muestreada a una frecuencia

mayor que la frecuencia más alta.

Page 74: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

65

Figura 4.8 (a) Señal de salida y (b) su TDF realizado por software de un BSF.

Page 75: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

66

Figura 4.9 (a) Señal de salida y (b) su TDF simulado en MAX+PLUS® II de un BSF.

Page 76: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

67

Figura 4.10 Respuesta en frecuencia del filtro rechaza banda.

Figura 4.11 Respuesta en frecuencia del filtro pasa altas.

Page 77: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

68

Figura 4.12 (a) Señal de entrada y (b) su TDF realizado por software de un HPF.

Page 78: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

69

Figura 4.13 (a) Señal de entrada y (b) su TDF simulado en MAX+PLUS® II de un HPF.

Page 79: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

70

Conclusiones.

De los ejemplos anteriores, observamos que el orden del filtro en todos los casos es de

21. Para realizar las simulaciones se utilizó el dispositivo EPF10K70RC240-2 de ALTERA®,

el cual contiene 3,744 elementos lógicos (LE’s) [10], lo que nos permite un orden de filtro

limitado. En todos los casos, los filtros ocupan un 83 % del dispositivo, por lo que si se

quisiera aumentar el orden o añadir hardware para un control automático no podría

implementarse en el mismo.

Page 80: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

71

Conclusiones.

En la presente investigación se realizó una interfaz de usuario para el óptimo diseño de

filtros digitales con posibilidad de implementarlos en hardware a través de dispositivos

FPGA. El diseño y simulación de los filtros FIR lo pudimos observar en el capítulo 4, donde

los resultados obtenidos por medio de MAX+PLUS® II de ALTERA® son comparados con

resultados obtenidos a través de software, observando el comportamiento de los filtros

simulados en hardware.

Esta diferencia de resultados es debida a un truncamiento de datos; al hacer la

multiplicación de 12 por 12 bits obtenemos una salida de 24 bits, la cual para una aplicación

real no sería óptima, aunque sí exacta. Para obtener una salida de 12 bits simplemente se

eliminaron los 12 bits menos significativos, provocando error en la información; aunado a

esto, la conversión de los datos a su representación en cadena de bits también tiene una

pérdida en la información, ya que al usar el formato mencionado en la tabla 3.1 obtenemos un

valor mínimo 0000 0000 0001h (≈ 0.000488), así como un valor máximo de 0111 1111 1111h

(≈ 0.999511), permitiendo un rango total de –0.999511 (1000 0000 0001h) a 0.999511 (0111

1111 1111h) con un incremento de aproximadamente 0.000488.

Aunque esta pérdida de información pueda ser mínima, el efecto es considerable, como

se observa en la figura 4.4(a), mientras que en otros casos es poco visible este efecto, como

puede observarse en las figuras 4.6(a) y 4.13(a).

El dispositivo utilizado permite un orden de filtro limitado, por lo cual se tuvo que

escoger, en cada caso, una frecuencia de corte para que el orden del filtro fuera 21, no

permitiendo el diseño deseado ni tampoco el incremento del orden del filtro.

Debido a que la estructura de los filtros IIR ocupa más espacio en hardware, para un

diseño eficiente se necesita un orden de filtro adecuado, diseñando el mismo filtro pasa bajas

con una aproximación Butterworth, el orden del filtro resultó ser 2, necesitando un bloque de

segundo orden, sin embargo, a pesar de ser de orden pequeño, el filtro no cupo dentro del

dispositivo elegido.

Page 81: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

72

Para resolver esta necesidad, se utilizó un dispositivo más grande. El dispositivo

XC3S500E de la familia SPARTAN®-3E de XILINX®, que contiene 1,164 bloques lógicos

configurables (CLB’s) [11], nos permitió diseñar filtros FIR con un máximo orden de 77,

ocupando aproximadamente el 93 % del dispositivo.

La tarjeta de desarrollo de SPARTAN®-3E (S3ESK, SPARTAN®-3E Starter Kit)

contiene el dispositivo utilizado, así como hardware adicional como son convertidores

analógico a digital (ADC) y digital a analógico (DAC), con interfaz periférica serial (SPI), de

14 y 12 bits respectivamente.

Para la implementación de los filtros en la tarjeta S3ESK fue necesario utilizar el

procesador de propósito general PicoBlaze®, kcpsm3®, para controlar las señales del filtro,

como son C, el reloj del filtro; S, la señal de inicio de filtrado; R, el reset del multiplicador y

RT, el reset general del filtro. Se adicionó hardware como son registros SIPO (entrada serial,

salida paralela) y PISO (entrada paralela, salida serial) para interactuar con los convertidores

a través de kcpsm3®.

El reloj del filtro controlado por kcpsm3® operó a 3.3333 MHz; sin embargo no fue un

reloj continuo, es decir, no estuvo operando todo el tiempo el filtro; al mismo tiempo también

fue controlado por la señal de salida U propia del filtro, la cual indica el inicio y fin del

proceso de filtrado, logrando así tener el resultado en el registro PISO. Al momento de tener

el dato a filtrar a la salida del registro SIPO, se da un pulso ascendente a la señal S y así

comenzar el proceso de filtrado. La figura 1 muestra una foto de las señales C y U del filtro,

las cuales indican el reloj y el tiempo de filtrado a través de un osciloscopio.

Una vez implementado todo esto, no se logró obtener una señal clara debido a que el

modo de operación de los datos dentro del filtro es en complemento a dos con longitud de

palabra de 12 bits, siendo que el ADC opera del mismo modo pero con longitud de palabra de

14 bits. Sin embargo, el DAC opera en modo normal, sin complemento a dos, pero con

longitud de palabra de 12 bits.

Además, al operar a la máxima frecuencia de muestreo del ADC que es de 1.5 MHz, se

provocó también que no se garantizara el proceso de conversión1[37].

1 Ver PicoBlize_Amplifier_and_ADC_ control_rev2.pdf para la tarjeta S3ESK.

Page 82: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

73

Figura 1 Fotografía de las señales C (arriba) y U (abajo) del filtro a través de un osciloscopio.

Mejoras a C2VHDL y la utilización del hardware.

Las necesidades de cada aplicación no siempre siguen un patrón específico, dando como

resultado utilizar dispositivos, así como crear programas, diferentes para satisfacer cada una

de ellas.

C2VHDL fue creado para diseñar filtros de propósito general así como alguna aplicación

específica, también para facilitar la tarea de diseñar e implementar filtros de una manera

transparente al usuario sin que tenga que hacer el diseño en hardware de los mismos. Sin

embargo, si se desea utilizar dispositivos ADC’s o DAC’s con diferente longitud de palabra, o

simplemente con diferente modo de operar los datos, no se tendrían los resultados adecuados,

tal como en el caso de la tarjeta S3ESK.

Como trabajo futuro para el desarrollo de C2VHDL, puede ampliarse el programa de

manera tal que exista una opción para diseñar filtros con diferente longitud de palabra y/o

modo de operar los datos para diferentes dispositivos comerciales o de uso específico.

Page 83: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

74

También tener la opción de trabajar con diferentes estructuras tanto para filtros FIR como

IIR, también diseñar filtros adaptables, especificar la velocidad de conversión del ADC a

utilizar, así como utilizar kcpsm3® para el control de los filtros o que el mismo programa

pueda crear hardware adecuado para el óptimo desempeño del filtro al momento de

implementarlo.

Una de las mejoras que se puede hacer al hardware del filtro, es utilizar multiplicadores

más óptimos en el aspecto de otorgar un resultado en un tiempo menor así como la fácil

sintetización a la hora de compilar el VHDL, tratando de lograr un espacio más reducido en el

dispositivo FPGA a utilizar y al mismo tiempo tener la opción de incrementar el orden del

filtro.

También poder realizar un filtro en modo sincrónico o asincrónico, es decir, que pueda o

no trabajar óptimamente con un reloj o sin él. Esto sería bastante útil para aplicaciones en las

que el ahorro de energía es el principal objetivo.

Page 84: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

75

Bibliografía.

[1] E. C. Ifeachor, B. W. Jervis, Digital signal processing. A practical approach. NJ:

Prentice Hall, 2002 pp. 318-366.

[2] J. G. Proakis, D. G. Manolakis, Tratamiento digital de señales. Principios, algoritmos

y aplicaciones. NJ: Prentice Hall, 1998, pp. 509-639.

[3] A. Ambardar, Procesamiento de señales analógicas y digitales. NJ: Thomson

Learning, 2002 pp. 715-753.

[4] M. M. Mano, Arquitectura de computadoras. NJ: Pearson Educación, 1994, pp. 366-

369.

[5] R. J. Tocci, Sistemas Digitales. Principios y Aplicaciones. NJ: Prentice Hall, 1993, pp.

248–393.

[6] F. Pardo, J. A. Boluda, VHDL. Lenguaje para síntesis y modelado de circuitos. SP:

Alfaomega, 2000, pp. 83-107.

[7] F. J. Ceballos, Enciclopedia del lenguaje C. SP: Alfaomega, 1997, pp. 315-354.

[8] M. B. I. Reaz, M. T. Islam, M. S. Sulaiman, M. A. M. Ali, H. Sarwar, S. Rafique,

“FPGA Realization of Multipurpose FIR Filter,” in Proc. 4th Int. Conf. Parallel and

Distributed Computing, Applications and Technologies, PDCAT’03, pp. 912-915.

[9] V. S. Lin, R. J. Speelman, C. I. Daniels, E. Grayver, P. A. Dafesh, “Hadware

Accelerated Simulation Tool (HAST),” presented at the Aerospace, IEEE Conference,

2005.

[10] ALTERA. (2003, Enero). FLEX 10k. Embedded Programmable Logic Device Family.

Data Sheet [Online]. (ver. 4.2), pp. 1–19.

Disponible: http://www.altera.com/literature/lit-f10.jsp

[11] XILINX. (2006, Octubre). Spartan-3E FPGA Family: Complete Data Sheet.

Preliminary Product Specification. Pp. 21 – 34.

Disponible: http://direct.xilinx.com/bvdocs/publications/ds312.pdf

[12] D. G. Maxinez, J. Alcalá, VHDL. El arte de programar sistemas digitales. MX:

CECSA, 2002, pp. 123-146.

Page 85: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

76

[13] ALTERA. (1998, Febrero). Implementing FIR filters in FLEX devices. Application

Note [Online]. (73), pp. 1-24.

Disponible: http://www.altera.com/literature/lit-an.jsp

[14] ALTERA. (1997, Abril). Binary numbering systems. Application Note [Online]. (83),

pp. 1-16.

Disponible: http://www.altera.com/literature/lit-an.jsp

[15] A. Martínez, “Análisis de arquitecturas de multiplicadores digitales y su

implementación en FPGA”, M.Sc. Thesis, Microelect. Eng. Program, ESIME IPN,

Mexico City, Mexico, 2005.

[16] ALTERA. (1996, Enero). fp_mult. Floating-Point Multiplier. Functional Specification

[Online]. (4), pp. 1–8.

Disponible: http://www.altera.com/literature/lit-fs.jsp

[17] M. Bhattacharya, T. Saramäki, “Allpass Structures For Multiplierless Realization Of

Recursive Digital Filters,” in Proc. Int. Symposium on Circuits and Systems,

ISCAS’03, pp. IV-237 – IV-240.

[18] Jean-Pierre Deschamps, G. J. A. Bioul, G. D. Sutter, Synthesis of Arithmetic Circuits.

FPGA, ASIC and Embedded Systems. NY: Wiley-Interscience, 2006, pp. 39–108.

[19] P. P. Chu, RTL Hardware Design Using VHDL. Coding for Efficiency, Portability, and

Scalability. NY: Wiley-Interscience, 2006, pp. 373–498.

[20] G. L. Bates, S. Nooshabadi, “FPGA Implementation of a Median Filter,” in Proc. of

IEEE Region 10 Annual Conf., TENCON ’97, pp. 437–440.

[21] J. F. Warkely, Diseño Digital. Principios y Prácticas. NJ: Prentice Hall, 2001, pp.

659–894.

[22] R. Lyons, “Interpolated Narrowband Lowpass FIR Filters,” IEEE Signal Processing

Magazine, Vol. 20, No. 1, pp. 50–57, Jan. 2003.

[23] S. J. Ovaska, O. Vainio, T. I. Laakso, “Design of Predictive IIR Filters Via Feedback

Extension of FIR Forward Predictors,” in Proc. 38th Midwest Symposium on Circuits

and Systems, MWSCAS 1995, pp. 370–375.

[24] Y. Neuvo, C. –Y. Dong, S. K. Mitra, “Interpolated Finite Impulse Response Filters,”

IEEE Trans. Acoust., Speech, Signal Process., Vol. ASSP-32, pp. 563-570, June 1984.

Page 86: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

77

[25] O. Gustafsson, H. Johansson, L. Wanhammar, “Design and efficient implementation of

high-speed narrow-band recursive digital filters using single filter frequency masking

techniques,” in Proc. IEEE Int. Symposium on Circuits and Systems, ISCAS 2000, pp.

359–362.

[26] R. Brennan, T. Schneider, “A Flexible Filterbank Structure for Extensive Signal

Manipulations in Digital Hearing Aids,” in Proc. IEEE Int. Symposium on Circuits and

Systems, ISCAS ’98, pp. 569–572.

[27] J. Sparsø, S. Furber, Principles of Asynchronous Circuit Design. A Systems

Perspective. The Netherlands: Kluwer Academic Publishers, 2001, pp.123–154.

[28] A. Benveniste, G. Berry, “The Synchronous Approach to Reactive and Real-Time

Systems,” Proceedings of the IEEE, Vol. 79, No. 9, pp. 1270–1282, Sept. 1991.

[29] M. Ligthart, K. Fant, R. Smith, A. Taubin, A. Kondratyev, “Asynchronous Design

Using Commercial HDL Synthesis Tools,” in Proc. 6th Int. Symposium on Advanced

Research in Asynchronous Circuits and Systems, ASYNC 2000, pp. 114–125.

[30] Chiu-Sing Choy, J. Butas, J. Povazanic, Cheong-Fat Chan, “A New Control Circuit for

Asynchronous Micropipelines,” IEEE Trans. on Computers, Vol. 50, No. 9, pp. 992–

997, Sept. 2001.

[31] V. A. Bartlett, E. Grass, “A Low-Power Asynchronous VLSI FIR Filter,” in Proc.

Conf. on Advanced Research in VLSI, ARVLSI 2001, pp. 29–39.

[32] S. Nooshabadi, J. A. Montiel-Nelson, “Design and Implementation of an Ultra-Fast

Asynchronous FIR Filter in GaAs,” in Proc. of IEEE, TENCON ’96, pp. 256–260.

[33] R. Sridhar, “Asynchronous Design Techniques,” in Proc. of 5th Annual IEEE Int.

ASIC Conference and Exhibit, ASIC 1992, pp. 296–300.

[34] H. van Gageldonk, K. van Berkel, A. Peeters, D. Baumann, D. Gloor, G. Stegmann,

“An Asynchronous Low-Power 80C51 Microcontroller,” in Proc. 4th Int. Symposium

on Advanced Research in Asynchronous Circuits and Systems, ASYNC 1998, pp. 96–

107.

[35] S. Hauck, “Asynchronous Design Methodologies: An Overview,” Proceedings of the

IEEE, Vol. 83, No. 1, pp. 69–93, Jan. 1995.

Page 87: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

78

[36] L. S. Nielsen, J. Sparsø, “Designing Asynchronous Circuits for Low Power: An IFIR

Filter Bank for a Digital Hearing Aid,” Proceedings of the IEEE, Vol. 87, No. 2, pp.

268–281, Feb. 1999.

[37] LINEAR TECHNOLOGY. (2004). Serial 12-Bit/14-Bit, 3Msps Simultaneous

Sampling ADCs with Shutdown. Data Sheet. Pp. 1–24.

[38] LINEAR TECHNOLOGY. (2004). Quad 16-Bit Rail-to-Rail DACs in 16-Lead SSOP.

Data Sheet. Pp. 1–16.

[39] LINEAR TECHNOLOGY. (2004). Dual Programmable Gain Amplifiers with Serial

Digital Interface. Data Sheet. Pp. 1–24.

[40] Spartan-3E Starter Kit Board User Guide, Xilinx, 2006, pp. 9–164.

Page 88: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

79

Apéndice A. Publicaciones.

C2VHDL: FPGA FIR filters implementation and design program

Rodrigo Cruz González, Gonzalo I. Duchén Sánchez, Juan Carlos Sánchez García Instituto Politécnico Nacional, ESIME Culhuacán Sección de Estudios de Posgrado e Investigación

Av. Santa Ana No. 1000, Col. San Fco. Culhuacán, CP. 04830 México D.F., México

Phone (55) 5845-8642, Fax (55) 5656-2058 E-mail: [email protected], [email protected]

Abstract – In the present paper a C++ program to design and implement FIR filters in FPGA with the windowing method is presented. Given the desired filter specifications, the designed filter in VHDL is obtained and then is implemented in some commercial FPGA system. A low pass and band stop filters are proposed, doing a comparison between the VHDL and C++ results. Finally we conclude with the implementation in FPGA devices emphasizing on the filter effectiveness.

Keywords – C++, FIR Filters, FPGA, VHDL, windowing.

I. INTRODUCTION

A FIR filter is represented by an impulse response sequence h(k) and when a convolution is made with an input signal x(k) the filtered signal y(k) (1) is obtained.

∑−

=

−=1

0

)()()(N

k

knxkhny (1)

The impulse response sequence represents the filter

coefficients, which can be calculated to generate a low pass, high pass, band pass or band stop filter using the windowing method.

Figure 1 shows a FIR filter direct form. We can see that the number of multiplications and taps is the same.

Fig. 1. FIR filter direct form.

II. DATA REPRESENTATION

VHDL implementation makes use of digital multipliers, thus bits must represent data. In this paper we use the Booth’s digital multiplier [4, 12], which allows the use of negative and positive numbers in two’s complement mode.

The natural form of data is very unusual because VHDL

is a description language for digital systems. This is the reason that bits, with MSB indicating the sign, represent data. We use 12 bits in order to represent data.

The format to represent a floating-point number

involves three features: the sign, the 11 bits mantissa representing the floating-point number and the exponent that gives a better precision to data. The eleven bits mantissa has an excess of –11 with regard to numeric binary representation (see Table I).

III. DESIGNING FILTERS

C2VHDL is a program which makes an important

interconnection between a filter’s software-design and implementation in hardware.

In order to design FIR filters using windowing method, we use C2VHDL which accepts the filter specifications like pass and stop frequencies, band pass and band stop attenuations and sampling frequency. Based on this specifications, the program choices the type of filter, low pass, high pass, band pass or band stop (see figure 2).

Page 89: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

80

TABLE I NUMERIC BINARY REPRESENTATION

Position

Normal 10 9 8 7 6 5 4 3 2 1 0 Excess -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11

Depending on the band stop attenuation, the program

allows to choice of the window to be used, in the example shown a Hamming window is used.

The windows to be selected (figure 3) are Boxcar (Rectangular), Cosine, Riemann, Barlett, Von Hann (Hanning), Hamming, Blackman and Kaiser [2].

Fig. 2. Window of the BSF parameters given at C2VHDL.

Fig. 3. Windows proposed at C2VHDL.

Based on these parameters, the program calculates both

the length and coefficients of filter; the coefficients are converted in its bits representation; after this, it creates a file in VHDL format where these results will be inserted. It also reads a file in VHDL format, which contains the filter structure.

Fig. 4. Architecture pattern in VHDL format.

After all this process, it generates both the package and filter in VHDL format. The package contains the length and coefficients of filter; the filter contains the structure, which is simulated in Altera®. Figure 5 shows the package used for a filter with length 17.

The filter file (figure 6) is the architecture obtained of the C++ program, which makes a reference to the parameters, contained in the package file. This architecture is the filter structure in direct form.

Fig. 5. Package in VHDL format.

Page 90: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

81

Fig. 6. Architecture of the filter structure in VHDL format.

IV. FILTER’S IMPLEMENTATION

In order to implement the filter, we designed a low pass and a band stop filters. The input signal (figure 7) is the sum of three sinusoidal signals at 0.45, 1.5 and 5.8 kHz. This input was selected randomly in order to represent a distorted signal, which is filtered for a subsequent process.

The specifications given are a pass frequency (fp) = 500 Hz, stop frequency (fs) = 600 Hz with a sampling frequency (F) = 10 kHz, indicating that is a low pass filter (LPF) which band pass and band stop attenuations are Ap = 4 dB and As = 45 dB respectively. The As indicates we can use the Hamming window; the filter’s length is rated at 17.

Figure 8 shows the filtered signal obtained in both C++

and VHDL simulation.

Fig. 7. Input Signal.

(a)

(b)

Fig. 8. LPF in (a) C++ and (b) VHDL.

Figure 9 shows the LPF frequency response in which

the band pass attenuation is 3.73 dB and the band stop attenuation is 48.9 dB. These data indicate our filter is correct.

We designed other filter with parameters given as fp = [0.8, 3.3] kHz, fs = [1.1, 3] kHz and F = 10 kHz. These specifications indicate that it is a band stop filter (BSF). The attenuations are Ap = 4 dB and As = 45dB. The length is rated at 21.

Figures 10 and 11 show the filtered signal in C++ and

VHDL simulation and frequency response respectively.

Fig. 9. LPF frequency response.

Page 91: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

82

Figure 11 shows the band pass and band stop

attenuations at 3.73 dB and 44.54 dB respectively, indicating that the filter is correct.

The results obtained indicate that any type of filter can

be designed and implemented in VHDL, ensuring the effectiveness they have.

(a)

(b)

Fig. 10. BSF in (a) C++ and (b) VHDL.

Fig. 11. BSF frequency response.

Finally, the program shows to user the directory which files in VHDL format are saved and a few instructions about the correct form of the files’ compilation.

Fig. 12. Window of the directory where files are saved.

In this case, Altera’s Maxplus+II was used, the

directory above mentioned is referred to this software. The user has the option to chose the directory referring the software used.

Page 92: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

83

V. CONCLUSIONS

In order to implement digital filters we must bear its specifications in mind, because depending on what design method we use, the filter length can increase or decrease. For example, we use a ratio that involves transition width (fs - fp) and a constant C in order to calculate the filter’s length N [2, 3]. Nevertheless, the method most used in order to calculate N is based on Kaiser window [2, 3].

The FPGA device used in this work was an ALTERA®

EPF10K70RC240-2, which is an small one and depends on N because the structure allows to make designs with a limited number of N. For example, BSF has an N of 21 that takes up 83 % of logic cells contained in this device. If we increase N, it will cause logic cells not to be enough in order to synthesize it. XILINX® devices of the SPARTAN® 3 family will also be used in order to test the filters.

Although there are a lot of programs in order to design FIR filters, they are not as simple and easy to use like this one. The contribution of this system is that it permits to interconnect both the calculation by software and the implementation by hardware.

The user inserts the specifications of the required filter,

and the result obtained is a filter in VHDL format which can be simulated and implemented using vendor programs like ALTERA’s Maxplus+II® or XILINX’s ISE®.

ACKNOWLEDGMENT

R. Cruz thanks to CONACYT and COFAA for the scholarship awarded to finish his post graduate studies. We also thanks ALTERA® and XILINX® for his donation of programs and systems.

REFERENCES [1] J. G. Proakis, D. G. Manolakis, Tratamiento digital de señales.

Principios, algoritmos y aplicaciones. NJ: Prentice Hall, 1998, pp. 509-639.

[2] A. Ambardar, Procesamiento de señales analógicas y digitales.

NJ: Thomson Learning, 2002 pp. 715-753. [3] E. C. Ifeachor, B. W. Jervis, Digital signal processing. A

practical approach. NJ: Prentice Hall, 2002 pp. 318-366. [4] M. M. Mano, Arquitectura de computadoras. NJ: Pearson

Educación, 1994, pp. 366-369. [5] F. J. Ceballos, Enciclopedia del lenguaje C. NJ: Alfaomega,

1997, pp. 315-354. [6] F. Pardo, J. A. Boluda, VHDL. Lenguaje para síntesis y

modelado de circuitos. NJ: Alfaomega, 2000, pp. 83-107. [7] D. G. Maxinez, J. Alcalá, VHDL. El arte de programar sistemas

digitales. NJ: CECSA, 2002, pp. 123-146. [8] ALTERA. (1996, January). Floating-point multiplier.

Functional Specification [Online]. (4), pp. 1-8. Available: http://www.altera.com/literature/lit-fs.jsp [9] ALTERA. (1998, February). Implementing FIR filters in FLEX

devices. Application Note [Online]. (73), pp. 1-24. Available: http://www.altera.com/literature/lit-an.jsp [10] ALTERA. (1997, April). Binary numbering systems.

Application Note [Online]. (83), pp. 1-16. Available: http://www.altera.com/literature/lit-an.jsp [11] M. B. I. Reaz, M. T. Islam, M. S. Sulaiman, M. A. M. Ali, H.

Sarwar, S. Rafique, “FPGA Realization of Multipurpose FIR Filter,” in Proc. 4th Int. Conf. Parallel and Distributed Computing, Applications and Technologies, PDCAT’03, pp. 912-915.

[12] A. Martínez, “Análisis de arquitecturas de multiplicadores

digitales y su implementación en FPGA”, M.Sc. Thesis, Microelect. Eng. Program, ESIME IPN, Mexico City, Mexico, 2005.

Rodrigo Cruz recibió el título de Ingeniero en Comunicaciones y Electrónica de la Escuela Superior de Ingeniería Mecánica y Eléctrica, Unidad Culhuacan, México en 2003. Actualmente está realizando su tesis para obtener el grado de Maestro en Ciencias de Ingeniería

en Microelectrónica de la ESIME UC. Trabaja para el Sistema de Transporte Colectivo Metro adquiriendo experiencia en el área de Peaje de la Gerencia de Instalaciones Fijas.

Page 93: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

84

Gonzalo Duchén, recibió el título de Ingeniero en Electrónica de la Universidad Autónoma Metropolitana, Unidad Iztapalapa, México en 1987, obteniendo la medalla al Mérito Universitario por sus calificaciones. Actualmente es Candidato a Doctor por la Pacific Western University, USA. De

1987 a 1997 trabajó en el Departamento de Ingeniería Eléctrica de la UAM Iztapalapa, donde fue Coordinador de la Carrera de Ingeniería Electrónica y Jefe del Área de Sistemas Digitales. En 1997 fundó, junto con otros profesores la Sección de Estudios de Posgrado e Investigación de la ESIME, Unidad Culhuacan, del Instituto Politécnico Nacional en México D.F., donde fue Coordinador de la Maestría en Microelectrónica. Sus líneas de investigación principales son el diseño de sistemas digitales con énfasis en dispositivos programables y aplicaciones al procesamiento digital de señales y la criptografía. Es miembro de la IEEE desde 1991. Le gusta la lectura y la música, en especial Beethoven, The Beatles y Les Luthiers.

Juan Carlos Sánchez recibió su título de Ingeniero en Electrónica y su grado de Doctor en Ingeniería Eléctrica de la Universidad Autónoma Metropolitana, México en 1987 y 2000, respectivamente. De 1987 a 1992 trabajó en el Departamento de Ingeniería Eléctrica de la

UAM Iztapalapa como profesor. En febrero de 1997 se unió a la Sección de Estudios de Posgrado e Investigación de la ESIME, Unidad Culhuacan, del Instituto Politécnico Nacional en México D.F., donde ahora es profesor. Sus líneas de investigación principales son algoritmos de filtros adaptables, VLSI para las comunicaciones y campos relacionados. Es miembro de la IEEE, IEICE y la SNI de México.

Page 94: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

85

Apéndice B. Programas realizados en VHDL. utilidades.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; PACKAGE utilidades IS SUBTYPE palabra IS std_logic_vector(11 DOWNTO 0);--Palabra de 12 bits. SUBTYPE palabra_doble IS std_logic_vector(23 DOWNTO 0);--Palabra de 24 bits. TYPE palabra_matriz IS ARRAY (NATURAL RANGE <>) OF palabra;--Matriz de 'palabra'. TYPE palabra_matriz_doble IS ARRAY (NATURAL RANGE <>) OF palabra_doble;--Matriz de 'palabra_doble'. END utilidades; componentes.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.utilidades.ALL; PACKAGE componentes IS COMPONENT shiftreg_PISO IS PORT ( D : IN palabra; EN : IN std_logic; clk : IN std_logic; Q : OUT std_logic ); END COMPONENT; COMPONENT shiftreg_SIPO IS PORT ( Din : IN std_logic; clk : IN std_logic; Q : OUT palabra ); END COMPONENT; COMPONENT tapfir IS PORT (Xn, h : IN palabra;

Page 95: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

86

Yn : IN palabra_doble; START, CLK, RST, RSTTAP, c : IN std_logic; T : OUT std_logic; Xn_1 : OUT palabra; Yn_1 : OUT palabra_doble); END COMPONENT; COMPONENT tapiir IS PORT (Xm, a1k, a2k, b1k, b2k : IN palabra; START, CLK, RST, RSTTAP, c : IN std_logic; T : OUT std_logic; Ym : OUT palabra); END COMPONENT; COMPONENT full_booth IS PORT (A, B : IN palabra; start, clock, reset : IN std_logic; LD : OUT std_logic; Product : OUT palabra_doble); END COMPONENT; COMPONENT reg24 IS PORT (D : IN palabra_doble; clk, clr : IN std_logic; Q : OUT palabra_doble); END COMPONENT; COMPONENT reg IS PORT (D : IN palabra; clk, clr : IN std_logic; Q : OUT palabra); END COMPONENT; COMPONENT sumres4 IS PORT (A, B : IN std_logic_vector(3 DOWNTO 0); S1, S2, Ci : IN std_logic; Result : OUT std_logic_vector(3 DOWNTO 0)); END COMPONENT; COMPONENT sumres24 IS PORT (A, B : IN palabra_doble; S1, S2, Ci : IN std_logic; Result : OUT palabra_doble); END COMPONENT;

Page 96: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

87

COMPONENT sumres IS PORT(A, B : IN palabra; S1, S2, Ci : IN std_logic; Result : OUT palabra); END COMPONENT; COMPONENT mux21 IS PORT (A, B : IN palabra; sel : IN std_logic; W : OUT palabra); END COMPONENT; COMPONENT reg2 IS PORT(D : IN std_logic_vector(1 DOWNTO 0); clk, clr : IN std_logic; Q : OUT std_logic_vector(1 DOWNTO 0)); END COMPONENT; COMPONENT shiftreg24 IS PORT(D : IN palabra_doble; Din, clk, clr : IN std_logic; Q1 : OUT std_logic; Q : OUT palabra_doble); END COMPONENT; COMPONENT or1 IS PORT(A : IN palabra; Z : OUT std_logic); END COMPONENT; COMPONENT cc IS PORT(Input : IN std_logic_vector(1 DOWNTO 0); Output : OUT std_logic_vector(2 DOWNTO 0)); END COMPONENT; COMPONENT flipflopd IS PORT (D, clk, clr : IN std_logic; Q : OUT std_logic); END COMPONENT; COMPONENT counter IS PORT (D : IN integer range 0 TO 12; clk, clr : IN std_logic; TC : OUT std_logic; Count : OUT integer range 0 TO 12);

Page 97: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

88

END COMPONENT; COMPONENT control_m IS PORT (init, clk : IN std_logic; clks, clkc, load, trig : OUT std_logic); END COMPONENT; COMPONENT booth_multiplier IS PORT (Am, Bm : IN palabra; LD, clkcomp, rst, clkshift : IN std_logic; R : OUT palabra_doble); END COMPONENT; END componentes; booth_multiplier.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.utilidades.ALL; USE work.componentes.ALL; ENTITY booth_multiplier IS PORT (Am, Bm : IN palabra; LD, clkcomp, rst, clkshift : IN std_logic; R : OUT palabra); END booth_multiplier; ARCHITECTURE estructura OF booth_multiplier IS SIGNAL inshift, outshift : palabra_doble; SIGNAL datashifta, datashiftb, dataor, datasumres : palabra; SIGNAL dataacum, dataa, datamux : palabra; SIGNAL dataff, datasalff : std_logic_vector(1 DOWNTO 0); SIGNAL datacc : std_logic_vector(2 DOWNTO 0); SIGNAL datasalor, dataq, data : std_logic; BEGIN dataff <= datamux(0) & dataq; inshift <= (datasumres & dataor); datashifta <= outshift(23 DOWNTO 12); datashiftb <= outshift(11 DOWNTO 0); latcha : reg PORT MAP (Am, LD, rst, dataa); latchacum : reg PORT MAP (datashifta, LD, rst, dataacum);

Page 98: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

89

orgate : or1 PORT MAP (dataor, datasalor); mux2 : mux21 PORT MAP (Bm, datashiftb, datasalor, datamux); latchmux : reg PORT MAP (datamux, LD, rst, dataor); ffQ : reg2 PORT MAP(dataff, clkcomp, rst, datasalff); combcir : cc PORT MAP (datasalff, datacc); sumrest : sumres PORT MAP (dataacum, dataa, datacc(0), datacc(1), datacc(2), datasumres); shiftr : shiftreg24 PORT MAP (inshift, inshift(23), clkshift, rst, dataq, outshift); R <= outshift(23 DOWNTO 12); END estructura; control_m.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.componentes.ALL; ENTITY control_m IS PORT (init, clk : IN std_logic; clks, clkc, load, trig : OUT std_logic); END control_m; ARCHITECTURE estructura OF control_m IS SIGNAL s1, s2, s3, s2n, trigger, one, q : std_logic; SIGNAL di, c : integer range 0 TO 12; BEGIN di <= 12; one <= '1'; s2n <= NOT (s2); q <= trigger OR init; ff1 : flipflopd PORT MAP (s2n, clk, q, s1); ff2 : flipflopd PORT MAP (s1, clk, q, s2); ff3 : flipflopd PORT MAP (s2, clk, q, s3); count : counter PORT MAP (di, s1, one, trigger, c); clks <= s1; clkc <= s2; load <= s3; trig <= trigger; END estructura; tapfir.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL;

Page 99: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

90

USE work.componentes.ALL; USE work.utilidades.ALL; ENTITY tapfir IS PORT (Xn, h : IN palabra; Yn : IN palabra; START, CLK, RST, RSTTAP, c : IN std_logic; T : OUT std_logic; Xn_1 : OUT palabra; Yn_1 : OUT palabra); END tapfir; ARCHITECTURE estructura OF tapfir IS SIGNAL s1, s2, s3, one, zero, sigld, tr : std_logic; SIGNAL sigxn1 : palabra; SIGNAL sigmult : palabra; BEGIN one <= '1'; zero <= '0'; retardo : reg PORT MAP (Xn, c, RSTTAP, sigxn1); mult : full_booth PORT MAP (sigxn1, h, START, CLK, RST, T, sigmult); sum : sumres PORT MAP (sigmult, Yn, one, zero, zero, Yn_1); Xn_1 <= sigxn1; END estructura; tapiir.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.componentes.ALL; USE work.utilidades.ALL; ENTITY tapiir IS PORT (Xm : IN palabra; a1k, a2k, b1k, b2k : IN palabra; START, CLK, RST, RSTTAP, c : IN std_logic; T : OUT std_logic; Ym : OUT palabra); END tapiir; ARCHITECTURE estructura OF tapiir IS

Page 100: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

91

SIGNAL one, zero : std_logic; SIGNAL talt : std_logic_vector(3 DOWNTO 1); SIGNAL sigxml, sigxmh, co_a1, co_a2, yalt : palabra; SIGNAL sigreg1, sigreg2 : palabra_doble; SIGNAL sigsum : palabra_matriz_doble (4 DOWNTO 0); SIGNAL sigmult : palabra_matriz_doble (4 DOWNTO 1); BEGIN one <= '1'; zero <= '0'; sigxml <= Xm; sigxmh <= "000000000000"; sigsum(0) <= sigxmh & sigxml; coea1 : sumres PORT MAP (sigxmh, a1k, zero, one, one, co_a1); coea2 : sumres PORT MAP (sigxmh, a2k, zero, one, one, co_a2); retardo1 : reg24 PORT MAP (sigsum(1), c, RSTTAP, sigreg1); retardo2 : reg24 PORT MAP (sigreg1, c, RSTTAP, sigreg2); sum1 : sumres24 PORT MAP (sigsum(0), sigsum(2), one, zero, zero, sigsum(1)); sum2 : sumres24 PORT MAP (sigmult(2), sigmult(1), one, zero, zero, sigsum(2)); sum3 : sumres24 PORT MAP (sigmult(3), sigmult(4), one, zero, zero, sigsum(3)); sum4 : sumres24 PORT MAP (sigsum(3), sigsum(1), one, zero, zero, sigsum(4)); mult1 : full_booth PORT MAP (sigreg1(23 DOWNTO 12), co_a1, START, CLK, RST, talt(1), sigmult(1)); mult2 : full_booth PORT MAP (sigreg2(23 DOWNTO 12), co_a2, START, CLK, RST, talt(2), sigmult(2)); mult3 : full_booth PORT MAP (sigreg2(23 DOWNTO 12), b2k, START, CLK, RST, talt(3), sigmult(3)); mult4 : full_booth PORT MAP (sigreg1(23 DOWNTO 12), b1k, START, CLK, RST, T, sigmult(4)); Ym <= sigsum(4)(23 DOWNTO 12); END estructura; protfir.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.componentes.ALL; USE work.utilidades.ALL; USE work.coefir.ALL; ENTITY filtfir IS PORT (X : IN palabra; S, C, R, RT : IN std_logic; U : OUT std_logic; Y : OUT palabra);

Page 101: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

92

END filtfir; ARCHITECTURE estructura OF filtfir IS SIGNAL trm : std_logic; SIGNAL tr : std_logic_vector(z-1 DOWNTO 2); SIGNAL co : palabra_matriz(z-1 DOWNTO 0); SIGNAL xn : palabra_matriz(z-1 DOWNTO 1); SIGNAL yalt : palabra; SIGNAL gainsig : palabra_matriz(z-2 DOWNTO 0); BEGIN* trm <= NOT (S); gain0 : full_booth PORT MAP (X, co(0), S, C, R, U, gainsig(0)); n_tap: FOR i IN 1 TO z-1 GENERATE lsbg: IF (i = 1) GENERATE tap1 : tapfir PORT MAP (X, co(i), gainsig(i-1), S, C, R, RT, trm, tr(i), xn(i), gainsig(i)); END GENERATE lsbg; mbg: IF (i /= 1 AND i /= z-1) GENERATE tapn : tapfir PORT MAP (xn(i-1), co(i), gainsig(i-1), S, C, R, RT, trm, tr(i), xn(i), gainsig(i)); END GENERATE mbg; msbg: IF (i = z-1) GENERATE tapfin : tapfir PORT MAP (xn(i-1), co(i), gainsig(i-1), S, C, R, RT, trm, tr(i), xn(i), yalt); END GENERATE msbg; END GENERATE n_tap; Y <= yalt; END estructura;-- protiir.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE work.componentes.ALL; USE work.utilidades.ALL; USE work.coeiir.ALL; ENTITY filtiir IS

Page 102: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

93

PORT (X : IN palabra; S, C, R, RT : IN std_logic; U : OUT std_logic; Y : OUT palabra); END filtiir; ARCHITECTURE estructura OF filtiir IS SIGNAL trm : std_logic; SIGNAL tr : std_logic_vector(z DOWNTO 2); SIGNAL co_a1 : palabra_matriz(z DOWNTO 1); SIGNAL co_a2 : palabra_matriz(z DOWNTO 1); SIGNAL co_b1 : palabra_matriz(z DOWNTO 1); SIGNAL co_b2 : palabra_matriz(z DOWNTO 1); SIGNAL gainsig : palabra_matriz(z-1 DOWNTO 1); BEGIN* trm <= NOT (S); H1 : tapiir PORT MAP (X, co_a1(1), co_a2(1), co_b1(1), co_b2(1), S, C, R, RT, trm, U, gainsig(1)); n_tap: FOR i IN 2 TO z-1 GENERATE Hi : tapiir PORT MAP (gainsig(i-1), co_a1(i), co_a2(i), co_b1(i), co_b2(i), S, C, R, RT, trm, tr(i), gainsig(i)); END GENERATE n_tap; Hn : tapiir PORT MAP (gainsig(z-1), co_a1(z), co_a2(z), co_b1(z), co_b2(z), S, C, R, RT, trm, tr(i), Y); END estructura;--

Page 103: IMPLEMENTACIÓN DE FILTROS DIGITALES EN LÓGICA …

94

Apéndice C. Programas realizados en Turbo C++.

Para solicitar y revisar los programas realizados en Turbo C++, enviar un correo

electrónico a [email protected].