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