portada - 148.206.53.84148.206.53.84/tesiuami/uami12183.pdf · los sistemas y señales discretos,...

1

Upload: vonhi

Post on 25-Sep-2018

245 views

Category:

Documents


0 download

TRANSCRIPT

Unidad: Iztapalapa División: Ciencias Básicas e Ingenierías Carrera: Ing. Electrónica especialización en Computación Materia: Proyecto de Ing. Electrónica Título: Laboratorio Virtual para Sistemas Discretos Fecha: MAYO DE 2005 Alumno: Mata Zamora José Gibrán 96322786 Asesor: Ing. Jesús Barrios Romano

________________________________________

Firma de Aceptación del Asesor

PDF created with pdfFactory trial version www.pdffactory.com

ÍNDICE GENERAL PREFACIO ........................................................................................................... i SECCIÓN 1 EL MUNDO DEL PDS 1 __________________________________________________________________________________________________________________________________________________________

1 Introducción .......................................................................................................... 1 1 ¿Qué cosa es el PDS y por qué debemos usarlo? .................................................. 1 1 Ventajas del PDS .................................................................................................. 3 1 Modelo General de un sistema PDS ..................................................................... 4 SECCIÓN 2 SISTEMAS Y SEÑALES EN TIEMPO DISCRETO 9 __________________________________________________________________________________________________________________________________________________________

1 SEÑALES DISCRETAS EN TIEMPO .............................................................. 9 Ø Operaciones Sobre Secuencias ..................................................................... 12

1 SISTEMAS DISCRETOS ................................................................................... 23

1 CONVOLUCIÓN ............................................................................................... 25

1 ECUACIONES DE DIFERENCIA .................................................................... 34 Ø Respuestas de Estado-Cero y Entrada-Cero ................................................. 38

1 Filtros Digitales ................................................................................................... 38 SECCIÓN 3 ANÁLISIS DE FOURIER DISCRETO EN TIEMPO 41 __________________________________________________________________________________________________________________________________________________________

1 LA TRANSFORMADA DE FOURIER DISCRETA EN TIEMPO (TFDT) ...................................................................... 41

1 PROPIEDADES DE LA TFDT ........................................................................... 48

1 REPRESENTACION EN EL DOMINIO DE LA FRECUENCIA

DE SISTEMAS LIT ............................................................................................. 53

Ø Respuesta a una Exponencial Compleja nj oe ω .............................................. 53 Ø Respuesta a una Secuencia Senoidal .............................................................. 54 Ø Respuesta a Secuencias Arbitrarias ............................................................... 55 Ø Función de Respuesta en Frecuencia para Ecuaciones de Diferencia ....................................................................... 57

PDF created with pdfFactory trial version www.pdffactory.com

1 MUESTREO Y RECONSTRUCCION DE SEÑALES ANALÓGICAS ......................................................................... 60 Ø El Muestreo ................................................................................................... 60 Ø Teorema del Muestreo .................................................................................. 62

SECCIÓN 4 TRANSFORMADA Z 75 __________________________________________________________________________________________________________________________________________________________

1 TRANSFORMADA Z BILATERAL .................................................................. 75 Ø Propiedades de la Región de Convergencia .................................................. 78

1 PROPIEDADES DE LA TRANSFORMADA Z ............................................... 79 Ø Pares Transformados Z más comunes ........................................................... 81

1 INVERSIÓN DE LA TRANSFORMADA Z .......................................................83

1 REPRESENTACIÓN DE SISTEMAS EN EL DOMINIO Z ............................. 91 Ø Representación de la Función de Transferencia ............................................ 92 Ø Estabilidad y Causalidad ............................................................................... 98

1 SOLUCION DE ECUACIONES DE DIFERENCIA ....................................... 100 SECCIÓN 5 TRANSFORMADA DISCRETA DE FOURIER 109 __________________________________________________________________________________________________________________________________________________________

1 SERIES DISCRETAS DE FOURIER .............................................................. 109 Ø Relación con la Transformada-z ..................................................................... 115 Ø Relación con la TFDT ..................................................................................... 116

1 MUESTREO Y RECONSTRUCCIÓN EN EL DOMINIO - Z ....................... 117 Ø Muestreo en Frecuencia .................................................................................. 120 Ø Fórmula de Reconstrucción ............................................................................. 121 Ø Fórmula de Interpolación para la TFDT ......................................................... 122

1 TRANSFORMADA DISCRETA DE FOURIER ............................................. 123

1 PROPIEDADES DE LA TRANSFORMADA DISCRETA DE FOURIER .............................................................................. 135 Ø Linealidad ........................................................................................................ 135 Ø Desdoblamiento Circular ................................................................................ 136 Ø Conjugación .................................................................................................... 137 Ø Propiedades de Simetría para secuencias reales ............................................. 138 Ø Desplazamiento Circular de una secuencia ..................................................... 141 Ø Desplazamiento Circular en el dominio de la frecuencia ............................... 145 Ø Convolución Circular ...................................................................................... 146 Ø Multiplicación ................................................................................................. 149 Ø Relación de Parseval ....................................................................................... 150

1 CONVOLUCIÓN LINEAL USANDO LA TDF .............................................. 150

1 TRANSFORMADA RÁPIDA DE FOURIER ................................................. 156 Ø Algoritmo TRF radix-2 ................................................................................... 161 Ø Convoluciones Rápidas . .................................................................................. 164 Ø Convoluciones de Alta Velocidad por Bloque ............................................... 166

PDF created with pdfFactory trial version www.pdffactory.com

SECCIÓN 6 DISEÑO DE FILTROS FIR 169 __________________________________________________________________________________________________________________________________________________________

1 PROPIEDADES DE LOS FILTROS FIR CON FASE LINEAL ..................... 172 Ø Respuesta al Impulso h(n) ........................................................................... 173 Ø Respuesta en Frecuencia H(ejω) .................................................................. 176 Ø Localización de Ceros . ................................................................................ 182

1 TÉCNICAS DE DISEÑO CON VENTANAS ................................................. 189 Ø Ventana Rectangular ................................................................................... 191 Ø Ventana Bartlett .......................................................................................... 196 Ø Ventana Hanning ........................................................................................ 198 Ø Ventana Hamming ...................................................................................... 199 Ø Ventana Blackman ...................................................................................... 201 Ø Ventana Kaiser ............................................................................................ 203

1 TÉCNICAS DE DISEÑO CON MUESTREO EN FRECUENCIA ................. 217 Ø Método de Diseño Ingenuo ......................................................................... 219 Ø Método de Diseño Optimo .......................................................................... 221

1 TÉCNICA DE DISEÑO POR EQUIRIZO OPTIMO ....................................... 232 Ø Algoritmo Parks-McClellan ........................................................................ 241

SECCIÓN 7 DISEÑO DE FILTROS IIR 253 __________________________________________________________________________________________________________________________________________________________

1 FILTROS ANALOGICOS PROTOTIPO ......................................................... 256 Ø Filtros Butterworth Pasa Bajas ........................................................................ 256 Ø Filtros Chebyshev Pasa Bajas ......................................................................... 265 Ø Filtros Elípticos Pasa Bajas . ............................................................................ 275 Ø Cálculo del Orden N del Filtro ........................................................................ 276 Ø Respuestas en Fase de los Filtros Prototipo . ................................................... 280

1 TRANSFORMACIONES ANALÓGICO A DIGITAL ................................... 280 Ø Transformación de Invarianza Impulsiva ....................................................... 280 Ø Transformación Bilineal .................................................................................. 291

1 DISEÑO DE FILTROS PASA BAJAS USANDO MATLAB ......................... 302

1 TRANSFORMACIONES DE BANDA DE FRECUENCIA ............................ 309

1 FILTROS FIR vs IIR ........................................................................................ 323

PDF created with pdfFactory trial version www.pdffactory.com

i

PREFACIO

A principios de los años 80´s, la disciplina del procesamiento digital de señales irrumpió en la currícula de las carreras de ingeniería en todas las universidades del mundo, y ello obedeció al enorme impacto que resultaba del desarrollo tecnológico impulsado, a su vez, por las innovaciones y reducciones de costo en las computadoras. En esos años, la presencia de ordenadores personales y computadoras de gran velocidad dieron origen a una enorme variedad de aplicaciones en el mundo real, que van desde la ingeniería biomédica y de comunicaciones hasta la electrónica del consumidor, la comunicación por satélite, el diseño de sistemas de control aeroespacial, la prospección de recursos naturales y, desde luego, la industria militar. Hoy es más que evidente el impacto de la tecnología digital en la sociedad que nos ha tocado vivir; y ello ha empujado la constante modificación y profundidad de los niveles de instrucción en ciencia e ingeniería, lo mismo a nivel de licenciatura que en el posgrado. Hoy se presentan serio retos para posibilitar el buen aprendizaje y la mejor enseñanza de una de las áreas de conocimiento que se mueve a mayor rapidez y volumen, como lo es el procesamiento digital de señales. No obstante, las técnicas de análisis siguen siendo básicas y fundamentales, lo mismo para lograr una adecuada formación universitaria que para acceder a niveles de diseño profesional en el campo de los procesadores digitales, particularmente bajo la figura de lo que se ha dado en denominar filtro digital, que no es sino una máquina digital, real o virtual, que desarrolla el proceso de filtrado mediante la evaluación numérica de una ecuación de diferencia lineal, normalmente en tiempo real y/o bajo el control de un programa. En nuestro caso, consideramos conveniente resaltar los dos hechos que ha determinado que el concepto de filtrado digital emerja como una cuestión central en el campo de la ciencia e ingeniería: por un lado el desarrollo de la tecnología electrónica, y por otro el desarrollo de la ciencia de la computación. Ambos hechos han provocado que las ideas, métodos, y aplicaciones de los filtros digitales operen en áreas tan diversas como el análisis de series de tiempo, el análisis numérico, la econometría, los sistemas de control, la estadística, la ingeniería eléctrica y, por supuesto, el procesamiento de las señales. En todas estas áreas de aplicación, los procesos y operaciones de alisamiento, predicción, diferenciación, integración, separación de señales, y remoción de ruido son operaciones muy comunes, y con frecuencia tales procesos son transformaciones lineales operando sobre datos que implican una extraordinaria cantidad de operaciones aritméticas. En los años iniciales, la velocidad de las computadoras y las herramientas de programación disponibles limitaban la potencia de las aplicaciones pues si bien los algoritmos para el procesamiento de las señales eran conocidos, el tiempo en que se obtenían resultados era insuficiente para apreciar en tiempo real la respuesta de los sistemas que se diseñaban. Sin embargo, hoy día ese ya no es un problema y ambas limitantes están superadas. Particularmente, en nuestro caso, hemos aprovechado la disponibilidad de un lenguaje de cuarta generación ampliamente difundido en el ambiente universitario, que nos ha permitido resaltar los conceptos más que las complejidades que puedan suponer el estudio de los sistemas y señales discretos, el análisis de Fourier discreto, la transformada discreta de Fourier, la transformación en z, y el filtrado digital; tal herramienta de programación es MATLAB. El contenido de nuestro trabajo lo hemos desarrollado con el menor número posible sobre el conocimiento de antecedentes necesarios; en particular, sólo asumimos conocimientos de cálculo elemental, análisis numérico, circuitos eléctricos, y análisis de señales. Nos hemos interesado más en la exposición de ideas para evitar caer en el frecuente vicio de involucrarse con los detalles o teoría

PDF created with pdfFactory trial version www.pdffactory.com

ii

matemática del análisis y diseños de filtros, lo cual provoca la perdida del horizonte de dónde y cómo; nos ha parecido más conveniente buscar el objetivo de la claridad y simplicidad en la presentación de ideas y conceptos pues nos anima el deseo de quien se atreva a leer nuestro trabajo lo pueda comprender sin mayores dificultades. En la primera sección abordamos, panorámicamente, los principales aspectos que identifican a un sistema de procesamiento digital de señales y resaltamos, mediante comparación, las ventajas que supone el proceso digital con respecto al método analógico. Presentamos un modelo general que incorpora los principales elementos a considerar en todo sistema PDS e identificamos la función básica de cada unos de esos elementos. En la sección segunda anotamos las definiciones y conceptos asociados a la teoría de señales y sistemas discretos en tiempo; resaltamos los tipos de secuencias que se utilizan para la modelación y las operaciones que sobre estas secuencias se pueden realizar, particularmente la operación de convolución que es la fuente de muchos análisis y conocimiento sobre la actuación de los sistemas que son del interés de la ingeniería en comunicaciones. Desde luego dejamos expreso el modelo global de ecuaciones de diferencia para describir a cualquier sistema discreto, y todo esto lo presentamos a la luz de diversas simulaciones con MATLAB. En la tercera parte de nuestro trabajo presentamos la temática correspondiente al análisis de Fourier discreto en tiempo, y resaltamos la representación de sistemas lineales e invariantes en tiempo en el dominio de la frecuencia. En esta sección incorporamos las técnicas de muestreo y reconstrucción, usualmente necesarias para el tratamiento de señales analógicas. Como extensión de la transformada de Fourier discreta en tiempo, en la sección cuatro consideramos a la transformada z, tanto en su versión bilateral como unilateral, cuya característica principal reside en el hecho de que mediante ella se pueden obtener respuesta de sistemas con condiciones iniciales o entradas cambiantes. También en este caso nos hemos servido de la herramienta MATLAB para verificar las propiedades y facilidades de este poderoso operador; particularmente para el caso de la solución de ecuaciones de diferencia. En la sección cinco hemos puesto nuestra atención en los algoritmos que permiten calcular numéricamente la transformada de Fourier y hemos hecho una comparación de la transformada discreta de Fourier con la transformada rápida de Fourier; con ambos algoritmos hemos hecho simulaciones para realizar convoluciones y convoluciones rápidas, operaciones ambas que son de suma utilidad para identificar la respuesta de los sistemas y que, en nuestro caso nos han permitido visualizar la enorme eficiencia de los algoritmos rápidos. Finalmente, en las secciones seis y siete abordamos la temática correspondiente al filtrado digital; en la sección seis tratamos con los filtros de respuesta finita al impulso, conocidos también como filtros de fase lineal y tocamos algunas de las técnicas de diseño, resaltando la técnica con ventanas, la de muestreo en frecuencia, y la de equirizo optimo nuevamente, MATLAB ha sido una herramienta poderosa para visualizar y presentar los resultados con todos estos métodos. La sección siete, la última, la hemos dedicado a la presentación de algunos de los métodos empleados para el análisis y diseño de filtros de respuesta infinita al impulso, y hemos tenido cuidado de dejar muy claro el proceso de transformación de un filtro analógico a un filtro digital, cuestión que es fundamental para la compresión de los métodos de diseño por invarianza impulsiva y transformación bilineal. En esta última parte hemos seguido la presentación clásica para las respuestas Butterworth, Chebyshev, y Elíptica pasa bajas, que hemos utilizado como referencias prototipo para la generación de un gran número de simulaciones. Nuestro trabajo lo concluimos con una comparación de los tipos de filtrado, FIR e IIR, a partir de las simulaciones y los resultados que obtuvimos.

PDF created with pdfFactory trial version www.pdffactory.com

1

EL MUNDO DEL PDS INTRODUCCION El procesamiento digital de señales es uno de los campos más rápidamente crecientes en la electrónica moderna. Hace apenas unos cuantos años las técnicas de PDS eran consideradas materias avanzadas y esotéricas, cuyo uso quedaba limitado a los laboratorios de investigación o aplicaciones avanzadas. Hoy día, esta tecnología ha encontrado vida en virtualmente todos los segmentos de la electrónica, por ejemplo: muñecos que hablan, gráficas por computadora, y reproductores de disco compacto, y en una extraordinaria variedad de disciplinas tales como la ingeniería mecánica, la ingeniería química o la industria aeroespacial. La rápida aceptación y comercialización de esta tecnología ha enfrentado al ingeniero de diseño moderno con un serio reto: adquirir el conocimiento relacionado con estas nuevas técnicas o arriesgarse a caer prontamente en la obsolescencia; desafortunadamente, aquellos que intentan obtener este conocimiento pueden enfrentar algunos obstáculos serios. Tradicionalmente, los ingenieros han tenido dos opciones para adquirir nuevas habilidades: regresar a la escuela ó voltear hacia la documentación técnica de los vendedores. En el caso del PDS, ninguna de estas opciones resulta particularmente útil. Los programas de licenciatura - y aún más los programas para graduados - dedicados al PDS son cursos disfrazados de la disciplina matemática conocida como Análisis Complejo. La mayoría de los programas universitarios no intentan enseñar un conocimiento operativo del PDS; más bien el propósito de estos programas es preparar a los estudiantes para avanzar hacia el posgrado e investigación; muchos aspectos como los de Transformada de Laplace, funciones pares e impares, y más son cubiertos en profundidad, mientras que mucha de la información necesaria para realmente comprender los "porqués y dónde" de las técnicas PDS quedan sin mencionar. La documentación del fabricante, con frecuencia, es de poca utilidad para el no iniciado; en tanto que las notas de aplicación y guías de diseño, usualmente son reimpresiones de libros de texto ó enfocan casi exclusivamente las características particulares de la arquitectura o repertorio de instrucciones del dispositivo del vendedor. Así pues nos interesa que este trabajo pueda servir de puente entre la teoría del PDS y el conocimiento práctico necesario para comprender la operación de un sistema PDS. Intentamos, apoyándonos de las herramientas matemáticas indispensables, explicar los cómo y porqués, y hacer ejemplos que puedan ayudar a obtener confianza y comprensión de los procesos PDS. ¿Qué cosa es el PDS y por qué debemos usarlo? El término PDS generalmente se refiere al uso de computadoras digitales para procesar señales. Normalmente, estas señales se pueden manipular mediante procesos analógicos pero, por una diversidad de razones, se prefiere manejarlas digitalmente. Para entender los méritos relativos de los procesamientos analógico y digital, es conveniente comparar las dos técnicas con una aplicación común. La siguiente figura muestra dos formas de grabar sonidos como la música ó voz:

SECCIÓN

1

PDF created with pdfFactory trial version www.pdffactory.com

2

El método analógico trabaja de la siguiente forma: • Las ondas de sonido impactan el micrófono, donde son convertidas a impulsos eléctricos.

• Estas señales eléctricas son amplificadas, y convertidas a campos magnéticos por medio de la cabeza grabadora.

• Conforme la cinta magnética se mueve debajo de la cabeza, la intensidad del campo magnético es almacenado en la cinta.

El proceso de reproducción es justo el inverso del de grabación: • Conforme la cinta magnética se mueve debajo de la cabeza reproductora, el campo magnético sobre la

cinta es convertido a una señal eléctrica.

• La señal es entonces amplificada y enviada a la bocina, la cual se encarga de convertir la señal amplificada a su forma de sonido original.

La ventaja del proceso analógico es doble: primero, es conceptualmente muy simple; segundo, por definición, una señal analógica puede tomar virtualmente un número infinitos de valores dentro del rango dinámico de la señal; sin embargo, este proceso analógico es inherentemente inestable. Los amplificadores están sometidos a variaciones por modificación de la temperatura, humedad, y tiempo; la cinta magnética se estira y encoge, produciendo distorsiones en la señal grabada. Los campos magnéticos por sí mismos, con el tiempo, perderán algo de su fuerza; y variaciones en la rapidez del motor que impulsa la cinta producen distorsión adicional. Todas estas se combinan para asegurar que la señal de salida será considerablemente de menor calidad que la señal de entrada. Cada vez que la señal es pasada por otro proceso analógico, estos efectos adversos se multiplican. Es raro que un sistema analógico sea capaz de lograr más de dos ó tres generaciones de copias. Por lo que toca al proceso digital, observamos que: • Como en el caso analógico, las ondas de sonido impactan el micrófono y son convertidas a señales

eléctricas; estas señales son entonces amplificadas y dispuestas a un nivel apropiado.

• Las señales eléctricas son convertidas a números.

PDF created with pdfFactory trial version www.pdffactory.com

3

• Estos números pueden ser almacenados o manipulados por una computadora.

• Para reproducir la señal, sencillamente, los números son convertidos otra vez a señales eléctricas que, al igual que en el caso analógico, son usadas para excitar la bocina.

Existen dos desventajas distintivas al proceso digital: primera, es más complicado que el proceso analógico; segundo, las computadoras sólo pueden manejar números de resolución finita. Así, la "resolución infinita" de las señales analógicas se pierde. Ventajas del PDS Obviamente, deben existir algunos beneficios compensatorios del proceso digital. Primero, una vez que se convierte a números, la señal es absolutamente estable, y usando técnicas de detección y corrección de errores es posible almacenar, transmitir y reproducir números sin ningún tipo de corrupción (ruido). Por supuesto, esto hace posible reproducir todas las copias igual de fieles que la primera generación. Este hecho posee algunas implicaciones interesantes. Las futuras generaciones nunca conocerán realmente cómo sonaban, por ejemplo, los Beatles. La tecnología analógica comercial de los 60's simplemente no era capaz de registrar exactamente y reproducir las señales. Varias generaciones de señales analógicas eran necesarias para reproducir el sonido: primero, una cinta maestra sería grabada, para luego ser regulada y editada; a partir de esto, un registro maestro metálico sería producido, a partir del cual vendría la impresión plástica. Cada paso del proceso era una nueva generación de grabado, y cada generación actuaba sobre la señal como un filtro, reduciendo el contenido de frecuencia y desviando la fase. Como las pinturas en la Capilla Sixtina, los verdaderos colores y brillo del arte original esta perdido para la historia. Las cosas son diferentes para los músicos actuales. Aunque pasen miles de años, los historiadores del futuro serán capaces de reproducir exactamente los CD's de hoy, masterizandolos digitalmente. Los discos por sí mismos podrán deteriorarse, pero antes de hacerlo los números digitales sobre ellos se podrán copiar con absoluta perfección. Las señales almacenadas digitalmente son en realidad grandes arreglos de números, y como tales son inmunes a las limitaciones físicas de las señales analógicas. Existen otras ventajas significativas para procesar señales digitalmente. Los geofísicos fueron uno de los primeros grupos en aplicar las técnicas del procesamiento digital de señales; las señales sísmicas de interés para ellos son, usualmente, de muy baja frecuencia, 0.01 Hz a 10 Hz. Es difícil construir filtros analógicos que trabajen a estas bajas frecuencias, pues los valores de los componentes deben ser tan grandes que la implementación física del filtro puede ser imposible. Sin embargo, una vez que las señales han sido convertidas a números digitales, es un proceso directo programar una computadora para realizar el filtrado. Otras ventajas relativas a las señales digitales tiene que ver con el mejor uso de los canales de comunicación; por ejemplo, el PDS puede permitir que señales de gran ancho de banda puedan enviarse sobre canales de banda angosta. Una señal de 20 KHz se puede digitalizar y enviarse sobre un canal de 5 KHz; a la señal le puede tomar cuatro veces más atravesar el canal angosto, pero cuando llega al otro lado puede ser reconstruida a su ancho de banda original de 20 KHz. De igual forma, la seguridad de las comunicaciones se puede mejorar grandemente mediante el PDS. Dado que la señal es enviada como números, se puede encriptar fácilmente. Cuando es recibida, los números son desencriptados y entonces reproducidos como la señal original. Desde luego, todas estas ventajas se pueden lograr eficiente y económicamente. Los modernos sistemas PDS de 'telefonía segura' logran que el procesamiento sea hecho sin efecto detectable alguno en la conversación.

PDF created with pdfFactory trial version www.pdffactory.com

4

Modelo General de un sistema PDS El modelo general para un sistema PDS se muestra en la figura siguiente:

Desde un punto de vista de alto nivel, un sistema PDS realiza las siguientes operaciones: • Acepta una señal analógica como entrada. • Convierte esta señal analógica en números. • Realiza cálculos usando los números. • Convierte los resultados de los cálculos a otra señal analógica. Opcionalmente, se pueden derivar diferentes tipos de información a partir de los números usados en este proceso. Esta información se puede almacenar, analizar, exhibir, transmitir, ó manipular de alguna otra manera. Desde luego, este modelo se puede realizar de varias formas. Por ejemplo, un reproductor de CD no tendrá la sección de entrada analógica; ó un instrumento de laboratorio podría no tener la salida analógica. Sin embargo, lo realmente sorprendente de los sistemas PDS es que el modelo se podrá ajustar a cualquier aplicación; el sistema podría ser uno de sonar ó radar, un sistema de correo de voz, una cámara de video, etc. Las especificaciones de los elementos clave individuales podrán cambiar pero su función permanecerá siendo la misma. A fin de comprender, panorámicamente, lo que es un sistema PDS, proporcionamos una explicación cualitativa de los elementos clave.

Entrada Todo procesamiento de señal inicia con un transductor de entrada, que toma la señal y la convierte a señal eléctrica. En las aplicaciones, el transductor puede tomar muchas formas; un ejemplo común de transductor de entrada lo es el micrófono. Otros ejemplos son los geófonos, para trabajo sísmico; las antenas de radar, ó los sensores infrarojos. Generalmente, la salida del transductor es muy pequeña, de unos cuantos microvolts o milivolts.

PDF created with pdfFactory trial version www.pdffactory.com

5

Circuito de Acondicionamiento de Señal El propósito de este circuito es recoger los pocos milivolts de salida del transductor de entrada y convertirlos a niveles usables para las siguientes etapas. Generalmente, esto significa amplificar la señal a un rango entre 3 y 12V. El circuito de acondicionamiento, también, limita la señal de entrada para prevenir daños a las etapas siguientes y proporcionar aislamiento entre el transductor y el resto de la circuitería del sistema. Típicamente, los circuitos de acondicionamiento de señal están basados en amplificadores operacionales ó de instrumentación. Filtro Anti-Alias Desde un punto de vista conceptual, se puede pensar como un mecanismo para limitar la rapidez con que cambia una señal de entrada. Esta es una función crítica, en la que el filtro anti-aliasing asegura que el resto del sistema será capaz de rastrear la señal. Si la señal cambia demasiado rápidamente, el resto del sistema podría perder (no ver) porciones críticas de la señal. Convertidor Analógico - Digital (ADC) El propósito de este circuito es convertir la señal de su forma analógica a su representación como dato digital. Debido a la física del circuito, la mayoría de los ADC´s requieren entradas de por lo menos varios volts para presentarse dentro de su rango operativo. Dos de la características más importantes de estos circuitos son su tasa de conversión y su resolución. La tasa de conversión establece que tan rápido un ADC puede convertir un valor analógico a un valor digital; la definición define que tan próximo está el número digital de su valor analógico real. La salida de un ADC es un número binario que se puede manipular matemáticamente. Procesador Teóricamente, no hay nada de especial acerca del procesador. Simplemente realiza los cálculos requeridos para el procesamiento de la señal. Por ejemplo, sí el sistema PDS es, sencillamente, un amplificador, entonces el valor de entrada es multiplicado por la constante de ganancia (amplificación). En los días iniciales del procesamiento de señales, el procesador era una computadora de propósito general. Sin embargo, conforme el campo del PDS progresó, se diseñaron procesadores especiales de gran velocidad para manipular la carga de trabajo numérica. Hay, una amplia variedad de procesadores especializados que están dedicados al PDS; especialmente diseñados para lograr muy altas tasas de desempeño, usando una combinación de hardware de alta velocidad, arquitecturas especializadas, y repertorios de instrucción dedicados; funciones, todas estas, diseñadas para implementar los algoritmos PDS eficientemente. Almacenamiento de Programas y Datos La sección de almacenamiento de programas contiene las instrucciones usadas en la implementación de los algoritmos PDS requeridos. En una computadora de propósito general (arquitectura Von Neumann), las instrucciones y los datos se almacenan juntos. En la mayoría de los sistemas PDS, el programa se almacena en forma separada de los datos (arquitectura Harvard), ya que esto permite una ejecución más rápida de las instrucciones. Los datos se pueden mover sobre su propio bus al mismo tiempo que las instrucciones están siendo localizadas. Con frecuencia, el bus de datos y el bus de instrucciones tienen diferentes tamaños.

PDF created with pdfFactory trial version www.pdffactory.com

6

Transmisión de Datos Los datos PDS son comúnmente enviados a otros sistemas PDS; algunas veces, se almacenan masivamente sobre cintas magnéticas, discos ópticos u otros medios. Esta habilidad para almacenar y transmitir la información en forma digital es uno de los beneficios clave de las operaciones PDS. Por otro lado, una señal analógica, sin importar cómo es almacenada, se comenzará a degradar inmediatamente. Sin embargo, una señal digital es mucho más robusta dado que está compuesta de 0´s y 1´s; además, la señal digital se puede proteger mediante códigos detectores y correctores de error. Entrada de Usuario y Visualización No todos los sistemas PDS contienen teclados ó pantalla de visualización. Sin embargo, con frecuencia es útil contar con algún medio para visualizar la señal. Si el propósito del sistema es manipular la señal, entonces el usuario necesitará una forma de introducir comandos al sistema, lo cual se puede hacer con algún teclado ó interruptores. Convertidor Digital - Analógico (DAC) En muchos sistemas PDS la señal se debe convertir de regreso a su forma analógica después de haber sido procesada. Esta es la función del DAC. Conceptualmente, los DAC´s son bastantes simples: un número binario puesto a su entrada produce un voltaje correspondiente en su salida. Una de sus especificaciones clave es que tan rápido el voltaje de salida se ajusta al valor comandado. Aquí, el slew rate del DAC se debe empatar con la tasa de adquisición del ADC. Filtro de Alisamiento de Salida Como su nombre lo dice, el propósito de este filtro es quitar los filos de la forma de onda proveniente del DAC. Esto es necesario dado que la señal tendrá forma de escalera, que resulta de la secuencia de entradas discretas aplicadas al DAC. Generalmente, el filtro de alisamiento es un pasa bajas; un circuito RC. Amplificador de Salida Es un amplificador con dos propósitos: primero, igualar la alta impedancia del DAC a la baja impedancia del transductor. Segundo, reforzar la potencia al nivel requerido. Transductor de Salida Al igual que el de entrada, puede adoptar una variedad de formas, por ejemplo, bocinas, antenas y motores. En resumen: la idea atrás del PDS es

• Adquirir la señal • Convertirla a una secuencia de número digitales • Procesar, conforme se requiera, los números • Transmitir ó almacenar, conforme se requiera, los datos • Convertir la secuencia de números procesada a una nueva señal analógica.

PDF created with pdfFactory trial version www.pdffactory.com

7

Este proceso puede ser considerablemente más complicado que el tradicional, realizado por procesadores analógicos (radios, teléfonos, TV´s, stereos, etc ). Sin embargo, debido a los avances en la tecnología, las soluciones PDS pueden ser más baratas y eficientes que las técnicas tradicionales. Con el objetivo de comprender más a fondo el PDS se desarrolló éste proyecto, que proporciona las herramientas analíticas necesarias para procesar señales reales usando técnicas digitales. Trabajamos normalmente con señales y sistemas en tiempo discreto, los cuales son analizados en los dominios del tiempo y la frecuencia. Además, tratamos a gran detalle el análisis y diseño del procesamiento de estructuras llamadas: filtro y analizadores espectrales, que son uno de los aspectos más importantes dentro del Procesamiento Digital de Señales, PDS. La primera mitad de este proyecto (sección 2 a 5) trata sobre el análisis de señales orientado al PDS. Comenzando con la descripción básica de señales y sistemas en tiempo discreto, los cuales son analizados en el dominio de la frecuencia. Posteriormente, se introduce una generalización del dominio en la frecuencia, llamada transformada z. Por último discutimos los algoritmos prácticos para el cálculo de la transformada de Fourier. La segunda mitad está dedicada al filtrado de señales, donde se describen varias implementaciones y estructuras de filtros digitales. Además se proporcionan algoritmos y técnicas de diseño para construir filtros del tipo FIR e IIR.

PDF created with pdfFactory trial version www.pdffactory.com

9

SISTEMAS Y SEÑALES EN TIEMPO DISCRETO

Para el desarrollo de nuestro trabajo es esencial conocer los conceptos referentes a la teoría de señales y sistemas discretos en tiempo; particularmente, los sistemas lineales invariantes en el tiempo son de interés debido a su facilidad de análisis e implementación. Una operación peculiarmente relevante y que merece especial atención es la convolución, siendo también de utilidad conocer la representación mediante ecuaciones de diferencia de los sistemas; todo ello de suma importancia en el procesamiento digital de señales. Justamente, el énfasis en esta sección se orientará a la representación e implementación de señales y sistemas usando MATLAB. SEÑALES DISCRETAS EN TIEMPO

Las señales se clasifican, generalmente, como señales analógicas y señales discretas; las señales

analógicas pueden ser expresadas por xa(t), pudiendo la variable t representar cualquier cantidad física, aunque usualmente representa al tiempo. Por otro lado, una señal discreta puede denotarse por x(n), con la variable n, en el dominio de los enteros, representando instantes discretos en el tiempo, por lo que a la señal se le denomina señal discreta en tiempo, la cual da lugar a una secuencia numérica que puede ser denotada por alguna de las siguientes notaciones:

x(n) = x(n) = …,x(-1), x(0), x(1), … ↑ donde la flecha indica la muestra de la señal en el instante n = 0.

En MATLAB se puede representar una secuencia de duración finita con un vector fila conteniendo los valores apropiados; sin embargo, tiene el inconveniente de no presentar ninguna información acerca de la posición de la muestra n-esima. En este contexto, una adecuada representación de x(n) requiere de dos vectores, uno para x y el otro para n; por ejemplo: una secuencia x(n) = 2, 1, -1, 0, 1, 4, 3, 7 puede ser representada en MATLAB por : ↑

>> n = [ -3, -2, -1, 0, 1, 2, 3, 4 ]; x = [ 2, 1, -1, 0, 1, 4, 3, 7 ];

No obstante, generalmente se usa la representación del vector x en forma individual cuando la información

de la posición de la muestra no es requerida, o cuando tal información es trivial (por ejemplo, cuando la secuencia comienza en n = 0). Tipos de Secuencias

En el ámbito del PDS se usan varias secuencias elementales para propósitos de análisis, por lo que consideramos conveniente presentar algunas de ellas:

SECCIÓN

2

PDF created with pdfFactory trial version www.pdffactory.com

10

1. Secuencia Impulso unitario:

δ(n) = ,...0,0,1,0,0...,0,00,1

=

≠=

n n

↑ Una forma de implementar δ(n) en MATLAB, sobre un intervalo finito, es empleando la función zeros(1,N,), la cual genera un vector fila con N ceros. Sin embargo, el empleo de la relación lógica n==0 es una forma más elegante de implementar δ(n). Por ejemplo, si tenemos

δ(n - n0) =

≠=

0

0

,0,1

nn nn

sobre el intervalo n1 ≤ n0 ≤ n2, se puede implementar la siguiente función en MATLAB:

2. Secuencia Escalón unitario:

u(n) = ,...1,1,1,0,0...,0,00,1

=

<≥

n n

La función de MATLAB que puede emplearse para generar u(n), sobre un intervalo finito, es ones(1,N), la cual genera un vector fila de N 1´s. Una vez más la forma elegante de implementación es empleando la relación lógica n>=0. Por ejemplo, para implementar:

u(n - n0) =

<≥

0

0

,0,1

nn nn

sobre el intervalo n1 ≤ n0 ≤ n2, se logra construyendo la siguiente función en MATLAB:

function [x,n] = SecuenciaImpulso(n0,n1,n2) % Genera la secuencia impulso unitario dado por: % x(n)= delta(n-n0); en el intervalo n1 <= n <= n2 % ----------------------------------------------------------- % Sintaxis: % [x,n] = SecuenciaImpulso(n0,n1,n2) % % En donde n1 <= n0 <= n2 % if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('los argumentos deben satisfacer n1 <= n0 <= n2') end n = [n1:n2]; x = [(n-n0) == 0];

PDF created with pdfFactory trial version www.pdffactory.com

11

3. Secuencia Exponencial real-valuada:

x(n) = an , ∀n; a∈ℜ

En MATLAB, se requiere aplicar el operador ".^" , a los arreglos, para implementar una secuencia exponencial real. Por ejemplo, para generar x(n) = (0.9)n, en el intervalo 0 ≤ n ≤ 10, se necesita el siguiente par de enunciados:

>> n = [0:10]; x = (0.9).^n;

4. Secuencia Exponencial complejo-valuada:

x(n) = e(σ + jwo) n , ∀n

en donde σ es la atenuación y w0 es la frecuencia en radianes. La función en MATLAB que genera esta secuencia es exp, y un ejemplo sería: si x(n) = exp[(2 + j3)n], en el intervalo 0 ≤ n ≤ 10, entonces el script en MATLAB correspondiente es:

>> n = [0:10]; x = exp((2+3j)*n);

5. Secuencia Sinusoidal:

x(n) = cos(ω0n + θ), ∀n

en donde θ es la fase en radianes. La función que MATLAB usa para generar la secuencia sinusoidal es cos (o sin). Por ejemplo, para generar x(n) = 3cos(0.1πn + π/3) + 2sin(0.5πn), en el intervalo 0 ≤ n ≤ 10, se necesita el siguiente script en MATLAB:

>> n = [0:10]; x = 3*cos(0.1*pi*n+pi/3) + 2*sin(0.5*pi*n);

6. Secuencias aleatorias:

En la práctica, muchas secuencias no pueden ser descritas por medio de expresiones matemáticas, estas son las llamadas secuencias aleatorias (o estocásticas), las cuales son caracterizadas por medio de funciones de densidad probabilística. En MATLAB se dispone de dos tipos de (pseudo) secuencias aleatorias, las cuales son:

function [x,n] = SecuenciaEscalon(n0,n1,n2) % Genera la secuencia Escalón Unitario dado por % x(n) = u(n-n0); en el intervalo n1 <= n <= n2 % --------------------------------------------------------- % Sintaxis: % [x,n] = SecuenciaEscalon(n0,n1,n2) % % En donde n1 <= n0 <= n2 if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('los argumentos deben satisfacer n1 <= n0 <= n2') end n = [n1:n2]; x = [(n-n0) >= 0];

PDF created with pdfFactory trial version www.pdffactory.com

12

- rand(1,N). Genera una secuencia aleatoria de longitud N, cuyos elementos son uniformemente

distribuidos entre [0,1].

- randn(1,N). Genera una secuencia aleatoria con distribución Gaussiana de longitud N con media 0 y varianza 1.

7. Secuencias periódicas:

Una secuencia x(n) es periódica si x(n) = x(n + N), ∀n. El valor más pequeño del entero N que satisface la relación es llamado periodo fundamental y, normalmente, se usa la notación xp(n) para denotar que una secuencia es periódica. Desde luego, es posible generar P periodos de xp(n) a partir de un periodo base x(n), 0 ≤ n ≤ N-1 , lo cual se logra copiando x(n) P veces, como se muestra en el siguiente comando de MATLAB:

>> xp = [x,x,x,...,x];

Hay una forma más elegante de generar la secuencia anterior, utilizando las poderosas capacidades de indexación de MATLAB. Primero se genera una matriz que contenga P renglones de valores de x(n), posteriormente se concatenan P renglones dentro de un vector fila largo usando el constructor (:). Sin embargo, debido a que este constructor sólo trabaja en columnas se tendrá que usar el operador ´ que generará la transpuesta de la matriz, para proporcionar el mismo efecto sobre los renglones, como se muestra a continuación:

>> xp = x´*ones(1,P); %P columnas de x; donde x es un vector renglón

>> xp = xp(:); %vector columna largo >> xp = xp´; %vector fila largo

Operaciones Sobre Secuencias A continuación describimos brevemente algunas operaciones básicas sobre secuencias y entre secuencias, y su correspondiente representación en MATLAB. 1. Suma de señales:

La operación de adición se hace sumando muestra con muestra en las secuencias operando:

x1(n) + x2(n) = x1(n) + x2(n)

En MATLAB, la condición que se debe cuidar es que las longitudes de x1(n) y x2(n) sean iguales. Si las secuencias son de longitud diferente, o si las posiciones de las muestras son diferentes para secuencias de igual longitud no puede usarse directamente el operador +. Para resolver estas diferencias de longitud, primero se tienen que aumentar x1(n) y x2(n), de modo que tengan el mismo vector n de posición (y por lo tanto la misma longitud), para lo cual se requiere de especial atención en las operaciones de indexación. En particular, la operación lógica de intersección "&", las operaciones relacionales "<=" y "==", y la función find son necesarias para lograr que x1(n) y x2(n) sean de igual longitud. La siguiente función, que llamamos SumaSeniales, muestra el uso de los elementos anteriores:

PDF created with pdfFactory trial version www.pdffactory.com

13

2. Multiplicación de señales:

La multiplicación se efectúa muestra con muestra en las secuencias operando, y es especificada por:

x1(n) ⋅ x2(n) = x1(n) x2(n)

En MATLAB se implementa mediante el operador ".*", y aplican las mismas restricciones que con el operador "+". Con tales consideraciones de por medio, ofrecemos la función MultSeniales resuelta en el siguiente script:

3. Operación de escalamiento:

En esta operación cada muestra se multiplica por un escalar α.:

αx(n) = αx(n)

El operador aritmético, usado en MATLAB, para implementar la operación de escalamiento es "*" .

function [y,n] = SumaSeniales(x1,n1,x2,n2) % Implementa la suma de dos señales: % ----------------------------------------------------------------------------------------- % y(n) = x1(n) + x2(n) % ----------------------------------------------------------------------------------------- % Sintaxis: % [y,n] = SumaSeniales(x1,n1,x2,n2) % y = secuencia de la suma sobre n, en la cual se incluye n1 y n2 % x1 = primera secuencia sobre n1 % x2 = segunda secuencia sobre n2 (n2 puede ser diferente de n1) n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duración de y(n) y1 = zeros(1,length(n)); y2 = y1; % inicialización y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duración de y y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duración de y y = y1+y2;

function [y,n] = MultSeniales(x1,n1,x2,n2) % Implementa la multiplicación de dos señales % y(n) = x1(n)*x2(n) % ------------------------------------------------------------- % Sintaxis: % [y,n] = MultSeniales(x1,n1,x2,n2) % y = secuencia producto sobre n, en donde se incluyen n1 y n2 % x1 = primera secuencia sobre n1 % x2 = segunda secuencia sobre n2 (n2 puede ser diferente de n1) % n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duración de y(n) y1 = zeros(1,length(n)); y2 = y1; % Inicialización y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duración de y y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duración de y y = y1 .* y2; % secuencia de la mult.

PDF created with pdfFactory trial version www.pdffactory.com

14

4. Corrimiento:

En esta operación cada muestra de x(n) es desplazada una cantidad k, para obtener una nueva secuencia y(n) que es una versión desplazada de x(n), así:

y(n) = x(n-k)

Si se considera que m=n-k, entonces n=m+k, y por lo tanto la operación se puede reescribir como:

y(m+k) = x(m)

Esta operación de corrimiento no tiene efecto sobre el vector x, pero el vector n es modificado por la adición de k a cada elemento. Con estas consideraciones en mente, hemos escrito la función DesplazaSenial:

5. Desdoblamiento.

En esta operación cada muestra de x(n) es rotada alrededor de n = 0, para obtener una nueva secuencia y(n), que es una versión reflejada (girada) de x(n). Aquí:

y(n) = x(-n) En MATLAB esta operación es implementada por las funciones fliplr(x), para los valores de las muestras, y -fliplr(n), para las posiciones de las muestras, como se ilustra en el siguiente código para la función RotaSenial:

6. Suma de muestras.

Esta operación realiza la suma de todos los valores de las muestras de una secuencia x(n), entre n1 y n2, y se expresa como:

∑=

2

1

)(n

nnnx = x(n1) + ... + x(n2)

Su implementación queda establecida por la función: sum(x(n1:n2)).

function [y,n] = DesplazaSenial(x,m,n0) % Implementa el desplazamiento de una señal % y(n) = x(n-n0) % ------------------------- % Sintaxis: % [y,n] = DesplazaSenial(x,m,n0) % % m es el vector posición de la señal x. n = m+n0; y = x;

function [y,n] = RotaSenial(x,n) % Implementa la rotación de una señal % y(n) = x(-n) % ----------------------------------- % Sintaxis: % [y,n] = RotaSenial(x,n) % y = fliplr(x); n = -fliplr(n);

PDF created with pdfFactory trial version www.pdffactory.com

15

7. Producto de muestras.

Esta operación efectúa la multiplicación de todos los valores de las muestras de una secuencia x(n), entre n1 y n2., y se expresa por:

∏2

1

)(n

n

nx = x(n1) x ... x x(n2)

Su implementación esta dada por la función prod(x(n1:n2)).

8. Energía de señal.

La energía de una señal x(n) es dada por :

εx = ∑ ∑∞

∞−

∞−

= 2* |)(|)()( nxnxnx

donde el índice superior * indica la operación de conjugación compleja. La energía de una secuencia x(n) de duración finita puede ser calculada en MATLAB usando una de las siguientes funciones: >> Ex= sum(x.* conj(x)); % una forma >> Ex= sum(abs(x) .^ 2); % otra forma

9. Potencia de señal.

La potencia promedio de una secuencia periódica con periodo fundamental N es dada por:

Px = ∑−1

0

2|)(|1 N

nxN

A continuación, nos servimos de algunas secuencias para ilustrar las distintas operaciones que se han definido, e iniciarnos en su manejo mediante el empleo de comandos en MATLAB. Proponemos generar y graficar la siguiente secuencia: (a) x(n) = 2δ(n+2) - δ(n-4), -5 ≤ n ≤ 5, para lo cual empleamos el siguiente código:

>> n = [-5:5]; >> x = 2*SecuenciaImpulso(-2,-5,5)-SecuenciaImpulso(4,-5,5); >> subplot(1,1,1); stem(n,x); >> xlabel('n'); ylabel('x(n)'); axis([-5,5,-2,3]) >> xaux = [-5:5]; yaux = zeros(size(xaux));

>> line('XData',xaux,'YData',yaux,'LineWidth',0.25); La gráfica de la secuencia resultante es la siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

16

Otra secuencia, que nos permite utilizar y ejercitar las funciones definidas y comandos de MATLAB, es: (b) x(n) = n[u(n) - u(n-10)] + 10e-0.3(n-10) [u(n-10) - u(n-20)], 0 ≤ n ≤ 20, cuyo código es:

>> n = [0:20]; >> x1 = n.*(SecuenciaEscalon(0,0,20)-SecuenciaEscalon(10,0,20)); >> x2 = 10*exp(-0.3*(n-10)).*(SecuenciaEscalon(10,0,20)-SecuenciaEscalon(20,0,20)); >> x = x1+x2; >> subplot(1,1,1);stem(n,x); >> xlabel('n');ylabel('x(n)');axis([0,20,-1,11]) >> xaux = [0:20]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica de la secuencia resultante es:

-5 0 5-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

2.5

3

n

x(n)

0 5 10 15 20

0

2

4

6

8

10

n

x(n)

PDF created with pdfFactory trial version www.pdffactory.com

17

Un tercer ejemplo lo tenemos en la siguiente secuencia: (c) x(n) = cos(0.04πn) + 0.2w(n), 0 ≤ n ≤ 50, para la cual se ha escrito el código siguiente:

>> n = [0:50]; >> x = cos(0.04*pi*n)+0.2*randn(size(n)); >> subplot(1,1,1);stem(n,x); >> xlabel('n');ylabel('x(n)');axis([0,50,-1.4,1.4]) >> xaux = [0:50]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); La gráfica de la secuencia resulta es:

La siguiente secuencia “periódica” resulta interesante de describir: (d) xp(n) = ..., 5,4,3,2,1,5,4,3,2,1,5,4,3,2,1,...; -10 ≤ n ≤ 9, nos ha permitido escribir el siguiente ↑ código:

>> n=[-10:9]; >> x=[5,4,3,2,1]; >> xp=x' * ones(1,4); >> xp=(xp(:))'; >> subplot(1,1,1);stem(n,xp); >> xlabel('n');ylabel('xp(n)');axis([-10,9,-1,6]) >> xaux = [-10:9]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica de la secuencia es la siguiente:

0 10 20 30 40 50

-1

-0.5

0

0.5

1

n

x(n)

PDF created with pdfFactory trial version www.pdffactory.com

18

Por otro lado, consideremos la secuencia especificada por x(n) = 1,2,3,4,5,6,7,6,5,4,3,2,1, e intentemos ↑ determinar y graficar las siguientes secuencias relacionadas: (a) x1(n) = 2x(n-5) - 3x(n+4)

(b) x2(n) = x(3-n) + x(n)x(n-2) Es de notar que la secuencia x(n) nunca vale cero en el intervalo -2 ≤ n ≤ 10, por lo que tenemos: >> n = -2:10; x = [1:7,6:-1:1]; % instrucciones que generan x(n). (a) Así, para el caso donde x1(n) = 2x(n-5) - 3x(n+4).

La primera parte de la ecuación se obtiene desplazando a x(n) por 5 unidades, y la segunda parte se obtiene con un desplazamiento de -4 unidades de x(n). Desde luego, estas operaciones de corrimiento y suma pueden ser fácilmente llevadas a cabo usando las funciones DesplazaSenial y SumaSeniales implementadas anteriormente, como se muestra a continuación: >> [x11,n11] = DesplazaSenial(x,n,5); [x12,n12] = DesplazaSenial(x,n,-4); >> [x1,n1] = SumaSeniales(2*x11,n11,-3*x12,n12); >> subplot(1,1,1); stem(n1,x1); >> xlabel('n'); ylabel('x1(n)'); axis([min(n1)-1,max(n1)+1,min(x1)-1,max(x1)+1]) >> xaux = [-7:16]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica de x1(n) se muestra a continuación:

-10 -8 -6 -4 -2 0 2 4 6 8-1

0

1

2

3

4

5

6

n

xp(n

)

PDF created with pdfFactory trial version www.pdffactory.com

19

(b) Para el caso donde x2(n) = x(3-n) + x(n)x(n-2).

El primer término puede ser escrito como x(-(n-3)), de modo que lo primero que hay que hacer es girar x(n) y a continuación desplazarle 3 unidades. La segunda parte de la secuencia es una multiplicación de x(n) y x(n-2), con ambas secuencias de igual longitud pero diferente vector de posición. Así, la secuencia puede ser construida usando las funciones RotaSenial y MultSeniales, implementadas anteriormente: >> [x21,n21] = RotaSenial(x,n); [x21,n21] = DesplazaSenial(x21,n21,3); >> [x22,n22] = DesplazaSenial(x,n,2); [x22,n22] = MultSeniales(x,n,x22,n22); >> [x2,n2] = SumaSeniales(x21,n21,x22,n22); >> subplot(1,1,1); stem(n2,x2); >> xlabel('n'); ylabel('x2(n)'); axis([min(n2)-1,max(n2)+1,0,40]) La gráfica de x2(n) se muestra a continuación:

-5 0 5 10 15

-20

-15

-10

-5

0

5

10

15

n

x1(n

)

-5 0 5 100

5

10

15

20

25

30

35

40

n

x2(n

)

PDF created with pdfFactory trial version www.pdffactory.com

20

Ahora, intentamos generar la siguiente señal compleja:

x(n) = e(-0.1 + j0.3)n , en el intervalo -10 ≤ n ≤ 10 y graficar su magnitud, su fase, la parte real y la parte imaginaria. Para este caso, hacemos uso del siguiente script de comandos en MATLAB:

>> n = [-10:1:10]; alpha = -0.1+0.3j; >> x = exp(alpha*n); >> subplot(2,2,1); stem(n,real(x));title('Parte Real');xlabel('n','FontSize',8); >> xaux = [-10:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,2); stem(n,imag(x));title('Parte Imaginaria');xlabel('n','FontSize',8); >> xaux = [-10:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); stem(n,abs(x));title('Magnitud');xlabel('n','FontSize',8); >> subplot(2,2,4); stem(n,(180/pi)*angle(x));title('Fase');xlabel('n','FontSize',8); >> xaux = [-10:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

Las gráficas de las secuencias resultantes se muestran a continuación: En este punto, consideramos conveniente detenernos un momento para resaltar la existencia de algunos resultados importantes en la teoría de señales discretas en tiempo, entre los cuales se encuentran: Síntesis de secuencias con Impulsos unitarios. Cualquier secuencia arbitraria x(n) puede ser sintetizada como una suma ponderada de secuencias impulso unitarias, retardadas adecuadamente, tal como se muestra a continuación:

x(n) = ∑∞

−∞=

−k

knkx )()( δ (2.1)

-10 -5 0 5 10-3

-2

-1

0

1

2Parte Real

n-10 -5 0 5 10

-2

-1

0

1Parte Imaginaria

n

-10 -5 0 5 100

1

2

3Magnitud

n-10 -5 0 5 10

-200

-100

0

100

200Fase

n

PDF created with pdfFactory trial version www.pdffactory.com

21

Síntesis por simetría par e impar. Una secuencia real xe(n), se dice que es par (simétrica) si

xe(-n) = xe(n)

Similarmente, una secuencia real xo(n) se dice que es impar (asimétrica) si

xo(-n) = -xo(n)

Con base en estos postulados, es posible establecer que cualquier secuencia real x(n) puede ser descompuesta en sus componentes par e impar, y escribirse como:

x(n) = xe(n) + xo(n) (2.2)

con las componentes par e impar especificadas por:

xe(n) = 21

[x(n) + x(-n)] y xo(n) = 21

[x(n) - x(-n)] (2.3)

Esta operación de descomposición es relevante en la medida que es utilizada para el estudio de las propiedades de la transformada de Fourier. Por ello, consideramos conveniente desarrollar una función en MATLAB que permita la descomposición de una secuencia en sus componentes par e impar; a tal función la denominamos DescomParImpar, y la escribimos a continuación:

De la función se observa que los valores de la secuencia son proporcionados con el vector x, y sus intervalos de tiempo son proporcionados con el vector n. En primer lugar la función checa si la secuencia proporcionada es real y determina los intervalos de tiempo de los componentes par e impar en el arreglo m. Posteriormente implementa la ecuación (2.3) con especial atención en las operaciones de indexación en MATLAB. Finalmente los componentes resultantes son almacenados en los arreglos xe y xo. Consideremos a continuación la secuencia x(n) = u(n) - u(n-10), para la cual vamos a determinar sus componentes par e impar. En este caso, la secuencia x(n) nunca vale cero sobre el intervalo 0 ≤ n ≤ 9, por lo que se dice que es un pulso rectangular (de duración 10), y para la cual generamos el siguiente script que permite obtener sus componentes par e impar:

function [xe, xo, m] = DescomParImpar(x,n) % Descomposición de una señal en sus partes par e impar % ------------------------------------------------------------- % Sintaxis: % [xe, xo, m] = DescomParImpar(x,n) % if any(imag(x) ~= 0) error('x no es una secuencia real') end m = -fliplr(n); m1 = min([m,n]); m2 = max([m,n]); m = m1:m2; nm = n(1)-m(1); n1 = 1:length(n); x1 = zeros(1,length(m)); x1(n1+nm) = x; x = x1; xe = 0.5*(x + fliplr(x)); xo = 0.5*(x - fliplr(x));

PDF created with pdfFactory trial version www.pdffactory.com

22

>> n = [0:10]; >> x = SecuenciaEscalon(0,0,10)-SecuenciaEscalon(10,0,10); >> [xe,xo,m] = DescomParImpar(x,n); >> figure(1);clf >> subplot(2,2,1); stem(n,x); title('Pulso Rectangular') >> xlabel('n','FontSize',8); ylabel('x(n)'); axis([-10,10,0,1.2]) >> subplot(2,2,2); stem(m,xe); title('Componente Par') >> xlabel('n','FontSize',8); ylabel('xe(n)'); axis([-10,10,0,1.2]) >> subplot(2,2,4); stem(m,xo); title('Componente Impar') >> xlabel('n','FontSize',8); ylabel('xo(n)'); axis([-10,10,-0.6,0.6]) >> xaux = [-10:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> toptitle('Descomposición Par - Impar');

Las gráficas que muestran la descomposición se presentan a continuación:

Series geométricas. Una secuencia exponencial de la forma αn, n≥0, donde α es una constante arbitraria, es llamada serie geométrica.

En el procesamiento digital de señales la expresión y convergencia de la suma de estás series son usadas en muchas aplicaciones. Además, tenemos que las series convergen para |α| < 1, mientras que la suma de sus componentes converge a

∑∞

= α−→α

0 11

n

n , para |α| < 1 (2.4)

Desde luego, se necesitará una expresión para la suma de cualquier número finito de términos de la serie, lo cual se puede lograr con:

-10 -5 0 5 100

0.2

0.4

0.6

0.8

1

Pulso Rectangular

n

x(n)

-10 -5 0 5 100

0.2

0.4

0.6

0.8

1

Componente Par

n

xe(n

)

-10 -5 0 5 10

-0.4

-0.20

0.2

0.4

0.6Componente Impar

n

xo(n

)

Descomposició n Par - Impar

PDF created with pdfFactory trial version www.pdffactory.com

23

∑−

= −−

=1

0 11N

n

Nn

αα

α , ∀α (2.5)

Correlación de secuencias. La correlación es una operación usada en muchas aplicaciones, desde luego también en el procesamiento digital de señales, debido a que es una medida del grado de similitud entre dos secuencias. Así, dadas dos secuencias reales, x(n) y y(n), con energía finita, la correlación cruzada de x(n) y y(n) es una secuencia rxy(l) definida como:

rx,y(l) = ∑∞

−∞=

−n

lnynx )()( (2.6)

donde el índice l es llamado el corrimiento de y con respecto a x. El caso especial de (2.6), cuando y(n) = x(n), es conocido como autocorrelación, y queda definido por:

rxx(l) = ∑∞

−∞=

−n

lnxnx )()( (2.7)

La autocorrelación debe entenderse como una medida de auto-similitud según diferentes alineamientos de la secuencia. Desde luego, existen funciones en MATLAB que permiten calcular la autocorrelación y la correlación cruzada entre secuencias (vectores). SISTEMAS DISCRETOS

Matemáticamente, un sistema discreto en tiempo es descrito con un operador T[⋅] , el cual toma una secuencia x(n) (denominada excitación) y la transforma en otra secuencia y(n) (denominada respuesta). Simbólicamente, esto se puede describir como:

y(n) = T[x(n)]

En el contexto del PDS se dice que el sistema procesa una señal de entrada en una señal de salida. En nuestro caso, los sistemas que consideraremos, básicamente, serán los conocidos como sistemas lineales. Sistemas Lineales Un sistema discreto T[⋅] es un operador lineal L[⋅], si y sólo si L[⋅] satisface el principio de superposición, como se muestra:

L[a1x1(n) + a2x2(n)] =a1L[x1(n)] + a2L[x2(n)], ∀ a1, a2, x1(n), x2(n) (2.8)

Usando (2.1) y (2.8), tenemos que la salida y(n) de un sistema lineal para una entrada x(n) arbitraria está dada por:

y(n) = L[x(n)] = L

−∑

−∞=nknkx )()( δ = [ ]∑

−∞=

−n

knLkx )()( δ

PDF created with pdfFactory trial version www.pdffactory.com

24

en donde la respuesta L[δ(n-k)] puede ser interpretada como la respuesta de un sistema lineal en el tiempo n debido a un impulso unitario en el instante k, a lo que se conoce como la respuesta al impulso, la cual queda denotada por h(n,k). De este modo, la salida queda establecida por la sumatoria de superposición:

y(n) = ∑∞

−∞=nknhkx ),()( (2.9)

El cálculo de (2.9) requiere que la respuesta al impulso sea variante en el tiempo, lo cual en la práctica no es muy conveniente, razón por la cual los sistemas invariantes en el tiempo son los más ampliamente usados y constituyen nuestro principal referente. Sistema Lineal Invariante en el Tiempo (SLIT). Se dice que un sistema es lineal invariante en el tiempo cuando el comportamiento de las señales x(n) y y(n), entrada y salida respectivamente, no varia cuando se realiza un corrimiento por k muestras en el tiempo. La característica de un sistema LIT es que los operadores L[⋅] y de corrimiento son reversibles, como se muestra a continuación:

Por simplicidad, durante nuestro trabajo denotaremos a un sistema LIT con el operador LIT[⋅]. Así, dada la entrada x(n) y la salida y(n) de un sistema LIT, tenemos que aplicando el operador de corrimiento a la función h(n, k) variante en el tiempo, ésta se convierte en la función h(n-k) invariante en el tiempo, por lo que la ecuación (2.9) queda expresada como:

y(n) = LIT[x(n)] = ∑∞

∞−

− )()( knhkx (2.10)

A esta relación, que expresa una operación matemática, se le conoce como sumatoria de convolución lineal, y la misma se denota por:

y(n) = x(n) * h(n) (2.11) en donde h(n) es la respuesta al impulso del sistema LIT. De tal suerte, podemos considerar que un sistema LIT es completamente caracterizado, en el dominio del tiempo, por su respuesta al impulso h(n), como se muestra a continuación:

Estabilidad. La estabilidad es un concepto muy importante en la teoría de los sistemas lineales, debido a que evita la construcción de sistemas autodestructivos, o la saturación en la operación del sistema. Se dice que un sistema es estable siempre que una entrada de amplitud limitada produce una salida de amplitud limitada. Simbólicamente:

|x(n)| < ∞ ⇒ |y(n)| < ∞ , ∀x,y

PDF created with pdfFactory trial version www.pdffactory.com

25

También se dice que un sistema es estable si y sólo si su respuesta al impulso es absolutamente sumable, esto es:

Estabilidad ⇔ ∑∞

∞−

|)(| nh < ∞ (2.12)

Causalidad. La causalidad es un concepto importante y necesario para asegurarse que un sistema puede ser construido. Se dice que un sistema es causal si la salida en el índice n0 depende sólo de la entrada previa o, a lo más, la entrada presente en el índice n0; en otras palabras, la salida no depende de valores futuros de la entrada (otra forma de expresarlo es que no puede haber una salida si antes no hay una entrada). Un sistema LIT es causal si y sólo si la respuesta al impulso cumple lo siguiente:

h(n) = 0, n < 0 (2.13)

Para nuestros fines, asumimos que todos los sistemas con los que trabajaremos son causales. CONVOLUCION

Como ya lo hemos señalado, la operación de convolución permite describir la respuesta de un sistema LIT, por lo cual es una operación importante, fuente de muchos análisis y conocimiento sobre la actuación de los sistemas que nos son de interés. Una característica de esta operación de convolución es que puede ser evaluada de muchas formas distintas, por ejemplo: si las secuencias son funciones matemáticas (de duración finita o infinita), entonces la ecuación (2.11) puede ser evaluada analíticamente para toda n, para así obtener una forma funcional de y(n). Consideremos el pulso rectangular x(n) = u(n)-u(n-10), el cual se toma como entrada para un sistema LIT con respuesta al impulso indicada por:

h(n) = (0.9)n u(n) y para el cual se requiere determinar su respuesta o salida y(n). En este caso, el código de que nos servimos es:

% x(n)=[u(n)-u(n-10]; h(n)=(0.9)^n*u(n) % y(n)=10*(1-(0.9)^(n+1))*(u(n)-u(n-10))+ % (10*(1-(0.9)^10)*(0.9)^(n-9))*u(n-10) >> n = -5:50; >> u1 = SecuenciaEscalon(0,-5,50); u2=SecuenciaEscalon(10,-5,50); % Entrada x(n) >> x = u1-u2; % Respuesta al Impulso h(n) >> h = ((0.9).^n).*u1; >> subplot(2,1,1); stem(n,x); axis([-5,50,0,2]) >> title('Secuencia de Entrada') >> xlabel('n'), ylabel('x(n)') >> subplot(2,1,2); stem(n,h); axis([-5,50,0,2]) >> title('Respuesta al Impulso') >> xlabel('n'), ylabel('h(n)');

PDF created with pdfFactory trial version www.pdffactory.com

26

De la ecuación (2.11) tenemos que:

y(n) = ∑ ∑= =

−− −=−9

0

9

0

)( )()9.0()9.0()()9.0)(1(k k

knkn knuknu (2.14)

Donde la secuencia girada y desplazada ha sido la correspondiente a la respuesta impulsiva, y se observa que la suma en (2.14) es casi una suma de serie geométrica, excepto que el término u(n-k) toma diferentes valores dependiendo de lo que valgan n y k. De este hecho se desprenden tres condiciones diferentes para las cuales u(n-k) debe ser considerada.

Caso i: n < 0: Implica que u(n-k) = 0, en el intervalo 0 ≤ k ≤ 9. Por lo tanto, de la ecuación (2.14)

y(n) = 0 (2.15) En este caso los valores distintos de cero de x(n) y de h(n) no se sobreponen. Caso ii: 0 ≤ n < 9: Implica que u(n-k) = 0, en el intervalo 0 ≤ k ≤ n. Por lo tanto, de la ecuación (2.14) se sigue que:

y(n) = [ ]∑ ∑= =

−− =n

k

n

k

knkn

0 0

1)9.0()9.0()9.0()9.0( (2.16)

= (0.9)n [ ]11

)1(

)9.0(110)9.0(1

)9.0(1 +−

+−

−=−

− nn

, 0 ≤ n < 9

En este caso la respuesta al impulso, h(n), se sobrepone parcialmente con la entrada x(n).

-5 0 5 10 15 20 25 30 35 40 45 500

0.5

1

1.5

2Secuencia de Entrada

n

x(n)

-5 0 5 10 15 20 25 30 35 40 45 500

0.5

1

1.5

2Respuesta Impulso

n

h(n)

PDF created with pdfFactory trial version www.pdffactory.com

27

-5 0 5 10 15 20 25 30 35 40 45 500

2

4

6

8Secuencia de Salida

n

y(n)

Caso iii: n ≥ 9: Implica que u(n-k) = 1, en el intervalo 0 ≤ k ≤ 9, y por lo tanto, de la ecuación (2.14)

y(n) = ∑=

−9

0)9.0()9.0(

k

kn (2.17)

= (0.9)n [ ]1091

10

)9.0(1)9.0(10)9.0(1)9.0(1

−=−− −

−n , n ≥ 9

En este tercer caso, h(n) se sobrepone completamente con x(n).

De este modo, la respuesta completa es dada por (2.15), (2.16) y (2.17); y este resultado se muestra en la figura siguiente, en la cual se aprecia la distorsión del pulso de entrada. A continuación también se presenta el código correspondiente: % respuesta de salida >> figure(2) >> y = (10*(1-(0.9).^(n+1))).*(u1-u2)+(10*(1-(0.9)^10)*(0.9).^(n-9)).*u2; >> subplot(2,1,2); stem(n,y); axis([-5,50,0,8]) >> title('Secuencia de Salida') >> xlabel('n'), ylabel('y(n)')

El ejemplo anterior, también pudo haberse realizado empleando el método de convolución gráfica, en el cual a la ecuación (2.11) se le da una interpretación gráfica. En este método h(n-k) es interpretada como una versión girada y desplazada de h(k). Posteriormente la salida y(n) se obtiene sumando los productos de las muestras de x(k) y h(n-k) que se sobrepongan. El ejemplo siguiente ilustra tal método de convolución gráfica. Consideremos las siguientes dos secuencias:

x(n) = [ 3, 11, 7, 0, -1, 4, 2 ], -3 ≤ n ≤ 3, y h(n) = [ 2, 3, 0, -5, 2, 1 ], -1 ≤ n ≤ 4 ↑ ↑ Para las cuales deseamos determinar su convolución, y(n) = x(n) * h(n). La figura siguiente muestra las secuencias originales, x(k) y h(k).

PDF created with pdfFactory trial version www.pdffactory.com

28

A continuación se muestran x(k) y h(-k), en donde h(-k) es la versión girada de h(k): . Las gráficas siguientes muestran x(k) y h(-1-k), en donde h(-1-k) es la versión girada y desplazada una unidad de h(k):

-5 -4 -3 -2 -1 0 1 2 3 4 5-5

0

5

10

x(k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-6

-4

-2

0

2

4h(k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-5

0

5

10

x(k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-6

-4

-2

0

2

4h(-k)

k

PDF created with pdfFactory trial version www.pdffactory.com

29

Entonces tenemos que:

∑ =−−k

khkx )1()( 3 x (-5) + 11 x 0 + 7 x 3 + 0 x 2 = 6 = y(-1)

Las gráficas de abajo muestran x(k) y h(2-k), en donde h(2-k) es la versión girada y desplazada -2 unidades de h(k), lo cual da como resultado que:

∑ =−k

khkx )2()( 11 x 1 + 7 x 2 + 0 x (-5) + (-1) x 0 + 4 x 3 + 2 x 2 = 41 = y(2)

-5 -4 -3 -2 -1 0 1 2 3 4 5-5

0

5

10

x(k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-6

-4

-2

0

2

4h(-1-k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-5

0

5

10

x(k)

k

-5 -4 -3 -2 -1 0 1 2 3 4 5-6

-4

-2

0

2

4h(2-k)

k

PDF created with pdfFactory trial version www.pdffactory.com

30

Por consiguiente se obtienen dos valores de y(n). Siguiendo este procedimiento se pueden obtener los valores restantes de y(n). Es conveniente tomar en cuenta que el punto de inicio (primera muestra distinta de cero) de y(n) esta dado por n=-3+(-1)=-4, mientras que el punto final (última muestra distinta de cero) de y(n) esta dado por n=3+4=7. Así, cuando se desarrollan todas las sumas de productos para cada uno de los corrimientos se tiene que:

3 11 7 0 -1 4 2 n y(n) 1 2 -5 0 3 2 -4 6 3 2 -3 31 0 3 2 -2 47 -5 0 3 2 -1 6 2 -5 0 3 2 0 -51 1 2 -5 0 3 2 1 -5 1 2 -5 0 3 2 2 41 1 2 -5 0 3 3 18 1 2 -5 0 4 -2 1 2 -5 5 -3 1 2 6 8 1 7 2

Vale recordar que el corrimiento, establecido por n, siempre se mide entre las posiciones de referencia de las secuencias que intervienen en la operación. En este caso, el primer punto de contacto ocurre cuando la separación entre ellas es de 4 unidades a la izquierda de la referencia fija, y el último punto de contacto se da cuando la distancia entre las referencias es de 7 unidades a la derecha de la secuencia fija. De modo que la secuencia de salida es:

y(n) = 6, 31, 47, 6, -51, -5, 41, 18, -22, -3, 8, 2, 0

Desde luego, hay que observar que el resultado obtenido arroja que la secuencia y(n) tiene una longitud mayor que cualquiera de las secuencias x(n) o h(n), de hecho la longitud del resultado es la suma de las longitudes de las secuencias operando. MATLAB puede generar directamente la convolución de dos secuencias finitas, mediante una función propia llamada conv, la cual asume que las dos secuencias comienzan en n=0. La función conv es invocada de la siguiente manera: >> y = conv(x,h); Por ejemplo, para realizar la convolución de las secuencias empleadas en el ejemplo anterior, se podría usar: >> x = [3, 11, 7, 0, -1, 4, 2]; >> h = [2, 3, 0, -5, 2, 1];

>> y = conv(x,h)

PDF created with pdfFactory trial version www.pdffactory.com

31

y así obtener los valores correctos de y(n):

>> y = 6 31 47 6 -51 -5 41 18 -22 -3 8 2 0

Sin embargo la función conv no proporciona ni acepta información de tiempo si la secuencia tiene un vector n arbitrario; lo que se necesita es un punto de inicio y un punto final de y(n). Entonces, dadas x(n) y h(n) de duración finita, es fácil determinar esos puntos. Consideremos

x(n); nxb ≤ n ≤ nxe y h(n); nhb ≤ n ≤ nhe

dos secuencias de duración finita, si nos referimos al ejemplo anterior, observamos que los puntos de inicio y fin de y(n) son:

nyb = nxb + nhb y nye = nxe + nhe respectivamente. Con esta información es posible crear una extensión de la función conv, que denominamos conv_m, la cual puede efectuar la convolución de secuencias con vectores n-arbitrarios; como se muestra a continuación:

Con tal código podemos realizar la convolución del ejemplo anterior, usando el script siguiente: >> x = [3, 11, 7, 0, -1, 4, 2]; nx = [-3: 3];

>> h = [2, 3, 0, -5, 2, 1]; nh = [-1: 4]; >> [y,ny] = conv_m(x,nx,h,nh)

lo cual resulta en:

y = 6 31 47 6 -51 -5 41 18 -22 -3 8 2 ny = -4 -3 -2 -1 0 1 2 3 4 5 6 7

function [y,ny] = conv_m(x,nx,h,nh) % Rutina de convolución modificada para procesamiento de señales % ------------------------------------------------------------------------------- % [y,ny] = conv_m(x,nx,h,nh) % y = resultado de la convolución % ny = vector n de y % x = secuencia de entrada % nx = vector n de x % h = respuesta al impulso % nh = vector n de h % nyb = nx(1)+nh(1); nye = nx(length(x)) + nh(length(h)); ny = [nyb:nye]; y = conv(x,h);

PDF created with pdfFactory trial version www.pdffactory.com

32

por lo tanto:

y(n) = 6, 31, 47, 6, -51, -5, 41, 18, -22, -3, 8, 2

que es el resultado ya conocido.

Si comparamos la operación de convolución en (2.11) con la correlación cruzada de dos secuencias, definida en (2.6), se observa cierto parecido. La correlación cruzada ryx(l) puede ser puesta en la forma:

ryx(l) = y(l) * x(-l)

y la autocorelación rxx(l) en la forma:

rxx(l) = x(l) * x(-l)

De modo que estas correlaciones pueden ser calculadas usando la función conv, si las secuencias involucradas son de duración finita. Por ejemplo, si consideramos la secuencia de correlación cruzada de la secuencia

x(n) = [ 3, 11, 7, 0, -1, 4, 2 ] ↑ con la secuencia y(n), que es una versión corrompida con ruido y desplazada de x(n), expresada por:

y(n) = x(n-2) + w(n)

en donde w(n) es una secuencia Gaussiana con media 0 y varianza 1. Entonces la construcción de y(n) muestra que y(n) es "similar" a x(n-2), por lo que su correlación cruzada habrá de mostrar su fuerte similitud con x(n) en l=2. Para probar esto calculamos la correlación cruzada usando dos secuencias de ruido diferentes:

% Secuencia de ruido 1 >> x = [3, 11, 7, 0, -1, 4, 2]; nx=[-3:3]; % señal prototipo x(n) >> [y,ny] = DesplazaSenial(x,nx,2); % obtiene x(n-2) >> w = randn(1,length(y)); nw = ny; % genera w(n) >> [y,ny] = SumaSeniales(y,ny,w,nw); % obtiene y(n) = x(n-2) + w(n) >> [x,nx] = RotaSenial(x,nx); % obtiene x(-n) >> [rxy,nrxy] = conv_m(y,ny,x,nx); % correlación cruzada >> figure(1);clf >> subplot(1,1,1);stem(nrxy,rxy) >> text(2.2,203,'Máximo'); >> axis([-3,8 ,-50,250]);xlabel('variable l retrasada') >> ylabel('rxy');title('Correlación Cruzada: Secuencia de ruido 1') >> xaux = [-4:8]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica resultante es la siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

33

% Secuencia de ruido 2 >> x = [3, 11, 7, 0, -1, 4, 2]; nx=[-3:3]; % señal prototipo x(n) >> [y,ny] = DesplazaSenial(x,nx,2); % obtiene x(n-2) >> w = randn(1,length(y)); nw = ny; % genera w(n) >> [y,ny] = SumaSeniales(y,ny,w,nw); % obtiene y(n) = x(n-2) + w(n) >> [x,nx] = RotaSenial(x,nx); % obtiene x(-n) >> [rxy,nrxy] = conv_m(y,ny,x,nx); % correlación cruzada >> figure(2); clf >> subplot(1,1,1);stem(nrxy,rxy) >> text(2.2,203,'Máximo') >> axis([-3,8,-50,250]);xlabel('variable l retrasada') >> ylabel('rxy');title('Correlación Cruzada: Secuencia de ruido 2') >> xaux = [-4:8]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); La gráfica resultante es la siguiente:

-3 -2 -1 0 1 2 3 4 5 6 7 8-50

0

50

100

150

200

250

Má ximo

variable l retrasada

rxy

Correlació n Cruzada: Secuencia de ruido 1

-3 -2 -1 0 1 2 3 4 5 6 7 8-50

0

50

100

150

200

250

Má ximo

variable l retrasada

rxy

Correlació n Cruzada: Secuencia de ruido 2

PDF created with pdfFactory trial version www.pdffactory.com

34

De las dos gráficas anteriores se observa que la correlación cruzada, efectivamente, presenta un máximo en l=2, lo que indica que y(n) es similar a x(n) recorrida dos unidades. Desde luego, este enfoque puede ser usado en aplicaciones de procesamiento de señales de radar, para identificar y localizar objetivos.

Cabe mencionar que el toolbox de procesamiento de señales que acompaña a MATLAB también proporciona una función llamada xcorr para calcular la correlación de secuencias. Su forma de invocación es la siguiente:

>> xcorr(x,y)

con lo cual se desarrolla el calculo de la correlación cruzada entre el vector x y el vector y, mientras que

>> xcorr(x)

realiza la autocorrelación del vector x. Esta función no esta disponible en la Edición Estudiantil de MATLAB, pero los resultados que genera son idénticos a los que se obtienen con la función conv_m,; sin embargo, la función xcorr no proporciona la información del tiempo (o retraso) como lo hace la función conv_m. Estos tiempos pueden ser obtenidos por algunos otros medios, pero no de forma tan elegante como lo hemos hecho con la función conv_m. ECUACIONES DE DIFERENCIA

Otra forma de describir a un sistema discreto LIT es mediante una ecuación de diferencias lineal con coeficientes constantes de la forma

∑∑==

−=−M

mm

N

kk mnxbknya

00),()( ∀ n (2.18)

Sí aN ≠ 0, la ecuación de diferencias es de orden N. Esta ecuación es de naturaleza recursiva, y permite el cálculo de la salida actual sirviéndose de los valores de entrada y los valores de salida calculados previamente. Otra forma de representación de esta ecuación es:

y(n) = ∑∑==

−−−N

kk

M

mm knyamnxb

10)()( (2.19)

Lo cual permite establecer una solución de la forma:

y(n) = yH(n) + yP(n) en donde la parte homogénea de la solución, yH(n), esta dada por:

yH(n) = ∑=

N

k

nkk zc

1

PDF created with pdfFactory trial version www.pdffactory.com

35

donde zk, con k=1,2,...,N , son las N raíces (también llamadas frecuencias naturales) de la ecuación característica

∑ =N

kk za

00

Esta ecuación característica es importante en la determinación de la estabilidad de los sistemas. Si las raíces zk satisfacen la condición

|zk| < 1, k = 1,2,..., N (2.20) entonces un sistema causal descrito por (2.19) es estable. Por otro lado, la parte particular de la solución, yP(n), es determinada a partir del lado derecho de la ecuación (2.18). Desde luego, existen métodos analíticos para determinar la solución de las ecuaciones de diferencias, métodos que esperaremos conocer hasta el momento en que abordemos el tema de transformada Z. Por lo pronto, una rutina llamada filter, disponible en MATLAB, se puede usar para resolver numéricamente ecuaciones de diferencia, dada la entrada y los coeficientes de la ecuación. La forma más simple de esta rutina es la siguiente:

y = filter(b,a,x) donde

b = [b0, b1, ... , bM]; a = [a0, a1, ... , aN]; son los arreglos de los coeficientes de la ecuación (2.18), y x es el arreglo de la secuencia de entrada; además la salida y tiene la misma longitud que la entrada x. Algo que se debe asegurar es que el coeficiente a0 no sea cero. Por ejemplo, dada la siguiente ecuación de diferencia

y(n) - y(n - 1) + 0.9y(n - 2) = x(n); ∀n

a. Podemos calcular y graficar la respuesta al impulso h(n) en el intervalo n = -20, ... ,100

De la ecuación de diferencia dada, los arreglos de los coeficientes son:

b = [1]; a = [1, -1, 0.9];

El script en MATLAB será:

>> a=[1,-1,0.9];b=1; >> x=SecuenciaImpulso(0,-20,120);n=[-20:120]; >> h=filter(b,a,x); >> subplot(2,1,1);stem(n,h) >> axis([-20,120,-1.1,1.1]) >> title('Respuesta al Impulso');xlabel('n');ylabel('h(n)') >> xaux = [-20:120]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica de la respuesta al impulso resulta en:

PDF created with pdfFactory trial version www.pdffactory.com

36

b. Podemos calcular y graficar la respuesta al escalón unitario s(n) en el mismo intervalo, n = -20, ... ,100

En este caso el script es:

>> x=SecuenciaEscalon(0,-20,120); >> s=filter(b,a,x); >> figure(2); clf >> subplot(1,1,1);stem(n,s) >> axis([-20,120,-.5,2.5]) >> title('Respuesta al Escalón');xlabel('n');ylabel('s(n)') >> xaux = [-20:120]; yaux = zeros(size(xaux)); >>line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica de la respuesta al escalón unitario es la siguiente:

-20 0 20 40 60 80 100 120

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Respuesta al Impulso

n

h(n)

-20 0 20 40 60 80 100 120-0.5

0

0.5

1

1.5

2

2.5Respuesta al Escaló n

n

s(n)

PDF created with pdfFactory trial version www.pdffactory.com

37

Para determinar la estabilidad del sistema, es necesario determinar h(n) para toda n; sin embargo, aunque no se ha descrito, hasta el momento, un método para resolver la ecuación de diferencia, podemos usar la gráfica de la respuesta al impulso para observar que h(n) es prácticamente cero para n > 120. En consecuencia, la suma Σ |h(n)| puede obtenerse con MATLAB usando

>> sum(abs(n)) ans = 14.8785

Resultado que implica que el sistema es estable.

Un método alterno para determinar la estabilidad del sistema, de acuerdo con la relación (2.20), consiste en usar la función roots de MATLAB:

>> z = roots(a);

>> magz = abs(z); magz = 0.9487 0.9487

debido a que las magnitudes de ambas raíces son menores a 1, el sistema es estable.

Ya hemos mencionado que si una o ambas secuencias en la convolución son de longitud infinita, entonces la función conv no puede ser usada. Sin embargo, si una de las secuencias es de longitud infinita, entonces es posible usar MATLAB para realizar una evaluación numérica de la convolución, lo cual es posible si se usa la función filter. Consideremos la convolución ya conocida, realizada para la secuencia de entrada de duración finita

x(n) = u(n) - u(n - 10)

y la secuencia de respuesta al impulso de duración infinita

h(n) = (0.9)n u(n) En este caso, si el sistema LIT dado por la respuesta al impulso h(n) puede ser descrito por una ecuación de diferencias, entonces y(n) se puede obtener con la función filter. De la expresión de h(n):

(0.9) h(n-1) = (0.9) (0.9)n-1 u(n-1) = (0.9)n u(n-1) ó

h(n) - (0.9) h(n-1) = (0.9)n u(n) - (0.9)n u(n-1) = (0.9)n [u(n) - u(n-1)] = (0.9)n δ(n) = δ(n) Tomando en cuenta el hecho de que δ(n) es distinto de cero sólo en n=0. Por definición h(n) es la salida de un sistema LIT cuando la entrada es δ(n). Por lo tanto sustituyendo x(n) por δ(n) y y(n) por h(n), la ecuación de diferencia es

y(n) - 0.9 y(n-1) = x(n) Ahora la función filter puede ser usada para calcular la convolución indirectamente. >> b = [1]; a = [1,-0.9];

>> n = -5:50; x = SecuenciaEscalon(0,-5,50) - SecuenciaEscalon(10,-5,50); >> y = filter(b,a,x); >> subplot(1,1,1); >> subplot(2,1,1); stem(n,y); title('Secuencia de Salida') >> xlabel('n'); ylabel('y(n)'); axis([-5,50,-0.5,8])

PDF created with pdfFactory trial version www.pdffactory.com

38

-5 0 5 10 15 20 25 30 35 40 45 500

2

4

6

8Secuencia de Salida

n

y(n)

La gráfica de la salida se muestra enseguida, la cual es exactamente la misma que conocimos anteriormente.

Debe tenerse en cuenta que no todas las respuestas al impulso de longitud infinita pueden ser convertidas en ecuaciones de diferencia. Sin embargo el análisis anterior puede ser extendido a una combinación lineal de un tipo de secuencias exponenciales, las cuales resultan en ecuaciones de diferencia de orden alto. Este tema de conversión de una representación a otra será visto más adelante. Respuestas de Estado-Cero y Entrada-Cero En el procesamiento digital de señales una ecuación de diferencias es generalmente resuelta para tiempos mayores a n=0, por lo que es necesario tener condiciones iniciales en x(n) y y(n) para determinar la salida en n ≥ 0. En esta circunstancia, la ecuación de diferencias esta dada por:

y(n) = ∑∑==

−−−N

kk

M

mm knyamnxb

10)()( ; n ≥ 0 (2.21)

sujeta a las condiciones iniciales:

y(n); -N ≤ n ≤ -1 y x(n); -M ≤ n ≤ -1 Una solución para (2.21) puede ser obtenida en la forma:

y(n) = yZI(n) + yZS(n) donde yZI(n) es llamada la solución entrada-cero, la cual es una solución sólo para las condiciones iniciales (asumiendo que existan), mientras que la solución estado-cero, yZS(n), es una solución sólo para la entrada x(n) (asumiendo que las condiciones iniciales son cero). En MATLAB, también, se puede usar la función filter para resolver la ecuación de diferencia, dadas sus condiciones iniciales. Filtros Digitales Los sistemas LIT en tiempo discreto también son llamados filtros digitales, y se clasifican en dos tipos: Filtros FIR. Si la respuesta al impulso unitario de un sistema LIT es de duración finita, entonces a tal sistema se le denomina filtro de respuesta al impulso de duración finita (o FIR, Finite-duration impulse response). Por lo tanto para un filtro FIR, h(n)=0 para n < n1 y para n > n2. La siguiente ecuación de diferencias describe a un filtro FIR.

PDF created with pdfFactory trial version www.pdffactory.com

39

y(n) = ∑

=

−M

mm mnxb

0)( (2.22)

Además, de ésta ecuación se tiene que h(0) = b0, h(1) = b1, ... , h(M) = bM, , mientras que todas las otras h(n)´s son 0. Los filtros FIR también son llamados filtros no recursivos o de promedio móvil (MA, Moving Average). En MATLAB los filtros FIR son representados con los valores de la respuesta al impulso h(n) o con los coeficientes de la ecuación de diferencia bm y a0=1; por lo tanto, para implementar filtros FIR se puede usar la función conv(x,h) o la función filter(b,1,x). Hay una diferencia en la salida de estas dos implementaciones; la secuencia de salida de la función conv(x,h) tiene una longitud más grande que cualquiera de las secuencias x(n) y h(n). Por el otro lado la secuencia de salida de la función filter(b,1,x) tiene exactamente la misma longitud de la secuencia de entrada x(n). En la práctica (y especialmente para el procesamiento de señales) el uso de la función filter es el más empleado. Filtros IIR. Si la respuesta al impulso de un sistema LIT es de duración infinita, entonces el sistema es llamado un filtro de respuesta al impulso de duración infinita (IIR, infinite-duration impulse response), y se expresa con la ecuación de diferencias:

)()(0

nxknyaN

kk =−∑

=

(2.23)

la cual describe a un filtro recursivo en el que la salida y(n) es calculada recursivamente a partir de sus valores anteriores. También se le conoce como filtro autoregresivo (AR), cuya respuesta al impulso es de duración infinita. La ecuación general (2.18) también describe un filtro IIR; la cual tiene dos partes: una parte AR y una parte MA. Tal filtro es llamado filtro autoregresivo de promedio móvil, o filtro ARMA. En MATLAB los filtros IIR son descritos por medio de los coeficientes bm y ak de la ecuación de diferencia, y son implementados por la función filter(b,a,x).

PDF created with pdfFactory trial version www.pdffactory.com

41

ANÁLISIS DE FOURIER DISCRETO EN TIEMPO Ya hemos apuntado que un sistema lineal invariante en tiempo puede ser representado usando su respuesta a la secuencia de muestreo unitaria, la denominada respuesta al impulso h(n), con la cual es posible calcular la respuesta del sistema a cualquier entrada arbitraria x(n) mediante la operación de convolución, como gráficamente se ilustra a continuación:

x(n) y(n) = x(n) * h(n) Esta representación se justifica en el hecho de que cualquier señal puede ser expresada por una combinación lineal de muestras unitarias ponderadas y desplazadas. Similarmente, también, es posible representar una señal discreta arbitraria como una combinación de señales base (escalones, exponenciales, sinusoidales, etc.), pudiendo obtenerse diversas representaciones de la señal, en función del conjunto base utilizado. Desde luego, cada representación tendrá sus ventajas y desventajas, dependiendo del tipo de sistema bajo consideración; sin embargo, cuando el sistema es lineal e invariante en el tiempo, una representación se destaca como la más útil: la que usa como componente central a la señal exponencial compleja ejωn. LA TRANSFORMADA DE FOURIER DISCRETA EN TIEMPO (TFDT).

Si la secuencia x(n) es absolutamente sumable, es decir ∑∞

∞−

|)(| nx < ∞, entonces su transformada de

Fourier discreta en tiempo queda especificada por:

X(ejω) = F[x(n)] = ∑∞

−∞=

ω−

n

njenx )( (3.1)

Por otro lado, cuando se conoce a X(ejω), la transformada inversa de Fourier discreta en tiempo (TIFDT) es dada por:

x(n) = F-1[X(ejω)] = ωπ

ωωπ

π−∫ deeX njj )(

21

(3.2)

De este modo, el operador F[⋅] transforma una señal discreta x(n) en una función continua compleja, X(ejω), de variable real ω, la cual es reconocida como una frecuencia digital que está expresada en radianes.

SECCIÓN

3

h(n)

PDF created with pdfFactory trial version www.pdffactory.com

42

Consideremos el caso de la secuencia x(n) = (0.5)n u(n), para la cual hay que determinar la correspondiente transformada de Fourier discreta. Debido a que la secuencia es absolutamente sumable, la transformada de Fourier existe y queda indicada por:

X(ejω) = ∑∞

∞−

ω− njenx )( = ∑∞

ω−

0)5.0( njn e

=∑∞

ω

ω

ω−ω−

−=

−=

0 5.05.011)5.0( j

j

jnj

ee

ee

Por otro lado, si se quiere calcular la transformada de Fourier de la siguiente secuencia de duración finita:

x(n) = 1, 2, 3, 4, 5 ↑ Podemos emplear la definición (3.1) y obtener la siguiente expresión:

X(ejω)= ∑∞

∞−

ω− njenx )( = ejω + 2 +3 e-jω + 4e-j2ω + 5e-j3ω

Ya que X(ejω) es una función compleja, se tendrá que graficar su magnitud y su fase ( o su parte real y su parte imaginaria) con respecto a ω, para poder visualizarla. También, como ω es una variable real que toma valores entre -∞ y ∞, solo se podrá graficar una parte de la función X(ejω) cuando se use MATLAB. No obstante, es posible apoyarse en dos importantes propiedades de la transformada de Fourier discreta en tiempo para reducir el dominio de (-∞,∞) al intervalo de [0,π] para secuencias reales. Tales dos propiedades son: 1. Periodicidad.

La transformada de Fourier discreta en tiempo, X(ejω), es periódica en ω con periodo de 2π, es decir:

X(ejω) = X(ej[ω + 2π])

De este modo, sólo es necesario conocer un periodo de X(ejw), Vg. ω ∈ [0,2π], o [-π,π], etc., para efectos de análisis, y no el dominio entero -∞ < ω < ∞.

2. Simetría.

Para una secuencia x(n) real, X(ejω) es conjugado-simétrica, es decir:

X(e-jω) = X*( ejω) lo cual significa que Re[X(e-jω)] = Re[X(ejω)] (simetría par) Im[X(e-jω)] = -Im[X(ejω)] (simetría impar) ó | X(e-jω) | = | X(ejω) | (simetría par) ∠ X(e-jω) = -∠ X(ejω) (simetría impar)

PDF created with pdfFactory trial version www.pdffactory.com

43

De tal suerte, para graficar X(ejω) sólo se requerirá considerar la mitad de un periodo. Generalmente, en la práctica este periodo se elige para ω en el intervalo [0, π]. Si x(n) fuera de duración infinita, MATLAB no se podría utilizar para calcular la correspondiente transformada de Fourier discreta, X(ejω). Sin embargo, para evaluar la expresión X(ejω) sobre el intervalo de frecuencias [0, π], es totalmente pertinente el uso de MATLAB y así poder graficar su magnitud, fase, parte real ó parte imaginaria. Por ejemplo, para la secuencia x(n) = (0.5)n u(n), podemos evaluar X(ejω) para 501 puntos dentro del intervalo [0, π], y graficar su magnitud, fase, parte real y parte imaginaria. Esto lo hacemos sirviéndonos del siguiente script en MATLAB:

>> w = [0:1:500]*pi/500; % Intervalo [0, pi] dividido en 501 puntos. >> X = exp(j*w) ./ (exp(j*w) - 0.5*ones(1,501)); >> magX = abs(X); angX = angle(X); >> realX = real(X); imagX = imag(X); >> subplot(2,2,1); plot(w/pi,magX); grid >> title('Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Magnitud') >> subplot(2,2,2); plot(w/pi,angX); grid >> title('Fase'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Radianes') >> subplot(2,2,3); plot(w/pi,realX); grid >> title('Parte Real'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Real') >> subplot(2,2,4); plot(w/pi,imagX); grid >> title('Parte Imaginaria'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Imaginaria')

Las gráficas resultantes se muestran a continuación:

0 0.5 10.5

1

1.5

2Magnitud

Frecuencia en unidades de π

Mag

nitu

d

0 0.5 1-0.8

-0.6

-0.4

-0.2

0Fase

Frecuencia en unidades de π

Rad

iane

s

0 0.5 10.5

1

1.5

2Parte Real

Frecuencia en unidades de π

Rea

l

0 0.5 1-0.8

-0.6

-0.4

-0.2

0Parte Imaginaria

Frecuencia en unidades de π

Imag

inar

ia

PDF created with pdfFactory trial version www.pdffactory.com

44

Es de resaltar la división por π del arreglo w, antes de graficar, de forma que el eje de frecuencias quede en unidades de π y su lectura pueda ser más fácil.

Si x(n) es de duración finita, se puede emplear MATLAB para calcular numéricamente a X(ejω) en cualquier frecuencia ω. La idea es implementar directamente la ecuación (3.1); sí, además, se evalua X(ejω) en frecuencias equidistantes distribuidas en el intervalo [0,π], dicha ecuación se puede implementar como una operación de multiplicación de matrices. Para comprender esto, asumamos que la secuencia x(n) tiene N muestras entre n1 ≤ n ≤ nN, y que queremos evaluar X(ejω) en

ωk = kMπ

, k = 0,1,...,M

las cuales son M+1 frecuencias equidistantes distribuidas entre [0, π]. Entonces la ecuación (3.1) se puede escribir como

∑=

π−ω =N

knMjj nxeeX k

1

)/( )()(l

ll , k = 0,1,...,M

Cuando )( lnx y )( kjeX ω son arreglados como vectores columna x y X, respectivamente, tenemos

X= Wx (3.3) En donde W es una matriz de (M+1) x N, dada por

W = lknMje )/(π− ; n1 ≤ n ≤ nN , k = 0,1,...,M

Además, si colocamos k y nl como vectores renglón k y n respectivamente, entonces

W =

− nk T

Mj πexp

Ya que en MATLAB representamos secuencias e índices como vectores renglón, podemos tomar la transpuesta de (3.3) y obtener

XT = xT

− knT

Mj πexp (3.4)

Debiendo observarse que nTk es una matriz de N x (M+1). Esta última ecuación puede ser implementada en MATLAB como sigue:

>> k = [0:M] ; n = [n1:n2]; >> X = x* (exp(-j*pi/M)) . ^ (n'*k);

PDF created with pdfFactory trial version www.pdffactory.com

45

Podemos calcular numéricamente la transformada de Fourier discreta de la secuencia x(n) = 1, 2, 3, 4, 5 ↑ para 501 frecuencias distribuidas en el intervalo [0, π], y graficar su magnitud, fase, parte real y parte imaginaria. Usamos el script siguiente:

>> n = -1:3; x = 1:5; % secuencia x(n) >> k = 0:500; w = (pi/500)*k; % intervalo [0, pi] dividido en 501 puntos. >> X = x * (exp(-j*pi/500)) .^ (n'*k); % TFDT empleando el producto matriz-vector >> magX = abs(X); angX = angle(X); >> realX = real(X); imagX = imag(X); >> subplot(2,2,1); plot(w/pi,magX); title('Magnitud'); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Magnitud') >> subplot(2,2,2); plot(w/pi,angX); title('Fase'); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Radianes') > subplot(2,2,3); plot(w/pi,realX); title('Parte Real'); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Real') >> subplot(2,2,4); plot(w/pi,imagX); title('Parte Imaginaria'); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Imaginaria')

Las gráficas en el dominio de la frecuencia son mostradas a continuación:

Es de notar que la gráfica de la fase es presentada como una función discontinua entre -π y π, lo cual se debe a que la función angle de MATLAB calcula la fase principal.

0 0.5 10

5

10

15Magnitud

Frecuencia en unidades de π

Mag

nitu

d

0 0.5 1-4

-2

0

2

4Fase

Frecuencia en unidades de π

Rad

iane

s

0 0.5 1-5

0

5

10

15

Frecuencia en unidades de π

Parte Real

Rea

l

0 0.5 1-10

-5

0

5

Frecuencia en unidades de π

Parte Imaginaria

Imag

inar

ia

PDF created with pdfFactory trial version www.pdffactory.com

46

Ciertamente, el procedimiento mostrado, y que está basado en la definición (3.1), no es la forma más elegante de calcular numéricamente la transformada de Fourier de una secuencia de duración finita; aparte de que genera una matriz de N x (M+1) en (3.4) que podría exceder el limite de tamaño que soporta la edición estudiantil de MATLAB. No obstante, por lo pronto es suficiente para los propósitos de ilustración que pretendemos; más adelante habrá oportunidad de presentar y trabajar con algoritmos más eficaces. Por el momento, consideramos un par de ejemplos que nos permiten identificar las propiedades de periodicidad y simetría empleando secuencias complejas y reales. Veamos la secuencia x(n) = (0.9exp(jπ/3))n , en el intervalo 0≤ n ≤ 10, para la cual vamos a determinar X(ejω) e investigar su periodicidad. Ya que x(n) es una función compleja, solamente satisface la propiedad de periodicidad, por lo que queda bien definida sobre un periodo de 2π; no obstante, vamos a evaluar y graficar a x(n) en 401 frecuencias sobre dos periodos, entre [-2π, 2π], con el propósito de poder observar su periodicidad. El script que usamos es el siguiente:

>> figure(1); clf >> n = 0:10; x = (0.9*exp(j*pi/3)).^n; %Secuencia x(n) >> k = -200:200; w = (pi/100)*k; >> X = x * (exp(-j*pi/100)) .^ (n'*k); >> magX = abs(X); angX =angle(X); >> subplot(2,1,1); plot(w/pi,magX);grid >> axis([-2,2,0,8]); title('Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|X|') >> subplot(2,1,2); plot(w/pi,angX/pi); grid >> axis([-2,2,-1,1]); title('Fase'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('radianes /\pi')

En efecto, las gráficas de magnitud y fase muestran que X(ejω) es periódica en ω, pero no es simétrica conjugada:

-2 -1.5 -1 -0.5 0 0.5 1 1.5 20

2

4

6

8Magnitud

Frecuencia en unidades de π

|X|

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1Fase

Frecuencia en unidades de π

radi

anes

/ π

PDF created with pdfFactory trial version www.pdffactory.com

47

Por otro lado, si consideramos la secuencia x(n) = 2n , en el intervalo -10≤ n ≤ 10, podemos nuevamente calcular y graficar a X(ejω) sobre dos periodos para estudiar su propiedad de simetría. En este caso empleamos el script siguiente:

>> figure(1); clf >> n = -5:5; x = (-0.9).^n; >> k = -200:200; w = (pi/100)*k; >> X = x * (exp(-j*pi/100)) .^ (n'*k); >> magX = abs(X); angX =angle(X); >> subplot(2,1,1); plot(w/pi,magX);grid >> axis([-2,2,0,15]); >> title('Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|X|') >> subplot(2,1,2); plot(w/pi,angX)/pi;grid >> axis([-2,2,-1,1]); >> title('Fase'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('radianes /\pi')

Las gráficas de la magnitud y la fase se muestran a continuación:

Donde es evidente que X(ejω) no sólo es periódica en ω sino que también es simétrica conjugada. Por lo tanto, para secuencias reales, podemos graficar la magnitud y la fase de su transformada de Fourier sólo en el intervalo de 0 a π.

-2 -1.5 -1 -0.5 0 0.5 1 1.5 20

5

10

15Magnitud

Frecuencia en unidades de π

|X|

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1

-0.5

0

0.5

1Fase

Frecuencia en unidades de π

radi

anes

/ π

PDF created with pdfFactory trial version www.pdffactory.com

48

PROPIEDADES DE LA TFDT

Si X(ejω) es la transformada de Fourier discreta en tiempo de x(n), entonces: 1. Linealidad.

La transformada de Fourier discreta en tiempo una transformación lineal; esto es

F[αx1(n) + βx2(n)] = αF[x1(n)] + βF[x2(n)] (3.5)

para cada α, β, x1(n), y x2(n). 2. Desplazamiento en el tiempo.

A un desplazamiento en el dominio del tiempo corresponde un desplazamiento en la fase, es decir

F[x(n-k)] = X(ejω)e-jwω (3.6)

3. Desplazamiento en la frecuencia.

A una multiplicación por una exponencial compleja corresponde un desplazamiento en el dominio de la

frecuencia, lo cual se expresa como

F[ njenx 0)( ω ] = X( )( 0ω−ωje ) (3.7) 4. Conjugación.

La conjugación en el dominio del tiempo corresponde a la rotación y conjugación en el dominio de la

frecuencia; simbólicamente

F[x*(n)] = X*(e-jω) (3.8) 5. Rotación (desdoblamiento).

La rotación en el dominio del tiempo corresponde a la rotación en el dominio de la frecuencia,

F[x(-n)] = X(e-jω) (3.9)

6. Simetrías en secuencias reales.

Las secuencias reales pueden ser descompuestas en sus componentes par e impar,

x(n) = xe(n) + xo(n)

entonces F[xe(n)] = Re[X(ejω)] F[xo(n)] = j Im[X(ejω)] (3.10)

lo cual implica que si la secuencia x(n) es una función real y par, entonces X(ejω) es también una función real y par, por lo que solo es necesario graficar sobre el intervalo [0, π] para su completa representación.

PDF created with pdfFactory trial version www.pdffactory.com

49

7. Convolución.

Esta es una de las propiedades más útiles y que hace conveniente el análisis de un sistema en el dominio de la frecuencia, se expresa mediante

F[x1(n) * x2(n)] = F[x1(n)] F[x2(n)] = X1(ejω) X2(ejω) (3.11)

8. Multiplicación.

Esta propiedad es la dual de la propiedad de convolución, y dicta

F[x1(n) ⋅ x2(n)] = F[x1(n)] ⊗ F[x2(n)] = ∫ θπ

θ−ωθ deXeX jj )()(21 )(

21 (3.12)

La operación expresada por esta relación es llamada convolución periódica y es denotada por ⊗ . 9. Energía.

La energía de la secuencia x(n) puede ser escrita como:

∫∑π

π−

ω∞

∞−

ωπ

==ε deXnx jx

22 |)(|21|)(| (3.13)

= ωπ∫

π ω

deX j

0

2|)(| (para secuencias reales usando simetría par)

A esta expresión también se le conoce como Teorema de Parseval, y nos dicta que el espectro de la densidad de energía de x(n) queda definido como:

π=ωΦ

ω 2|)(|)(j

xeX

(3.14)

por lo que la energía de x(n) en la banda de frecuencia [ω1,ω2] esta dada por:

∫ω

ω

ωωΦ2

1

)( dx , 0 ≤ ω1 < ω2 ≤ π

A continuación, usaremos el procedimiento numérico establecido para calcular la transformada de Fourier discreta en tiempo para algunas secuencias de duración finita, con el propósito de ganar experiencia en la visualización de las propiedades anotadas. Consideremos dos secuencias, x1(n) y x2(n), aleatorias y uniformemente distribuidas entre [0,1] sobre el intervalo 0≤ n ≤ 10, entonces podemos emplear nuestro procedimiento numérico para obtener la transformada de Fourier discreta en tiempo como sigue:

PDF created with pdfFactory trial version www.pdffactory.com

50

>> x1 = rand(1,11); x2 = rand(1,11); n = 0:10; >> alpha = 2; beta = 3; >> k = 0:500; w = (pi/500)*k; >> X1 = x1 * (exp(-j*pi/500)).^(n'*k); % TFDT de x1 >> X2 = x2 * (exp(-j*pi/500)).^(n'*k); % TFDT de x2 >> x = alpha*x1 + beta*x2; % Combinación lineal de x1 y x2 >> = x * (exp(-j*pi/500)).^(n'*k); % TFDT de x % verificación >> X_check = alpha*X1 + beta*X2; % Combinación lineal de X1 y X2 >> error = max(abs(X-X_check)) % Diferencia error =

7.1193e-015

Puesto que el error del máximo valor absoluto entre los dos arreglos de transformadas de Fourier es menor que 10-14 tenemos que los dos arreglos son idénticos dentro del limite de la precisión numérica de MATLAB.

Consideremos ahora la secuencia x(n), una secuencia aleatoria uniformemente distribuida entre [0,1] sobre el intervalo 0≤ n ≤ 10, y a la secuencia y(n) = x(n-2). Es posible verificar la propiedad de desplazamiento dada en (3.6) como sigue:

>> x = rand(1,11); n = 0:10; >> k = 0:500; w = (pi/500)*k; >> X = x * (exp(-j*pi/500)).^(n'*k); % TFDT de x % Señal desplazada por dos muestras >> y = x; m = n+2; >> Y = y * (exp(-j*pi/500)).^(m'*k); % TFDT de y % verificación >> Y_check = (exp(-j*2).^w).*X; % Multiplicación por exp(-j2w) >> error = max(abs(Y-Y_check)) % Diferencia error =

1.6756e-013

Para verificar la propiedad de desplazamiento en la frecuencia, podemos usar un enfoque gráfico. Para esto, las secuencias de que nos servimos son las siguientes:

x(n) = cos(πn/2), 0≤ n ≤ 100 y y(n) = ejπn/4x(n)

El script que hemos realizado es el siguiente:

>> n = 0:100; x = cos(pi*n/2); >> k = -100:100; w = (pi/100)*k; % frecuencia entre -pi y +pi >> X = x * (exp(-j*pi/100)).^(n'*k); % TFDT de x % >> y = exp(j*pi*n/4).*x; % señal multiplicada por exp(j*pi*n/4) >> Y = y * (exp(-j*pi/100)).^(n'*k); % TFDT de y % % Verificación gráfica >> subplot(1,1,1) >> subplot(2,2,1); plot(w/pi,abs(X)); grid; axis([-1,1,0,60]) >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|X|'); >> title('Magnitud de X'); >> subplot(2,2,2); plot(w/pi,angle(X)/pi); grid; axis([-1,1,-1,1])

PDF created with pdfFactory trial version www.pdffactory.com

51

>> title('Fase de X'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('radianes/ \pi') >> subplot(2,2,3); plot(w/pi,abs(Y)); grid; axis([-1,1,0,60]) >> title('Magnitud de Y'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|Y|') >> subplot(2,2,4); plot(w/pi,angle(Y)/pi); grid; axis([-1,1,-1,1]) >> title('Fase de Y'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('radianes/ \pi')

Las gráficas resultantes se muestran a continuación:

De las gráficas se observa que X(ejω) está, efectivamente, desplazada π/4 tanto en su magnitud como en su fase. Para apreciar la propiedad de conjugación, establecida en (3.8), construimos una secuencia x(n) aleatoria, compleja y definida en el intervalo -5 ≤ n ≤ 10, cuyas partes real e imaginaria están uniformemente distribuidas entre [0,1]. El script que genera y verifica tal propiedad es el siguiente:

>> n = -5:10; x = rand(1,length(n)) + j*rand(1,length(n)); >> k = -100:100; w = (pi/100)*k; % frecuencia entre -pi y +pi >> X = x * (exp(-j*pi/100)).^(n'*k); % TFDT de x % Propiedad de conjugación >> y = conj(x); % cojugación de la señal >> Y = y * (exp(-j*pi/100)).^(n'*k); % TFDT de y % verificación >> Y_check = conj(fliplr(X)); % conj(X(-w)) >> error = max(abs(Y-Y_check)) % Diferencia error = 0

-1 -0.5 0 0.5 10

20

40

60

Frecuencia en unidades de π

|X|

Magnitud de X

-1 -0.5 0 0.5 1-1

-0.5

0

0.5

1Fase de X

Frecuencia en unidades de π

radi

anes

/ π

-1 -0.5 0 0.5 10

20

40

60Magnitud de Y

Frecuencia en unidades de π

|Y|

-1 -0.5 0 0.5 1-1

-0.5

0

0.5

1Fase de Y

Frecuencia en unidades de π

radi

anes

/ π

PDF created with pdfFactory trial version www.pdffactory.com

52

Ahora, para verificar la propiedad de rotación, especificada en (3.9), emplearemos la secuencia aleatoria x(n) definida sobre el intervalo -5 ≤ n ≤ 10, la cual esta uniformemente distribuida entre [0,1]. En este caso, el script que hemos escrito es:

>> n = -5:10; x = rand(1,length(n)); >> k = -100:100; w = (pi/100)*k; % frecuencia entre -pi y +pi >> X = x * (exp(-j*pi/100)).^(n'*k); % TFDT de x % Propiedad de rotación >> y = fliplr(x); m = -fliplr(n); % señal rotada >> Y = y * (exp(-j*pi/100)).^(m'*k); % TFDT de y % verificación >> Y_check = fliplr(X); % X(-w) >> error = max(abs(Y-Y_check)) % Diferencia error =

1.8310e-015 Finalmente, podemos verificar la propiedad de simetría en las señales reales; para ello empleamos la secuencia:

x(n) = sin(πn/2), -5 ≤ n ≤ 10

Con ayuda de la función DescomParImpar, ya desarrollada, podemos calcular los componentes par e impar de x(n) y, entonces, evaluar su transformada de Fourier discreta en tiempo. En este caso implementamos el siguiente script:

>> n = -5:10; x = sin(pi*n/2); >> k = -100:100; w = (pi/100)*k; % frecuencia entre -pi y +pi >> X = x * (exp(-j*pi/100)).^(n'*k); % TFDT de x % % Descomposición de la señal >> [xe,xo,m] = DescomParImpar(x,n); % Partes par e impar >> XE = xe * (exp(-j*pi/100)).^(m'*k); % TFDT de xe >> XO = xo * (exp(-j*pi/100)).^(m'*k); % TFDT de xo % verificación >> XR = real(X); % parte real de X >> error1 = max(abs(XE-XR)) % Diferencia error1 = 4.4501e-016 >> XI = imag(X); % parte imaginaria de X >> error2 = max(abs(XO-j*XI)) % Diferencia error2 = 2.6663e-015 % Verificación gráfica >> subplot(1,1,1) >> subplot(2,2,1); plot(w/pi,XR); grid; axis([-1,1,-2,2]) >> title('Parte Real de X'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Re(X)'); >> subplot(2,2,2); plot(w/pi,XI); grid; axis([-1,1,-10,10]) >> title('Parte Imaginaria de X'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Im(X)'); >> subplot(2,2,3); plot(w/pi,real(XE)); grid; axis([-1,1,-2,2]) >> title('Transformada de la parte Par'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('XE'); >> subplot(2,2,4); plot(w/pi,imag(XO)); grid; axis([-1,1,-10,10]) >> title('Transformada de la parte Impar') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('XO');

PDF created with pdfFactory trial version www.pdffactory.com

53

Las gráficas generadas son: A partir de las cuales se observa que la parte real de X(ejw) (o la parte imaginaria de X(ejw) ) es igual a la transformada de Fourier discreta en tiempo de xe(n) (o xo(n)). REPRESENTACION EN EL DOMINIO DE LA FRECUENCIA DE SISTEMAS LIT.

Ya hemos establecido que la transformada de Fourier es la forma más útil y poderosa de representación para las señales y sistemas LIT, lo cual se debe a resultados como los siguientes: Respuesta a una Exponencial Compleja nj oe ω Si consideramos una secuencia x(n) = nj oe ω como la entrada a un sistema LIT, representado por la respuesta al impulso h(n), entonces nj oe ω h(n)* nj oe ω

h(n)

-1 -0.5 0 0.5 1-2

-1

0

1

2Parte Real de X

Frecuencia en unidades de π

Re(

X)

-1 -0.5 0 0.5 1-10

-5

0

5

10Parte Imaginaria de X

Frecuencia en unidades de π

Im(X

)

-1 -0.5 0 0.5 1-2

-1

0

1

2Transformada de la parte Par

Frecuencia en unidades de π

XE

-1 -0.5 0 0.5 1-10

-5

0

5

10Transformada de la parte Impar

Frecuencia en unidades de π

XO

PDF created with pdfFactory trial version www.pdffactory.com

54

Donde:

y(n) = h(n) * nj oe ω = ∑∞

∞−

−ω )()( knj oekh

= njkj oo eekh ω∞

∞−

ω−

∑ )( (3.15)

= [ ][ ]

onhF ω=ω|)( nj oe ω

Usualmente, a la transformada de Fourier discreta en tiempo de una respuesta impulsiva se le denomina Respuesta en Frecuencia (o Función de Transferencia) del sistema LIT que representa, y es denotada por:

H(ejωn) = ∑∞

∞−

ω− njenh )( (3.16)

Por lo que a partir de (3.15) podemos representar al sistema por

x(n) = nj oe ω y(n) = H( oje ω ) x nj oe ω (3.17)

De este modo, la secuencia de salida es la secuencia exponencial de la entrada modificada por la respuesta del sistema en la frecuencia ωo; lo cual justifica la definición de H(ejω) como una respuesta en frecuencia, ya que es lo que multiplica a la exponencial compleja para obtener la salida y(n). Este resultado puede ser extendido a la combinación lineal de exponenciales complejas, usando la propiedad de linealidad de los sistemas LIT, como se ilustra:

∑ ω

k

njk

keA ∑ ωω

k

njnjk

kk eeHA )(

En general, la respuesta en frecuencia H(ejω) es una función compleja de ω, donde la magnitud, |H(ejω)|, de H(ejω) es llamada función de Respuesta de Magnitud (o ganancia), y el ángulo, ∠H(ejω), es denominado función de Respuesta de Fase. Respuesta a una Secuencia Senoidal Si consideramos la secuencia x(n) = A cos(ωon + θo) como entrada a un sistema LIT con respuesta impulsiva h(n), a partir de la expresión (3.17), podemos mostrar que la respuesta y(n) es otra secuencia senoidal de la misma frecuencia wo, con ganancia en amplitud dada por |H(ejωo)| y desplazamiento en fase ∠H(ejωo), esto es:

y(n) = A| H(ejωo) | cos(ωon + θo + ∠H(ejωo)) (3.18)

H(ejw)

h(n)

PDF created with pdfFactory trial version www.pdffactory.com

55

A esta respuesta se le conoce como Respuesta de Estado Estacionario, y se denota por yss(n). Desde luego, este resultado se puede hacer extensivo a una combinación lineal de secuencias sinusoidales, como se muestra a continuación:

∑k

kA cos(ωkn + θk) ∑k

kA |H(ejωk)| cos( ωkn + θk + ∠H(ejωk) )

Respuesta a Secuencias Arbitrarias Finalmente, (3.17) se puede generalizar a cualesquiera secuencias arbitrarias absolutamente sumables. Así, sí X(ejω) = F[x(n)] y Y(ejω) = F[y(n)], la propiedad de convolución nos permite establecer que:

Y(ejω) = H(ejω) X(ejω) (3.19)

Por lo que un sistema LIT puede ser representado, en el dominio de la frecuencia, por: X(ejω) Y(ejω) = H(ejω) X(ejω) De tal suerte, la salida y(n) se calcula a partir de Y(ejω), empleando la transformada inversa de Fourier discreta en tiempo, dada en (3.2). Para esto se requiere una operación de integración, lo cual no es una operación conveniente en MATLAB; no obstante, más adelante veremos que existe un camino alternativo para el cálculo de la salida para una entrada arbitraria, que emplea la denominada Transformada Z. Por el momento nos concentraremos en el cálculo de la respuesta de estado estacionario en los sistemas LIT. Pasamos a determinar la respuesta en frecuencia, H(ejω), de un sistema caracterizado por una respuesta impulsiva h(n) = (0.9 )n u(n), lo cual nos permitirá visualizar las respuestas de magnitud y fase. Si empleamos la expresión (3.16):

H(ejωn) = ∑∞

∞−

ω− njenh )( = ∑∞

ω−

0)9.0( njn e

= ∑∞

ω−ω−

−=

0 9.011)9.0( j

nj

ee

Por lo tanto,

|H(ejω)| = ω−

=ω+ω− cos8.181.1

1)9.0()cos9.01(

122 sin

es la respuesta de magnitud, y

∠H(ejω) = -arctan

ω−ω

cos9.019.0 sin

es la respuesta de fase.

H(ejω)

H(ejω)

PDF created with pdfFactory trial version www.pdffactory.com

56

Para graficar estas respuestas, construimos la función H(ejω), a partir de la cual se podrá calcular magnitud y fase; para ello nos servimos del script siguiente:

>> w = [0:1:500]*pi/500; % eje de [0, pi] dividido en 501 puntos. >> H = exp(j*w) ./ (exp(j*w) - 0.9*ones(1,501)); >> magH = abs(H); angH = angle(H); >> subplot(2,1,1); plot(w/pi,magH); grid; axis([0,1,0,10]) >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> subplot(2,1,2); plot(w/pi,angH/pi); grid >> title('Respuesta en Fase'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en \pi Radianes');

Las gráficas que resultan son:

Si para este mismo sistema consideramos como entrada a la secuencia 0.1u(n), podemos determinar la respuesta de estado estacionario, yss(n). Esta secuencia no es absolutamente sumable, por lo que la transformada de Fourier discreta en tiempo no es particularmente útil en el cálculo de la respuesta completa; sin embargo, sí se puede usar para calcular la respuesta de estado estacionario. En el estado estacionario (cuando n à ∞), la entrada es una secuencia constante (secuencia cosenoidal con ωo = θo=0), por lo que la salida resulta en:

yss(n) = 0.1 x H(ej0) = 0.1 x 10 = 1

donde la ganancia del sistema en ω=0 (también llamada ganancia de DC) es H(ej0) = 10, se obtiene de la respuesta de magnitud de la gráfica anterior.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

2

4

6

8

10Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-0.4

-0.3

-0.2

-0.1

0Respuesta en Fase

Frecuencia en unidades de π

Fase

en

π R

adia

nes

PDF created with pdfFactory trial version www.pdffactory.com

57

Función de Respuesta en Frecuencia para Ecuaciones de Diferencia Cuando un sistema LIT es representado por la ecuación de diferencias

y(n) + ∑∑==

−=−M

mm

N

mnxbnya01

)()(l

l l , (3.20)

evaluar su respuesta en frecuencia a partir de (3.16), requeriría conocer la respuesta impulsiva h(n). Sin embargo, usando la expresión (3.17) podemos fácilmente obtener H(ejω); sabemos que cuando x(n) = ejωn , entonces y(n) debe ser H(ejω) ejωn , lo que al sustituirse en (3.20) deja:

H(ejω) ejωn + ∑∑=

−ω−ω

=

ω =M

m

mnjm

njN

j ebeeHa0

)()(

1)( l

ll

ó

H(ejω) =

=

ω−

=

ω−

+N

j

M

m

mjm

ea

eb

1

0

1l

ll

(3.21)

Esta ecuación se puede implementar bien desde MATLAB, dados los parámetros de la ecuación de diferencia. Veámoslo con un sistema LIT especificado por la ecuación de diferencias

y(n) = 0.8y(n-1) + x(n) Si reescribimos la ecuación de diferencias como y(n) - 0.8y(n-1) = x(n), y empleamos la representación indicada en (3.21), obtenemos que

H(ejω) = ω−− je8.01

1 (3.22)

Para el caso particular en el que la entrada sea la secuencia x(n) = cos(0.05πn), con frecuencia ωo=0.05π y θo=0º, la respuesta del sistema es

H(ej0.05π) = π− 05.08.01

1je

= 4.0928e-j0.5377

Por lo tanto

yss(n) = 4.0928 cos(0.05πn - 0.5377) = 4.0928 cos[0.05π(n - 3.42)]

De modo que la secuencia senoidal de salida queda ponderada, en magnitud, por 4.0928 y desplazada, en fase, por 3.42 muestras. Esto, ciertamente, lo podemos verificar empleando el siguiente script:

>> subplot(1,1,1) >> b = 1; a = [1,-0.8]; >> n=[0:100];x = cos(0.05*pi*n); >> y = filter(b,a,x); >> subplot(2,1,1); stem(n,x); >> ylabel('x(n)'); title('Secuencia de Entrada')

>> subplot(2,1,2); stem(n,y); >> xlabel('n'); ylabel('y(n)'); title('Secuencia de Salida')

PDF created with pdfFactory trial version www.pdffactory.com

58

Las gráficas resultantes se muestran a continuación: De estas gráficas se observa que la amplitud de yss(n) es aproximadamente de 4, en tanto que el desplazamiento en la salida senoidal se puede visualizar comparando los cruces por cero de la entrada y la salida, lo cual, en efecto, nos revela un desplazamiento de aproximadamente 3.5 muestras. En el ejemplo anterior el sistema quedó caracterizado por una ecuación de diferencias de primer orden; sin embargo, en la práctica, las ecuaciones de diferencias son de mayor orden y por ello se requiere un procedimiento compacto para implementar la expresión general (3.21). Desde luego, esto puede hacerse empleando una simple multiplicación de matrices. Si evaluamos H(ejω) en k=0,1, ...,K frecuencias equidistantes distribuidas sobre el intervalo [0,π], entonces

H(ejωk) =

=

ω−

=

ω−

+N

j

M

m

mjm

k

k

ea

eb

1

0

1l

ll

, k = 0,1,...,K (3.23)

Si establecemos los arreglos (o vectores renglón) bm, la con (ao=1), m=0,..,M, l =0,..,N, y wk, entonces el numerador y el denominador de esta expresión quedan como:

b exp(-jmTω); a exp(-jl Tω)

respectivamente. Así, el arreglo H(ejωk) en (3.23) puede ser calculado empleando el operador . / . Este procedimiento puede ser implementado en una función de MATLAB para determinar la respuesta en frecuencia, dados los arreglos bm y la . Para ver como funciona esto, consideremos un filtro pasa bajas de tercer orden descrito por la ecuación de diferencias siguiente:

0 10 20 30 40 50 60 70 80 90 100-1

-0.5

0

0.5

1x(

n)

Secuencia de Entrada

0 10 20 30 40 50 60 70 80 90 100-5

0

5

n

y(n)

Secuencia de Salida

PDF created with pdfFactory trial version www.pdffactory.com

59

y(n) = 0.0181x(n) + 0.0543x(n-1) + 0.0543x(n-2) + 0.0181x(n-3)

+ 1.76y(n-1) - 1.1829y(n-2) + 0.2781y(n-3) Apoyados en el procedimiento descrito anteriormente, generamos el siguiente script:

>> b = [0.0181, 0.0543, 0.0543, 0.0181]; >> a = [1.0000, -1.7600, 1.1829, -0.2781]; >> m = 0:length(b)-1; l = 0:length(a)-1; >> K = 500; k = 1:1:K; >> w = pi*k/K; % Eje [0, pi] divido en 501 puntos. >> num = b * exp(-j*m'*w); % Numerador >> den = a * exp(-j*l'*w); % Denominador >> H = num ./ den; >> magH = abs(H); angH = angle(H); >> subplot(1,1,1); >> subplot(2,1,1); plot(w/pi,magH); grid; axis([0,1,0,1]); >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> subplot(2,1,2); plot(w/pi,angH/pi); grid >> title('Respuesta en Fase'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en \pi radianes');

Las gráficas correspondientes son:

de las cuales se puede observar que el filtro es, en efecto, un filtro pasa bajas.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.2

0.4

0.6

0.8

1Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1

-0.5

0

0.5

1Respuesta en Fase

Frecuencia en unidades de π

Fase

en

π ra

dian

es

PDF created with pdfFactory trial version www.pdffactory.com

60

MUESTREO Y RECONSTRUCCIÓN DE SEÑALES ANALÓGICAS

En muchas aplicaciones, por ejemplo las comunicaciones digitales, las señales analógicas del mundo real son convertidas en señales discretas realizando operaciones de muestreo y cuantización, proceso al que se conoce como conversión Analógico-Digital (ADC). Estas señales discretas son procesadas por procesadores digitales de señales, y entonces convertidas a su formato analógico original mediante una operación de reconstrucción (llamada conversión Digital-Analógica, o DAC). Usando el análisis de Fourier es posible describir la operación de muestreo, desde un punto de vista del dominio de la frecuencia, analizar sus efectos y orientar la operación de reconstrucción; también, asumiremos que el número de niveles de cuantización es suficientemente grande, de modo que el efecto de la cuantización sobre las señales discretas sea insignificante. El Muestreo Consideremos la señal analógica xa(t) (absolutamente sumable), entonces su transformada de Fourier continua en tiempo (TFCT) esta dada por

Xa (jΩ) = ∫∞

∞−

Ω− dtetx tja )( (3.24)

donde Ω es una frecuencia analógica, en radianes/seg. La correspondiente transformada inversa esta dada por

xa(t) = ∫∞

∞−

Ω ΩΩ dejX tja )(

21π

(3.25)

Si ahora muestreamos xa(t) a intervalos de Ts segundos, para así obtener la señal discreta en tiempo x(n), podemos escribir:

x(n) = xa(nTs)

Consideremos que X(ejω) es la transformada de Fourier discreta en tiempo de x(n). Entonces, se puede demostrar que X(ejω) es una suma infinita de versiones desplazadas de la transformada de Fourier Xa (jΩ), escaladas en amplitud y frecuencia, pudiendo representarse como:

X(ejω ) = ∑∞

−∞=

π−

ω

ll

ssa

s TTjX

T21

(3.26)

Las frecuencias analógica y digital quedan relacionadas, a través de Ts, como:

ω = ΩTs , (3.27)

PDF created with pdfFactory trial version www.pdffactory.com

61

mientras que la frecuencia de muestreo Fs esta dada por:

Fs = sT

1 , muestras/segundo (3.28)

La ilustración gráfica de (3.26) se muestra en la siguiente figura, de la cual se observa que, en general, la señal discreta es una versión replicada y sobrepuesta (aliased) de la señal analógica correspondiente.

No obstante, es posible recuperar la transformada de Fourier Xa (jΩ) a partir de X(ejω ) (o, equivalentemente, la señal analógica xa(t) a partir de sus muestras x(n)) si las “replicas” de Xa (jΩ) no se traslapan entre ellas para formar X(ejω ), lo cual sólo es cierto para señales analógicas limitadas en banda. En este punto, es importante detenernos un momento y recordar que una señal es limitada en banda si existe una frecuencia finita Ωo en radianes tal que Xa (jΩ) es cero para |Ω| > Ωo. La frecuencia Fo=Ωo/2π se conoce como ancho de banda de la señal, y es expresada en Hz.

PDF created with pdfFactory trial version www.pdffactory.com

62

Refiriéndonos a la figura anterior, sí π > ΩoTs ó equivalentemente Fs/2 > Fo, entonces

X(ejω ) =

ω

ss TjX

T1

; sss TTT

π≤

ω<

π− (3.29)

Lo cual nos conduce a establecer el teorema de muestreo para señales limitadas en banda. Teorema del Muestreo. Una señal xa(t) limitada en banda con ancho de banda Fo puede ser reconstruida a partir de sus muestras x(n) = xa(nTs) si la frecuencia de muestreo Fs = 1/Ts es dos veces más grande que el ancho de banda Fo de la señal xa(t). Esto es

Fs > 2Fo

De lo contrario podría ocurrir aliasing en x(n). Esta velocidad de muestreo de 2Fo para una señal analógica en banda limitada se conoce como índice de Nyquist. Cabe mencionar que una vez que xa(t) es muestreada, la frecuencia analógica más grande que x(n) representa es Fs/2 Hz (ó ω=π), lo cual concuerda con la consecuencia establecida en la propiedad 2 de la transformada de Fourier discreta en tiempo. En un sentido estricto no es posible analizar señales analógicas con MATLAB, a menos que usemos el Toolbox de matemáticas simbólicas; sin embargo, si tomamos muestras de xa(t) en una rejilla muy fina que considere incrementos de tiempo suficientemente pequeños para producir una gráfica suave, y un tiempo máximo suficientemente grande para mostrar todas sus evoluciones, entonces podemos bien aproximar su análisis. Hagamos que ∆t sea el intervalo de la retícula, tal que ∆t << Ts, entonces

xG(m) = xa(m ∆t) , (3.30) se puede usar como un arreglo para simular una señal analógica. Además, el intervalo de muestreo Ts no debe ser confundido con el intervalo de rejilla ∆t, el cual es usado estrictamente para representar una señal analógica en MATLAB. De igual forma, la relación (3.24) de la transformada de Fourier también podría ser aproximada como en (3.30), como se muestra a continuación.

Xa(jΩ) ≈ ∑ ∑ ∆Ω−∆Ω− ∆=∆m m

tmjG

tmjG emxttemx )()( (3.31)

Ahora si xa(t) (y por lo tanto xG(m)) es de duración finita, entonces (3.31) es similar a la transformada de Fourier discreta en tiempo de la relación (3.3) y, por lo tanto, puede ser implementada en MATLAB en una forma similar; para así poder analizar el fenómeno del muestreo. Usemos lo hasta aquí anotado para determinar y graficar la transformada de Fourier de la señal

xa(t) = e-1000| t |

PDF created with pdfFactory trial version www.pdffactory.com

63

De la expresión (3.24):

Xa (jΩ) = ∫

∞−

Ω− dtetx tja )( = ∫∫

∞Ω−−

∞−

Ω− +0

10000

1000 dteedtee tjttjt

= 2

10001

002.0

Ω

+

(3.32)

la cual es una función real, ya que xa(t) es una señal real y par. Ahora tenemos que para evaluar Xa (jΩ) numéricamente, primero hay que aproximar a xa(t) como una secuencia de duración finita xG(m), y para ello usamos la aproximación e-5 ≈ 0. Notamos que xa(t) puede ser aproximada por una señal de duración finita sobre el intervalo de tiempo -0.005 ≤ t ≤ 0.005 (ó, equivalentemente, sobre [-5,5] mseg). De igual forma de la expresión (3.22), Xa (jΩ) ≈ 0 para Ω ≥ 2π(2000). Por lo tanto, elegimos

∆t = 5 X 10-5 <<

)2000(21

= 25 X 10-5 ,

con lo que podemos obtener xG(m) y, entonces, implementar (3.31) en MATLAB, como se anota en el siguiente script:

% Señal Analógica % >> Dt = 0.00005; t = -0.005:Dt:0.005; xa = exp(-1000*abs(t)); % Transformada de Fourier continua en tiempo >> Wmax = 2*pi*2000; K = 500; k = 0:1:K; W = k*Wmax/K; >> Xa = xa * exp(-j*t'*W) * Dt; Xa = real(Xa); >> W = [-fliplr(W), W(2:501)]; % Omega de -Wmax a Wmax >> Xa = [fliplr(Xa), Xa(2:501)]; >> subplot(1,1,1) >> subplot(2,1,1);plot(t*1000,xa); >> xlabel('t en mseg.','FontSize',8); ylabel('xa(t)') >> title('Señal Analógica') >> subplot(2,1,2);plot(W/(2*pi*1000),Xa*1000); >> xlabel('Frecuencia en KHz','FontSize',8); ylabel('Xa(jW)*1000') >> title('Transformada de Fourier Continua en tiempo')

En las figuras siguientes se muestran las gráficas de xa(t) y Xa (jΩ), debiendo notarse que, para reducir el número de cálculos, se calculó Xa (jΩ) sobre el intervalo [0,4000π] rad/seg (o lo que es lo mismo, sobre [0,2] KHz) y entonces se duplico este resultado sobre [-4000π,0].

PDF created with pdfFactory trial version www.pdffactory.com

64

Ahora, para visualizar el efecto del muestreo en el dominio de la frecuencia, tomamos muestras de xa(t) a dos frecuencias de muestreo diferentes. Primeramente nos servimos de una velocidad de Fs= 5000 muestras/seg para obtener x1(n), lo cual es suficiente para sobrepasar el índice de Nyquist, que en este caso es de 4000 muestras/seg, considerando que el ancho de banda de la señal en cuestión es de 2000 Hz.; el script con que nos ayudamos es el siguiente:

% Señal Analógica >> Dt = 0.00005; >> t = -0.005:Dt:0.005; >> xa = exp(-1000*abs(t)); % Señal en tiempo Discreto >> Ts = 0.0002; n = -25:1:25; >> x = exp(-1000*abs(n*Ts)); % % Transformada de Fourier discreta en tiempo >> K = 500; k = 0:1:K; >> w = pi*k/K; >> X = x * exp(-j*n'*w); >> X = real(X); >> w = [-fliplr(w), w(2:K+1)]; >> X = [fliplr(X), X(2:K+1)]; >> subplot(1,1,1) >> subplot(2,1,1);plot(t*1000,xa,'r'); >> xlabel('t en mseg.','FontSize',8); ylabel('x1(n)') >> text(2,0.8,'Ts = 0.2 mseg','FontSize',9); >> title('Señal Discreta'); hold on >> stem(n*Ts*1000,x);hold off >> subplot(2,1,2);plot(w/pi,X); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('X1(w)') >> title('Transformada de Fourier Discreta en Tiempo')

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Analó gica

-2 -1.5 -1 -0.5 0 0.5 1 1.5 20

0.5

1

1.5

2

Frecuencia en KHz

Xa(jW

)*10

00

Transformada de Fourier Continua en Tiempo

PDF created with pdfFactory trial version www.pdffactory.com

65

Las gráficas que resultan son: En la gráfica superior se muestra superpuesta la señal discreta x1(n) sobre xa(t), para resaltar la operación de muestreo. Por otro lado, la gráfica de X1(ejω) muestra ser una versión escalada (por Fs=5000) de Xa(jΩ), pudiendo percibirse claramente que no existe aliasing. Si ahora consideramos una velocidad de muestreo por debajo del índice de Nyquist, por ejemplo Fs = 1000 < 4000, se producirá una buena cantidad de aliasing. El script modificado que nos soporta esta situación es:

%Señal Analógica >> Dt = 0.00005; t = -0.005:Dt:0.005; xa = exp(-1000*abs(t)); % Señal discreta en tiempo >> Ts = 0.001; n = -5:1:5; x = exp(-1000*abs(n*Ts)); % % Transformada de Fourier discreta en tiempo >> K = 500; k = 0:1:K; >> w = pi*k/K; >> X = x * exp(-j*n'*w); >> X = real(X); >> w = [-fliplr(w), w(2:K+1)]; >> X = [fliplr(X), X(2:K+1)]; >> subplot(2,1,1);plot(t*1000,xa,'r'); >> xlabel('t en mseg.','FontSize',8); ylabel('x2(n)') >> text(2,0.8,'Ts = 1 mseg','FontSize',9); >> title('Señal Discreta'); hold on >> stem(n*Ts*1000,x); hold off >> subplot(2,1,2);plot(w/pi,X); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('X2(w)') >> title('Transformada de Fourier Discreta en Tiempo')

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

x1(n

)Ts = 0.2 mseg

Señ al Discreta

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10

2

4

6

8

10

Frecuencia en unidades de π

X1(w

)

Transformada de Fourier Discreta en Tiempo

PDF created with pdfFactory trial version www.pdffactory.com

66

Las gráficas resultantes para esta situación son:

En donde el aliasing se hace evidente en la gráfica inferior, en la que es claro que la forma de X2(ejω) es diferente a la forma de Xa(jΩ), lo cual puede ser interpretado como resultado de la suma de replicas traslapadas de Xa(jΩ). A partir del teorema de muestreo y de las situaciones que hemos considerado, es claro que si muestreamos a xa(t) -limitada en banda- por encima de su índice de Nyquist, entonces es posible reconstruir xa(t) a partir de sus muestras x(n). Esta reconstrucción consta de dos pasos: • Primero las muestras son convertidas en un tren de impulsos ponderados

∑∞

−∞=

=−δn

snTtnx )()( ...+ x(-1)δ(n+Ts) + x(0) δ(t) + x(1)δ(n-Ts) +...

• Posteriormente, empleando un filtro analógico ideal pasa bajas, el tren de impulsos es filtrado para la

banda [-Fs/2, Fs/2]. Un diagrama de bloques muestra esta situación:

x(n) xa(t)

Tal procedimiento puede ser descrito matemáticamente, empleando una fórmula de interpolación, como se muestra con la siguiente expresión:

Conversión a tren de impulsos

Filtro ideal Pasa-Bajas

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

x2(n

)

Ts = 1 mseg

Señ al Discreta

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10

0.5

1

1.5

2

2.5

Frecuencia en unidades de π

X2(w

)

Transformada de Fourier Discreta en Tiempo

PDF created with pdfFactory trial version www.pdffactory.com

67

xa(t) = [ ]∑∞

−∞=

−n

ss nTtFsincnx )()( , (3.33)

donde la función sinc(x) =

xxsin

ππ corresponde a la función de interpolación. La interpretación física de la

reconstrucción (3.33) se muestra en la siguiente figura, de la cual se observa que se trata de una interpolación ideal, que no es factible en la práctica debido a que el sistema entero no es causal y, por lo tanto, no realizable.

PDF created with pdfFactory trial version www.pdffactory.com

68

En la práctica, es necesario considerar un planteamiento distinto al indicado por (3.33); por lo que es conveniente reemplazar el filtro pasa bajas ideal por uno analógico práctico. Desde luego, podemos hacer interpretación de (3.33) como si se tratara de una interpolación de orden infinito y, por lo mismo, imposible de realizar en la practica. En realidad, lo factible son interpolaciones de orden finito (y de hecho de orden bajo), para lo cual existen varios planteamientos, a saber: • Interpolación y retención de orden cero (ZOH).

En este tipo de interpolación el valor de una muestra dada es mantenida (retenida) durante el intervalo de muestreo, hasta que la siguiente muestra es recibida; esto se representa mediante:

xa´(t) = x(n), nTs ≤ n < (n +1)Ts ,

Expresión que se puede obtener mediante el filtrado del tren de impulsos, con un filtro interpolador de la forma

ho(t) = ≤≤

contrario lo de Tt s

,00,1

La señal resultante es una escalera, con valores constantes durante los intervalos de muestreo, que sigue la forma de onda de la señal analógica original y que requiere un post-filtro analógico apropiado para reconstruir la señal:

x(n) xa´(t) xa(t)

• Interpolación y retención de primer orden (FOH).

En este caso las muestras adyacentes son unidas por líneas rectas, lo cual se puede lograr filtrando el tren de impulsos por medio de un sistema con respuesta:

h1(t) =

≤≤−

≤≤+

contrario lo del

TtT Tt

Tt Tt

ss

s

,0

2,1

0,1

De nuevo, será necesario el post-filtrado analógico adecuado para lograr la reconstrucción correcta. Desde luego, las interpolaciones pueden ser extendidas a ordenes más altos; sin embargo, existe una interpolación particularmente útil que es explotada con MATLAB, y es la siguiente:

ZOH Post-Filtro

PDF created with pdfFactory trial version www.pdffactory.com

69

• Interpolación con spline cúbico.

Este enfoque emplea interpoladores tipo spline para lograr una mejor definición entre muestras, aunque no necesariamente una estimación más correcta, de las señales analógicas; así, con este tipo de interpolación se podrá prescindir del postfiltro analógico, gracias a que la reconstrucción suavizada se obtiene empleando una serie de polinomios de tercer orden, denominados splines cúbicos, especificados por:

xa(t) = αo(n) + α1(n)(t - nTs) + α2(n)(t - nTs)2 + α3(n)(t - nTs)3 , nTs ≤ n < (n + 1)Ts (3.34)

donde αi(n), 0 ≤ i ≤ 3 son los coeficientes de los polinomios, mismos que son determinados empleando un análisis de mínimos cuadrados sobre los valores muestra. Estrictamente hablando, ésta no es una operación causal, pero su uso es conveniente si usamos MATLAB.

Para realizar la interpolación entre muestras, MATLAB proporciona varias posibilidades, por ejemplo la función sinc(x), la cual genera la función (sinπx)/πx, puede ser usada para implementar (3.33), dado un número finito de muestras. De este modo, si tenemos x(n) , n1 ≤ n ≤ n2 , y deseamos interpolar xa(t) sobre una rejilla muy fina con un intervalo de rejilla ∆t, entonces de (3.33) tenemos

xa(m∆t) ≈ [ ],)()(2

1∑=

−∆n

nnsnTtmFssincnx t1 ≤ m∆t ≤ t2 (3.35)

la cual puede ser implementada como una operación de multiplicación de matriz-vector, es decir:

>> n = n1:n2; t = t1:t2; Fs = 1/Ts; nTs = n*Ts; %Ts es el intervalo de muestreo >> xa = x * sinc(Fs*(ones(length(n),1)*t-nTs'*ones(1,length(t))));

Desde luego, hay que resaltar la imposibilidad de obtener una señal analógica xa(t) exacta, ya que se ha asumido un número finito de muestras. Por lo pronto, usaremos la función sinc para estudiar el problema de aliasing en el dominio del tiempo. A partir de las muestras de x1(n) en el ejemplo anterior, para las cuales se empleo una velocidad de muestreo de 5000 muestras/seg. (Ts = 1/Fs = 0.0002 seg.), podemos usar un espaciamiento de 0.00005 en la rejilla, sobre el intervalo -0.005 ≤ t ≤ 0.005, que nos de x(n) en el rango -25 ≤ n ≤ 25 y esto nos permita comparar con xa(t). El script que hemos escrito para esta prueba es:

% Señal en tiempo discreto x1(n) >> Ts = 0.0002; Fs = 1/Ts; n = -25:1:25; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % % Reconstrucción de la señal analógica >> Dt = 0.00005; >> t = -0.005:Dt:0.005; >> xa = x * sinc(Fs*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));

PDF created with pdfFactory trial version www.pdffactory.com

70

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Reconstruida usando la funció n sinc

% Verificación >> error = max(abs(xa - exp(-1000*abs(t)))) error = 0.0363 % % Gráfica >> subplot(2,1,1) >> plot(t*1000,xa,'r'); >> xlabel('t en mseg.'); ylabel('xa(t)') >> title('Señal Reconstruida usando la función sinc'); hold on >> stem(n*Ts*1000,x); hold off

Así, el error máximo entre la señal analógica y la reconstruida es de 0.0363, lo cual se debe al hecho de que xa(t) no esta, estrictamente, limitada en banda (además de que se cuenta con un número finito de muestras). La siguiente figura muestra que la reconstrucción es excelente: Por otro lado, para el caso de x2(n), que fue obtenida por el muestreo de la señal xa(t) con Ts = 1/Fs = 0.001 seg., si empleamos un espacio de rejilla de 0.00005 seg. sobre el intervalo -0.005 ≤ t ≤ 0.005, en donde x(n) esta definida sobre -5 ≤ n ≤ 5, entonces el script que nos ayuda es el siguiente:

% Señal discreta en tiempo x2(n) >> Ts = 0.001; Fs = 1/Ts; n = -5:1:5; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % % Reconstrucción de la señal analógica >> Dt = 0.00005; >> t = -0.005:Dt:0.005; >> xa = x * sinc(Fs*(ones(length(nTs),1)*t-nTs'*ones(1,length(t)))); % % Verificación >> error = max(abs(xa - exp(-1000*abs(t)))) error = 0.1852 % Gráficas >> subplot(2,1,1) >> plot(t*1000,xa,'r'); >> xlabel('t en mseg.'); ylabel('xa(t)') >> xaux = [-5:5]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('Señal Reconstruida usando la función sinc'); hold on >> stem(n*Ts*1000,x); hold off

PDF created with pdfFactory trial version www.pdffactory.com

71

-5 -4 -3 -2 -1 0 1 2 3 4 5-0.5

0

0.5

1

t en mseg.

xa(t)

Señ al Reconstruida usando la funció n sinc

En este caso, se observa que el máximo error entre la señal analógica y la reconstruida es de 0.1852, lo cual es significativo y no puede ser atribuido sólo al hecho de que xa(t) no esta limitada en banda. En la siguiente figura se observa que la señal reconstruida difiere de la analógica en muchos puntos sobre las regiones interpoladas, lo cual constituye la demostración visual del análisis en el dominio del tiempo.

Esta gráfica corresponde a la demostración visual del aliasing en el dominio del tiempo.

El segundo enfoque, en MATLAB, para la reconstrucción de la señal es de naturaleza gráfica: la función stairs grafica una representación en escalera (ZOH) de la señal analógica, dadas sus muestras, mientras que la función plot representa una interpolación lineal (FOH) entre muestras. Para las señales anteriores, ésta aproximación la logramos con el script siguiente:

% En esta reconstrucción no se calcula xa(t) sino que simplemente % se le grafica empleando sus muestras. % Señal discreta en tiempo x1(n) : Ts = 0.0002 >> Ts = 0.0002; n = -25:1:25; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % Reconstrucción de la señal analógica usando stairs >> subplot(2,1,1); stairs(nTs*1000,x,'r'); >> xlabel('t en mseg.','FontSize',8); ylabel('xa(t)') >> title('Señal Reconstruida usando ZOH'); hold on >> stem(n*Ts*1000,x); hold off % % Señal discreta en tiempo x2(n) : Ts = 0.001 >> Ts = 0.001; n = -5:1:5; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % Reconstrucción de la señal analógica usando plot >> subplot(2,1,2); plot(nTs*1000,x,'r'); >> xlabel('t en mseg.', 'FontSize',8); ylabel('xa(t)') >> title('Señal Reconstruida usando FOH'); hold on >> stem(n*Ts*1000,x); hold off

Las gráficas correspondientes se muestran a continuación.

PDF created with pdfFactory trial version www.pdffactory.com

72

A partir de estas gráficas se visualiza que la reconstrucción ZOH es muy burda, lo que hace necesario un procesamiento adicional de la señal. Por otro lado, la reconstrucción FOH parece ser mejor, pero una observación cuidadosa cerca de t=0 revela que el pico de la señal no es reproducido correctamente; sin embargo, en general, si la frecuencia de muestreo es mucho más grande que el índice de Nyquist, entonces la interpolación FOH proporciona una reconstrucción aceptable. El tercer enfoque de reconstrucción involucra el uso de funciones spline cúbicas, en donde la función spline implementa la interpolación entre puntos de muestras. Esto se hace con xa = spline(nTs,x,t), donde x y nTs son los arreglos que contienen a las muestras x(n) en los momentos nTs, respectivamente, y el arreglo t contiene una fina rejilla en la cual se encuentran los valores de xa(t) deseados. Es de resaltar, una vez más, que no es posible obtener una señal analógica xa(t) exacta. Usando el siguiente script, para las muestras x1(n) y x2(n), tenemos:

% Señal discreta en tiempo x1(n): Ts = 0.0002 >> Ts = 0.0002; n = -25:1:25; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % Reconstrucción de la señal analógica >> Dt = 0.00005; >> t = -0.005:Dt:0.005; >> xa = spline(nTs,x,t); % Verificación >> error = max(abs(xa - exp(-1000*abs(t)))) error = 0.0317 % Gráfica subplot(2,1,1); plot(t*1000,xa,'r'); xlabel('t en mseg.'); ylabel('xa(t)') title('Señal Reconstruida a partir de x1(n) usando la función spline cúbica'); hold on stem(n*Ts*1000,x); hold off

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Reconstruida usando ZOH

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Reconstruida usando FOH

PDF created with pdfFactory trial version www.pdffactory.com

73

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Reconstruida a partir de x1(n) usando la funció n spline cú bica

Se observa que el error máximo entre la señal analógica y la reconstruida es de 0.0317, lo cual es de esperarse debido a la interpolación no ideal y al hecho de que xa(t) no es limitada en banda. Comparando este error con el de la interpolación sinc (ideal), notamos que el error es menor. La gráfica correspondiente se muestra a continuación, en la cual se observa que visualmente la reconstrucción es excelente: Script correspondiente a las muestras x2(n):

% Señal en tiempo discreto x2(n): Ts = 0.001 >> Ts = 0.001; n = -5:1:5; nTs = n*Ts; >> x = exp(-1000*abs(nTs)); % Reconstrucción de la señal analógica >> Dt = 0.00005; >> t = -0.005:Dt:0.005; >> xa = spline(nTs,x,t); % Verificación >> error = max(abs(xa - exp(-1000*abs(t)))) error = 0.1679 % Gráfica >> figure(2); clf >> subplot(2,1,1); plot(t*1000,xa,'r'); >> xlabel('t en mseg.'); ylabel('xa(t)') >> title('Señal Reconstruida a partir de x2(n) usando la función spline cúbica'); hold on >> stem(n*Ts*1000,x); hold off

El error máximo en este caso es de 0.1679, el cual es significativo, y no puede ser atribuido a la interpolación no ideal o al hecho de que xa(t) es no limitada en banda. La gráfica correspondiente se muestra a continuación, en la cual se observa que la señal reconstruida de nuevo difiere de la actual en los sitios sobre las regiones interpoladas.

PDF created with pdfFactory trial version www.pdffactory.com

74

-5 -4 -3 -2 -1 0 1 2 3 4 50

0.2

0.4

0.6

0.8

1

t en mseg.

xa(t)

Señ al Reconstruida a partir de x2(n) usando la funció n spline cú bica

PDF created with pdfFactory trial version www.pdffactory.com

75

TRANSFORMADA Z Ya hemos resaltado la utilidad de la transformada de Fourier discreta en tiempo, para representar señales discretas sirviéndonos de secuencias exponenciales complejas; también, observamos que tal representación presenta algunas ventajas para el análisis de los sistemas LIT, ya que permite describirlos en el dominio de la frecuencia empleando la función de respuesta en frecuencia H(ejw). De igual modo, anotamos que el cálculo de la respuesta de estado estacionario sinusoidal se simplifica mucho usando a H(ejw); además, la respuesta a cualquier secuencia arbitraria x(n) absolutamente sumable puede ser sencillamente calculada, en el dominio de la frecuencia, multiplicando la transformada X(ejw) y la respuesta en frecuencia H(ejw). Sin embargo, existen dos defectos en el método de la transformada de Fourier: uno, existen muchas señales útiles, como u(n) y nu(n), para las cuales la transformada de Fourier discreta en tiempo no existe; dos, la respuesta transitoria de un sistema debida a condiciones iniciales, o a cambios en la entrada, no puede ser calculada usando la transformada de Fourier discreta en tiempo. Ahora, consideraremos una extensión de la transformada de Fourier discreta en tiempo para contender con los dos problemas señalados; tal extensión es conocida como transformada Z, y presenta dos versiones, una bilateral (que proporciona otro dominio en donde una clase grande de secuencias y sistemas pueden ser analizados), y una versión unilateral con la cual se pueden obtener respuestas de sistemas con condiciones iniciales o entradas cambiantes. TRANSFORMADA Z BILATERAL

La transformada Z de una secuencia x(n) esta dada por:

X(z) = Z[x(n)] = ∑∞

−∞=

n

nznx )( (4.1)

en donde z es una variable compleja. La serie de valores de z para los cuales X(z) existe se conoce como región de convergencia (RDC), y esta dada por

Rx- < |z| < Rx+ (4.2) para los números positivos Rx- y Rx+ . También, se tiene que la transformada-z inversa de una función compleja X(z) queda especificada por:

x(n) = Z-1[X(z)] = ∫ −

π C

n dzzzXj

1)(21

(4.3)

en donde C es el contorno de una curva, recorrida en el sentido opuesto a las manecillas del reloj, que encierra el origen y delimita la RDC.

SECCIÓN

4

PDF created with pdfFactory trial version www.pdffactory.com

76

Con base a lo señalado, podemos anotar lo siguiente: 1. La variable compleja z es llamada frecuencia compleja, y está dada por z = |z|ejw, donde |z| es la magnitud

y w es la frecuencia real. 2. Puesto que la RDC en (4.2) esta definida en términos de la magnitud |z|, la forma de la RDC es la de un

anillo abierto como se muestra en la siguiente figura:

Pudiendo ocurrir que Rx- sea igual a cero y/o Rx+ ser ∞. 3. Si Rx+ < Rx- , entonces la RDC es un espacio nulo y, por lo tanto, la transformada-z no existe. 4. La función |z| = 1 (o z= ejw), que constituye un círculo de radio unitario en el plano-z, es llamada círculo

unitario. Y si la RDC contiene al círculo, entonces podemos evaluar X(z) sobre el círculo unitario, lo cual deja:

[ ])()()()( nxFenxeXzXn

jwjwez jw === ∑

−∞=

−=

Así, la transformada de Fourier, X(ejw), discreta en tiempo puede considerarse un caso especial de la transformada Z, X(z). Consideremos tres secuencias, para las cuales se determinará su transformada Z: (a) Sea x1(n) = anu(n), 0 < |a| < ∞, (denominada secuencia positiva ó derecha), entonces:

X1(z) = ∑ ∑∞

∞−

−=

=

01

0 11azz

azan

nn ; si za

< 1

= az

z−

, |z| > |a| ⇒ RDC1: −xR

a || < |z| < +

∞xR

,

pudiendo notarse que X1(z) es una función racional; esto es

X1(z) = )()(

zAzB

=az

z−

con B(z)=z y A(z)=z-a, ambos, polinomios. Recordamos, también, que las raíces de B(z) son denominadas los ceros de X(z), mientras que las raíces de A(z) son llamadas los polos de X(z). Así, en este caso X1(z) tiene un cero en el origen z=0 y un polo en z=a. De tal suerte, x1(n) puede ser representada por un

PDF created with pdfFactory trial version www.pdffactory.com

77

diagrama de polos y ceros en el plano-z, en donde los ceros son denotados por 'o' y los polos por 'x', como se muestra a continuación:

(b) Ahora consideremos la secuencia x2(n) = -bnu(-n-1), 0 < |b| < ∞, (llamada secuencia negativa ó

izquierda), entonces

X2(z) = ∑ ∑−

∞−

∞−

−=−

1 1 nnn

zbzb

= ∑∑∞∞

−=

011

nn

bz

bz

= bz

zbz −

=−

−/1

11 , RDC2: −xR

0 < |z| < +xR

b ||

La RDC2 y el diagrama de polos y ceros correspondientes, se muestran a continuación

Hay que notar que si b=a, entonces X2(z) = X1(z), excepto por sus respectivas RDC´s ; esto es, RDC1 ≠ RDC2. Esto nos indica que la RDC es una característica distintiva, que garantiza la unicidad de la transformada Z, por lo que juega un papel muy importante en el análisis de los sistemas. (c) Por último, consideremos la secuencia x3(n) = x1(n) + x2(n) = anu(n) - bnu(-n-1), (denominada secuencia

bilateral), que es la suma de las dos secuencias anteriores. Tenemos que:

X3(z) = ∑∑−

∞−

−∞

=

− −1

0

nn

n

nn zbza

=

<

−+

>

−||||:,||||:, 11 b z RDC

bzz a z RDC

azz

= bz

zaz

z−

+−

; RDC3 : RDC1 ∩ RDC2

PDF created with pdfFactory trial version www.pdffactory.com

78

Desde luego, si |b| < |a| , la RDC3 sería un espacio nulo y, por lo tanto, X3(z) no existiría. Si |a| < |b| , entonces la RDC3 es |a| < |z| < |b| y X3(z) existe en esta región , como se muestra en las figuras siguientes:

Propiedades de la Región de Convergencia A partir de observar las RDC´s, de las tres secuencias anteriores, podemos establecer las siguientes propiedades: 1. La RDC está siempre limitada por un círculo, ya que la condición de convergencia está delimitada por

la magnitud |z|. 2. La secuencia x1(n) = anu(n), es un caso especial de una secuencia lateral derecha, la cual se define como

una secuencia x(n) que es cero para valores de n < n0. Este caso muestra que la RDC para las secuencias derechas está siempre en el exterior de un círculo de radio Rx-. Si no ≥ 0, entonces la secuencia lateral derecha es, también, llamada una secuencia causal.

3. La secuencia x2(n) = -bnu(-n-1), es un caso especial de una secuencia lateral izquierda, la cual se define

como una secuencia x(n) que es cero para valores de n > n0. Si no ≤ 0, la secuencia resultante es llamada secuencia anticausal. En este caso la RDC para la secuencia izquierda está siempre en el interior de un círculo de radio Rx+.

4. La secuencia x3(n) vista anteriormente es una secuencia bilateral (existe a izquierda y derecha de cero)

cuya RDC está siempre en un anillo abierto Rx- < |z| < Rx+ , si éste existe. 5. Las secuencias que son cero para n < n1 y n > n2 son llamadas secuencias de duración finita, y su RDC

es el todo el plano-z. Si n1 < 0 entonces z = ∞ no está en la RDC, y si n2 > 0 entonces z = 0 no queda en la RDC.

6. La RDC no puede incluir un polo, dado que X(z) converge uniformemente en ella. 7. Hay por lo menos un polo en la frontera de la RDC de una X(z) racional. 8. La RDC es una región contigua, es decir, no viene en piezas. En el procesamiento digital de señales, se da por hecho que las señales son causales, ya que casi todo dato digital es adquirido en tiempo real. Por lo tanto, la única RDC de interés para nosotros es la expuesta en el punto 2 de las propiedades señaladas.

PDF created with pdfFactory trial version www.pdffactory.com

79

PROPIEDADES DE LA TRANSFORMADA Z

Las propiedades de la transformada Z son generalizaciones de las propiedades de la transformada de Fourier discreta en tiempo y, en consecuencia, podemos apuntar las siguientes: 1. Linealidad:

Z[a1x1(n) + a2x2(n)] = a1X1(z) + a2X2(z); RDC : RDCx1 ∩ RDCx2 (4.4)

2. Desplazamiento en tiempo:

Z[x(n - no)] = z-noX(z); RDC : RDCx (4.5) 3. Desplazamiento en frecuencia:

Z[anx(n)] = X

az

; RDC : RDCx ponderada por |a| (4.6)

4. Rotación (Desdoblamiento):

Z[x(-n)] = X(1/z); RDC : RDCx invertida (4.7)

5. Conjugación:

Z[x*(n)] = X*(z*); RDC : RDCx (4.8)

6. Diferenciación en z:

Z[nx(n)] = dz

zdXz )(− ; RDC : RDCx (4.9)

7. Multiplicación:

Z[x1(n)x2(n)] = ∫ υυυυπ

CdzXX

j1

21 )/()(21

; (4.10)

RDC : RDCx1 ∩ RDCx2 invertida

En donde C es una curva cerrada que contiene al origen y además se encuentra en la RDC común. 8. Convolución:

Z[x1(n) * x2(n)] = X1(z)X2(z); RDC : RDCx1 ∩ RDCx2 (4.11) Esta propiedad transforma la operación de convolución en el dominio del tiempo en una multiplicación entre dos funciones. Es una propiedad significativa en muchos sentidos, y el primero de ellos es que si X1(z) y X2(z) son dos polinomios, entonces sus productos pueden ser implementados usando la función conv de MATLAB.

PDF created with pdfFactory trial version www.pdffactory.com

80

A continuación mostramos dos ejemplos, con los cuales aplicamos la propiedad de convolución: (a) Si X1(z) = 2 + 3z-1 + 4z-2 y X2(z) = 3 +43z-1 + 5z-2 + 6z-3, entonces X3(z) = X1(z)X2(z) se puede

determinar con base en la definición de la transformada Z, dado que

x1(n) = 2, 3, 4 y x2(n) = 3, 4, 5, 6 ↑ ↑ Así, la convolución de las dos secuencias proporcionará los coeficientes del producto polinomial requerido. El siguiente código nos permite visualizar el resultado: » x1 = [2,3,4]; x2 = [3,4,5,6]; » x3 = conv(x1,x2) x3 = 6 17 34 43 38 24 Por lo tanto:

X3(z) = 6 + 17z-1 + 34z-2 + 43z-3 + 38z-4 + 24z-5

Empleando la función conv_m, que desarrollamos con anterioridad, también podemos multiplicar dos polinomios, en el dominio de z, correspondientes a secuencias no causales. Por ejemplo: (b) Si X1(z) = z + 2 + 3z-1 y X2(z) = 2z2 + 4z + 3 + 5z-1, Entonces para determinar X3(z) = X1(z)X2(z)

Notamos que

x1(n) = 1, 2, 3 y x2(n) = 2, 4, 3, 5 ↑ ↑ El código correspondiente es el siguiente: >> x1 = [1,2,3]; n1 = [-1:1]; >> x2 = [2,4,3,5]; n2 = [-2:1]; >> [x3,n3] = conv_m(x1,n1,x2,n2) x3 = 2 8 17 23 19 15 n3 = -3 -2 -1 0 1 2 Por lo tanto:

X3(z) = 2z3 + 8z2 + 17z + 23 + 19z-1 + 15z-2 En otro orden de ideas, para dividir un polinomio entre otro requeriríamos una operación inversa, llamada deconvolución, cuya forma de invocación en MATLAB es: [p,r] = deconv(b,a). Esta expresión obtiene el resultado de dividir b entre a, en donde p es la parte polinomial y r es el residuo. Por ejemplo, si dividimos el polinomio X3(z) por X1(z) en el ejemplo del inciso (a) anterior, obtenemos el siguiente código:

PDF created with pdfFactory trial version www.pdffactory.com

81

>> x3 = [6,17,34,43,38,24]; x1 = [2,3,4]; >> [x2,r] = deconv(x3,x1) x2 = 3 4 5 6 r = 0 0 0 0 0 0 Observándose que obtenemos los coeficientes del polinomio X2(z), como era de esperarse. En base a este resultado, podemos decir que la operación deconv es útil en la obtención de la parte racional, de una función racional impropia. Otro uso importante de la propiedad de convolución reside en el cálculo de las respuestas en un sistema, como veremos más adelante. Esta interpretación es particularmente útil para verificar la expresión X(z), transformada en Z, con el empleo de MATLAB. Dado que MATLAB es un procesador numérico, no se le puede usar para calcular transformadas z directamente; podemos explicar esto con más detalle si consideramos la secuencia x(n) con una transformada racional de la forma

X(z) = )()(

zAzB

en donde B(z) y A(z) son polinomios en z-1. Si usamos los coeficientes de B(z) y A(z) para implementar los arreglos b y a en la rutina filter, y excitamos este filtro con la secuencia impulso δ(n), entonces de (4.11) y usando Z[δ(n)] = 1, tendremos que la salida del filtro será x(n). Desde luego, este desarrollo reviste una aproximación numérica al cálculo de la transformada Z inversa. Podemos comparar esta salida con la x(n) dada para verificar que X(z) es, en efecto, la transformada de x(n). Pares Transformados Z más comunes Usando la definición de la transformada-z y sus propiedades, se puede determinar la transformada de algunas de las secuencias más comunes, dando origen a la tabla siguiente:

Secuencia Transformada RDC

δ(n) 1 ∀z

u(n) 11

1−− z

|z | > 1

-u(-n-1) 11

1−− z

|z | < 1

an u(n) 11

1−− az

|z | > |a |

-bn u(-n-1) 11

1−− bz

|z | < |b |

[an sinωon] u(n) 221

1

)cos2(1)(

−−

+ω−

ω

zazazasin

o

o |z | > |a |

PDF created with pdfFactory trial version www.pdffactory.com

82

[an cosωon] u(n) 221

1

)cos2(1)cos(1

−−

+ω−

ω−

zazaza

o

o |z | > |a |

nan u(n) 21

1

)1( −

− azaz |z | > |a |

-nbn u(-n-1) 21

1

)1( −

− bzbz |z | < |b |

Si usamos la tabla anterior y algunas de las propiedades de la transformada Z, podemos determinar la transformada de la secuencia

x(n) = (n - 2)(0.5)(n-2) cos

−π )2(3

n u(n - 2) ,

lo cual se logra aplicando la propiedad de desplazamiento en tiempo, con lo que tenemos que

X(z) = Z[x(n)] = z-2 Z

π )(

3cos)5.0( nunn n

con ningún cambio en la RDC. Si ahora aplicamos la propiedad de multiplicación por una rampa (diferenciación en z), obtenemos lo siguiente:

X(z) = z-2

π

dz

nuncodZz

n )()()5.0(3

en donde, nuevamente, no hay cambio en la RDC. Ahora, tenemos que la transformada Z de

(0.5)n cos( n3

π) u(n), de acuerdo a la tabla de transformadas, es:

Z21

1

25.0)cos5.0(21

)cos5.0(1)(

3cos)5.0(

3

3

−−

+−

−=

π

π

π

zz

znunn ; |z | > 0.5

21

1

25.05.0125.01

−−

+−−

=zz

z; |z | > 0.5

por lo tanto

X(z) = -z-1

+−−

−−

21

1

25.05.0125.01

zzz

dzd

, |z | > 0.5

PDF created with pdfFactory trial version www.pdffactory.com

83

= -z-1

+−+−−+−

−−−−

−−−

4321

432

0625.025.075.010625.05.025.0

zzzzzzz

, |z | > 0.5

= 4321

543

0625.025.075.010625.05.025.0

−−−−

−−−

+−+−+−

zzzzzzz

, |z | > 0.5

Para verificar, con MATLAB, que la X(z) anterior es la expresión correcta, calcularemos las primeras 8 muestras de la secuencia x(n) correspondiente a X(z). El código es el siguiente:

>> b = [0,0,0,0.25,-0.5,0.0625]; a = [1,-1,0.75,-0.25,0.0625]; >> [delta,n] = SecuenciaImpulso(0,0,7) delta = 1 0 0 0 0 0 0 0 n = 0 1 2 3 4 5 6 7 >> x = filter(b,a,delta) %Verifica la secuencia x = Columns 1 through 7 0 0 0 0.2500 -0.2500 -0.3750 -0.1250 Column 8 0.0781 % Secuencia Original >> x = [(n-2).*(1/2).^(n-2).*cos(pi*(n-2)/3)].*SecuenciaEscalon(2,0,7) x = Columns 1 through 7 0 0 0 0.2500 -0.2500 -0.3750 -0.1250 Column 8 0.0781

Se observa que los resultados son los mismos, por lo que nuestro desarrollo es correcto. Así, este enfoque puede ser usado para verificar los cálculos de la transformada Z. Inversión de la Transformada Z

A partir de la definición (4.3) se puede observar que el cálculo de la transformada Z inversa requiere de la evaluación de una integral de línea compleja que, en general, es un procedimiento complicado; por lo que se prefiere usar un método alternativo, más práctico, consistente en la expansión por fracciones parciales, el cual hace uso de la tabla de transformadas mostrada anteriormente. Sin embargo, la transformada Z debe ser una función racional, requerimiento que, generalmente, se satisface en el procesamiento digital de señales.

PDF created with pdfFactory trial version www.pdffactory.com

84

Cuando X(z) es una función racional de z-1, puede ser expresada como una suma de factores simples (de primer orden) empleando la expansión de fracciones parciales. Así, las secuencias individuales correspondientes a estos factores pueden ser escritas usando la tabla de transformadas. El procedimiento de transformación inversa puede ser sintetizado de la siguiente manera: Dada

X(z) = NN

MMo

zazazbzbb

−−

−−

++++++

...1...

11

11 , Rx- < | z | < Rx+ (4.12)

1. Se puede expresar como:

X(z) = 4342144444 344444 21

NMsipolinomialparte

NM

k

kk

racionalparte

NN

NNo zC

zazazbzbb

=

−−−

−−−

∑++++

+++

_

0

11

)1(1

11

...1

~...~~

donde podemos observar la parte racional propia y la parte polinomial (de longitud finita). Resultados que se pueden obtener llevando a cabo la división polinomial, sí M ≥ N, empleando la función deconv.

2. Realizar una expansión en fracciones parciales sobre la parte racional propia de X(z), para obtener:

X(z) = ∑ ∑=

=

−−

+−

N

k

NM

NM

k

kk

k

k zCzp

R1 0

11 43421 , (4.13)

donde pk es el k-ésimo polo de X(z) y Rk es el residuo en pk. Se asume que los polos son, todos, distintos por lo que los residuos se calculan con:

Rk = kzzkN

N

NNo zp

zazazbzbb

=−

−−

−−−

−+++

+++)1(

...1

~...~~1

11

)1(1

11

Para los polos repetidos, la expresión (4.13) tiene una forma más general. Si un polo pk tiene multiplicidad r, entonces su expansión es dada por:

∑=

−−

−−

−−

−++

−+

−=

r

rk

rrk

k

k

k

k

k

k

zpzR

zpzR

zpR

zpzR

11

)1(,

21

12,

11,

1

)1(,

)1(...

)1(1)1(ll

ll , (4.14)

donde los residuos l,kR son calculados empleando una fórmula (Teorema de residuos de Cauchy) más

general.

PDF created with pdfFactory trial version www.pdffactory.com

85

3. Entonces, se escribe x(n) como:

x(n) = 44 344 21

NM

NM

kk

N

k kk knC

zpZR

==−

− ∑∑ −δ+

− 01

11 )(

11

4. Finalmente, se usa la siguiente relación de la tabla de pares transformados:

Z-1

≥−−−

≤=

+

xknk

xknk

k R z nupR z nup

pzz

||)1(

||)( (4.15)

para completar x(n). Podemos ejemplificar el método de expansión en fracciones parciales, si calculamos la transformada Z inversa de

X(z) = 143 2 +− zz

z

En primer lugar, reescribimos X(z) de la siguiente forma:

X(z) = 21

1

2

3

1

3

43

1

3

1

3

4 1)(3 −−

+−=

+− zz

z

zzz

= 1111

1

3

12

1

2

1

3

13

1

11)1)(1( −−−−

−−

−=

−− zzzz

z

ó

X(z) =

−−

− −−

11

3

11

121

11

21

zz

Donde podemos observar que X(z) tiene dos polos: z1=1 y z2=1/3; y ya que la RDC no esta especificada, se pueden presentar tres posibles RDC, las cuales se muestran en las siguientes figuras:

PDF created with pdfFactory trial version www.pdffactory.com

86

a) RDC1: 1< | z | < ∞. Aquí ambos polos están en el interior de la RDC1; esto es, | z1 | ≤ Rx- = 1 y

| z2 | ≤ 1.

Por lo tanto, de (4.15): x1(n) = )(31

21)(

21 nunu

n

lo cual corresponde a una secuencia derecha.

b) RDC2: 0< | z | < 1/3. Aquí ambos polos están en el exterior de la RDC2; esto es, | z1 | ≥ Rx+ = 1/3 y

| z2 | ≥ 1/3.

Por lo tanto, de (4.15): x2(n) =

−−

−−−−− )1(

31

21)1(

21 nunu

n

= )1(21)1(

31

21

−−−−−

nunu

n

lo cual corresponde a una secuencia izquierda.

c) RDC3: 1/3< | z | < 1. Aquí el polo z1 esta en el lado externo de la RDC3; esto es, | z1 | ≥ Rx+ = 1;

mientras que el polo z2 esta en el lado interno; esto es, | z2 | ≤ 1/3.

PDF created with pdfFactory trial version www.pdffactory.com

87

Por lo tanto, de (4.15): x3(n) = )(31

21)1(

21 nunu

n

−−−−

lo cual corresponde a una secuencia bilateral. En MATLAB existe una función, llamada residuez, la cual permite calcular la parte residual y los términos directos (polinomiales) de una función racional en z-1. Consideremos la función racional

X(z) = ∑ ∑=

=

−−−−

−−

+−

=++++++ N

k

NM

NM

k

kk

k

kN

No

MMo zC

zpR

zAzB

zazaazbzbb

1 011

1

11

1)()(

......

43421 ,

en la cual las potencias de z-1, de los polinomios del numerador y el denominador, están en orden ascendente. Entonces, la función [R,p,C] = residuez(b,a) encuentra los residuos, polos, y términos directos de X(z), en la que dos polinomios B(z) y A(z) están dados por los vectores b y a, respectivamente. El vector columna R, regresado por la función, contiene los residuos, el vector columna p contiene la localización de los polos, y el vector fila C contiene los términos directos. Si p(k) = ... = p(k+r-1) es un polo de multiplicidad r, entonces la expansión incluye al término de la forma

rk

rk

k

k

k

k

zpR

zpR

zpR

)1(...

)1(1 11

211

1 −−+

−+

− −++

−+

− , (4.16)

el cual es diferente al expresado en (4.14). Similarmente, de [b,a]=residuez(R,p,C) con tres argumentos de entrada y dos argumentos de salida, convierte la expresión de la fracción parcial anterior a polinomios, con sus coeficientes en los vectores fila b y a. A continuación, nos servimos de algunas funciones racionales para ilustrar el funcionamiento de la función residuez.

(a) Consideremos la función racional X(z) = 143 2 +− zz

z

Primero, arreglamos X(z) en potencias ascendentes de z-1 :

X(z) = 21

1

21

1

430

43 −−

−−

+−+

=+− zz

zzz

z

PDF created with pdfFactory trial version www.pdffactory.com

88

Ahora empleando el siguiente código:

>>b = [0,1]; >>a = [3,-4,1]; >>[R,p,C] = residuez(b,a) R = 0.5000 -0.5000 p = 1.0000 0.3333 C = [ ]

Obtenemos que

X(z) 1

1

3

12

1

2

1

11 −−

−−

−=

zz, como se había obtenido anteriormente.

Similarmente, para regresar a la forma de función racional empleamos el siguiente código:

>>[b,a] = residuez(R,p,C) b = -0.0000 0.3333 a = 1.0000 -1.3333 0.3333

y obtenemos

X(z) = =+−

=+−

−−

−−

−+

21

1

21

1

4313

1

3

43

10

zzz

zz

z

143 2 +− zzz

, como antes.

(b) Ahora, intentemos la transformada Z inversa de

X(z) = )091()9.01(

1121 −− +− zz

, | z | > 0.9

Podemos evaluar el polinomio denominador y, también, obtener el residuo empleando el siguiente código:

>>b = 1; a = poly([0.9,0.9,-0.9]) a = 1.0000 -0.9000 -0.8100 0.7290 >>[R,p,c] = residuez(b,a) R = 0.2500 0.5000 0.2500

PDF created with pdfFactory trial version www.pdffactory.com

89

p = 0.9000 0.9000 -0.9000 c = [ ]

Es de notar que el polinomio denominador se calcula empleando la función polinomial poly de MATLAB, la cual calcula los coeficientes del polinomio, dadas sus raíces. Podríamos haber usado la función conv, pero el uso de la función poly es más conveniente para éste propósito. A partir del cálculo de los residuos, y empleando los residuos dados en (4.16), tenemos que

X(z) = 1211 9.0125.0

)9.01(5.0

9.0125.0

−−− ++

−+

− zzz, | z | > 0.9

= 121

1

1 9.0125.0

)9.01()9.0(

9.05.0

9.0125.0

−−

− ++

−+

− zzzz

z, | z | > 0.9

Por lo tanto, de la tabla de transformadas, y empleando la propiedad de desplazamiento en el tiempo de la transformada Z, tenemos que

x(n) = 0.25(0.9)n u(n) + 95

(n+1)(0.9)n+1 u(n+1) + 0.25(-0.9)n u(n)

la cual, después de simplificarse, queda como

x(n) = 0.75(0.9)n u(n) + 0.5n(0.9)n u(n) + 0.25(-0.9)n u(n)

Podemos verificar con ayuda de MATLAB:

>> [delta,n] = SecuenciaImpulso(0,0,7); >> x = filter(b,a,delta) %verifica la secuencia x = Columns 1 through 7 1.0000 0.9000 1.6200 1.4580 1.9683 1.7715 2.1258 Column 8 1.9132 % Secuencia calculada >>x = (0.75)*(0.9).^n + (0.5)*n.*(0.9).^n + (0.25)*(-0.9).^n x = Columns 1 through 7 1.0000 0.9000 1.6200 1.4580 1.9683 1.7715 2.1258 Column 8 1.9132

(c) Por último, determinemos la transformada Z inversa de

X(z) = 21

1

64.028.0124.01

−−

+−+

zzz

de modo que la secuencia resultante sea causal y no contenga números complejos.

PDF created with pdfFactory trial version www.pdffactory.com

90

Tendremos que encontrar los polos de X(z) en forma polar para determinar la RDC de la secuencia causal. El código correspondiente es:

>>b = [1,0.4*sqrt(2)]; a=[1,-0.8*sqrt(2),0.64]; >>[R,p,C] = residuez(b,a) R = 0.5000 - 1.0000i 0.5000 + 1.0000i p = 0.5657 + 0.5657i 0.5657 - 0.5657i C = [ ] >>MagPolos=abs(p') % Magnitudes de los polos MagPolos =

0.8000 0.8000 >>FasPolos=angle(p')/pi %fases de los polos en unidades de pi FasPolos = -0.2500 0.2500

En base a estos resultados tenemos que

X(z) = 1414 |8.0|1

5.0

|8.0|1

5.0

−π

−π

−−

−+

+

ze

j

ze

jjj

, | z | > 0.8

y de la tabla de transformadas obtenemos la expresión de x(n):

x(n) = )(|8.0|)5.0()(|8.0|)5.0( 44 nuejnuejnjnnjn

π−

π−

−++

= )(5.0|8.0| 4444 nueejeenjnjnjnjn

++

+ππ

−ππ

= )(4

24

cos|8.0| nunsinnn

π

+

π

Verificando con MATLAB: >>[delta,n] = SecuenciaImpulso(0,0,6); >>x = filter(b,a,delta) %Verifica secuencia x = 1.0000 1.6971 1.2800 0.3620 -0.4096 -0.6951 -0.5243 -0.1483 %Secuencia calculada x = ((0.8).^n).*(cos(pi*n/4) + 2*sin(pi*n/4)) x = 1.0000 1.6971 1.2800 0.3620 -0.4096 -0.6951 -0.5243 -0.1483

PDF created with pdfFactory trial version www.pdffactory.com

91

REPRESENTACION DE SISTEMAS EN EL DOMINIO Z

De modo similar a la función de respuesta en frecuencia H(ejw), podemos definir a la función H(z) en el dominio z, denominada como la función del sistema. Sin embargo, a diferencia de H(ejw), H(z) existe para sistemas que pueden no ser estables (en el sentido de entrada limitada – salida limitada). La función del sistema H(z) esta dada por:

H(z) = Z[h(n)] = ∑∞

∞−

−nznh )( ; Rh- < | z | < Rh+ (4.17)

Usando la propiedad de convolución de la transformada Z, se tiene que la transformada de la salida Y(z) esta dada por:

Y(z) = H(z) X(z) :RDCy = RDCh ∩ RDCx (4.18)

Con la condición de que la RDCx coincida con la RDCh. Por lo tanto, un sistema lineal invariante en tiempo puede ser representado en el dominio-z por

X(z) Y(z) = H(z) X(z)

Cuando los sistemas LIT son descritos por ecuaciones de diferencia de la forma

y(n) + ∑ ∑= =

−=−N

k

M

xk nbknya1 0

)()(l

l l (4.19)

la función del sistema H(z) puede ser fácilmente calculada. Tomando la transformada Z de ambos lados de la igualdad, y empleando la propiedad de desplazamiento en tiempo:

Y(z) +∑ ∑= =

−− =N

k

Mk

k zXzbzYza1 0

)()(l

ll

ó

H(z) = )()(

1)()(

1

0

zAzB

za

zb

zXzY

N

k

kk

M

=+

=

=

=

l

ll

(4.20)

H(z)

PDF created with pdfFactory trial version www.pdffactory.com

92

= )...(

)...(

NNN

o

MMMo

azzbbzzb

++

++

Después de factorizar, obtenemos:

H(z) =

=

=−

N

kk

N

MNo

pz

zzzb

1

1

)(

)(l

l

(4.21)

en donde las ´lz s son los ceros del sistema y las ´kp s son los polos. Así, H(z) (y por lo tanto un sistema LIT) puede ser representada en el dominio-z empleando una gráfica de polos y ceros. Todo esto puede ser usado en el diseño de filtros simples, por medio de la correcta colocación de los polos y ceros. Para determinar los polos y ceros de una H(z) racional, podemos usar la función roots en los polinomios tanto del numerador como del denominador. También es posible usar MATLAB para graficar estas raíces por medio de una gráfica de polos y ceros, la cual es implementada por la función zplane(b,a) dado el vector fila del numerador b, y el vector fila del denominador a; en donde el símbolo "o" representa un cero y el símbolo "x" representa un polo. Además, la gráfica en cuestión incluye un círculo unitario como referencia. Similarmente, zplane(z,p) grafica los ceros contenidos en el vector columna z y los polos en el vector columna p; debiendo ser muy cuidadosos en la forma de presentar los argumentos de entrada, para así lograr el correcto uso de esta función. Representación de la Función de Transferencia. Si la RDC de H(z) incluye un círculo unitario (z = ejw), entonces podemos evaluar H(z) sobre el círculo unitario, dando como resultado una función de respuesta en frecuencia o función de transferencia H(ejw). Entonces, de (4.21):

H(ejw) =

−−

N

kjw

Mjw

wMNjo

pe

zeeb

1

1)(

)(

)( l

(4.22)

El factor ( lze jw − ) puede ser interpretado como un vector en el plano-z complejo, desde un cero lz hasta el

círculo unitario en z = ejw, mientras que el factor ( kjw pe − ) puede ser interpretado como un vector desde un

polo kp hasta el círculo unitario en z = ejw. Esto se muestra en la siguiente figura.

PDF created with pdfFactory trial version www.pdffactory.com

93

En consecuencia, la magnitud de la función respuesta esta dada por la siguiente expresión:

| H(ejw) | = | bo | ||...||||...||

1

1

Njwjw

Mjwjw

pepezeze

−−−−

(4.23)

la cual puede ser interpretada como un producto de longitudes de los vectores que van de los ceros al círculo unitario, dividido por las longitudes de los vectores que van de los polos hasta el círculo unitario, y todo esto ponderado por | bo |. Similarmente, la función de respuesta en fase es la siguiente.

∠H(ejw) = [ ] [ ]444444 3444444 21

43421321lineal no

N

kjw

M

kjw

linealconstante

pezewMN ó ∑∑ −∠−−∠+−+π11

)()()(0 (4.24)

función que puede ser interpretada como la suma de un factor constante, un factor de fase lineal y un factor de fase no lineal (ángulos de los vectores de los ceros menos la suma de los ángulos de los vectores de los polos). En el capítulo anterior graficamos las respuestas en magnitud y fase implementando directamente, en MATLAB, sus formas funcionales. Para el enfoque en el dominio-z, MATLAB, también, proporciona una función llamada freqz para éste cálculo, la cual usa la interpretación dada anteriormente. En su forma más simple ésta función es invocada por [H,w] = freqz(b,a,N) la cual regresa el vector de frecuencia w (de N puntos) y el vector de respuesta en frecuencia compleja H (de N puntos) del sistema, dados los coeficientes del numerador y el denominador en los vectores b y a. La respuesta en frecuencia es evaluada en N puntos, distribuidos uniformemente alrededor de la mitad superior del círculo unitario. Debemos notar que los vectores b y a son los mismos vectores que usamos en la función filter o, derivados de la representación de la ecuación de diferencia (4.19). Una segunda forma de la función freqz es la siguiente. [H,w] = freqz(b,a,N,'whole') la cual usa N puntos, alrededor del círculo unitario completo, para el cálculo. Otra forma de ésta función es H= freqz(b,a,w) la cual regresa la respuesta en frecuencia para las frecuencias dadas en el vector w, normalmente entre 0 y π. A continuación nos valemos del siguiente sistema causal, representado por una ecuación de diferencias, para mostrar el uso de la función freqz:

y(n) = 0.9y(n - 1) + x(n) (a) Nos proponemos encontrar H(z), además de realizar un bosquejo de su gráfica de polos y ceros.

La ecuación de diferencia puede ser puesta en la forma

y(n) - 0.9y(n -1) = x(n)

PDF created with pdfFactory trial version www.pdffactory.com

94

puesto que el sistema es causal, de (4.21) tenemos que:

H(z) = 19.011

−− z; | z | > 0.9

Esta expresión posee un polo en 0.9 y un cero en el origen. El código correspondiente es el siguiente: >> figure(1); >> b = [1,0]; a = [1, -0.9]; >> zplane(b,a); title('Diagrama de Polos y Ceros'); >> xlabel('Parte Real'); ylabel('Parte Imaginaria'); >> text(0.88,0,'X','FontSize',9,'FontWeight','bold'); >> text(0.84,-0.1,'0.9','FontSize',9); >> text(0.01,-0.1,'0','FontSize',9); Hay que resaltar que especificamos b = [1,0] en lugar de b=1, debido a que la función zplane asume que los polos o los ceros son escalares. La gráfica resultante se muestra a continuación:

(b) Para graficar | H(ejw) | y ∠H(ejw), podemos emplear (4.23) y (4.24) para determinar la magnitud y fase

de H(ejw). Si tomamos 100 puntos a lo largo de la mitad superior del círculo unitario, el código que podemos utilizar es el siguiente: >> figure(2); >> [H,w] = freqz(b,a,100); >> magH = abs(H); faseH = angle(H); >> subplot(2,1,1);plot(w/pi,magH);grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8);

-1.5 -1 -0.5 0 0.5 1 1.5

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Parte Real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

X0.90

PDF created with pdfFactory trial version www.pdffactory.com

95

>> ylabel('Magnitud'); >> title('Respuesta en Magnitud') >> subplot(2,1,2);plot(w/pi,faseH/pi);grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en unidades de \pi'); >> title('Respuesta en Fase') lo cual da lugar a las gráficas siguientes: Si estudiamos estas gráficas cuidadosamente, observamos que son calculadas entre 0 ≤ w ≤ 0.99π y, además, se cortan en w=π, lo cual es de esperarse debido a que en MATLAB la mitad inferior del círculo unitario empieza en w=π. Para superar este problema empleamos la segunda forma de la función freqz, como sigue: >> [H,w] = freqz(b,a,200,'whole'); >> magH = abs(H(1:101)); faseH = angle(H(1:101)); Aquí, el elemento 101-avo del arreglo H corresponde a w=π. Un resultado similar puede ser obtenido empleando la tercera forma de la función freqz, esto es: >> w = [0:1:100]*pi/100; >> H = freqz(b,a,w); >> magH = abs(H); faseH = angle(H); En el futuro emplearemos cualquiera de estas formas, según nos convenga. También, debemos notar que para las gráficas dividimos los vectores w y faseH por pi, de tal forma que los ejes quedan en unidades de π.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

5

10

15

Frecuencia en unidades de π

Mag

nitu

d

Respuesta en Magnitud

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-0.4

-0.3

-0.2

-0.1

0

Frecuencia en unidades de π

Fase

en

unid

ades

de

π

Respuesta en Fase

PDF created with pdfFactory trial version www.pdffactory.com

96

(c) Por último, podemos determinar la respuesta al impulso, h(n), aprovechando la tabla de transformadas.

De este modo tenemos que:

h(n) = Z-1

>

− − 9.0||,9.01

11 z

z = (0.9)n u(n)

Ahora consideremos el siguiente sistema causal en el dominio-z:

H(z) = 81.09.0

12 +−

+zz

z

(a) Para el cual nos proponemos encontrar la representación de su función de transferencia; de modo que debemos ubicar los polos de la función, mismos que quedan en z = 0.9∠ ±π/3. En consecuencia la RDC del sistema causal es | z | > 0.9; por lo que el círculo unitario está en la RDC, y la transformada de Fourier discreta en tiempo, H(ejw), existe. Así, sustituyendo z = ejw en H(z), obtenemos:

H(ejw) = 3/3/2 9.0)(9.0(1

81.09.01

π−π −−+

=+−

+jjwjjw

jw

jwwj

jw

eeeee

eee

(b) Si ahora empleamos H(z) = Y(z) / X(z), tenemos:

21

21

2

2

2 81.09.0181.09.01

)()(

−−

−−

+−+

=

+−

+=

zzzz

zz

zzz

zXzY

realizando una multiplicación cruzada resulta que:

Y(z) - 0.9z-1 Y(z) + 0.81 z-2 Y(z) = z-1 X(z) + z-2 X(z)

cuya transformada Z inversa es:

y(n) - 0.9y(n - 1) + 0.81y(n - 2) = x(n - 1) + x(n - 2)

ó y(n) = 0.9y(n - 1) - 0.81y(n - 2) + x(n - 1) + x(n - 2),

lo cual constituye una ecuación de diferencias de segundo orden.

(c) Por último, si usamos MATLAB, podemos determinar la representación de su respuesta al impulso, y para ello emplearemos el siguiente código.

>> b = [0,1,1]; a = [1,-0.9,0.81]; >> [R,p,C] = residuez(b,a) R = -0.6173 - 0.9979i -0.6173 + 0.9979i p = 0.4500 + 0.7794i 0.4500 - 0.7794i

PDF created with pdfFactory trial version www.pdffactory.com

97

C = 1.2346 >> Mag_p = abs(p') Mag_p =

0.9000 0.9000 0.9001

>> Fase_p = angle(p')/pi Fase_p = -0.3333 0.3333 con estos resultados obtenemos que

H(z) = 1.2346 + 13/13/ |9.0|19979.06173.0

|9.0|19979.06173.0

−π−π− −−−

+−

+−ze

jze

jjj , | z | > 0.9

y de la tabla de transformadas obtenemos: h(n) = 3/|9.0|)9979.06173.0[()(2346.1 njn ejn π−+−+δ

3/|9.0|)9979.06173.0( njn ej π−−+ ] u(n) = [ ] )()3/(9958.1)3/cos(2346.1|9.0|)(2346.1 nu nsin n n n π+π−+δ

= [ ] )1()3/(9958.1)3/cos(2346.1|9.0| −π+π− nu nsin n n

lo cual asume que h(0) = 0.

En la siguiente figura se resumen las distintas representaciones, desarrolladas hasta aquí, para la descripción de los sistemas:

PDF created with pdfFactory trial version www.pdffactory.com

98

ESTABILIDAD Y CAUSALIDAD Para los sistemas LIT, la estabilidad de entrada limitada - salida limitada es equivalente a

∞<∑∞

∞−|)(| kh , por lo que, a partir de la existencia de la transformada de Fourier discreta en tiempo, ésta

implica que H(ejw) existe, lo cual da como resultado que el círculo unitario | z | = 1 debe estar en la RDC de H(z). Este resultado se conoce como el teorema de estabilidad en el dominio-z; por lo tanto los caminos representados con líneas punteadas en la figura anterior existen sólo si el sistema es estable. Estabilidad de un sistema LIT en el dominio-z.

Un sistema LIT es estable si y sólo si el círculo unitario esta en la RDC de H(z). Con respecto a la causalidad de un sistema LIT requerimos que h(n) = 0, para n<0 (p.e., una secuencia derecha), lo cual implica que la RDC de H(z) debe estar fuera de algún círculo de radio Rh- . Pero esto no es una condición suficiente ya que cualquier secuencia derecha tiene una RDC similar; sin embargo, cuando el sistema es estable su causalidad es fácil de verificar. Estabilidad de un sistema causal LIT en el dominio-z.

Un sistema causal LIT es estable si y sólo si la función del sistema, H(z), tiene todos sus polos dentro del círculo unitario.

Consideremos el sistema causal descrito por la ecuación de diferencia siguiente:

y(n) = 0.81y(n - 2) + x(n) - x(n - 2) , sistema para el cual la RDC quedará fuera de un círculo con radio igual a la magnitud del polo más grande; por lo que podemos determinar su función H(z) si tomamos la transformada Z de ambos lados de la ecuación, y resolvemos para Y(z) / X(z), con lo cual obtenemos:

H(z) =

)9.01)(9.01(1

81.011

11

2

2

2

−−

−+−

=−

−zz

zz

z, | z | > 0.9

Si usamos MATLAB para generar la expansión en fracciones correspondiente, tenemos que: >> b = [1,0,-1]; a = [1,0,-0.81]; >> [R,p,C] = residuez(b,a) R = -0.1173 -0.1173 p = 0.9000 -0.9000 C = 1.2346

PDF created with pdfFactory trial version www.pdffactory.com

99

con estos resultados podemos reescribir H(z) como:

H(z) = 11 9.0111173.0

9.0111173.02346.1

−− −−

+−

zz, | z | > 0.9

y, de la tabla de transformadas, obtenemos la respuesta impulsiva correspondiente:

h(n) = )()9.0()1(11173.0)(2346.1 nu n nn−+−δ

De la tabla de transformadas sabemos que Z[u(n)] = 111

−− z, para | z | >1, por lo que:

V(z) = H(z)U(z) =

−+−+

−−−

−−

111

11

11

)9.01)(9.01()1)(1(

zzzzz

, | z | > 0.9 ∩ | z | >1

= )9.01)(9.01(

111

1

−−

−++

zzz

, | z | > 0.9

ó

V(z) = 11 9.0110556.0

9.0110556.1

−− +−

− zz, | z | > 0.9

Aplicando transformada inversa:

v(n) = [ 1.0556 (0.9)n - 0.0556 (-0.9)n ] u(n) ,

lo cual representa la respuesta escalón del sistema. Es interesante notar que en el cálculo de V(z) hay una cancelación de un polo con un cero en z=1, lo cual tiene dos consecuencias: la primera de ellas es que la RDC de V(z) es aún | z | > 0.9 y no | z | > 0.9 ∩ | z | > 1 = | z | > 1; la segunda consecuencia es que la respuesta escalón v(n) no contiene términos estacionarios u(n). Si ahora sustituimos z = ejw en la función H(z), tenemos:

H(ejw) = wj

wj

ee

2

2

81.011

−−

a partir de la cual, usando MATLAB, podemos calcular y graficar las respuestas. El código es el siguiente:

>> w = [0:1:500]*pi/500; >> H = freqz(b,a,w); >> magH = abs(H); faseH = angle(H); >> subplot(2,1,1); plot(w/pi,magH); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Magnitud') >> title('Respuesta en Magnitud') >> subplot(2,1,2); plot(w/pi,faseH/pi); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en unidades de \pi'); >> title('Respuesta en Fase')

PDF created with pdfFactory trial version www.pdffactory.com

100

Las gráficas de respuesta en frecuencia se muestran a continuación:

SOLUCIÓN DE ECUACIONES DE DIFERENCIA

Ya hemos mencionado que existen dos formas de proceder para resolver las ecuaciones de diferencia lineales con coeficientes constantes. Una de estas formas supone encontrar la solución particular y homogénea, en tanto que la otra involucra el determinar la respuesta de entrada cero y la respuesta de estado cero. Ahora, extendemos nuestro estudio a un método alternativo, que involucra la transformada Z, y mediante el cual se pueden obtener ambos tipos de solución; además, tal método nos permitirá agregar luz sobre las respuestas transitoria y de estado estacionario. En el procesamiento digital de señales, las ecuaciones de diferencia evolucionan en el sentido positivo del índice n, por lo que n ≥ 0, y para lo cual se hace necesario establecer una versión alterna de la transformada bilateral. Transformada Z unilateral

La transformada Z unilateral de una secuencia x(n) se define por:

Z+ [x(n)] = Z [x(n)u(n)] = X+ [z] = ∑∞

=

0)(

n

nznx (4.25)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.5

1

1.5

Frecuencia en unidades de π

Mag

nitu

dRespuesta en Magnitud

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-0.5

0

0.5

Frecuencia en unidades de π

Fase

en

unid

ades

de

π

Respuesta en Fase

PDF created with pdfFactory trial version www.pdffactory.com

101

Si aplicamos la propiedad de desplazamiento: Z+ [x(n - k)] = Z [x(n - k) u(n)]

= ∑∑∞

−=

+−∞

=

− =−km

km

n

n zmxzknx )(

0)()(

= k

m

m

km

km zzmxzmx −∞

=

−−

−=

+−

+ ∑∑

0

)1

)( )()(

ó

Z+ [x(n - k)] = x(-1) z1-k + x(-2) z2-k + ... + x(-k) + z-k X+(z) (4.26)

Resultado que, desde luego, puede ser usado para resolver ecuaciones de diferencia con condiciones iniciales distintas de cero. En resumidas cuentas se quiere resolver la ecuación de diferencia

∑ ∑= =

≥−=−+N

k

M

mmk n mnxbknya

1 00),()(1

sujeta a las condiciones iniciales:

y(i), i = -1, ... , -N y x(i), i = -1, ... ,-M

Así, si fuera el caso resolver la siguiente ecuación de diferencia:

0),()2(21)1(

23)( ≥=−+−− n nxnynyny

en donde

)(41)( nunx

n

= ,

y sujeta a las condiciones: y(-1) = 4 y y(-2) = 10. Tomamos la transformada Z unilateral de ambos lados de la ecuación , y obtenemos:

Y+(z) - 23

[y(-1) + z-1 Y+(z)] + 21

[y(-2) + z-1 y(-1) + z-2 Y+(z)] = 1

4

11

1−− z

Sustituyendo las condiciones iniciales, y reagrupando obtenemos,

PDF created with pdfFactory trial version www.pdffactory.com

102

)21(

411

121

231)( 1

1

21 −

−−+ −+−

=

+− z

zzzzY

ó

21

1

21

1

21

231

21

21

231

411

1

)(−−

−−

+

+−

−+

+−

−=

zz

z

zz

zzY (4.27)

Finalmente,

)411)(1)(

211(

21

492

)(111

21

−−−

−−

+

−−−

+−=

zzz

zzzY

Aplicando la expansión en fracciones parciales, obtenemos

11

1

411

31

132

211

1)(−

−−

+

−+

−+

−=

zzzzY (4.28)

Ahora, si tomamos la transformada inversa, la solución resulta en:

y(n) = )(41

31

32

21 nu

nn

++

(4.29)

Esta solución constituye la respuesta completa de la ecuación de diferencia, la cual puede ser expresada en varias formas: • Partes homogénea y particular:

y(n) = 4342144 344 21

Particular Parte

n

Homogénea Parte

n

nunu )(41

31)(

32

21

+

+

Obviamente, la parte homogénea es debida a los polos del sistema y la parte particular a los polos de la entrada.

PDF created with pdfFactory trial version www.pdffactory.com

103

• Respuestas transitoria y de estado estacionario:

y(n) = 321444 3444 21 ioEstacionar Estado al spuesta

aTransitori spuesta

nn

nu32 nu

ReRe

)()(21

41

31

+

+

En este caso, la respuesta transitoria es consecuencia de los polos que están dentro del círculo unitario, mientras que la respuesta al estado estacionario se debe a los polos que están sobre el círculo unitario. Desde luego, cuando los polos están fuera del círculo unitario, la respuesta termina en una respuesta no limitada.

• Respuestas de entrada cero y de estado cero:

En la ecuación (4.27) Y+(z) tiene dos partes; la primera puede ser interpretada como

YZS(z) = H(z)X(z) y la segunda como

YZI(z) = H(z)XIC(z)

donde XIC(z) puede ser vista como una entrada equivalente, de condición inicial, que genera la misma salida YZI que es determinada por las condiciones iniciales. Para nuestro ejemplo, en particular, xIC(n) es

xIC(n) = 1, 2 ↑ Ahora, si tomamos la transformada Z inversa de cada una de las partes de (4.27), podemos escribir la respuesta completa como

y(n) =

44 344 214444 34444 21cero entrada la a spuesta

n

cero estado al spuesta

nn

nu nu

ReRe

)(2213)(

38

212

41

31

+

+

Es claro que cada parte de la solución completa es, en general, una función diferente y acentúa un aspecto diferente del análisis del sistema.

En la sección 2 empleamos la función filter para resolver ecuaciones de diferencia, dados sus coeficientes y una entrada. Esta función también puede ser usada para encontrar la respuesta completa, cuando las condiciones iniciales son proporcionadas; y la forma de invocarla es la siguiente: y = filter(b,a,x,xic) En donde xic es el arreglo de entrada equivalente a la condición inicial.

PDF created with pdfFactory trial version www.pdffactory.com

104

A continuación, presentamos el código para encontrar la respuesta completa de la ecuación de diferencia antes propuesta:

>> b = [1]; a = [1,-3/2,1/2]; >> n = [0:7]; x = (1/4).^n; xic = [1,-2]; >> format long >> y1 = filter(b,a,x,xic) y1 = Columns 1 through 4 2.00000000000000 1.25000000000000 0.93750000000000 0.79687500000000 Columns 5 through 8 0.73046875000000 0.69824218750000 0.68237304687500 0.67449951171875 % Verificación >> y2 = (1/3)*(1/4).^n+(1/2).^n+(2/3)*ones(1,8) y2 = Columns 1 through 4 2.00000000000000 1.25000000000000 0.93750000000000 0.79687500000000 Columns 5 through 8 0.73046875000000 0.69824218750000 0.68237304687500 0.67449951171875

lo cual concuerda con la respuesta dada en (4.29). Sin embargo, en la práctica, y especialmente para ecuaciones de diferencia de orden grande, es tedioso determinar xIC(n) analíticamente; por lo que MATLAB proporciona una función llamada filtic, la cual esta disponible en el toolbox de procesamiento de señales, pudiendo ser invocada por: xic = filtic(b,a,Y,X) en donde b y a son los arreglos de los coeficientes del filtro, Y y X son los arreglos de las condiciones iniciales para y(n) y x(n), respectivamente, en la forma

Y = [ y(-1), y(-2), ... , y(-N) ]

X = [ x(-1), x(-2), ... , x(-M) ]

Si x(n) = 0 para n ≤ -1, entonces X no necesita ser especificada en la función filtic. Por lo tanto para la ecuación de diferencia anterior podríamos haber usado el siguiente código para determinar xIC(n): >> Y = [4,10]; >> xic = filtic(b,a,Y) xic = 1 -2

Con estos nuevos elementos, consideremos la siguiente ecuación de diferencia, misma que resolveremos primero en forma analítica y, posteriormente, usando MATLAB:

y(n) = 31

[ x(n) + x(n - 1) + x(n- 2) ] + 0.95y(n - 1) - 0.9025y(n - 2), n ≥ 0

en donde x(n) = cos(πn/3)u(n) y

y(-1) = -2, y(-2) = -3; x(-1) = 1, x(-2) = 1

PDF created with pdfFactory trial version www.pdffactory.com

105

Solución Analítica: Aplicando la transformada Z unilateral a la ecuación de diferencia, tenemos:

Y+(z) = 31

[ X+(z) + x(-1) + z-1 X+(z) + x(-2) + z-1 x(-1) + z-2 X+(z) ]

+ 0.95 [ y(-1) + z-1 Y+(z) ] - 0.9025[ y(-2) + z-1 y(-1) + z-2 Y+(z) ] y sustituyendo las condiciones iniciales, obtenemos:

Y+(z) = 21

21

9025.095.0131

31

31

−−

−−

+−

++

zz

zzX+(z) + 21

1

9025.095.011383.24742.1

−−

+−+

zzz

Claramente, se observa que xIC(n) = [1.4742, 2.1383]. Ahora sustituyendo X+(z) = 21

1

15.01

−−

+−−

zzz

y

simplificando, obtenemos a Y+(z) en forma de función racional. Esta simplificación y la expansión en fracciones parciales pueden ser implementadas con MATLAB, como se muestra con el siguiente código:

>> b = [1,1,1]/3; a = [1,-0.95,0.9025]; >> Y = [-2,-3]; X = [1,1]; >> xic = filtic(b,a,Y,X) xic =

1.4742 2.1383 % Coeficientes de la transformada X+(z) >> bx = [1,-0.5]; ax = [1,-1,1]; % Denominador de Y+(z) >> ay = conv(a,ax) ay = 1.0000 -1.9500 2.8525 -1.8525 0.9025 % Numerador de Y+(z) >> by = conv(b,bx)+conv(xic,ax) by = 1.8075 0.8308 -0.4975 1.9717 >> [R,p,C] = residuez(by,ay) R = 0.0584 - 3.9468i 0.0584 + 3.9468i 0.8453 + 2.0311i 0.8453 - 2.0311i p = 0.5000 + 0.8660i 0.5000 - 0.8660i 0.4750 + 0.8227i 0.4750 - 0.8227i C = [ ]

PDF created with pdfFactory trial version www.pdffactory.com

106

% Forma polar >> Magp = abs(p), Fasep = angle(p)/pi Magp = 1.0000 1.0000 0.9500 0.9500 Fasep = 0.3333 -0.3333 0.3333 -0.3333 Por lo tanto:

Y+(z) = 4321

321

9025.08525.18525.295.119717.14975.08308.08076.1

−−−−

−−−

+−+−+−+

zzzzzzz

= 13/13/ 19468.30584.0

19468.30584.0

−π−π− −−

+−

+ze

jze

jjj

13/13/ 95.010311.28453.0

95.010311.28453.0

−π−−π −−

+−

++

zej

zej

jj

Usando la tabla de pares transformados, obtenemos la siguiente expresión:

y(n) = 3/3/ )9468.30584.0()9468.30584.0( njnj ejej ππ− −++

3/3/ )95.0)(031.28453.0()95.0)(031.28453.0( njnnjn ejej π−π −+++ = )3/(8937.7)3/cos(1169.0 nsinn π+π

[ ])3/(0623.4)3/cos(6906.1)95.0( nsinnn π−π+ , n ≥ 0

Los primeros dos términos de y(n) corresponden a la respuesta de estado estacionario, así como también a la respuesta particular, mientras que los dos últimos términos son los términos de la respuesta transitoria (y respuesta homogénea). Solución usando MATLAB: Aquí necesitamos la función filtic, que fue usada para determinar la secuencia xIC(n). El siguiente código muestra como determinar las primeras 8 muestras de y(n).

PDF created with pdfFactory trial version www.pdffactory.com

107

>> n = [0:7]; x = cos(pi*n/3); >> y = filter(b,a,x,xic) y = Columns 1 through 4 1.80750000000000 4.35545833333333 2.83975000000000 -1.56637197916667 Columns 5 through 8 -4.71759442187500 -3.40139732291667 1.35963484230469 5.02808085078841 % Verificación >> A= real(2*R(1)); B= imag(2*R(2)); C= real(2*R(3)); D= imag(2*R(4)); >> y= A*cos(pi*n/3)+B*sin(pi*n/3)+((0.95).^n).*(C*cos(pi*n/3)+D*sin(pi*n/3)) y = Columns 1 through 4 1.80750000000002 4.35545833333329 2.83974999999986 -1.56637197916669 Columns 5 through 8 -4.71759442187475 -3.40139732291633 1.35963484230471 5.02808085078799

PDF created with pdfFactory trial version www.pdffactory.com

109

TRANSFORMADA DISCRETA DE FOURIER Ya hemos abordado algunas formas de representación de las señales discretas en un dominio distinto al tiempo; por ejemplo, la transformada de Fourier discreta en tiempo y la transformada-z. El primer enfoque proporciona una representación en el dominio de la frecuencia (ω) para secuencias absolutamente sumables, mientras que el segundo enfoque proporciona una representación en el dominio de la frecuencia (z) para secuencias arbitrarias. Estas transformadas tienen dos características en común: la primera de ellas es que ambas están definidas para secuencias de longitud infinita; la segunda característica, y la más importante, es que son funciones de variables continuas (ω ó z), por lo que, desde el punto de vista del cálculo numérico, éstas características no resultan del todo convenientes, debido a que implican la evaluación de sumas infinitas de infinitas frecuencias. Para poder usar MATLAB en tales circunstancias, tenemos que truncar las secuencias y evaluar las expresiones en muchos puntos, quedando claro que estas evaluaciones son solo aproximaciones a los cálculos exactos, lo cual supone que la transformada de Fourier discreta en tiempo y la transformada-z no son transformadas que puedan ser calculadas numéricamente. De este modo, pondremos nuestra atención en una transformada que pueda ser calculada numéricamente, que es obtenida mediante muestreo, de la transformada de Fourier discreta en tiempo, en el dominio de la frecuencia (o la transformada-z sobre el círculo unitario). Para el desarrollo de ésta transformada, comenzamos analizando secuencias periódicas, supuesto el conocimiento de que una función (o secuencia) periódica se puede representar por una combinación lineal de exponenciales complejas relacionadas armónicamente (lo cual es una forma de muestreo), lo que da lugar a la representación de las Series Discretas de Fourier (o SDF). Una extensión de estas SDF a secuencias de duración finita, conduce a una nueva transformada, denominada Transformada Discreta de Fourier (o TDF), la cual evita los dos problemas mencionados anteriormente, y puede ser calculada numéricamente. Puesto que el cálculo numérico de la TDF para secuencias largas consume mucho tiempo se han desarrollado varios algoritmos para realizar el cálculo eficientemente, a los cuales, genéricamente, se les conoce como Transformada Rápida de Fourier (o FFT, Fast Fourier Transform). SERIES DISCRETAS DE FOURIER

Anteriormente se definió la secuencia periódica x~ (n), la cual satisface la condición

)(~)(~ kNnxnx += , ∀n, k (5.1)

en donde N es el periodo fundamental de la secuencia. Sabemos que las funciones periódicas pueden ser sintetizadas como una combinación lineal de exponenciales complejas cuyas frecuencias son múltiplos (o armónicos) de la frecuencia fundamental (la cual en nuestro caso es 2π/N). También, a partir de la periodicidad de la transformada de Fourier discreta en tiempo, en el dominio de la frecuencia, concluimos que existe un número finito de armónicos, para las frecuencias

kN

π2 , k = 0, 1, ... , N - 1

SECCIÓN

5

PDF created with pdfFactory trial version www.pdffactory.com

110

Por tanto, una secuencia periódica x~ (n) se puede expresar como

x~ (n) = ∑−

=

π1

0

2

)(~1 N

k

knN

jekX

N, n = 0, ±1, ... , (5.2)

en donde X~ (k), k = 0, ±1, ... , son llamados coeficientes de las series discretas de Fourier, los cuales están dados por

X~ (k) = ∑−

=

π−1

0

2

)(~N

n

nkN

jenx , k = 0, ±1, ... , (5.3)

Es de notar que X~ (k) es en sí misma una secuencia periódica compleja con periodo fundamental igual a N, esto es,

X~ (k + N) = X~ (k) (5.4)

El par de ecuaciones (5.3) y (5.2) se conocen como la representación de las series discretas de Fourier de

secuencias periódicas. Si hacemos WN = Nj

−2

para denotar al término de la exponencial compleja, podemos expresarlas de la siguiente forma:

X~ (k) = SDF[ ])(~ nx = ∑−

=

1

0)(~N

n

nkNWnx : Ecuación de Análisis SDF (Directa)

x~ (n) = SDFI [ ])(~ kX = ∑−

=

−1

0)(~1 N

k

nkNWkX

N : Ecuación de Síntesis SDF (Inversa)

(5.5)

A continuación hacemos uso de la siguiente secuencia periódica (en tiempo) para encontrar la representación de la SDF, y de este modo ejemplificar el uso de las expresiones obtenidas.

x~ (n) = ... ,0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, ...

Podemos observar que el periodo fundamental de la secuencia es N = 4. Por lo tanto W4 = 42π

− je = -j. Con lo

que obtenemos la siguiente expresión

X~ (k) = ∑=

3

04)(~

n

nkWnx , k = 0, ±1, ±2, ...

Por lo que:

X~ (0) = ∑ ⋅3

0

04)(~ nWnx = ∑

3

0)(~ nx = x~ (0) + x~ (1) + x~ (2) + x~ (3) = 6

PDF created with pdfFactory trial version www.pdffactory.com

111

X~ (1) = ∑3

04)(~ nWnx = ∑ −

3

0))((~ njnx = ( -2 + 2j )

X~ (2) = ∑3

0

24)(~ nWnx = ∑ −

3

0

2))((~ njnx = 2

y, X~ (3) = ∑3

0

34)(~ nWnx = ∑ −

3

0

3))((~ njnx = ( -2 - 2j )

Un análisis cuidadoso de (5.5) revela que la SDF es una representación que puede ser calculada numéricamente y, por tanto, puede ser implementada de varias formas. Por ejemplo para calcular cada muestra X~ (k) podemos implementar la sumatoria con un ciclo for ... end, y para calcular todos los coeficientes de la SDF podríamos hacer uso de otro ciclo for ... end, dando como resultado una implementación con dos ciclos for ... end anidados, lo cual es claramente ineficiente en MATLAB, donde una implementación más eficiente podría obtenerse con el uso de una multiplicación de un vector matriz para cada una de las relaciones en (5.5). Consideremos dados x~ y X~ , que denotan a los correspondientes vectores columna para los periodos primarios de las secuencias x(n) y X(k), respectivamente. Entonces (5.5) queda dada por

xX ~~NW=

(5.6)

X~1~ *NN

Wx =

en donde la matriz WN esta dada por

WN = [ ]1,0 −≤≤ Nn kkn

NW =

−−

n

NN

NN

NNN

WW

WWk

2)1()1(

)1(1

1

1111

LMOMM

LL

(5.7)

Esta matriz WN es una matriz cuadrada y es llamada matriz de la SDF. Todos estos conceptos los reunimos en la siguiente función, a la que llamamos sdf y nos permite calcular directamente los coeficientes de las series discretas de Fourier:

function [Xk] = sdf(xn,N) % Calcula los coeficientes de las series discretas de Fourier % --------------------------------------------------------------------- % [Xk] = sdf(xn,N) % Xk = Arreglo de coeficientes de la SDF sobre 0 <= k <= N-1 % xn = Un periodo de la señal periodica sobre 0 <= n <= N-1 % N = Periodo fundamental de xn % n = [0:1:N-1]; % vector renglón para n k = [0:1:N-1]; % vector renglón para k WN = exp(-j*2*pi/N); % factor Wn nk = n'*k; % crea una matriz NxN de nk valores WNnk = WN .^ nk; % matriz de la SDF Xk = xn * WNnk; % vector renglón para los coeficientes de la SDF

PDF created with pdfFactory trial version www.pdffactory.com

112

Para hacer uso de nuestra nueva función podemos resolver el ejemplo anterior, como se muestra a continuación: >> xn = [0,1,2,3]; N = 4; >> Xk = sdf(xn,N) Xk = 6.0000 -2.0000 + 2.0000i -2.0000 - 0.0000i -2.0000 - 2.0000i Por otro lado, implementamos la ecuación de síntesis mediante la función sdfi, la cual calcula la inversa de las series discretas de Fourier:

A manera de comentario, podemos decir que las dos funciones anteriores son enfoques eficientes para la implementación de (5.5) en MATLAB, aunque en el aspecto computacional no lo son necesariamente, en especial para N grandes.

Para familiarizarnos más con nuestras nuevas funciones, hacemos uso de la siguiente secuencia periódica (la cual corresponde a una onda cuadrada), para realizar su análisis:

x~ (n) = ...,2,1,0;1)1(,0

1,1 m

-NmnLmN - LmNnmN

±±=

+≤≤++≤≤

en donde N es el periodo fundamental y L/N es el ciclo de trabajo. El siguiente script nos permite observar la forma de la secuencia periódica con la que trataremos:

%Forma de la secuencia periódica >> L = 5; N = 20; >> x = [ones(1,L), zeros(1,N-L)]; >> xn = x' * ones(1,3); >> xn = (xn(:))'; >> n = -N:1:2*N-1; >> figure(1); >> subplot(2,1,1);

function [xn] = sdfi(Xk,N) % Calcula la inversa de las series discretas de Fourier % ----------------------------------------------------- % [xn] = sdfi(Xk,N) % xn = Un periodo de la señal periódica sobre 0 <= n <= N-1 % Xk = Arreglo de coeficientes de la SDF sobre 0 <= k <= N-1 % N = Periodo fundamental de Xk % n = [0:1:N-1]; % vector renglón para n k = [0:1:N-1]; % vector renglón para k WN = exp(-j*2*pi/N); % factor Wn nk = n'*k; % crea una matriz NxN de nk valores WNnk = WN .^ (-nk); % matriz de la SDFI xn = (Xk * WNnk)/N; % vector renglón para los valores de SDFI

PDF created with pdfFactory trial version www.pdffactory.com

113

-20 -10 0 10 20 30-0.5

0

0.5

1

1.5

n

xtild

e(n)

Tres periodos de xtilde(n)

>> stem(n,xn); xlabel('n'); ylabel('xtilde(n)') >> title('Tres periodos de xtilde(n)') >> axis([-N,2*N-1,-0.5,1.5]) >> xaux = [-N:2*N-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La gráfica es la siguiente:

a) La expresión para | X~ (k) |, en términos de L y N, resulta del uso de la ecuación (5.3),

X~ (k) =

nL

n

kN

jL

n

nkN

jN

n

nkN

jeeenx ∑∑∑

=

π−−

=

π−−

=

π−

==

1

0

21

0

21

0

2

)(~

=

−−

±±=

π−

π−

contrario lo de ee

N N k L

Nkj

NLkj

,11

...,2,,0,

/2

/2

Lo cual resulta de la formula para una serie geométrica. Ésta última expresión puede simplificarse a

NkjNkj

NLkjNLkj

Nkj

NLkj

Nkj

NLkj

eeee

ee

ee

//

//

/

/

/2

/2

11

π−π

π−π

π−

π−

π−

π−

−−

=−−

= )/()/(/)1(

NksinNkLsine NkLj

ππ−π−

por lo que la magnitud de X~ (k) queda, finalmente, expresada por

ππ

±±=

=contrario lo de

NksinNkLsin

N N k L kX

,)/()/(

...,2,,0,)(~

PDF created with pdfFactory trial version www.pdffactory.com

114

b) Consideremos graficar la magnitud | X~ (k) | para L =5, N =20; L =5, N =40; L =5, N =60; y

L =7, N =60, la misma señal cuadrada con cuatro diferentes ciclos de trabajo. El código es el siguiente:

% Parte (b.1) >> L = 5; N = 20; >> xn = [ones(1,L), zeros(1,N-L)]; >> Xk = sdf(xn,N); >> magXk = abs([Xk(N/2+1:N) Xk(1:N/2+1)]); >> k = [-N/2:N/2]; >> subplot(2,2,1); stem(k,magXk); axis([-N/2,N/2,-0.5,5.5]) >> xlabel('k','FontSize',8); ylabel('Xtilde(k)') >> title('L=5, N=20') % % Parte (b.2) >> L = 5; N = 40; >> xn = [ones(1,L), zeros(1,N-L)]; >> Xk = sdf(xn,N); >> magXk = abs([Xk(N/2+1:N) Xk(1:N/2+1)]); >> k = [-N/2:N/2]; >> subplot(2,2,2); stem(k,magXk); axis([-N/2,N/2,-0.5,5.5]) >> xlabel('k','FontSize',8); ylabel('Xtilde(k)') >> title('L=5, N=40') % % Parte (b.3) >> L = 5; N = 60; >> xn = [ones(1,L), zeros(1,N-L)]; >> Xk = sdf(xn,N); >> magXk = abs([Xk(N/2+1:N) Xk(1:N/2+1)]); >> k = [-N/2:N/2]; >> subplot(2,2,3); stem(k,magXk); axis([-N/2,N/2,-0.5,5.5]) >> xlabel('k','FontSize',8); ylabel('Xtilde(k)') >> title('L=5, N=60') % % Parte (b.4) >> L = 7; N = 60; >> xn = [ones(1,L), zeros(1,N-L)]; >> Xk = sdf(xn,N); >> magXk = abs([Xk(N/2+1:N) Xk(1:N/2+1)]); >> k = [-N/2:N/2]; >> subplot(2,2,4); stem(k,magXk); axis([-N/2,N/2,-0.5,7.5]) >> xlabel('k','FontSize',8); ylabel('Xtilde(k)') >> title('L=7, N=60') % >> toptitle('<< SDF para distintos valores de L y N >>');

Las gráficas resultantes se muestran a continuación:

PDF created with pdfFactory trial version www.pdffactory.com

115

Ya que X~ (k) es periódica, las gráficas son mostradas de -N/2 a N/2.

Podemos hacer varias observaciones interesantes, a partir de las cuatro gráficas anteriores: en primer lugar, los coeficientes de la SDF de la onda cuadrada lucen como funciones "sinc"; en segundo lugar, observamos que la amplitud en k =0 es igual a L, mientras que los ceros de las funciones se encuentran en múltiplos de N/L, los cuales corresponden al reciproco del ciclo de trabajo para cada uno de los casos. Relación con la Transformada-z Consideremos una secuencia x(n) de duración finita N, tal que

x(n) = −≤≤

contrario lo de Nn cero No

,010,

, (5.8)

podemos encontrar su transformada-z:

X(z) = ∑−

=

−1

0)(

N

n

nznx (5.9)

Sí construimos una secuencia periódica x~ (n) , repitiendo periódicamente x(n) con un periodo N, tenemos que

x(n) = −≤≤

contrario lo de Nn nx

,010),(~

, (5.10)

por lo que la SDF de x~ (n) queda dada por

-10 -5 0 5 10

0

1

2

3

4

5

k

Xtild

e(k)

L=5, N=20

-20 -10 0 10 20

0

1

2

3

4

5

k

Xtild

e(k)

L=5, N=40

-20 0 20

0

1

23

4

5

k

Xtild

e(k)

L=5, N=60

-20 0 200

2

4

6

kXt

ilde(

k)

L=7, N=60

<< SDF para distintos valores de L y N >>

PDF created with pdfFactory trial version www.pdffactory.com

116

X~ (k) =

nN

n

kN

jN

n

nkN

jenxenx

−−

=

π−

=

π−

∑∑

=

1

0

21

0

2

)()(~ (5.11)

y al comparar con (5.9), tenemos que

X~ (k) = k

Nj

ez

zX π

=2)( (5.12)

lo cual significa que la SDF X~ (k) representa a N muestras de la transformada-z X(z), uniformemente espaciadas alrededor del círculo unitario. Relación con la TFDT Ya que x(n) en (5.8) es de duración finita y de longitud N, y también es absolutamente sumable, entonces su TFDT existe, y esta dada por:

X(ejω) = ∑∑−

=

ω−−

=

ω− =1

0

1

0)(~)(

N

n

njN

n

nj enxenx (5.13)

Comparando (5.13) con (5.11), tenemos que

X~ (k) = k

N

jeX π=ω

ω2)( (5.14)

y asumiendo que

ω1 = Nπ2

y ωk = Nπ2

k = kω1

entonces la SDF X(k) = )()( 1ωω = jkj eXeX k , lo que significa que la SDF es obtenida por el muestreo

uniforme de la TFDT en los intervalos ω1 = N

π2. A partir de (5.12) y (5.14), observamos que la representación

de la SDF nos proporciona un mecanismo de muestreo en el dominio de la frecuencia, el cual, en principio, es

similar al muestreo en el dominio del tiempo. En este caso, ω1 = N

π2 es el intervalo de muestreo en el

dominio de la frecuencia, también llamado resolución de frecuencia debido a que es un indicador de que tan próximas están las muestras en el dominio de la frecuencia. Para visualizar mejor estas ideas, consideremos la siguiente secuencia:

x(n) = 0, 1, 2, 3 ↑

PDF created with pdfFactory trial version www.pdffactory.com

117

la cual es una secuencia no periódica y de duración finita, y para la que deseamos calcular su transformada de Fourier discreta en tiempo, X(ejω), como se muestra a continuación:

X(ejω) = ω−ω−ω−∞

−∞=

ω− ++=∑ 32 32)( jjj

n

nj eeeenx

Sí ahora muestreamos a X(ejω) en kω1 = 4

2πk , para valores de k = 0, 1, 2, 3, y usamos

X~ (k) = ∑=

3

04)(~

n

nkWnx , k = 0, ±1, ±2, ...

Los resultados serán: X(ej0) = 1 + 2 + 3 = 6 = X~ ( 0 ) X(ej2π / 4) = e-j2π / 4 + 2e-j4π / 4 + 3e-j6π / 4 = -2 + 2j = X~ ( 1 ) X(ej4π / 4) = e-j4π / 4 + 2e-j8π / 4 + 3e-j12π / 4 = 2 = X~ ( 2 ) X(ej6π / 4) = e-j6π / 4 + 2e-j12π / 4 + 3e-j18π / 4 = -2 - 2j = X~ ( 3 ), como era de esperarse. MUESTREO Y RECONSTRUCCION EN EL DOMINIO - Z

Dada la secuencia arbitraria x(n) absolutamente sumable, la cual puede ser de duración finita; tenemos que su transformada-z esta dada por:

X(z) = ∑∞

−∞=

m

mzmx )(

donde se asume que la RDC de X(z) incluye al círculo unitario. Podemos muestrear a X(z) sobre el círculo unitario en puntos separados equidistantemente en un ángulo de ω1 = 2π /N, y llamarla secuencia SDF,

X~ (k) =k

Nj

ezzX π

=2)( , k = 0, ±1, ±2, ... (5.15)

= ∑∑∞

−∞=

−∞=

π−

=m

kmN

m

kmN

jWmxemx )()(

2

la cual es periódica con periodo N. Finalmente, podemos calcular la SDFI de X~ (k),

PDF created with pdfFactory trial version www.pdffactory.com

118

x~ (n) = SDFI [ ])(~ kX

la cual también es periódica con periodo N. Claramente, debe haber una relación entre la x(n) arbitraria y la x~ (n) periódica, lo cual es una cuestión importante. Además, debido a que debemos tratar con un número finito de muestras de X(z) alrededor del círculo unitario, debemos conocer el efecto de tal muestreo sobre la secuencia en el dominio del tiempo, lo cual es fácil de obtener mediante el siguiente procedimiento:

x~ (n) = ∑−

=

−1

0)(~1 N

k

knNWkX

N ( de (5.2) )

= ∑ ∑−

=

−∞

−∞=

1

0)(1 N

k

knN

m

kmN WWmx

N ( de (5.15) )

ó

x~ (n) = ∑∑∑∑∞

−∞=

−∞=

−−−

−∞=

−−δ=

=−=

rm

Nmnk

Nm

rnmn mx

contrario ol de rNmn

WN

mx )()(

,0,1

1)(1

0

)(

44 344 21

= ∑ ∑∞

−∞=

−∞=

δr m

rn)-m-(nx(m)

ó

x~ (n) = ∑∞

−∞=

−r

rNnx )( = ... + x(n + N) + x(n) + x(n - N) + ... (5.16)

lo cual significa que cuando muestreamos a X(z) sobre el círculo unitario, obtenemos una secuencia periódica en el dominio del tiempo, la cual es una combinación lineal de la x(n) original y sus infinitas replicas, cada una desplazada por múltiplos de ± N. Para ejemplificar este punto nos valemos de la siguiente secuencia:

x(n) = (0.7)n u(n)

para la cual pretendemos muestrear su transformada-z sobre el círculo unitario con N = 5, 10, 20, 50, y estudiar sus efectos en el dominio del tiempo. Tomando como base la tabla de transformadas vista en la sección anterior tenemos que la transformada-z de x(n) es:

X(z) = 7.07.01

11 −

=− − z

zz

, |z| > 0.7

Podemos usar MATLAB para implementar la operación de muestreo

X~ (k) = NkjezzX /2)( π=, k = 0, ±1, ±2, ...

PDF created with pdfFactory trial version www.pdffactory.com

119

para posteriormente calcular la inversa de la SDF, y así determinar la secuencia correspondiente en el dominio del tiempo. El código a emplear es el siguiente:

>> subplot(1,1,1) % >> N = 5; >> k = 0:1:N-1; %índice de las muestras >> wk = 2*pi*k/N; >> zk = exp(j*wk); %muestras de z >> Xk = (zk)./(zk-0.7); %SDF como muestras de X(z) >> xn = real(sdfi(Xk,N)); %SDFI >> xtilde = xn'* ones(1,8); xtilde = (xtilde(:))'; %Secuencia periódica >> subplot(2,2,1); stem(0:39,xtilde);axis([0,40,-0.1,1.5]) >> ylabel('xtilde(n)'); title('N=5') % >> N = 10; >> k = 0:1:N-1; >> wk = 2*pi*k/N; >> zk = exp(j*wk); >> Xk = (zk)./(zk-0.7); >> xn = real(sdfi(Xk,N)); >> xtilde = xn'* ones(1,4); xtilde = (xtilde(:))'; >> subplot(2,2,2); stem(0:39,xtilde);axis([0,40,-0.1,1.5]) >> ylabel('xtilde(n)'); title('N=10') % >> N = 20; >> k = 0:1:N-1; >> wk = 2*pi*k/N; >> zk = exp(j*wk); >> Xk = (zk)./(zk-0.7); >> xn = real(sdfi(Xk,N)); >> xtilde = xn'* ones(1,2); xtilde = (xtilde(:))'; >> subplot(2,2,3); stem(0:39,xtilde);axis([0,40,-0.1,1.5]) >> xlabel('n'); ylabel('xtilde(n)'); title('N=20') % >> N = 40; >> k = 0:1:N-1; >> wk = 2*pi*k/N; >> zk = exp(j*wk); >> Xk = (zk)./(zk-0.7); >> xn = real(sdfi(Xk,N)); >> subplot(2,2,4); stem(0:39,xn);axis([0,40,-0.1,1.5]) >> xlabel('n'); ylabel('xtilde(n)'); title('N=40') % >> toptitle('<< Secuencias en el dominio del tiempo >>');

PDF created with pdfFactory trial version www.pdffactory.com

120

Las gráficas resultantes se muestran a continuación, en las cuales claramente se muestra el traslapamiento en el dominio del tiempo, especialmente para N=5 y N=10. Para valores grandes de N, el extremo terminal de x(n) es suficientemente pequeño como para no observar una cantidad apreciable de traslapamiento; desde luego, esta información es de gran utilidad para el truncamiento de una secuencia de duración infinita antes de tomar su transformada. Regresemos a nuestra discusión y observemos que si x(n) =0 para n < 0 y n ≥ N en (5.16), entonces no habrá traslapamiento en el dominio del tiempo, por lo que seríamos capaces de reconocer y recobrar a x(n) a partir de x~ (n), esto es,

x(n) = x~ (n) para 0 ≤ n ≤ (N -1)

ó

x(n) = x~ (n) RN(n) = x~ (n) ≤≤

contrario lo de Nn

,00,1

,

donde RN(n) es una ventana rectangular de longitud N. Esto permite enunciar el siguiente teorema: Muestreo en Frecuencia Si x(n) es una secuencia limitada en tiempo (de duración finita) para [0, N-1], entonces N muestras de X(z) sobre el círculo unitario determinan a X(z) para toda z. Para ejemplificar el muestreo y la reconstrucción en el dominio-z haremos uso de la secuencia

x1(n) = 6, 5, 4, 3, 2, 1 ↑ cuya TFDT, X1(ejω), es muestreada en

0 10 20 30 400

0.5

1

1.5xt

ilde(

n)N=5

0 10 20 30 400

0.5

1

1.5

xtild

e(n)

N=10

0 10 20 30 400

0.5

1

1.5

n

xtild

e(n)

N=20

0 10 20 30 400

0.5

1

1.5

n

xtild

e(n)

N=40

<< Secuencias en el dominio del tiempo >>

PDF created with pdfFactory trial version www.pdffactory.com

121

ωk = 4

2 kπ, k= 0, ±1, ±2, ±3, ...

para obtener una secuencia SDF, X~ 2(k). Podemos determinar la secuencia x~ 2(n), la cual corresponde a la SDF inversa de X~ 2(k), y obtener el resultado (sin calcular la TFDT, la SDF, o la SDF inversa) simplemente empleando la fórmula (5.16), por lo que:

2~x (n) = ∑

−∞=

−r

rnx )4(1

De esta manera tenemos que x(4) se desdobla en x(0), y x(5) lo hace en x(1). Por lo tanto,

2~x (n) = ..., 8, 6, 4, 3, 8, 6, 4, 3, 8, 6, 4, 3, ...

Fórmula de Reconstrucción Si asumimos una x(n) limitada en tiempo para [0, N-1], y usamos el teorema de muestreo en frecuencia, es posible recobrar la transformada-z X(z) a partir de sus muestras X~ (k). Esto se expresa como X(z) = Z[x(n)] = Z[ x~ (n) RN(n)]

= Z[SDFI 321)(

)(~

zX de muestras

kX RN(n)]

Este planteamiento da lugar a la fórmula de reconstrucción en el dominio-z.

X(z) = ∑∑−

−−

− =1

0

1

0)(~)(

Nn

Nn znxznx

= ∑ ∑−

−−

1

0

1

0)(~1N

nN

knN zWkX

N

= ∑ ∑−

=

−−

1

0

1

0)(~1 N

k

nN

knN zWkX

N

= ∑ ∑−

=

−−

1

0

11

0)()(~1 N

k

nN

kN zWkX

N

= ∑−

=−−

−−

−−1

011

1)(~1 N

kk

N

NkNN

zWzW

kXN

puesto que 1=−kN

NW , tenemos que

PDF created with pdfFactory trial version www.pdffactory.com

122

X(z) = ∑−

=−−

−− 1

011

)(~1 N

kk

N

N

zWkX

Nz

(5.17)

Fórmula de interpolación para la TFDT La fórmula de reconstrucción en (5.17) puede ser especialmente trabajada para la transformada de Fourier discreta en tiempo, evaluándola sobre el círculo unitario z = ejω , con lo que obtenemos

X(ejω) = ∑−

=ω−π

ω−

−− 1

0/21)(~1 N

kjNkj

Nj

eekX

Ne

= ∑−

=ω−π

ω−

−−1

0/21

1)(~N

kjNkj

Nj

eeNekX

si consideramos que

−=

−−

π−ω−

π−ω−

ω−π

ω−

)2(

)2(

/2

1

11

1

Nkj

NN

kj

jNkj

Nj

eN

eeeN

e

=

π

−ω

π

−ω

π−ω−

π−ω−

212

22

)2(21

)2(2

Nksin N

NN

ksin

e

e

Nkj

NkNj

y asumida la interpolación polinomial siguiente

)2

1(

)2

(

)2

()(

−ω−

ω

ω

=ωΦNj

esin N

Nsin (5.18)

Entonces

X(ejω) = ∑−

=

π

−ωΦ1

0

2)(~N

k NkkX (5.19)

Ésta es la fórmula de interpolación TFDT para reconstruir X(ejω) a partir de sus muestras X~ (k). Ya que Φ(0)=1, tenemos que X(ej2πk/N) = X~ (k), lo que significa que la interpolación es exacta en los puntos de muestreo. Ahora si recordamos la fórmula de interpolación en el dominio del tiempo (3.33) para señales analógicas:

xa(t) = [ ]∑∞

−∞=

−n

ss nTtFsincnx )()( (5.20)

PDF created with pdfFactory trial version www.pdffactory.com

123

y la comparamos con la fórmula de interpolación para la TFDT (5.19) observamos que son similares. Sin embargo, existen algunas diferencias: la primera de ellas es que la fórmula en el dominio del tiempo (5.20) reconstruye una señal analógica arbitraria no periódica, mientras que la fórmula en el dominio de la frecuencia (5.19) nos proporciona una forma de onda periódica. La segunda diferencia es que, en (5.19) usamos una función de interpolación de la forma

sinx NNxsin )(

en lugar de nuestra ya conocida función sinc, de la forma x

sinx. Por esta razón, la función Φ(ω) es referida,

algunas veces, como función sinc digital, misma que es periódica. La fórmula de interpolación (5.19) sufre la misma suerte que (5.20) cuando es implementarla en la práctica, ya que tenemos que generar varias interpolaciones polinomiales (5.18) y realizar sus combinaciones lineales para obtener la transformada de Fourier discreta en tiempo, X(ejω), a partir de sus muestras calculadas, X~ (k). En MATLAB, tendríamos que evaluar (5.19) sobre una fina rejilla en el intervalo 0 ≤ ω ≤ 2π, lo cual es claramente un enfoque ineficiente. Otra forma es usar la función de interpolación mediante spline cúbico (la cual se empleó para implementar (5.20) en la sección 3) como una aproximación eficiente a (5.19). Sin embargo, existe un método más eficiente de proceder basado en la TDF, por lo que es importante repasarla.

TRANSFORMADA DISCRETA DE FOURIER

Las series discretas de Fourier nos proporcionan un mecanismo para calcular numéricamente la transformada de Fourier discreta en tiempo, además de que su uso nos alerta de un posible problema de traslapamiento en el dominio del tiempo. Los resultados matemáticos dictan que el muestreo de la transformada de Fourier discreta en tiempo resulta en una secuencia periódica x~ (n), aunque la mayoría de las señales en la práctica son no periódicas. Ahora la cuestión es cómo podemos desarrollar un método que nos permita calcular numéricamente la representación de Fourier para dichas señales. Teóricamente, podemos considerar este problema definiendo una señal periódica cuyo periódo primario corresponde al de la señal de duración finita y, entonces, usar la SDF sobre esta señal periódica. Con esto, prácticamente, se define una nueva transformada denominada Transformada Discreta de Fourier (TDF), la cual corresponde a un periodo primario de la SDF. A continuación describimos el procedimiento para encontrar la TDF de una secuencia: En primer lugar, definimos una secuencia x(n), de duración finita, constituida por N muestras sobre 0 ≤ n ≤ N-1, quedando como una secuencia de N-puntos. A continuación, asumimos a x~ (n) como la señal periódica de periodo N, creada con los N-puntos de la secuencia x(n); entonces de (5.19)

x~ (n) = ∑∞

−∞=

+r

rNnx )(

Si empleamos la operación modulo-N sobre el argumento de esta expresión, podemos simplificarla a:

PDF created with pdfFactory trial version www.pdffactory.com

124

x~ (n) = x(n mod N) (5.21)

Una forma sencilla de interpretar esta operación es la siguiente: si el argumento n esta entre 0 y N-1, entonces la expresión se queda tal cual; de lo contrario se suman o restan múltiplos de N, hasta que el resultado quede entre 0 y N-1, debiendo notarse que (5.21) es valida sólo si la longitud de x(n) es menor o igual que N, por lo que se usará la siguiente notación para denotar la operación modulo-N.

x((n))N = x(n mod N) (5.22) De este modo, las relaciones entre x(n) y x~ (n) son:

x~ (n) = x((n))N (extensión periódica) (5.23)

x(n) = x~ (n)RN(n) (operación ventana) Con la ayuda de la función rem(n, N) de MATLAB, la cual obtiene el residuo de dividir n entre N, podemos implementar la operación modulo-N cuando n ≥ 0. (Cuando n < 0, requerimos modificar el resultado para obtener los valores correctos ). El código es el siguiente: En esta función "n" puede ser cualquier arreglo de enteros, y el arreglo "m" es en donde se encontrarán los correspondientes valores de la operación modulo-N. Con base en el teorema de muestreo en frecuencia, concluimos que N muestras equidistantes de la transformada de Fourier discreta en tiempo X(ejω) de la secuencia x(n) pueden reconstruir de manera única a X(ejω); estas N muestras alrededor del círculo unitario son llamadas coeficientes de la transformada discreta de Fourier. Ahora, sí X~ (k) = SDF x~ (n), la cual es una secuencia periódica (y por lo tanto de duración infinita), tenemos que su periodo primario constituye la transformada discreta de Fourier, que es de duración finita. Todos estos puntos son clarificados en las siguientes definiciones: En primer lugar tenemos que la transformada discreta de Fourier de una secuencia con N-puntos, esta dada por

X(k) = TDF[x(n)] = −≤≤

forma otra de Nk kX

,010),(~

= )(~ kX RN(k)

ó

X(k) = ∑−

=

1

0)(

N

n

nkNWnx , 0 ≤ k ≤ N-1 (5.24)

function m = mod(n,N) % Calcula m = (n mod N) % ---------------------------- % m = mod(n,N) m = rem(n,N); m = m+N; m = rem(m,N);

PDF created with pdfFactory trial version www.pdffactory.com

125

Aquí, podemos notar que la TDF X(k) es también una secuencia con N-puntos, es decir, no esta definida fuera del rango 0 ≤ k ≤ N-1. Similarmente, de (5.23) tenemos que X(k) = X((k))N en donde, fuera del intervalo 0 ≤ k ≤ N-1 sólo la SDF X~ (k) está definida, lo cual es debido a que naturalmente X~ (k) es la extensión periódica de X(k). Finalmente, X(k) = X(k) RN (k) lo cual quiere decir que la TDF X(k) es el intervalo primario de X~ (k). En segundo lugar tenemos que la transformada discreta de Fourier inversa de una TDF X(k) con N-puntos está dada por

x(n) = TDFI[X(k)] = x~ (n) RN(n)

ó

x(n) = ∑−

=

−1

0)(1 N

k

knNWkX

N, 0 ≤ n ≤ N-1 (5.25)

en donde, una vez más, x(n) no esta definida fuera de 0 ≤ n ≤ N-1, y su extensión fuera de éste rango es x~ (n). De las discusiones anteriores observamos que la SDF es prácticamente equivalente a la TDF cuando 0 ≤ n ≤ N-1. Por lo tanto, la implementación de la TDF puede ser hecha de modo similar. Si x(n) y X(k) son organizadas como vectores columna x y X, respectivamente, entonces de (5.24) y (5.25) tenemos

X = WN x

x = XW *1NN

(5.26)

en donde WN es la matriz definida en (5.7), a la que denominaremos matriz de la TDF . En consecuencia, las funciones anteriores, sdf y sdfi, que implementamos en MATLAB las renombraremos como tdf y tdfi, para con ellas realizar los cálculos de la transformada discreta de Fourier. Los códigos son los siguientes:

function [Xk] = tdf(xn,N) % Calcula la Transformada Discreta de Fourier % ------------------------------------------------------ % [Xk] = tdf(xn,N) % Xk = Arreglo de coeficientes de la TDF sobre 0 <= k <= N-1 % xn = Secuencia de duración finita con N-puntos % N = Longitud de la TDF % n = [0:1:N-1]; % vector renglón para n k = [0:1:N-1]; % vector renglón para k WN = exp(-j*2*pi/N); % factor Wn nk = n'*k; % Crea una matriz NxN con nk valores WNnk = WN .^ nk; % matriz de la TDF Xk = xn * WNnk; % vector renglón para los coeficientes de la TDF

PDF created with pdfFactory trial version www.pdffactory.com

126

Para poner en práctica estas nuevas funciones, haremos uso de la siguiente secuencia x(n) con 4-puntos, dada por:

x(n) = ≤≤

forma otra de n

,030,1

a) Procedemos a calcular la transformada de Fourier discreta en tiempo X(ejω) para, posteriormente, graficar

su magnitud y fase. Así, tenemos que la transformada de Fourier discreta en tiempo esta dada por

X(ejω) = ∑ ω−3

0)( njenx = 1 + e-jω + e-j2ω + e-j3ω

= 2/34

)2/()2(

11 ω−

ω−

ω−

ωω

=−− j

j

j

esinsin

ee

por lo tanto

| X(ejω) | = )2/(

)2(ω

ωsinsin

y

∠ X(ejω) =

ωπ±

ω−

ωω−

0)2/(

)2(,2

3

0)2/(

)2(,2

3

sinsin cuando

sinsin cuando

el código que nos permite obtener las gráficas es el siguiente:

function [xn] = tdfi(Xk,N) % Calcula la Inversa de la Transformada Discreta de Fourier % ---------------------------------------------------------------------- % [xn] = tdfi(Xk,N) % xn = secuencia con N-puntos sobre 0 <= n <= N-1 % Xk = Arreglo de coeficientes de la TDF sobre 0 <= k <= N-1 % N = Longitud de la TDF % n = [0:1:N-1]; % vector renglón para n k = [0:1:N-1]; % vector renglón para k WN = exp(-j*2*pi/N); % factor Wn nk = n'*k; % Crea una matriz NxN con nk valores WNnk = WN .^ (-nk); % matriz de la TDFI xn = (Xk * WNnk)/N; % vector renglón para los valores de la TDFI

PDF created with pdfFactory trial version www.pdffactory.com

127

>> x = [1,1,1,1]; >> figure(1);subplot(1,1,1); % a) DTFT >> w = [0:1:500]*2*pi/500; >> [H] = freqz(x,1,w); >> magH = abs(H); phaH = angle(H); phaH(126)=-47.5841*pi/180; >> subplot(2,1,1); plot(w/pi,magH); grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('|X|'); title('Magnitud de la TFDT') >> subplot(2,1,2); plot(w/pi,phaH/pi*180); grid >> xlabel('Frecuencia en unidades de \pi', 'FontSize',8); >> ylabel('Grados'); title('Fase de la TFDT') Las gráficas resultantes son:

b) Ahora, determinamos la TDF de la secuencia x(n), donde los cuatro puntos de la transformada los

representamos por X4(k). Entonces

X4(k) = ∑=

3

04)(

n

nkWnx ; k = 0, 1, 2, 3; W4 = e-j2π/4 = -j

El código que nos permite calcular la TDF es el siguiente:

>> x = [1,1,1,1]; N = 4; >> X = tdf(x,N); >> magX = abs(X), phaX = angle(X)*180/pi magX =

4.0000 0.0000 0.0000 0.0000 phaX =

0 -129.6000 -90.0000 -45.3495

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

1

2

3

4

Frecuencia en unidades de π

|X|

Magnitud de la TFDT

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2-200

-100

0

100

200

Frecuencia en unidades de π

Gra

dos

Fase de la TFDT

PDF created with pdfFactory trial version www.pdffactory.com

128

con esto tenemos que

X4(k) = 4, 0, 0, 0

↑ Aquí debemos notar que cuando la magnitud de la muestra es cero, entonces el ángulo correspondiente es distinto de cero, lo cual es debido al algoritmo particular que usa MATLAB para calcular la parte del ángulo, aunque generalmente estos ángulos podrían ser ignorados. El siguiente código nos permite graficar los valores de la TDF .

>> N = 4; w1 = 2*pi/N; k = 0:N-1; >> X = tdf(x,N); >> magX = abs(X), phaX = angle(X)*180/pi >> subplot(2,1,1);plot(w*N/(2*pi),magH,'--'); >> xlabel('k','FontSize',8); >> xaux = [0:4]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,4.1,-1,5]); hold on >> stem(k,magX,'r'); >> ylabel('|X(k)|'); title('Magnitud de la TDF: N=4') >> hold off >> subplot(2,1,2);plot(w*N/(2*pi),phaH*180/pi,'--'); >> xaux = [0:4]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,4.1,-200,200]); hold on >> stem(k,phaX,'r'); >> xlabel('k','FontSize',8); >> ylabel('Grados'); title('Fase de la TDF: N=4') Las gráficas son las siguientes:

0 0.5 1 1.5 2 2.5 3 3.5 4-1

0

1

2

3

4

5

k

|X(k

)|

Magnitud de la TDF: N=4

0 0.5 1 1.5 2 2.5 3 3.5 4-200

-100

0

100

200

k

Gra

dos

Fase de la TDF: N=4

PDF created with pdfFactory trial version www.pdffactory.com

129

Las líneas discontinuas en las gráficas representan a X(ejω) para propósitos de comparación. Además podemos observar que X4 proporciona correctamente 4 muestras de X(ejω), pero ésta tiene solamente una muestra distinta de cero lo cual pareciera ser sorprendente; pero si nos fijamos en los 4 puntos de x(n), observamos que todos son 1, con lo que concluimos que su extensión periódica es

x~ (n) = 1, ∀n

la cual representa una señal constante. Esto es reflejado por la TDF X4(k), la cual tiene una muestra distinta de cero en k=0 (o ω=0) y no tiene valores en otras frecuencias. A continuación mostramos cómo podemos obtener una TFDT X(ejω) con mayor número de muestras. En primer lugar, podríamos muestrear en más frecuencias; es decir, podríamos incrementar N; por ejemplo, podríamos tomar dos veces el número de puntos, o sea N=8, en lugar de 4. Con esto podemos tratar a x(n) como una secuencia de 8 –puntos, agregando 4 ceros, como se muestra a continuación:

x(n) = 1, 1, 1, 1, 0, 0, 0, 0 ↑ Esta operación de agregar ceros es llamada operación de relleno y es muy importante, debido a que es necesaria en la práctica para obtener un espectro de mayor definición, como veremos a continuación. Dada la TDF X8(k) con 8-puntos, entonces

X8(k) = ∑=

7

08)(

n

nkWnx ; k = 0, 1, . . . , 7; W8 = e-jπ/4

En este caso la resolución de frecuencia es ω1 = 2π /8 = π /4. El código con el que pudimos determinar la magnitud y fase de X8(k) es el siguiente:

>> x = [1,1,1,1]; >> x = [x, zeros(1,4)]; N = 8; >> X = tdf(x,N); >> magX = abs(X), faseX = angle(X)*180/pi magX = 4.0000 2.6131 0.0000 1.0824 0.0000 1.0824 0.0000 2.6131 faseX = 0 -67.5000 -129.6000 -22.5000 -90.0000 22.5000 -45.3495 67.5000

Por lo tanto

X8(k) = 4, 2.6131e-j67.5º, 0, 1.0824e-j22.5º, 0, 1.0824ej22.5º, 0, 2.6131ej67.5º El siguiente código nos permitió construir las gráficas de magnitud y fase.

>> x = [1,1,1,1]; % % TFDT para cuestiones de comparación >> w = [0:1:500]*2*pi/500; >> [H] = freqz(x,1,w); >> magH = abs(H); faseH = angle(H); faseH(126)=-47.5841*pi/180; % % i) TDF con 8-puntos >> figure(1);

PDF created with pdfFactory trial version www.pdffactory.com

130

>> x = [x, zeros(1,4)];N = 8; >> X = tdf(x,N); >> magX = abs(X), faseX = angle(X)*180/pi >> w1 = 2*pi/N; k = 0:N-1; >> subplot(2,1,1);plot(w*N/(2*pi),magH,'--'); >> xaux = [0:8]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,8.1,-1,5]); hold on >> stem(k,magX,'r'); >> xlabel('k','FontSize',8); ylabel('|X(k)|'); title('Magnitud de la TDF: N=8') >> hold off >> subplot(2,1,2);plot(w*N/(2*pi),faseH*180/pi,'--'); >> xaux = [0:8]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,8.1,-200,200]); hold on >> stem(k,faseX,'r'); >> xlabel('k','FontSize',8); ylabel('Grados'); title('Fase de la TDF: N=8');

Las gráficas son las siguientes: Ahora, si nos vamos más lejos y tratamos a x(n) como una secuencia con 16-puntos, agregando 12 ceros, como se muestra

x(n) = 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ↑ entonces la resolución de frecuencia es ω1 = 2π /16 = π /8 y W16 = e-jπ/ 8 . Por lo tanto obtenemos un espectro todavía más definido, con muestras espectrales separadas por π /8. El siguiente código nos permite observar la forma de X16(k).

0 1 2 3 4 5 6 7 8-1

0

1

2

3

4

5

k

|X(k

)|

Magnitud de la TDF: N=8

0 1 2 3 4 5 6 7 8-200

-100

0

100

200

k

Gra

dos

Fase de la TDF: N=8

PDF created with pdfFactory trial version www.pdffactory.com

131

>> x = [1,1,1,1]; % % TFDT para cuestiones de comparación >> w = [0:1:500]*2*pi/500; >> [H] = freqz(x,1,w); >> magH = abs(H); faseH = angle(H); faseH(126)=-47.5841*pi/180; % % ii) TDF con 16-puntos >> figure(2); >> subplot(1,1,1) >> N = 16; w1 = 2*pi/N; k = 0:N-1; >> x = [x, zeros(1,8)]; >> X = tdf(x,N); >> magX = abs(X), faseX = angle(X)*180/pi >> subplot(2,1,1);plot(w*N/(2*pi),magH,'--'); >> xaux = [0:16]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,16.1,-1,5]); hold on >> stem(k,magX,'r'); >> xlabel('k','FontSize',8); ylabel('|X(k)|'); title('Magnitud de la TDF: N=16') >> hold off >> subplot(2,1,2);plot(w*N/(2*pi),faseH*180/pi,'--'); >> xaux = [0:16]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> axis([-0.1,16.1,-200,200]); hold on >> stem(k,faseX,'r'); >> xlabel('k','FontSize',8); ylabel('Grados'); title('Fase de la TDF: N=16')

y las gráficas son:

0 2 4 6 8 10 12 14 16-1

0

1

2

3

4

5

k

|X(k

)|

Magnitud de la TDF: N=16

0 2 4 6 8 10 12 14 16-200

-100

0

100

200

k

Gra

dos

Fase de la TDF: N=16

PDF created with pdfFactory trial version www.pdffactory.com

132

En base a los dos ejemplos anteriores podemos decir que: 1. El rellenado con ceros es una operación en la cual más ceros son agregados a la secuencia original, dando

como resultado una TDF más larga, la cual proporciona un espacio entre muestras más cerrado en la transformada de Fourier discreta en tiempo. Como puede observarse, el rellenado con ceros es implementado usando la función zeros de MATLAB.

2. En el ejemplo con N=4, tuvimos que graficar la transformada de Fourier discreta en tiempo X(ejω) de x(n)

debido a que, x(n) tuvo solamente 4 muestras distintas de cero. También podríamos haber usado la fórmula de interpolación (5.19) sobre X4(k) para obtener X(ejω). Sin embargo, en la práctica, es más fácil obtener X8(k) y X16(k), y así sucesivamente, simplemente sustituyendo los valores de X(ejω) en lugar de usar la fórmula de interpolación.

3. El rellenado con ceros nos entrega un espectro de mayor definición (más frecuencias), además de que

proporciona una mejor visualización de las gráficas. 4. Para conseguir un espectro de alta resolución, es necesario obtener más datos a partir del experimento u

observaciones. Para ilustrar la diferencia entre el espectro de alta densidad y el espectro de alta resolución nos valemos de la siguiente secuencia:

x(n) = cos(0.48πn) + cos(0.52πn) Ahora determinaremos su espectro basado en un número finito de muestras. a) En este punto pretendemos determinar y graficar la transformada de Fourier discreta en tiempo de x(n)

para 0 ≤ n ≤ 10. En este caso y en los posteriores podríamos determinar analíticamente la transformada de Fourier discreta en tiempo, pero MATLAB es un buen vehículo para estudiar estos problemas. A si que, en primer lugar determinaremos la TDF para los 10 puntos de x(n), para así obtener una estimación de su transformada de Fourier discreta en tiempo. El código es el siguiente:

>> figure(1); >> n=[0:1:99]; >> x=cos(0.48*pi*n)+cos(0.52*pi*n); >> n1=[0:1:9];y1=x(1:1:10); >> subplot(2,1,1);stem(n1,y1);title('señal x(n), 0 <= n <= 9'); >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8) >> axis([0,10,-2.5,2.5]) >> Y1=tdf(y1,10);magY1=abs(Y1(1:1:6)); >> k1=0:1:5;w1=2*pi/10*k1; >> subplot(2,1,2);stem(w1/pi,magY1);title('Muestras de la magnitud de TFDT'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8) >> axis([0,1,0,10]) Las gráficas resultantes son:

PDF created with pdfFactory trial version www.pdffactory.com

133

Podemos observar que no hay suficientes muestras que nos permitan tomar conclusiones. Por lo tanto rellenaremos con 90 ceros para obtener una mayor densidad espectral. El código es el siguiente:

>> figure(2); >> n2=[0:1:99];y2=[x(1:1:10) zeros(1,90)]; >> subplot(2,1,1);stem(n2,y2); >> xaux = [0:100]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('señal x(n), 0 <= n <= 9 + 90 ceros'); >> xlabel('n','FontSize',8); >> axis([0,100,-2.5,2.5]) >> Y2=tdf(y2,100);magY2=abs(Y2(1:1:51)); >> k2=0:1:50;w2=2*pi/100*k2; >> subplot(2,1,2);plot(w2/pi,magY2); >> title('Magnitud de la TFDT'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8) >> axis([0,1,0,10])

Ahora las gráficas resultantes son:

0 1 2 3 4 5 6 7 8 9 10

-2

-1

0

1

2

señ al x(n), 0 <= n <= 9

n

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

2

4

6

8

10Muestras de la magnitud de TFDT

Frecuencia en unidades de π

PDF created with pdfFactory trial version www.pdffactory.com

134

En donde se observa que la secuencia tiene una frecuencia dominante en ω=0.5π. Este hecho no es apreciado en la secuencia original, la cual sólo tiene dos frecuencias. Por lo que podemos concluir que el rellenado con ceros proporciona la versión suavizada del espectro de la secuencia original. b) Ahora determinaremos y graficaremos la transformada de Fourier discreta en tiempo de x(n) para 0 ≤ n ≤ 100, para así lograr una mejor información espectral. El código es el siguiente:

>> figure(3); >> subplot(1,1,1) >> subplot(2,1,1);stem(n,x); >> title('señal x(n), 0 <= n <= 99'); >> xaux = [0:100]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); >> axis([0,100,-2.5,2.5]) >> X=tdf(x,100);magX=abs(X(1:1:51)); >> k=0:1:50;w=2*pi/100*k; >> subplot(2,1,2);plot(w/pi,magX);title('Magnitud de la TFDT'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8) >> axis([0,1,0,60])

Las gráficas son:

0 10 20 30 40 50 60 70 80 90 100

-2

-1

0

1

2

señ al x(n), 0 <= n <= 9 + 90 ceros

n

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

2

4

6

8

10Magnitud de la TFDT

Frecuencia en unidades de π

PDF created with pdfFactory trial version www.pdffactory.com

135

en donde claramente se muestran las dos frecuencias que están muy juntas una de la otra. Con esto queda demostrado el espectro de alta resolución de x(n). Cabe notar que el rellenado con ceros para la secuencia con 100 puntos daría como resultado una versión suavizada del espectro obtenido, pero no revelaría nueva información. PROPIEDADES DE LA TRANSFORMADA DISCRETA DE FOURIER

Las propiedades de la TDF son derivadas de las propiedades de la SDF debido a que matemáticamente la SDF es la representación valida. Ahora describimos algunas de las propiedades más útiles, las cuales devienen de las propiedades de la SDF, con los cambios adecuados. Partimos del hecho de que X(k) es la TDF con N-puntos de la secuencia x(n). 1. Linealidad La TDF es una transformada lineal

TDF[ ax1(n) + bx2(n) ] = a TDF[x1(n)] + b TDF[x2(n)] (5.27)

Si x1(n) y x2(n) tienen diferente duración, esto es que, existen secuencias con N1-puntos y N2-puntos respectivamente, entonces se elige N3 = max(N1, N2) y se procede a tomar la TDF de los N3-puntos.

0 10 20 30 40 50 60 70 80 90 100

-2

-1

0

1

2

señ al x(n), 0 <= n <= 99

n

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

20

40

60Magnitud de la TFDT

Frecuencia en unidades de π

PDF created with pdfFactory trial version www.pdffactory.com

136

2. Desdoblamiento Circular Si una secuencia con N-puntos es girada, entonces el resultado x(-n) podría no ser una secuencia con N-puntos, y entonces no sería posible calcular su TDF. Por tal motivo se usa la operación modulo-N sobre el argumento (-n), dando como resultado la siguiente definición para la operación de desdoblamiento

x((-n))N =

−≤≤−=

11),(0),0(

Nn nNxn x

(5.28)

En donde una forma de visualizar esto es imaginando que la secuencia x(n) es "enrollada" (wrapped) alrededor de un círculo en la dirección de las manecillas del reloj a fin de que los índices n=0 y n=N se sobre pongan. Entonces x((-n))N puede ser vista como un dar vueltas en el sentido de las manecilla del reloj, de donde resulta el nombre de desdoblamiento circular. En MATLAB, este desdoblamiento circular se puede realizar con x=x(mod(-n, N) + 1). De este modo, tenemos que la TDF de (5.28) esta dada por

TDF[ x((-n))N ] = X((-k))N =

−≤≤−=

11),(0),0(

Nk kNxk x

(5.29)

Para verificar esta propiedad nos valemos de la secuencia

x(n) = 10 (0.8)n , 0 ≤ n ≤ 10 para la cual determinaremos y graficaremos x((-n))11. El código es el siguiente:

>> n = 0:10; x = 10*(0.8) .^ n; >> y = x(mod(-n,11)+1); >> subplot(2,1,1); stem(n,x); title('Secuencia Original') >> xlabel('n','FontSize',8); ylabel('x(n)'); axis([-0.5,10.5,-1,11]) >> subplot(2,1,2); stem(n,y); title('Secuencia Circularmente Plegada') >> xlabel('n','FontSize',8); ylabel('x(-n mod 11)'); axis([-0.5,10.5,-1,11]) Las gráficas son:

0 1 2 3 4 5 6 7 8 9 10

0

2

4

6

8

10

Secuencia Original

n

x(n)

0 1 2 3 4 5 6 7 8 9 10

0

2

4

6

8

10

Secuencia Circularmente Plegada

n

x(-n

mod

11)

PDF created with pdfFactory trial version www.pdffactory.com

137

Ahora procederemos a verificar la propiedad de desdoblamiento circular, para lo cual nos valemos del siguiente código:

>> figure(2); >> X = tdf(x,11); Y = tdf(y,11); >> subplot(2,2,1); stem(n,real(X)); axis([-0.5,10.5,-5,50]) >> title('TDF[x(n)] Parte Real'); xlabel('k','FontSize',8); >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,2); stem(n,imag(X)); axis([-0.5,10.5,-20,20]) >> title('TDF[x(n)] Parte Imaginaria'); xlabel('k','FontSize',8); >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); stem(n,real(Y)); axis([-0.5,10.5,-5,50]) >> title('TDF[x((-n))11] Parte Real'); xlabel('k','FontSize',8); >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,4); stem(n,imag(Y)); axis([-0.5,10.5,-20,20]) >> title('TDF[x((-n))11] Parte Imaginaria'); xlabel('k','FontSize',8); >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> toptitle('<< Propiedad de Plegamiento Circular >>');

Las gráficas resultantes que verifican la propiedad se muestran a continuación:

3. Conjugación Es similar a la propiedad anterior debido a que tenemos que introducir el plegamiento circular en el dominio de la frecuencia. Obteniendo así

TDF[ x*(n) ] = X*((-k))N (5.30)

0 5 10

0

10

20

30

40

50TDF[x(n)] Parte Real

k0 5 10

-20

-10

0

10

20TDF[x(n)] Parte Imaginaria

k

0 5 10

0

10

20

30

40

50TDF[x((-n))11] Parte Real

k0 5 10

-20

-10

0

10

20TDF[x((-n))11] Parte Imaginaria

k

<< Propiedad de Plegamiento Circular >>

PDF created with pdfFactory trial version www.pdffactory.com

138

4. Propiedades de Simetría para secuencias reales Dada x(n) una secuencia real evaluada en N-puntos, entonces x(n) = x*(n); y usando la propiedad anterior tenemos que

X(k)= X*((-k))N (5.31)

esta simetría es llamada simetría circular conjugada, lo cual implica que Re [X(k)] = Re[X((-k))N] ⇒ Secuencia Circular para

Im [X(k)] = -Im[X((N - k))N] ⇒ Secuencia Circular impar | X(k) | = | X((-k))N | ⇒ Secuencia Circular par ∠ X(k) = -∠ X((-k))N ⇒ Secuencia Circular impar

(5.32) Nos detendremos en este punto para hacer varios comentarios: (i) Si observamos las magnitudes y fases de las TDFs de las secuencias

x(n) = ≤≤

forma otra de n

,030,1

x(n) = 1, 1, 1, 1, 0, 0, 0, 0

antes vistas, tenemos que satisfacen las anteriores simetrías circulares, pero estas simetrías son diferentes de las ya conocidas simetrías par e impar. Para visualizarlo, imaginemos que las muestras de la TDF son colocadas alrededor de un círculo de tal forma que los índices k=0 y k=N se sobre pongan; entonces las muestras serán simétricas con respecto a k=0, lo cual justifica el nombre de simetría circular. (ii) La correspondiente simetría para los coeficientes de la SDF es llamada simetría periódica conjugada. (iii) Ya que las TDFs tienen simetría, entonces es necesario calcular X(k) solamente para

k = 0, 1, . . . ,2N

; N par

o para

k = 0, 1, . . . ,2

1−N; N impar

con esto obtenemos un ahorro de alrededor del 50% en cálculos, así como en almacenamiento. (iv) De (5.30)

X(0) = X*((-0))N = X*(0) lo cual quiere decir que el coeficiente de la TDF en k=0 debe ser un número real. Pero k=0 significa que la frecuencia ωk = kω1 = 0, lo que corresponde a la frecuencia en DC. Por lo tanto el coeficiente en DC para x(n) real debe ser un número real. Además, si N es par, entonces N/2 es también un entero. Entonces de (5.32)

PDF created with pdfFactory trial version www.pdffactory.com

139

=

−=

222** NXNXNX

N

lo cual significa que el componente par k=N/2 es también un valor real. Este componente es llamado componente de Nyquist ya que k=N/2 quiere decir que la frecuencia ωN/2 = (N/2)(2π /N) = π, la cual corresponde a la frecuencia digital de Nyquist.

Las señales reales también pueden ser descompuestas en sus componentes par e impar, xp(n) y xi(n), respectivamente. Sin embargo estos componentes no son secuencias de N-puntos, por lo que no podemos tomar sus TDFs sobre N-puntos. Por tal motivo definimos una nueva serie de componentes usando el desdoblamiento circular mencionado anteriormente. Estos nuevos componentes son llamados par-circular e impar-circular, y están definidos por

xpc (n) = [ ] [ ]

−≤≤−+

==−+

11,)()(21

0),0())(()(

21

Nn nNxnx

n xnxnx N

xic (n) = [ ] [ ]

−≤≤−−

==−−

11,)()(21

0,0))(()(

21

Nn nNxnx

n nxnx N

(5.33) entonces TDF[xpc (n)] = Re [X(k)] = Re[X((-k))N]

(5.34) TDF[xic (n)] = Im [X(k)] = Im[X((-k))N]

Esto tiene como consecuencia que si x(n) es real y par-circular, entonces su TDF es también real y par-circular. Por lo tanto solamente los primero 0 ≤ n ≤ N/2 coeficientes son necesarios para obtener la representación completa. Usando (5.33) es fácil desarrollar una función que nos permita descomponer una secuencia con N-puntos en sus componentes par-circular e impar-circular. Así, con la ayuda de la función mod desarrollamos nuestra función ParImparCir, la cual fácilmente implementa la operación n MOD N. El código es el siguiente:

function [xpc, xic] = ParImparCir(x) % Descomposicion de una señal en sus componentes % par-circular e impar-circular. % ------------------------------------------------------------- % [xpc, xic] = ParImparCir(x) % if any(imag(x) ~= 0) error('x no es una secuencia real') end N = length(x); n = 0:(N-1); xpc = 0.5*(x + x(mod(-n,N)+1)); xic = 0.5*(x - x(mod(-n,N)+1));

PDF created with pdfFactory trial version www.pdffactory.com

140

A continuación haciendo uso de la secuencia x(n) = 10 (0.8)n , 0 ≤ n ≤ 10 procederemos a descomponerla en sus componentes xpc(n) y xic(n) los cuales también serán graficados. Posteriormente verificaremos la propiedad (5.34). a) El siguiente código descompone a la secuencia x(n) en sus componentes xpc(n) y xic(n).

>> figure(1); >> n = 0:10; x = 10*(0.8) .^ n; >> [xpc,xic] = ParImparCir(x); >> subplot(2,1,1); stem(n,xpc); grid; title('Componente Par-Circular') >> xaux = [0:10]; yaux = zeros(size(xaux));

>> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('xpc(n)'); axis([-0.5,10.5,-1,11]) >> subplot(2,1,2); stem(n,xic); grid; title('Componente Impar-Circular') >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('xic(n)'); axis([-0.5,10.5,-4,4])

Las gráficas resultantes se muestra a continuación, en las cuales se puede apreciar los componentes circularmente simétricos de x(n). b) Nos valemos del siguiente código para verificar la propiedad (5.34).

>> figure(2); >> X = tdf(x,11); Xpc = tdf(xpc,11); Xic = tdf(xic,11); >> subplot(2,2,1); stem(n,real(X)); axis([-0.5,10.5,-5,50]) >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('TDF[x(n)] Parte Real'); xlabel('k','FontSize',8);

0 1 2 3 4 5 6 7 8 9 10

0

2

4

6

8

10

Componente Par-Circular

n

xpc(

n)

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

-2

0

2

4Componente Impar-Circular

n

xic(n

)

PDF created with pdfFactory trial version www.pdffactory.com

141

>> subplot(2,2,2); stem(n,imag(X)); axis([-0.5,10.5,-20,20]) >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('TDF[x(n)] Parte Imaginaria'); xlabel('k','FontSize',8); >> subplot(2,2,3); stem(n,real(Xpc)); axis([-0.5,10.5,-5,50]) >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('TDF[xpc(n)]'); xlabel('k','FontSize',8); >> subplot(2,2,4); stem(n,imag(Xic)); axis([-0.5,10.5,-20,20]) >> xaux = [0:10]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('TDF[xic(n)]'); xlabel('k','FontSize',8); >> toptitle('<< Propiedad de Simetría de la TDF >>');

Las gráficas resultantes son las siguientes: Se puede observar que la TDF de xpc(n) es igual a la parte real de X(k), y la TDF de xic(n) es igual a la parte imaginaria de X(k). 5. Desplazamiento Circular de una secuencia

Si una secuencia con N-puntos es desplazada en cualquier dirección, entonces el resultado no es más grande que 0 ≤ n ≤ N-1 . Por lo tanto primero convertimos a x(n) en su respectiva extensión periódica x~ (n) , y posteriormente la desplazamos m muestras para obtener

x~ (n - m) = x((n - m))N (5.35)

0 5 10

0

10

20

30

40

50TDF[x(n)] Parte Real

k0 5 10

-20

-10

0

10

20TDF[x(n)] Parte Imaginaria

k

0 5 10

0

10

20

30

40

50TDF[xpc(n)]

k0 5 10

-20

-10

0

10

20TDF[xic(n)]

k

<< Propiedad de Simetrí a de la TDF >>

PDF created with pdfFactory trial version www.pdffactory.com

142

A esto le llamamos desplazamiento periódico de x~ (n), desplazamiento que es convertido en una secuencia de N-puntos, obteniendo así la siguiente secuencia

x~ (n - m) RN(n) = x((n - m))N RN(n) (5.36) la cual es llamada desplazamiento circular de x(n). Para visualizar esto, imaginemos que la secuencia x(n) es enrollada alrededor de un círculo; si ahora rotamos el círculo por k muestras y desenrrollamos la secuencia desde 0 ≤ n ≤ N-1, su TDF queda dada por

TDF[x((n - m))N RN(n)] = )(kXW kmN (5.37)

Si, nuevamente, nos valemos de la secuencia x(n) = 10 (0.8)n , 0 ≤ n ≤ 10, con 11-puntos, para ejemplificar el uso de esta propiedad, podemos bosquejar x((n + 4))11 R11(n) , es decir, realizaremos un desplazamiento circular de 4 muestras hacia la izquierda. Para lograrlo hacemos uso de un enfoque gráfico en el que se muestra paso a paso esta operación. Tal enfoque muestra la extensión periódica x~ (n) = x((n))N de x(n) seguida de un desplazamiento lineal en x~ (n) para obtener x~ (n - m) = x((n - m))N , y finalmente se trunca a x~ (n - m) para obtener así el desplazamiento circular. El siguiente código nos permite generar las cuatro secuencias del desplazamiento.

>> n = 0:10; x = 10*(0.8) .^ n; >> n1 = -11:21; x1 = [zeros(1,11), x, zeros(1,11)]; >> subplot(2,2,1); stem(n1,x1); title('x(n) Original') >> xaux = [-11:17]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-6,17,-1,11]) >> x2 = [x, x, x]; >> subplot(2,2,2); stem(n1,x2); title('Extensión Periódica') >> xaux = [-11:17]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-6,17,-1,11]) >> x3 = [x2(4+1:33), x(1:4)]; >> subplot(2,2,3); stem(n1,x3); title('Desplazamiento Periódico') >> xaux = [-11:17]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-6,17,-1,11]) >> x4 = x3 .* [zeros(1,11), ones(1,11), zeros(1,11)]; >> subplot(2,2,4); stem(n1,x4); title('Desplazamiento Circular') >> xaux = [-11:17]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-6,17,-1,11]) >> toptitle('<< Interpretación Gráfica del Desplazamiento Circular, N=11 >>');

Las gráficas resultantes son :

PDF created with pdfFactory trial version www.pdffactory.com

143

La gráfica superior izquierda muestras a x(n), la gráfica superior derecha muestra a x~ (n), la gráfica inferior izquierda muestras a x~ (n + 4) y finalmente la gráfica inferior derecha muestras a x((n + 4))11 R11(n). Aquí podemos notar como el desplazamiento provoca que las muestras salgan de la ventana [0, N-1] en una dirección, y reaparezcan en la dirección opuesta. Con esto queda demostrado el significado del desplazamiento circular, el cual es diferente del desplazamiento lineal. Ahora nos proponemos bosquejar x((n - 3))15 R15(n), es decir, realizaremos un desplazamiento circular de tres muestras hacia la derecha; en donde asumimos que la secuencia x(n) esta formada por 15-puntos, y al igual que en el punto anterior haremos uso de un enfoque gráfico. En este caso la secuencia x(n) es tratada como una secuencia de 15-puntos la cual es obtenida rellenando con 4 ceros, por lo tanto el desplazamiento circular será diferente que en el caso N=11. El siguiente código implementa el procedimiento:

>> figure(2); >> n = 0:10; x = [10*(0.8) .^ n zeros(1,4)]; >> n1 = -15:29; x1 = [zeros(1,15), x, zeros(1,15)]; >> subplot(2,2,1); stem(n1,x1); title('x(n) Original') >> xaux = [-15:29]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-9,25,-1,11]) >> x2 = [x, x, x]; >> subplot(2,2,2); stem(n1,x2); title('Extensión Periódica') >> xaux = [-15:29]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-9,25,-1,11]) >> x3 = [x2(43:45),x2(1:42)]; >> subplot(2,2,3); stem(n1,x3); title('Desplazamiento Periódico') >> xaux = [-15:29]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-9,25,-1,11]) >> x4 = x3 .* [zeros(1,15), ones(1,15), zeros(1,15)]; >> subplot(2,2,4); stem(n1,x4); title('Desplazamiento Circular')

-5 0 5 10 15

0

2

4

6

8

10

x(n) Original

n-5 0 5 10 15

0

2

4

6

8

10

Extensió n Perió dica

n

-5 0 5 10 15

0

2

46

8

10

Desplazamiento Perió dico

n-5 0 5 10 15

0

2

46

8

10

Desplazamiento Circular

n

<< Interpretació n Grá fica del Desplazamiento Circular, N=11 >>

PDF created with pdfFactory trial version www.pdffactory.com

144

>> xaux = [-15:29]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); axis([-9,25,-1,11]) >> toptitle('<< Interpretación Gráfica del Desplazamiento Circular, N=15 >>'); Las gráficas resultantes son :

De hecho el desplazamiento circular x((n - 3))15 luce como un desplazamiento lineal x(n - 3). Un desplazamiento circular puede ser implementado directamente en dos formas: la primera de ellas es usando la operación módulo-N sobre el argumento (n-m) en el dominio del tiempo. Esto se ve reflejado en la función DespCir cuyo código se muestra a continuación:

function y = DespCir(x,m,N) % Desplazamiento circular de m muestras x: (dominio en el tiempo) % --------------------------------------------------------------------------------- % [y] = DespCir(x,m,N) % y = Secuencia de salida que contiene el desplazamiento circular % x = Secuencia de entrada de longitud <= N % m = Desplazamiento % N = Tamaño del buffer circular % Metodo: y(n) = x((n-m) mod N) % % Verifica la longitud de x if length(x) > N error('N debe ser >= que la longitud de x') end x = [x zeros(1,N-length(x))]; n = [0:1:N-1]; n = mod(n-m,N); y = x(n+1);

0 10 20

0

2

4

6

8

10

x(n) Original

n0 10 20

0

2

4

6

8

10

Extensió n Perió dica

n

0 10 20

0

2

46

8

10

Desplazamiento Perió dico

n0 10 20

0

2

46

8

10

Desplazamiento Circular

n

<< Interpretació n Grá fica del Desplazamiento Circular, N=15 >>

PDF created with pdfFactory trial version www.pdffactory.com

145

La segunda forma de implementación es empleando la propiedad 5.37 en el dominio de la frecuencia; pero para nuestro fines de estudio nos enfocaremos en la primera implementación; la cual desarrollaremos sirviéndonos de la secuencia x(n) = 10 (0.8)n , 0 ≤ n ≤ 10 formada por 11-puntos, para la cual determinaremos y graficaremos x((n - 6))15 . El código del que nos valemos es el siguiente:

>> n = 0:10; x = 10*(0.8) .^ n; >> y = DespCir(x,6,15); >> n = 0:14; x = [x, zeros(1,4)]; >> subplot(2,1,1); stem(n,x); title('Secuencia Original') >> xaux = [0:15]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('x(n)'); axis([-1,15,-1,11]) >> subplot(2,1,2); stem(n,y); >> xaux = [0:15]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> title('Secuencia desplazada circularmente, N=15') >> xlabel('n','FontSize',8); ylabel('x((n-6) mod 15)'); >> axis([-1,15,-1,11]) Las gráficas resultantes son:

6. Desplazamiento Circular en el dominio de la frecuencia Esta propiedad es el dual de la propiedad anterior, y esta dada por

TDF [ ] )())(()( kRkXnxW NNn

N ll −=− (5.38)

0 5 10 15

0

2

4

6

8

10

Secuencia Original

n

x(n)

0 5 10 15

0

2

4

6

8

10

Secuencia desplazada circularmente, N=15

n

x((n

-6) m

od 1

5)

PDF created with pdfFactory trial version www.pdffactory.com

146

7. Convolución Circular Ya que una convolución lineal entre dos secuencias de N-puntos resultará en una secuencia más grande, tendrémos que restringir nuestro intervalo a 0 ≤ n ≤ N-1. Por lo tanto, en lugar de un desplazamiento lineal deberíamos considerar al desplazamiento circular. En base a esto podemos decir que una operación de convolución que contiene un desplazamiento circular es llamada convolución circular, y esta dada por

x1(n) (N) x2(n) = ∑−

=

−1

021 ))(()(

N

mNmnxnx , 0 ≤ n ≤ N-1 (5.39)

en donde esta convolución circular es también una secuencia con N-puntos, y además, tiene una estructura similar a la de una convolución lineal. Las diferencias que poseen se encuentran en los límites de la sumatoria y en el desplazamiento circular de N-puntos. Y puesto que la convolución circular depende de N, también es llamada convolución circular de N-puntos, por lo que el uso de la notación (N) es apropiado. Además, la propiedad de la TDF para la convolución circular es

TDF[ x1(n) (N) x2(n) ] = X1(k) ⋅ X2(k) (5.40) Una interpretación alternativa de esta propiedad es que, cuando multiplicamos dos TDFs de N-puntos en el dominio de la frecuencia, obtenemos la convolución circular (y no la convolución lineal usual) en el dominio del tiempo. Para ejemplificar esto nos valemos de las siguientes secuencias x1(n) = 1, 2, 2 y x2(n) = 1, 2, 3, 4, para las cuales calcularemos x1(n) (4) x2(n) con 4-puntos, donde podemos notar que x1(n) es una secuencia con 3-puntos, por lo que tendremos que rellenarla con un ceros para convertirla en una secuencia con 4-puntos antes de realizar la convolución circular. Resolveremos este problema tanto en el domino del tiempo (en donde emplearemos el mecanismo de convolución circular) como en el dominio de la frecuencia (en donde usaremos las TDFs). A continuación presentamos ambos enfoques: ♦ Solución en el dominio del tiempo: La convolución circular con 4-puntos esta dada por

x1(n) (4) x2(n) = ∑=

−3

0421 ))(()(

mmnxmx

por consiguiente tenemos que crear una secuencia desplazada circularmente para cada valor de n, y multiplicar cada una de sus muestras con x1(m) , finalmente sumar las muestras para obtener el valor de la convolución circular en n, este proceso se repite para 0 ≤ n ≤ 3. Tomando en cuenta que

x1(m) = 1, 2, 2, 0 y x2(m) = 1, 2, 3, 4 mostramos, paso a paso, los cálculos para cada valor de n. Para n = 0

[ ]∑∑==

⋅=−⋅3

0

3

0521 2,3,4,10,2,2,1))0(()(

mm mxmx

∑=

==3

0150,6,8,1

m

PDF created with pdfFactory trial version www.pdffactory.com

147

Para n = 1

[ ]∑∑==

⋅=−⋅3

0

3

0521 3,4,1,20,2,2,1))1(()(

mm mxmx

∑=

==3

0120,8,2,2

m

Para n = 2

[ ]∑∑==

⋅=−⋅3

0

3

0521 4,1,2,30,2,2,1))2(()(

mm mxmx

∑=

==3

090,2,4,3

m

Para n = 3

[ ]∑∑==

⋅=−⋅3

0

3

0521 1,2,3,40,2,2,1))3(()(

mm mxmx

∑=

==3

0140,4,6,4

m

Finalmente obtenemos el resultado

x1(n) (4) x2(n) = 15, 12, 9, 14

♦ Solución en el dominio de la frecuencia: En primer lugar calculamos las TDFs de x1(n) y x2(n), enseguida

multiplicamos ambas transformadas muestra con muestra, y finalmente tomamos la TDF inversa del resultado de la multiplicación para así obtener la convolución circular. Tal y como se muestra a continuación.

TDF de x1(n)

x1(n) = 1, 2, 2, 0 ⇒ X1(k) = 5, - 1 - j2, 1, - 1 + j2

TDF de x2(n)

x2(n) = 1, 2, 3, 4 ⇒ X2(k) = 10, - 2 + j2, -2, - 2 - j2

Ahora X1(k) ⋅ X2(k) = 50, 6 + j2, -2, 6 - j2

Finalmente después de tomar la TDFI

x1(n) (4) x2(n) = 15, 12, 9, 14

el cual es el mismo resultado obtenido en el punto anterior

PDF created with pdfFactory trial version www.pdffactory.com

148

Tal y como se hizo en la implementación del desplazamiento circular, podemos implementar la convolución circular de diferentes maneras. La forma más simple sería implementando (5.39) literalmente, usando la función DespCir y dos ciclos for . . . end anidados. Obviamente esto no es eficiente, por lo que otro enfoque sería generar una secuencia x((n - m))N para cada n en [0, N-1] como renglones de una matriz, y entonces implementar (5.39) como una multiplicación de un vector matriz similar a lo que se hizo con la función tdf, provocando que sólo se requiera un ciclo for . . . end. A continuación mostramos la función llamada ConvCir en la cual se incorporan estos pasos. Ahora realizaremos la convolución circular x1(n) (4) x2(n) en donde x1(n) = 1, 2, 2 y x2(n) = 1, 2, 3, 4, las cuales son las mismas secuencias que se emplearon en el ejemplo anterior, esto con el fin de comparar el resultado anterior con el que se obtendrá empleando nuestra nueva función ConvCir. El script que emplearemos es el siguiente:

>> x1 = [1,2,2]; x2 = [1,2,3,4]; >> y = ConvCir(x1,x2,4) y = 15 12 9 14

Por lo tanto

x1(n) (4) x2(n) = 15, 12, 9, 14

como se había obtenido anteriormente. Con el fin de estudiar los efectos de N sobre la convolución circular realizaremos un ejercicio en donde calcularemos la convolución circular entre dos secuencias para distintos valores de N. Las secuencias que emplearemos serán las mismas que se han venido empleando para así poder compara resultados. Obviamente N ≥ 4; de lo contrario se presentaría un traslapamiento en el dominio del tiempo para x2(n).

function y = ConvCir(x1,x2,N) % Convolución Circular con N-puntos entre x1 y x2 en el dominio del tiempo % ------------------------------------------------------------------------------------------ % [y] = ConvCir(x1,x2,N) % y = Secuencia de salida que contiene a la convolución circular % x1 = Secuencia de entrada de longitud N1 <= N % x2 = Secuencia de entrada de longitud N2 <= N % N = Tamaño del buffer circular % Método: y(n) = sum (x1(m)*x2((n-m) mod N)) % % Verifica la longitud de x1 if length(x1) > N error('N debe ser >= que la longitud de x1') end % Verifica la longitud de x2 if length(x2) > N error('N debe ser >= que la longitud de x2') end x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; m = [0:1:N-1]; x2 = x2(mod(-m,N)+1); H = zeros(N,N); for n = 1:1:N H(n,:) = DespCir(x2,n-1,N); end y = x1*H';

PDF created with pdfFactory trial version www.pdffactory.com

149

a) En primer lugar calcularemos la convolución circular en 5-puntos, x1(n) (5) x2(n).

Aunque las secuencias son las mismas que en los ejemplos anteriores deberíamos esperar diferentes resultados para diferentes valores de N, lo cual no es el caso con la convolución lineal que es única dadas dos secuencias. El script correspondiente es el siguiente.

>> x1 = [1,2,2]; x2 = [1,2,3,4];

>> y = ConvCir(x1,x2,5) y = 9 4 9 14 14

Por lo tanto

x1(n) (5) x2(n) = 9, 4, 9, 14, 14

b) Calcularemos la convolución circular en 6-punto, x1(n) (6) x2(n).

El script es el siguiente:

>> x1 = [1,2,2]; x2 = [1,2,3,4]; >> y = ConvCir(x1,x2,6) y = 1 4 9 14 14 8 Por lo tanto

x1(n) (6) x2(n) = 1, 4, 9, 14, 14, 8

Una cuidadosa observación de las convoluciones circulares con valores de N igual a 4, 5 y 6 puntos, muestra algunas características únicas entre ellas, como por ejemplo: una convolución circular con N-puntos es una secuencia con N-puntos. Sin embargo, algunas muestras en estas convoluciones tienen los mismos valores, mientras que otros valores pueden ser obtenidos como una suma de muestras en otras convoluciones. Por ejemplo, la primera muestra en la convolución de 5-puntos es igual a la suma de la primera y la última muestra de la convolución con 6-puntos. Por otro lado tenemos que la convolución lineal entre x1(n) y x2(n) esta dada por

x1(n) * x2(n) = 1, 4, 9, 14, 14, 8 la cual es equivalente a la convolución circular con 6-puntos. 8. Multiplicación Esta propiedad es el dual de la propiedad de convolución circular, y esta dada por

TDF[x1(n) ⋅ x2(n)] = N1

X1(k) (N) X2(k) (5.41)

en la cual la convolución circular es realizada en el dominio de la frecuencia. Las funciones desarrolladas en MATLAB para la convolución circular también pueden ser usadas aquí, ya que X1(k) y X2(k) también son secuencias con N-puntos.

PDF created with pdfFactory trial version www.pdffactory.com

150

9. Relación de Parseval Esta relación calcula la energía en el dominio de la frecuencia.

Ex = ∑∑−

=

=

=1

0

21

0

2 )(1)(N

k

N

nkX

Nnx (5.42)

en donde la cantidad N

kX2

)( es llamada espectro de energía de las secuencias con duración finita.

Similarmente, para secuencias periódicas, la cantidad 2

)(~

N

kXes llamada espectro de potencia.

CONVOLUCIÓN LINEAL USANDO LA TDF

Una de las operaciones más importantes en sistemas lineales es la convolución lineal; de hecho los filtros FIR son generalmente implementados en la práctica usando esta convolución . Por otro lado, la TDF es un enfoque práctico para la implementación de operaciones de sistemas lineales en el dominio de la frecuencia, y como veremos más adelante, esto también es una operación eficiente en términos de cálculo. Sin embargo hay un problema, el cual consiste en que las operaciones de la TDF resultan en una convolución circular (en donde algunas veces esto no es lo que deseamos) y no en la convolución lineal que deseamos. Por tal motivo, veremos como usar la TDF para realizar una convolución lineal (o equivalentemente, como hacer una convolución circular idéntica a una convolución lineal). Dada la secuencia x1(n) con N1-puntos y la secuencia x2(n) con N2-puntos, definimos la convolución lineal de x1(n) y x2(n) como x3(n), de la siguiente manera:

x3(n) = x1(n) * x2(n) (5.43)

= ∑∑−∞

−∞=

−=−1

02121

1

)()()()(N

kknxkxknxkx

entonces x3(n) es una secuencia con (N1 + N2 - 1)-puntos. Ahora, si elegimos N=max(N1 , N2) y calculamos la convolución circular con N-puntos x1(n) (N) x2(n) , entonces obtendremos una secuencia con N-puntos, la cual es obviamente diferente de x3(n). De esta observación nos surge una pregunta: ¿ Por qué no escoger N = N1 + N2 - 1 y realizar así la convolución circular con (N1 + N2 - 1)-puntos ?. Con este enfoque al menos ambas convoluciones tendrán un mismo número de muestras. Por lo tanto, dada N = N1 + N2 - 1 y considerando a x1(n) y x2(n) como secuencias con N-puntos, definimos a la convolución circular x4(n) con N-puntos como

PDF created with pdfFactory trial version www.pdffactory.com

151

x4(n) = x1(n) (N) x2(n) (5.44)

= )())(()(1

021 nmnxkx N

N

mN R

−∑

=

= )()()(1

021 nrNmnxkx N

N

m rR

−−∑ ∑

=

−∞=

= )()()(

)(

1

021

3

1

nrNmnxkx Nr

rNnx

N

mR

−−∑ ∑∞

−∞=

= 4444 34444 21

= )()(3 nrNnx Nr

R

−∑

−∞=

usando (5.43)

Este análisis muestra que, en general, la convolución circular es una versión sobrepuesta de la convolución lineal; y ya que x3(n) es una secuencia con N = (N1 + N2 - 1)-puntos, tenemos que

x4(n) = x3(n); 0 ≤ n ≤ (N - 1) lo cual significa que no habrá aliasing en el dominio del tiempo. Amanera de conclusión podemos decir que si hacemos a x1(n) y x2(n) secuencias con N = (N1 + N2 - 1) puntos por medio del rellenado con un número apropiado de ceros, entonces la convolución circular es idéntica a la convolución lineal. Y para demostrarlo nos valemos del siguiente ejemplo. Dadas las secuencias x1(n) y x2(n) con 4-puntos siguientes:

x1(n) = 1, 2, 2, 1, x2(n) = 1, -1, 1, -1 a) Determinaremos su convolución lineal x3(n) por medio del siguiente script:

>> x1=[1,2,2,1]; x2=[1,-1,1,-1]; >> x3=conv(x1,x2) x3 = 1 1 1 0 -1 -1 -1

así obtenemos que la convolución lineal x3(n) es una secuencia con 7-puntos dada por

x3(n) = 1, 1, 1, 0, -1, -1, -1 b) Ahora calcularemos la convolución circular x4(n) de modo que sea igual a x3(n); que para lograrlo

tenemos que usar N ≥ 7. Así que eligiendo N=7 y haciendo uso de nuestra función ConvCir obtenemos:

>> x4=ConvCir(x1,x2,7) x4 = 1 1 1 0 -1 -1 -1

PDF created with pdfFactory trial version www.pdffactory.com

152

por lo tanto

x4 = 1, 1, 1, 0, -1, -1, -1 = x3(n) Como se pudo observar, una vez empleada al TDF para realizar la convolución lineal, debemos elegir apropiadamente el valor de N. Sin embargo, en la práctica esto no es posible de hacer, especialmente cuando N es muy grande lo cual implicaría un límite sobre la memoria. Este hecho podría introducir un error cuando se elige un valor de N menor que el requerido para realizar la convolución circular; además este error puede ser calculado ya que en la práctica es de gran utilidad. Obviamente se debe cumplir N ≥ max(N1 , N2), y por lo tanto si tenemos que

max(N1, N2) ≤ N < (N1 + N2 -1) entonces de nuestro análisis previo en (5.44)

x4(n) = )()(3 nrNnx Nr

R

−∑

−∞=

Así el error e(n) esta dado por e(n) = x4(n) - x3(n)

= )()(0

3 nrNnx Nr

R

−∑

y puesto que N ≥ max(N1 , N2), solamente dos términos correspondientes a r = ± 1 permanecen en la sumatoria anterior. Por lo tanto

e(n) = [x3(n - N) + x3(n + N)] RN (n ) Generalmente, como x1(n) y x2(n) son secuencias causales entonces x3(n) también es causal, lo cual significa que

x3(n - N) = 0; 0 ≤ n ≤ N - 1 por lo tanto

e(n) = x3(n + N), 0 ≤ n ≤ N - 1 (5.45) la cual es una relación importante. Esto implica que cuando max(N1, N2) ≤ N < (N1 + N2 -1), el error de la muestra en la posición n es la misma cuando se realiza la convolución lineal con N muestras. Ahora la convolución lineal será cero después de (N1 + N2 -1) muestras, lo que significa que algunas de las primeras muestras de la convolución circular están en un error, mientras que los unos restantes son los valores correctos de la convolución lineal. Para ejemplificar esto haremos uso de las secuencias

x1(n) = 1, 2, 2, 1, x2(n) = 1, -1, 1, -1 con las cuales evaluaremos la convolución circular para N=6,5 y 4. Posteriormente verificaremos las relaciones de error en cada caso. Como puede apreciarse las secuencias son las mismas que se han venido utilizando, por lo que claramente tenemos que la convolución x3(n) es la misma

x3(n) = 1, 1, 1, 0, -1, -1, -1

PDF created with pdfFactory trial version www.pdffactory.com

153

Cuando N=6, obtenemos una secuencia con 6-puntos.

x4(n) = x1(n) (6) x2(n) = 0, 1, 1, 0, -1, -1 por lo tanto

e(n) = 0, 1, 1, 0, -1, -1 - 1, 1, 1, 0, -1, -1,, 0 ≤ n ≤ 5 = -1, 0, 0, 0, 0, 0 = x3 (n + 6) como era de esperarse. Cuando N=5, obtenemos una secuencia con 5-puntos.

x4(n) = x1(n) (5) x2(n) = 0, 0, 1, 0, -1

por lo tanto

e(n) = 0, 0, 1, 0, -1 - 1, 1, 1, 0, -1, 0 ≤ n ≤ 4 = -1, -1, 0, 0, 0 = x3 (n + 5) Finalmente, cuando N=4, obtenemos una secuencia con 4-puntos.

x4(n) = x1(n) (4) x2(n) = 0, 0, 0, 0

por lo tanto

e(n) = 0, 0, 0, 0, - 1, 1, 1, 0, 0 ≤ n ≤ 3 = -1, -1, -1, 0 = x3 (n + 4) Para este último caso (N=4) cuando elegimos N=max(N1 , N2) para realizar la convolución circular, tenemos que las primeras (M - 1) muestras son erróneas, Vg. difieren de la convolución lineal, en los lugares donde M=min(N1 , N2). Este resultado es de gran utilidad en la implementación de convoluciones largas en forma de procesamiento por bloque. Cuando deseamos filtrar una secuencia de entrada que esta siendo recibida continuamente, por ejemplo una señal de voz desde un micrófono, entonces para propósitos prácticos podemos ver a esta secuencia como una secuencia de longitud infinita. Si lo que deseamos es implementar una operación de filtrado con un filtro FIR en el cual la convolución lineal es calculada usando la TDF, entonces experimentaremos algunos problemas prácticos, debido a que tendríamos que calcular una larga TDF, lo cual es generalmente impráctico. Lo que es más, las muestra de salida no están disponibles hasta que todas las muestras de entrada hayan sido procesadas, lo que introduce una inaceptable gran cantidad de retraso. Por lo tanto tenemos que segmentar la secuencia de entrada de longitud infinita en pequeñas secciones (o bloques), y procesar cada sección usando la TDF, y finalmente ensamblar la secuencia de salida a partir de las salidas de cada sección. Este procedimiento es llamado operación de convolución por bloque (o procesamiento por bloque). Si asumimos que la secuencia x(n) es seccionada en secuencias de N-puntos y que la respuesta al impulso del filtro es una secuencia con M-puntos, donde M < N, entonces de las observaciones anteriores notamos que, la convolución circular con N-puntos entre el bloque de entrada y la respuesta impulsiva producirá un bloque de secuencia de salida en el cual las primeras (M - 1) muestras no serán los valores correctos de la salida. Ahora, si nosotros simplemente particionamos a x(n) en secciones no superpuestas, entonces el resultado de la secuencia de salida tendrá intervalos de muestras incorrectas; y la forma de corregir este

PDF created with pdfFactory trial version www.pdffactory.com

154

problema es particionando a x(n) en secciones, cada una superpuesta con la anterior en exactamente (M - 1) muestras, guardar las últimas (N - M + 1) muestras de salida, y finalmente concatenar estas salidas en una secuencia. Para corregir las primeras (M - 1) muestras en el primer bloque de salida, ponemos las primeras (M - 1) muestras en el primer bloque de entrada a cero. Este procedimiento es llamado método superponer-guardar para convoluciones por bloque. Claramente, cuando N >> M, este método es más eficiente, y para ilustrarlo, desarrollaremos el siguiente ejemplo. Dadas

x(n) = (n + 1), 0 ≤ n ≤ 9 y

h(n) = 1, 0, -1 ↑ implementaremos el método superponer-guardar usando N=6 para calcular y(n) = x(n) * h(n). Como se puede observar M=3, por lo que tendremos que superponer a cada sección con la anterior con dos muestras. También tenemos que x(n) es una secuencia formada por 10-puntos, y además necesitaremos (M - 1) = 2 ceros en el inicio. Ya que N=6, necesitaremos 3 secciones, como las que se muestran a continuación. x1(n) = 0, 0, 1, 2, 3, 4 x2(n) = 3, 4, 5, 6, 7, 8 x3(n) = 7, 8, 9, 10, 0, 0 Notamos que se tuvo que rellenar x3(n) con dos ceros ya que los valores de x(n) terminan en n=9. Ahora calcularemos la convolución circular con 6-puntos de cada sección con h(n). y1 = x1(n) (6) h(n) = -3, -4, 1, 2, 2, 2 y2 = x2(n) (6) h(n) = -4, -4, 2, 2, 2, 2 y3 = x3(n) (6) h(n) = 7, 8, 2, 2, -9, -10 Tomando en cuenta que las primeras dos muestras de cada secuencia serán descartadas, obtenemos que la secuencia de salida y(n) queda como

y(n) = 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, -9, -10 ↑ Si comparamos este resultado con el obtenido empleando la convolución lineal siguiente

x(n) * h(n) = 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, -9, -10 ↑ observamos que concuerda con el método de superponer-guardar. Usando los ejemplos anteriores como guía, podemos desarrollar una función en MATLAB para implementar el método de superponer-guardar para una secuencia de entrada x(n) muy larga. El paso principal en esta función es el obtener una apropiada indexación para la segmentación. Así que, dada x(n) para n ≥ 0, tenemos que poner las primeras (M-1) muestras a cero para comenzar el procedimiento por bloques. Entonces dada la secuencia aumentada

)(,0,...,0,0)(ˆ)1(

nx nxceros M43421

= , n ≥ 0

PDF created with pdfFactory trial version www.pdffactory.com

155

y dada L = N - M + 1, tenemos que el k-ésimo bloque xk(n), en el intervalo 0 ≤ n ≤ N-1, esta dado por

)(ˆ)( mxnxk = ; kL ≤ m ≤ kL + N - 1, k ≥ 0, 0 ≤ n ≤ N - 1

y el número total de bloques es

K = 12

+

−+

LMN x

En donde Nx es la longitud de x(n) y ⋅ es la operación de truncamiento. Ahora cada bloque puede ser circularmente convolucionado con h(n) usando la función ConvCir, para así obtener

yk(n) = xk(n) (N) h(n) Finalmente, descartando las primeras (M-1) muestras de cada yk(n) y concatenando las muestras restantes, obtenemos la convolución lineal y(n). Todo este procedimiento es incorporado en la siguiente función llamada SuperpGuardar. Cabe hacer notar que esta función no esta desarrollada con el enfoque más eficiente. Pero retomaremos este tema cuando discutamos la transformada rápida de Fourier.

function [y] = SuperpGuardar(x,h,N) % Metodo Superponer-Guardar de la convolucion por bloque % ----------------------------------------------------------------------- % [y] = SuperpGuardar(x,h,N) % y = secuencia de salida % x = secuencia de entrada % h = respuesta al impulso % N = longitud del bloque % Longx = length(x); M = length(h); M1 = M-1; L = N-M1; h = [h zeros(1,N-M)]; % x = [zeros(1,M1), x, zeros(1,N-1)]; % anexa (M-1) ceros K = floor((Longx+M1-1)/(L)); % numero de bloques Y = zeros(K+1,N); % % convolucion con bloques sucesivos for k=0:K xk = x(k*L+1:k*L+N); Y(k+1,:) = ConvCir(xk,h,N); end Y = Y(:,M:N)'; % descarta las primeras (M-1) muestras y = (Y(:))'; % ensambla la salida

PDF created with pdfFactory trial version www.pdffactory.com

156

Para verificar la operación de esta nueva función resolveremos el ejemplo anterior. El script es el siguiente:

>> n = 0:9; x = n+1; h = [1,0,-1]; N=6; >> y = SuperpGuardar(x,h,N) y = 1 2 2 2 2 2 2 2 2 2 -9 -10

este script da como resultado la convolución lineal correcta, como esperábamos. TRANSFORMADA RÁPIDA DE FOURIER

La TDF en (5.24) planteada anteriormente es una transformada que es discreta tanto en el dominio del tiempo como en el dominio de la frecuencia, y esta definida para secuencias de duración finita, y aunque es una transformada calculable, la implementación directa de (5.24) es muy ineficiente, especialmente cuando la longitud N de la secuencia es grande. En 1965 Cooley y Tokey mostraron un procedimiento para reducir sustancialmente la cantidad de cálculos requeridos en la TDF, lo que dio pie al auge en las aplicaciones de la TDF, incluyendo el área de procesamiento digital de señales. Lo que es más, también dio la iniciativa para el desarrollo de otros algoritmos eficientes, que en conjunto son conocidos como los algoritmos de la Transformada Rápida de Fourier (TRF). Considerando una secuencia x(n) con N-puntos, cuya TDF esta dada por:

X(k) = ∑

=

1

0)(

N

n

nkNWnx , 0 ≤ k ≤ N - 1 (5.46)

donde WN = e-j2π / N . Tenemos que para obtener una muestra de X(k) necesitamos N multiplicaciones complejas y (N-1) sumas complejas. Por lo tanto, para obtener una serie completa de coeficientes de la TDF, necesitamos N2 multiplicaciones complejas y N(N-1) ≈ N2 sumas complejas, además de que se tienen que almacenar N2 coeficientes complejos nk

NW . Claramente se observa que el número de cálculos de la TDF para una secuencia con N-puntos depende cuadráticamente de N, lo cual se denota como

CN =o( N2 ) Desde luego, para Ns grandes, o(N2) es inaceptable en la práctica. Generalmente el tiempo de procesamiento para una suma es mucho menor que para una multiplicación. Por lo tanto desde ahora nos concentraremos en el número de multiplicaciones complejas, las cuales en si mismas requieren de 4 multiplicaciones reales y 2 sumas reales. En un algoritmo diseñado eficientemente el número de cálculos debería ser constante por cada muestra , y por lo tanto el número total de cálculos debería ser lineal con respecto a N. La dependencia cuadrática sobre N puede ser reducida haciendo que la mayoría de los cálculos puedan ser eliminados usando la propiedad de periodicidad

PDF created with pdfFactory trial version www.pdffactory.com

157

nNk

NNnk

Nkn

N WWW )()( ++ == y la propiedad de simetría

knN

NknN WW −=+ 2/

del factor nk

NW . A manera de comentario, un algoritmo que considera solamente la propiedad de periodicidad de nk

NW es el algoritmos Goertzel el cual todavía requiere CN = o( N2 ) multiplicaciones, pero que tiene ciertas ventajas. Pero para nuestros fines de estudio primero comenzaremos con un ejemplo para ilustrar las ventajas de la propiedad de simetría y periodicidad en la reducción del número de cálculos. Para esto describiremos y analizaremos dos algoritmos específicos de la TRF que requieren CN = o( N log N ) operaciones; estos son: los algoritmos de Decimación en Tiempo (TRF - DT) y Decimación en Frecuencia (TRF - DF). Consideremos los cálculos de una TDF con 4-puntos y desarrollemos un algoritmo eficiente para su cálculo.

X(k) = ∑=

3

04)(

n

nkWnx , 0 ≤ n ≤ 3; W4 = e-j2π / 4 = -j

Los cálculos pueden ser hechos con una matriz de la forma

=

)3()2()1()0(

)3()2()1()0(

94

64

34

04

64

44

24

04

34

24

14

04

04

04

04

04

xxxx

WWWWWWWWWWWWWWWW

XXXX

la cual requiere 16 multiplicaciones complejas. Un planteamiento eficiente se logra usando la periodicidad

jW WWjWW WW

=−==

−====3

46

42

4

94

14

44

04

;1;1

si sustituimos estos valores en la matriz anterior, obtenemos lo siguiente

−−−

=

)3()2()1()0(

111111

111111

)3()2()1()0(

xxxx

j--j - j j

XXXX

PDF created with pdfFactory trial version www.pdffactory.com

158

ahora, empleando simetría obtenemos X(0) = x(0) + x(1) + x(2) + x(3) = [ ] [ ]4342143421

21

)3()1()2()0(gg

xxxx +++

X(1) = x(0) - jx(1) - x(2) + jx(3) = [ ] [ ]434214342121

)3()1()2()0(hh

xxjxx −−−

X(2) = x(0) - x(1) + x(2) - x(3) = [ ] ( )[ ]434214342121

3)1()2()0(gg

xxxx +−+

X(3) = x(0) + jx(1) - x(2) - jx(3) = [ ] [ ]434214342121

)3()1()2()0(hh

xxjxx −+−

Por lo tanto un algoritmo eficiente sería

Paso 1

g1 = x(0) + x(2) g2 = x(1) + x(3) h1 = x(0) - x(2) h2 = x(1) - x(3)

Paso 2 X(0) = g1 + g2 X(1) = h1 - jh2 (5.47) X(2) = g1 - g2 X(3) = h1 + jh2

el cual requiere solamente 2 multiplicaciones complejas, que es un número considerablemente pequeño, incluso para este sencillo ejemplo. Una estructura en forma de diagrama de flujo de la señal para este algoritmo se muestra enseguida.

Este algoritmo puede ser interpretado de otra forma: primero, una secuencia con 4-puntos x(n) es dividida en dos secuencias con 2-puntos, las cuales son colocadas dentro de un vector columna como se muestra a continuación:

=

)3()2()1()0(

)3()1(

,)2()0(

xxxx

xx

xx

Como siguiente paso, se calcula una TDF más pequeña, con 2-puntos, para cada columna

W2

=

)3()2()1()0(

1111

)3()2()1()0(

xxxx

xxxx

PDF created with pdfFactory trial version www.pdffactory.com

159

=

=

−−++

21

21

)3()1()2()0()3()1()2()0(

hhgg

xx xxxx xx

entonces cada elemento de la matriz resultante es multiplicado por pq

W 4 , en donde p es el renglón índice y q es la columna índice. Así, el siguiente producto es realizado

=

∗⋅

− 21

21

21

21

111

jh-hg g

hhgg

j

Finalmente, dos TDFs más pequeñas con 2-puntos son tomadas de los vectores renglón.

+−−+

=

=

− 2121

2121

21

21

21

21

1111

jhh jhhgg gg

jhhg g

jhhg g

2W

=

)3()1()2()0(

XXXX

Aunque esta interpretación parece tener más multiplicaciones que el algoritmo eficiente, esto sólo nos sugiere un enfoque sistemático para el cálculo de una TDF larga, basado en TDFs más pequeñas. Para reducir la dependencia cuadrática del cálculo de la TDF con N, debemos elegir un número compuesto N = LM, donde

L2 + M2 << N2 para N grande ahora dividimos la secuencia en M secuencias más pequeñas de longitud L, tomamos M TDFs más pequeñas con L-puntos, y entonces las combinamos en una TDF más grande usando L TDFs más pequeñas con M-puntos. Estos pasos son la esencia del método de dividir-combinar, y puesto que N = LM, entonces los índices n y k en (5.46) pueden ser escritos como

10,10,10,10,

−≤≤−≤≤+=−≤≤−≤≤+=

Mq Lp LqpkMm L mMn ll

(5.48)

por su parte las secuencias x(n) y X(k) pueden ser escritas como arreglos ),( mx l y X(p,q), respectivamente. Entonces (5.46) queda como

X(p, q) = ∑ ∑−

=

=

++1

0

1

0

M

m

Lq)Lm)(p(M

Nm)W,x( l

ll (5.49)

PDF created with pdfFactory trial version www.pdffactory.com

160

= LmqN

M

m

LpM

Nmp

N W WmxW∑ ∑−

=

=

1

0

1

0),(

l

ll

=

44444 344444 2144 344 21

ll

l

puntos M para TDF

mqM

M

m

puntos L para TDF

Lp

Lmp

N W WmxW∑ ∑−

=

=

1

0

1

0

),(

Por lo tanto la expresión (5.49) puede ser implementada usando un procedimiento de 3 pasos: 1. Calculamos el arreglo de la TDF con L-puntos

F(p, m) = ∑−

=

1

0),(

Lp

LWmxl

ll ; 0 ≤ p ≤ L - 1 (5.50)

para cada una de las columnas m = 0, . . . , M-1. 2. Modificamos F(p,m) para obtener otro arreglo

G(p, m) = ),,( mpFW pmN

1010−≤≤

−≤≤MmLp

(5.51)

El factor pm

NW es llamado factor twiddle. 3. Finalmente, calculamos las TDFs con M-puntos

X(p, q) = ∑−

=

1

0),(

M

m

mqMWmpG 0 ≤ q ≤ M - 1 (5.52)

para cada uno de los renglones p = 0, . . . , L-1. Así tenemos que el número total de multiplicaciones complejas para este enfoque esta dado por:

CN = ML2 + N + LM2 < o(N2) (5.53) Este procedimiento puede ser repetido si M o L son números compuestos. Claramente, el algoritmo más eficiente es obtenido cuando N es un número compuesto muy grande, esto es, N=Rv . Tales algoritmos son conocidos como algoritmos TRF radix-R. Cuando N= 21

21vv RR . . . , entonces tales descomposiciones son

llamadas algoritmos TRF radix-mezclado. Sin embargo el algoritmo más popular y fácil de programar es el algoritmo llamado TRF radix-2.

PDF created with pdfFactory trial version www.pdffactory.com

161

Algoritmo TRF radix-2 Si N = 2v , entonces elegimos M=2 y L=N/2, posteriormente dividimos a x(n) en dos secuencias con N/2-puntos de acuerdo a (5.48) como se muestra a continuación

)12()()2()(

2

1

+==

nxngnxng

; 12

0 −≤≤Nn

en donde la secuencia g1(n) contiene las muestras pares de x(n), y g2(n) contiene las muestras impares de x(n). Ahora, si G1(k) y G2(k) son las TDFs con N/2-puntos de g1(n) y g2(n), respectivamente. Entonces (5.49) se reduce a

X(k) = G1(k) + kNW G2(k), 0 ≤ k ≤ N - 1 (5.54)

Este resultado es llamado fórmula de fusión, la cual combina dos TDFs con N/2-puntos en una TDF con N-puntos. Con esto tenemos que el número total de multiplicaciones complejas se reduce a

CN = )2/(

22

2

N oNN=+

Este procedimiento puede ser repetido una y otra vez, y en cada etapa las secuencias son reducidas (decimadas), en tanto que las TDFs más pequeñas son combinadas. Esta reducción termina después de v etapas cuando tenemos N secuencias con 1-punto, las cuales también son TDFs con 1-punto. Este procedimiento es llamado algoritmo TRF de decimación en tiempo (TRF-DT), para el cual el número total de multiplicaciones complejas es

CN = Nv = N log2 N Se puede observar claramente que si N es grande, entonces CN es aproximadamente lineal en N, lo cual era la meta de nuestro algoritmo eficiente. Lo que es más, si empleamos simetrías adicionales, CN puede ser

reducido a NN2log

2. A continuación se muestra el diagrama de flujo de una señal para N=8 en base a este

algoritmo.

PDF created with pdfFactory trial version www.pdffactory.com

162

En un enfoque alternativo podríamos elegir L=2, M=N/2 y seguir los pasos en (5.49), con lo que obtendríamos que las TDFs iniciales son TDFs con 2-puntos, las cuales no contienen multiplicaciones complejas. Por lo tanto de (5.50)

F(0, m) = x(0, m) + x(1, m) 02W

= x(n) + x(n + N/2), 0 ≤ n ≤ N/2

F(1, m) = x(0, m) + x(1, m) 12W

= x(n) - x(n + N/2), 0 ≤ n ≤ N/2 y de (5.51)

G(0, m) = F(0, m) 0NW

= x(n) + x(n + N/2), 0 ≤ n ≤ N/2 G(1, m) = F(1, m) m

NW (5.55)

= [x(n) - x(n + N/2)] nNW , 0 ≤ n ≤ N/2

Asumiendo que G(0, m) = d1(n) y G(1, m) = d2(n) para 0 ≤ n ≤ N/2 - 1 (ya que son consideradas secuencias en el dominio del tiempo); entonces de (5.52) tenemos

)()12(),1()()2(),0(

2

1

qDqXqXqDqX qX

=+===

(5.56)

PDF created with pdfFactory trial version www.pdffactory.com

163

Esto implica que los valores de la TDF X(k) son calculados de forma decimada. Por lo tanto, este enfoque es llamado algoritmo TRF de decimación en frecuencia (TRF-DF), cuyo diagrama de flujo es una estructura

transpuesta de la estructura TRF-DT, y su complejidad computacional es también igual a NN

2log2

.

Con lo que respecta a la implementación, MATLAB posee una función llamada fft la cual calcula la TDF de un vector x; ésta es, usualmente, invocada con x=fft(x,N), la cual calcula la TDF con N-puntos. Si la longitud de x es menor que N, entonces x es rellenada con ceros, y si el argumento N es omitido, entonces la longitud de la TDF es igual a la longitud de x. Otro aspecto de interés es que si x es una matriz, entones fft(x,N) calcula la TDF con N-puntos de cada columna de x. Esta función fft esta escrita en lenguaje máquina y no usa comandos de MATLAB (no esta disponible como archivo .m). Por lo tanto su ejecución es muy rápida, además de que esta escrita en forma de un algoritmo radix-mezclado. Si N es potencia de 2, entonces utiliza un algoritmo TRF radix-2 de alta velocidad. En caso de que N no sea una potencia de 2, entonces, N es descompuesta en factores primos y un algoritmo TRF radix-mezclado es usado. Finalmente, si N es un número primo, entonces la función fft es reducida al algoritmo de la TDF. La TDF inversa es calculada usando la función ifft , la cual posee las mismas características de la función fft. Ahora , con el propósito de estudiar el tiempo de ejecución de la función fft para distintos valores de N nos valemos del siguiente ejemplo, el cual nos revelará la estrategia divide y combina para varios valores de N. Los valores de N a considerar son 1 ≤ N ≤ 2048. Para determinar el tiempo de ejecución, MATLAB posee dos funciones: la función clock que proporciona la lectura del tiempo al instante, y la función etime(t1,t2) que calcula el tiempo transcurrido entre dos marcas de tiempo , t1 y t2. Así, para determinar el tiempo de ejecución generaremos vectores aleatorios cuyas longitudes irán de 1 a 2048, para los cuales será calculada su TRF; además su tiempo de cálculo será guardado en un arreglo. Finalmente, graficaremos el tiempo de ejecución con respecto a N. Los siguiente dos scripts (cada uno en su respectivo archivo .m) muestran este procedimiento.

>> Nmax = 2048; >> fft_time=zeros(1,Nmax); >> for n=1:1:Nmax

>> x=rand(1,n); >> t=clock;fft(x);fft_time(n)=etime(clock,t);

>> end >> n=[1:1:Nmax]; >> save fft_time.mat fft_time n; %Guarda los valores obtenidos en el archivo fft_time.mat % para no tener que calcularlos cada vez que se

%ejecute el programa. ------------------------------------------------------------------------------------------------------------

>> load fft_time.mat; %Recupera los datos obtenidos en el script % de arriba

>> top = ceil(max(fft_time)); %n = 1:2048; >> clf >> plot(n,fft_time,'.');axis([0,2500,0,50]) >> xlabel('N');ylabel('Tiempo (segundos)') >> title('Tiempos de Ejecución de la TRF') >> text(2100,top,'o(N*N)') >> text(2100,top/2,'o(N*N/2)') >> text(2100,top/3,'o(N*N/3)') >> text(2100,top/4,'o(N*N/4)') >> text(2100,1,'o(N*logN)')

PDF created with pdfFactory trial version www.pdffactory.com

164

La gráfica de los tiempos de ejecución se muestra enseguida. Los puntos en la gráfica no muestran una función clara, pero se puede observar que existen grupos de puntos con cierta tendencia, en donde los grupos más altos representan a o(N2), lo que significa que estos valores deben ser números primos entre 1 y 2048 para los cuales el algoritmo de la TRF se comporta como el algoritmo de la TDF. Similarmente, existen grupos que se comportan como o(N2/2), o(N2/3), o(N2/4), y así por el estilo, para los cuales el número N tiene menos descomposiciones. El último grupo muestra la dependencia o(N log N) (casi lineal) la cual corresponde a los valores de N=2v, 0 ≤ v ≤ 11. Por lo que, para estos valores de N, el algoritmo empleado es el TRF radix-2. Para todos los demás valores el algoritmo empleado es el TRF radix-mezclado. Con esto demostramos que la estrategia divide y combina es muy eficiente cuando N es muy variada. Para darnos una idea de los resultados obtenidos tenemos que el tiempo de ejecución para N=2048 es de 0.16 segundos, para N=2047 es de 2.48 segundos y para N=2039 es de 46.96 segundos. En base a estos argumentos las funciones desarrolladas previamente en MATLAB en esta sección podrían ser modificadas sustituyendo la función fft en lugar de la función tdf, y así del mismo modo en los ejemplos podríamos hacer uso de una N altamente compuesta. Una buena práctica sería escoger N=2v a menos que una situación es específico demande lo contrario. Convoluciones Rápidas La función conv de MATLAB es implementada usando la función filter (que está escrita en C) la cual es muy eficiente para valores pequeños de N ( < 50 ), pero cuando los valores de N son grandes es posible aumentar la velocidad de la convolución usando el algoritmo de la TRF. Este enfoque usa la convolución circular para implementar la convolución lineal, y la TRF para implementar la convolución circular es llamado algoritmo de la convolución rápida, en el cual si elegimos N=2v e implementamos la TRF radix-2, entonces, el algoritmo es llamado convolución de alta velocidad. Si x1(n) es una secuencia con N1-puntos y

PDF created with pdfFactory trial version www.pdffactory.com

165

x2(n) es una secuencia con N2-puntos, entonces para la convolución de alta velocidad N es elegida de modo que

)1(log 2122 −+= NNN (5.57) en donde x es el entero más pequeño que a la vez es más grande que x (también llamada función techo). Con esto , ahora la convolución lineal x1(n)*x2(n) puede ser implementada con dos TRFs con N-puntos, una TRFI con N-puntos y un producto punto con N-puntos, como se muestra

x1(n) * x2(n) = TRFI[ TRF[x1(n)] ⋅ TRF[x2(n)] ] (5.58) Para valores grandes de N, (5.58) es más rápida que la convolución en el dominio del tiempo, como veremos en el siguiente ejemplo. Para demostrar la efectividad de la convolución de alta velocidad nos valemos de las secuencias x1(n) y x2(n), en donde x1(n) es una secuencia aleatoria con L-puntos uniformemente distribuida entre [0,1], y x2(n) es una secuencia aleatoria Gaussiana con media 0 y varianza 1 formada por L-puntos. Determinaremos los tiempos de ejecución promedio para 1 ≤ L ≤ 150, en donde el promedio es calculado sobre 100 realizaciones de las secuencias aleatorias. El código es el siguiente:

>> conv_time = zeros(1,150); fft_time = zeros(1,150); % >> for N = 1:150

>> tc = 0; tf=0; >> L = 2*N-1; nu = ceil(log10(L)/log10(2)); L = 2^nu; >> for I=1:100 >> h = randn(1,N); >> x = rand(1,N); >> t0 = clock; y1 = conv(h,x); t1=etime(clock,t0); >> tc = tc+t1; >> t0 = clock; y2 = ifft(fft(h,L).*fft(x,L)); t2=etime(clock,t0); >> tf = tf+t2; >> end

% >> conv_time(N)=tc/100; >> fft_time(N)=tf/100;

>> end % >> n = 1:150; subplot(1,1,1); >> plot(n(25:150),conv_time(25:150),n(25:150),fft_time(25:150)) >> save times.txt conv_time fft_time -ascii -tabs

---------------------------------------------------------------------------------------

>> load times.txt -ascii; %Recupera los datos >> conv_time=times(1,:); >> conv_time_AV=times(2,:); >> n = 1:150; subplot(1,1,1); >> plot(n(25:150),conv_time(25:150),n(25:150),conv_time_AV(25:150)) >> text(85,0.035,'Convolución') >> text(110,0.02,'Convolución de') >> text(111,0.018,'alta velocidad') >> xlabel('Longitud de la secuencia, N'); ylabel('Tiempo (segundos)'); >> title('Comparación de los tiempos de convolución');

PDF created with pdfFactory trial version www.pdffactory.com

166

La gráfica siguiente muestra los tiempos de la convolución lineal y la convolución de alta velocidad para 1 ≤ L ≤ 150, en donde cabe notar que estos tiempos dependen de la plataforma en la cual se ejecute el código anterior (esta gráfica fue obtenida empleando una computadora 486 a 66 MHz). La gráfica muestra que para valores pequeños de L la convolución lineal es más rápida, mientras que para los puntos más allá del cruce donde aparece L=90 el tiempo de la convolución lineal se incrementa exponencialmente, y la convolución de alta velocidad se incrementa linealmente. Notar que, cuando N=2v, el tiempo de la convolución de alta velocidad es constante sobre un rango de L. Convoluciones de Alta Velocidad por Bloque Anteriormente discutimos el algoritmo de la convolución por bloque llamado método de superponer-guardar (y su método compañero de superponer-sumar), el cual es usado para convolucionar una secuencia muy larga con una secuencia más pequeña. También vimos que la función SuperpGuardar desarrollada anteriormente, utiliza la TDF para implementar la convolución lineal. Ahora, podemos reemplazar a la TDF por el algoritmo TRF radix-2 para así obtener un algoritmo superponer-guardar de alta velocidad. La siguiente función llamada SuperpGuardarAV muestra este algoritmo.

20 40 60 80 100 120 140 1600.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

0.045

0.05

0.055

Convolució n

Convolució n dealta velocidad

Longitud de la secuencia, N

Tiem

po (s

egun

dos)

Comparació n de los tiempos de convolució n

PDF created with pdfFactory trial version www.pdffactory.com

167

Una modificación similar puede ser hecha al algoritmo superponer-sumar.

function [y] = SuperpGuardarAV(x,h,N) % Método superponer-guardar de alta velocidad % para convoluciones por bloque usando la función fft % --------------------------------------------------- % [y] = SuperpGuardarAV(x,h,N) % y = secuencia de salida % x = secuencia de entrada % h = respuesta al impulso % N = longitud del bloque (debe ser una potencia de 2) % N = 2^(ceil(log10(N)/log10(2)); Longx = length(x); M = length(h); M1 = M-1; L = N-M1; h = fft(h,N); % x = [zeros(1,M1), x, zeros(1,N-1)]; K = floor((Longx+M1-1)/(L)); % K = numero de bloques Y = zeros(K+1,N); for k=0:K xk = fft(x(k*L+1:k*L+N)); Y(k+1,:) = real(ifft(xk.*h)); end Y = Y(:,M:N)'; y = (Y(:))';

PDF created with pdfFactory trial version www.pdffactory.com

169

DISEÑO DE FILTROS FIR

En este capítulo ponemos nuestra atención al problema de diseñar sistemas a partir de especificaciones dadas, ya que es un problema importante además de difícil. Tenemos que en el procesamiento digital de señales hay dos tipos importantes de sistemas: el primero de ellos lleva acabo el filtrado de señales en el dominio del tiempo y por lo tanto son llamados filtros digitales. El segundo tipo de sistemas lleva a cabo la representación de señales en el dominio de la frecuencia, y son llamados analizadores espectrales; tal representación fue descrita en la sección 5 con el uso de la TDF. En esta sección y en las próximas estudiaremos varios algoritmos básicos de diseño para filtros FIR e IIR, los cuales son principalmente del tipo selectivos de frecuencias; es decir, diseñaremos principalmente filtros multibanda como son: pasa bajas, pasa altas, pasa banda y supresor de banda. En el diseño de filtros FIR también consideraremos sistemas como diferenciadores o transformadores de Hilbert, los cuales, aunque no son filtros selectivos de frecuencias siguen las técnicas de diseño que consideraremos. Primero comenzaremos con algunas cuestiones preliminares relacionadas con la filosofía y especificaciones del diseño, las cuales son aplicables tanto al diseño de filtros FIR como a los filtros IIR. En esta sección estudiaremos los algoritmos de diseño para filtros FIR y en la siguiente sección continuaremos con los filtros IIR. En general, el diseño de cualquier filtro digital es llevado a cabo en 3 pasos: 1. Especificaciones: Antes de poder diseñar un filtro debemos tener algunas especificaciones, las cuales son

determinadas por la aplicación. 2. Aproximaciones: Una vez que las especificaciones son definidas, se hace uso de los conceptos y

herramientas matemáticas ya descritos para establecer la descripción del filtro que aproxime las especificaciones dadas.

3. Implementación: El resultado del paso anterior es una descripción del filtro en forma de ecuaciones de

diferencia, una función de transferencia H(z), o una respuesta impulsiva h(n). En nuestro caso, discutiremos en detalle solamente el segundo paso, el cual corresponde a la conversión de las especificaciones en la descripción del filtro. En muchas aplicaciones como en el procesamiento de señales de voz o audio, los filtros son usados para implementar operaciones selectivas de frecuencias, por tal motivo, las especificaciones son requeridas en el dominio de la frecuencia, en términos de las respuestas en magnitud y fase del filtro. Generalmente es deseable una respuesta lineal en fase en la banda de paso, que en el caso de los filtros FIR es posible lograr tal respuesta de fase lineal exacta; sin embargo, para el caso de los filtros IIR una fase lineal en la banda de paso no es posible. Por tal motivo solamente consideraremos especificaciones de magnitud.

SECCIÓN

6

PDF created with pdfFactory trial version www.pdffactory.com

170

Las especificaciones de magnitud son dadas en una de dos posibles formas: el primer enfoque es llamado especificaciones absolutas, el cual proporciona una serie de requerimientos en la función de respuesta en magnitud |H(ejω)|. Estas especificaciones son generalmente usadas por los filtros FIR, mientras que los filtros IIR son especificados de una forma diferente, como se vera en la siguiente sección. El segundo enfoque es llamado especificaciones relativas, el cual proporciona los requerimientos en decibeles (dB), los cuales están definidos por

dB = 0|)(|

|)(|log20 10 ≥− ω

ω

jmax

j

eHeH

Este enfoque es uno de las más populares en la práctica y es usado por ambos tipos de filtros FIR e IIR. Para ilustrar estos dos tipos de especificaciones consideraremos el diseño de un filtro pasa bajas en el siguiente ejemplo, pero antes expondremos algunas definiciones. Especificaciones Absolutas Una típica especificación absoluta de un filtro pasa bajas es la que se muestra en la figura de abajo, en la cual

• La banda [0, ωp] es llamada banda de paso, y δ1 es la tolerancia (o rizo) que estamos dispuestos a aceptar en la respuesta de la banda de paso ideal ,

• la banda [ωs, π] es llamada banda de rechazo, y δ2 es la correspondiente tolerancia (o rizo), y • la banda [ωp, ωs] es llamada banda de transición, donde no hay restricciones de la respuesta en

magnitud.

Especificaciones relativas (dB) Una típica especificación relativa de un filtro pasa bajas es la que se muestra en la figura siguiente, en la cual

• Rp es el rizo en la banda de paso en dB, y • As es la atenuación en la banda de rechazo en dB.

PDF created with pdfFactory trial version www.pdffactory.com

171

Los parámetros dados en los dos tipos de especificaciones anteriores están obviamente relacionados, ya que | H(ejω) |max en las especificaciones absolutas es igual a (1 + δ1), tenemos que

Rp = )0(011

log201

110 ≈>

δ+δ−

− (6.1)

y

As= )1(01

log201

210 >>>

δ+δ

− (6.2)

Ahora sí entraremos de lleno a nuestro ejemplo pendiente, en donde tenemos que las especificaciones del filtro son: 0.25 dB de rizo en la banda de paso, y 50 dB de atenuación en la banda de rechazo. Determinaremos δ1 y δ2. Usando (6.1), obtenemos que

Rp = 0.25 = 11

110 1

1log20 δ⇒

δ+δ−

− = 0.0144

y usando (6.2), obtenemos

As = 50 = 22

101

210 0144.01

log201

log20 δ⇒+

δ−=

δ+δ

− = 0.0032

Un segundo ejemplo que podemos realizar consiste en que dada la tolerancia δ1=0.01 para la banda de paso y la tolerancia δ2 =0.001 para la banda de rechazo. Determinaremos el rizo Rp en la banda de paso y la atenuación As en la banda de rechazo. De (6.1) el rizo en la banda de paso es

Rp = 1

110 1

1log20

δ+δ−

− = 0.1737 dB

PDF created with pdfFactory trial version www.pdffactory.com

172

y de (6.2) la atenuación en la banda de rechazo es

As = 1

210 1

log20δ+

δ− = 60 dB

De forma similar a como se hizo con las especificaciones para un filtro pasa bajas, estas también pueden ser dadas para otros tipos de filtros , como son los filtros pasa altas o pasa banda. Sin embargo, los parámetros más importantes de diseño son las tolerancias (o rizos) en la banda de frecuencia y las frecuencias en los bordes de banda. Por lo tanto, en la descripción de las técnicas de diseño nos concentraremos en el filtro pasa bajas, para posteriormente servirnos de las relaciones de transformación para convertir un filtro pasa bajas en cualesquiera otro tipo de filtro. Para esclarecer estas ideas, establecemos el propósito del diseño en los siguientes términos:

Planteamiento del problema Diseñar un filtro pasa bajas, Vg., obtener su función del sistema H(z) o su ecuación de diferencia, que tiene una banda de paso [0, ωp] con tolerancia δ1 (o Rp en dB) y una banda de rechazo [ωs, π] con tolerancia δ2 (o As en dB).

En esta sección enfocaremos nuestra atención a el diseño y aproximación de filtros digitales FIR, ya que estos observan varias ventajas en su diseños e implementación: • La respuesta en fase puede ser exactamente lineal. • Son relativamente fáciles de diseñar, ya que no hay problemas de estabilidad. • Son eficientes en su implementación. • La TDF puede ser usada en su implementación. • El diseño del problema contiene solamente aritmética real y no aritmética compleja; • los filtros con fase lineal no proporcionan distorsión a causa de retrasos, sino que solamente presentan

una cantidad fija de retardo; • para los filtros de longitud M (o de orden M-1) el número de operaciones es del orden de M/2 como se

discutió en la implementación de filtros con fase lineal. PROPIEDADES DE LOS FILTROS FIR CON FASE LINEAL

En este apartado discutiremos las formas de las respuestas impulsiva y en frecuencia, y la localización de los ceros de la función del sistema para los filtros FIR con fase lineal. Consideremos que h(n) es la respuesta al impulso, de longitud (o duración) M en el intervalo 0 ≤ n ≤ M-1 , entonces la función del sistema es

H(z) = ∑∑−

=

−−−−−

=

− =1

0

1)1(1

0)()(

M

n

nMMM

n

n znhz znh

la cual tiene (M-1) polos en el origen z = 0 y (M-1) ceros localizados en algún sitio del plano-z. La función de respuesta en frecuencia es

PDF created with pdfFactory trial version www.pdffactory.com

173

0 (M-1)/2 (M-1)

0

Respuesta al Impulso Simé trico: M impar

n

h(n)

H(ejω) = ∑−

=

ω−1

0)(

M

n

njenh , π < ω ≤ π

Respuesta al Impulso h(n) Si imponemos una limitación de fase lineal, como

∠ H(ejω) = -αω, -π < ω ≤ π donde α es una constante de retraso de fase. Sabemos que h(n) debe ser simétrica, esto es,

h(n) = h(M - 1 - n), 0 ≤ n ≤ (M-1) con α =2

1−M (6.3)

Por lo tanto h(n) es simétrica alrededor de α que es el índice de simetría. Con esto tenemos que hay dos tipos de simetría: • M impar: En este caso α = (M-1)/2 es un entero y la respuesta al impulso es como se muestra abajo. El código que nos permitió obtener la figura de arriba es el siguiente:

>> subplot(2,1,1) % M impar >> h = [-4,1,-1,-2,5,6,5,-2,-1,1,-4]; >> M = length(h); n = 0:M-1; alpha = (M-1)/2; >> stem(n,h); axis([-1,M,-5,8]); >> title('Respuesta al Impulso Simétrico: M impar') >> xlabel('n'); ylabel('h(n)') >> set(gca,'XtickMode','manual','Xtick',[0,5,10],'Xgrid','on') >> set(gca,'XtickLabelMode','manual',...

>> 'XtickLabels',[' 0 ';'(M-1)/2';' (M-1) ']) >> set(gca,'YtickMode','manual','Ytick',[0],'Ygrid','off') >> set(gca,'YtickLabelMode','manual','YtickLabel',['0']) % %El siguiente código solo sirve para dibujar una línea >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('Xdata',xaux,'Ydata',yaux,'LineWidth',0.25);

PDF created with pdfFactory trial version www.pdffactory.com

174

0 M/2+1 M/2 M-1

0

Respuesta al Impulso Simé trico: M par

n

h(n)

• M par: En este caso α = (M-1)/2 no es un entero y la respuesta al impulso es la siguiente. El código que nos permitió obtener la figura de arriba es el siguiente:

>> subplot(2,1,1) % M par >> h = [-4,1,-1,-2,5,6,6,5,-2,-1,1,-4]; >> M = length(h); n = 0:M-1; alpha = (M-1)/2; >> stem(n,h); axis([-1,M,-5,8]); >> title('Respuesta al Impulso Simétrico: M par') >> xlabel('n'); ylabel('h(n)') >> set(gca,'XTickMode','manual','XTick',[0,5,6,11],'Xgrid','on') >> set(gca,'XTickLabelMode','manual',...

>> 'XTickLabels',[' 0 ';'M/2+1';' M/2 ';' M-1 ']) >> set(gca,'YTickMode','manual','YTick',[0],'Ygrid','off') >> set(gca,'YTickLabelMode','manual','YTickLabel',['0']) % %El siguiente código solo sirve para dibujar una línea >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

Podemos tener un segundo tipo de filtro FIR con "fase lineal" si hacemos que la respuesta en fase ∠ H(ejω) satisfaga la condición

∠ H(ejω) = β - αω la cual corresponde a una línea recta que no pasa por el origen. En este caso α no es una constante de retraso de fase, pero

α−=ω

∠ ω

deHd j )(

es una constante, que corresponde a lo que se conoce como retardo de grupo, por lo que α es llamada constante de retardo de grupo. En este caso, como grupo, las frecuencias son retrasadas con una tasa constante, aunque algunas frecuencias podrían retrasarse más y otras retrasarse menos. Así que, para este tipo de fase lineal se puede mostrar que

h(n) = -h(M - 1 - n), 0 ≤ n ≤ (M-1); α =2

1−M, β =

± (6.4)

PDF created with pdfFactory trial version www.pdffactory.com

175

0 (M-1)/2 M-1

0

Respuesta al Impulso Antisimé trica: M impar

n

h(n)

Esto significa que la respuesta al impulso h(n) es antisimétrica, y que el índice de simetría es todavía α=(M-1)/2; nuevamente tenemos dos posibles tipos, uno para M impar y otro para M par. • M impar: En este caso α = (M-1)/2 es un entero y la respuesta al impulso es como se muestra abajo. El código que nos permitió obtener la figura de arriba es el siguiente:

>> subplot(2,1,1) % M impar >> h = [-4,1,-1,-2,5,0,-5,2,1,-1,4]; >> M = length(h); n = 0:M-1; alpha = (M-1)/2; >> subplot(2,1,1); >> stem(n,h); axis([-1,M,-8,8]); >> title('Respuesta al Impulso Antisimétrica: M impar') >> xlabel('n'); ylabel('h(n)') >> set(gca,'XTickMode','manual','XTick',[0,5,10],'Xgrid','on') >> set(gca,'XTickLabelMode','manual',... >> 'XTickLabels',[' 0 ';'(M-1)/2';' M-1 ']) >> set(gca,'YTickMode','manual','YTick',[0],'Ygrid','off') >> set(gca,'YTickLabelMode','manual','YTickLabel',['0']) % %El siguiente código solo sirve para dibujar una línea >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

Aquí, debemos notar que la muestra h(α) en α = (M-1)/2 debe ser necesariamente igual a cero, Vg., h((M-/2)=0. • M par: En este caso α = (M-1)/2 no es un entero y la respuesta al impulso es la siguiente.

PDF created with pdfFactory trial version www.pdffactory.com

176

0 M/2+1 M/2 M-1

0

Respuesta al Impulso Antisimé trica: M par

n

h(n)

El código que nos permitió obtener la figura de arriba es el siguiente:

>> subplot(2,1,1) % M par >> h = [-4,1,-1,-2,5,6,-6,-5,2,1,-1,4]; >> M = length(h); n = 0:M-1; alpha = (M-1)/2; >> stem(n,h); axis([-1,M,-8,8]); >> title('Respuesta al Impulso Antisimétrica: M par') >> xlabel('n'); ylabel('h(n)') >> set(gca,'XTickMode','manual','XTick',[0,5,6,11],'Xgrid','on') >> set(gca,'XTickLabelMode','manual',... >> 'XTickLabels',[' 0 ';'M/2+1';' M/2 ';' M-1 ']) >> set(gca,'YTickMode','manual','YTick',[0],'Ygrid','off') >> set(gca,'YTickLabelMode','manual','YTickLabel',['0']) % %El siguiente código solo sirve para dibujar una línea >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

Respuesta en Frecuencia H(ejω) Cuando los casos de simetría y antisimetría son combinados con M impar y par, obtenemos cuatro tipos de filtros FIR con fase lineal, en donde las funciones de respuesta en frecuencia para cada uno de estos tipos tienen algunas formas y expresiones peculiares. Para estudiar estas respuestas, escribimos a H(ejω) como

H(ejω) = ;)( )( αω−βω j

r eH β = 2π

± , α =2

1−M (6.5)

en donde Hr(ω) es una función de respuesta en amplitud y no una función de respuesta en magnitud. La respuesta en amplitud es una función real, diferente a la respuesta en magnitud, que es siempre positiva; la respuesta en amplitud puede ser tanto positiva como negativa. Por otro lado, la respuesta en fase asociada con la respuesta en magnitud es una función discontinua, mientras que la asociada con la respuesta en amplitud es una función lineal continua. Para ilustrar la diferencia entre estos dos tipos de respuestas, consideraremos el siguiente ejemplo. Dada la respuesta al impulso h(n) = 1, 1, 1. Determinaremos y graficaremos las respuestas en frecuencia. ↑

PDF created with pdfFactory trial version www.pdffactory.com

177

Así tenemos que la función de respuesta en frecuencia es

H(ejω) = ∑ ω2

0)( njenh = 1 + 1e-jω + e-j2ω = ejω + 1 + e-jω e-jω

= 1 + 2cos ω e-jω a partir de esta última expresión tenemos que las respuestas en magnitud y fase son:

| H(ejω) | = |1 + 2cos ω|, 0 < ω ≤ π

∠ H(ejω) =

π<ω<πω−ππ<ω<ω−

3/2,3/20

ya que cos ω puede ser tanto positivo como negativo. En este caso la respuesta en fase es lineal por tramos. Por el otro lado, tenemos que las correspondientes respuestas en amplitud y fase son:

,)(,cos21)(

ω−=∠

ω+=ωωj

r

eHH

-π < ω ≤ π

En este caso la respuesta en fase es verdaderamente lineal. El código que nos permite obtener las correspondientes formas gráficas de estas respuestas se muestra a continuación.

>> h = [1,1,1]; >> w = [0:500]*pi/500; >> H = freqz(h,1,w); >> magH = abs(H); faseH = angle(H); >> ampH = ones(1,501)+2*cos(w); angH = -w; >> subplot(1,1,1) >> subplot(2,2,1); plot(w/pi,magH); title('Respuesta en Magnitud'); >> ylabel('|H|'); grid >> axis([0 1 -1.5 3.5]); >> set(gca,'XTickMode','manual','XTick',[0;0.6667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'2/3';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[0]) >> subplot(2,2,3); plot(w/pi,faseH/pi); title('Respuesta en Fase Lineal (por trozos)'); >> xlabel('Frecuencia en unidades de \pi'); ylabel('Angulo en unidades de \pi'); grid >> axis([0 1 -1 1]) >> set(gca,'XTickMode','manual','XTick',[0;0.6667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'2/3';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[-0.6667;0;0.3333]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['-2/3';' 0';' 2/3']) >> subplot(2,2,2); plot(w/pi,ampH); title('Respuesta en Amplitud'); >> ylabel('Hr'); grid >> axis([0 1 -1.5 3.5]) >> set(gca,'XTickMode','manual','XTick',[0;0.6667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'2/3';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[0]) >> subplot(2,2,4); plot(w/pi,angH/pi); title('Respuesta en Fase Lineal'); >> xlabel('Frecuencia en unidades de \pi'); ylabel('Angulo en unidades de \pi'); grid >> axis([0 1 -1 1]) >> set(gca,'XTickMode','manual','XTick',[0;0.6667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'2/3';' 1 '])

PDF created with pdfFactory trial version www.pdffactory.com

178

>> set(gca,'YTickMode','manual','YTick',[-0.6667;0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['-2/3';' 0'])

Las gráficas son las siguientes: Para este ejemplo , la diferencia entre las respuestas en magnitud y amplitud (o entre la fase lineal y la fase lineal por tramos) son muy claras. Filtro FIR con fase lineal Tipo-1: Respuesta al Impulso Simétrica, M impar En este caso β = 0, α = (M-1)/2 es un entero, y h(n) = (M-1-n) en el intervalo 0 ≤ n ≤ M-1. Entonces podemos mostrar que

H(ejω) = 2/)1(2/)1(

0cos)( −ω−

=

ω∑ Mj

M

ne nna (6.6)

en donde la secuencia a(n) es obtenida a partir de h(n) como

a(0) =

21Mh : muestra central

(6.7)

a(n) = ,2

12

− nMh 2

31 −≤≤

Mn

0 2/3 1

0

Respuesta en Magnitud|H

|

0 2/3 1

-2/3

0

2/3

Respuesta en Fase Lineal (por trozos)

Frecuencia en unidades de π

Angu

lo e

n un

idad

es d

e π

0 2/3 1

0

Respuesta en Amplitud

Hr

0 2/3 1

-2/3

0

Respuesta en Fase Lineal

Frecuencia en unidades de π

Angu

lo e

n un

idad

es d

e π

Respuesta en Amplitud vs Respuesta en Magnitud

PDF created with pdfFactory trial version www.pdffactory.com

179

Comparando (6.5) con (6.6), tenemos que

∑−

=

ω=ω2/)1(

0cos)()(

M

nr nnaH (6.8)

Filtro FIR con fase lineal Tipo-2: Respuesta al impulso simétrica, M par En este caso otra vez β = 0, h(n) = (M-1-n) en el intervalo 0 ≤ n ≤ M-1, pero ahora α = (M-1)/2 no es un entero. Entonces podemos mostrar que

H(ejω) = 2/)1(2/

1 21cos)( −ω−

=

−ω∑ Mj

M

ne nnb (6.9)

donde

b(n) = ,2

2

− nMh n = 1, 2, . . . ,

2M

(6.10)

Por lo tanto

∑=

−ω=ω

2/

1 21cos)()(

M

nr n nbH (6.11)

A manera de observación tenemos que en ω = π, obtenemos

∑=

−π=π

2/

1 21cos)()(

M

nr n nbH = 0

sin tener en cuenta a b(n) o h(n). Por lo tanto no podemos hacer uso de este caso, Vg., h(n) simétrica con M par, para filtros pasa altas o rechaza banda. Filtro FIR con fase lineal Tipo-3: Respuesta al impulso antisimétrica, M impar En este caso β= π/2, α= (M-1)/2 es un entero, h(n) =- h(M-1-n) en el intervalo 0 ≤ n ≤ M-1, y h((M-1)/2) = 0. Entonces podemos mostrar que

H(ejω) =

ω

−π−

=

ω∑ 2

12

2/)1(

1

)(MjM

ne n sin nc (6.12)

donde

c(n) = ,2

12

− nMh n = 1, 2, . . . ,2

1−M (6.13)

y

∑−

=

ω=ω2/)1(

1)()(

M

nr n sin nc H (6.14)

PDF created with pdfFactory trial version www.pdffactory.com

180

Si nos fijamos en ω=0 y ω=π tenemos que Hr(ω)=0 independientemente de c(n) o h(n). Además, ejπ/2 = j, lo que significa que jHr(ω) es puramente imaginario. Por lo tanto, este tipo de filtro no es adecuado para el diseño de un filtro pasa bajas o un filtro pasa altas. Sin embargo, este comportamiento es adecuado para la aproximación de los transformadores digitales de Hilbert y los diferenciadores ideales. Un transformador ideal de Hilbert es un filtro pasa todo que agrega un desplazamiento en la fase de 90º sobre la señal de entrada, y este es frecuentemente usado en los sistemas de comunicaciones para propósitos de modulación. Por su parte los diferenciadores son usados en muchos sistemas analógicos y digitales para lograr la derivada de una señal. Filtro FIR con fase lineal Tipo-4: Respuesta al impulso antisimétrica, M par Este caso es similar al Tipo-2, así tenemos que

H(ejω) = 2/)1(2/

1 21)( −ω−

=

−ω∑ Mj

M

ne n sin nd (6.15)

donde

d(n) = ,2

2

− nMh n = 1, 2, . . . ,

2M

(6.16)

y

∑=

−ω=ω

2/

1 21)()(

M

nr n sin ndH (6.17)

Si nos fijamos en ω=0 tenemos que, Hr(0)=0 y ejπ/2 = j. Por lo tanto este tipo de filtro también es adecuado para el diseño de los transformadores digitales de Hilbert y los diferenciadores. Con respecto a la implementación en MATLAB, este posee una rutina llamada freqz que calcula la respuesta en frecuencia; pero no podemos determinar la respuesta en amplitud a partir de ésta, debido a que no hay una función en MATLAB comparable a la función abs que pueda encontrar la amplitud. Sin embargo, resulta fácil escribir una rutina que nos permita calcular la respuesta en amplitud para cada uno de los cuatro tipos. Estas cuatro funciones se muestran a continuación.

1. Hr Tipo-1:

function [Hr,w,a,L] = Hr_Tipo1(h); % Calcula la Respuesta en Amplitud Hr(w) de un filtro FIR PB Tipo-1 % ----------------------------------------------------------------------------------- % [Hr,w,a,L] = Hr_Tipo1(h) % Hr = Respuesta en Amplitud % w = 500 frecuencias entre [0 pi] sobre las cuales Hr es calculada % a = Coeficientes del filtro FIR PB Tipo-1 % L = Orden de Hr % h = Respuesta al Impulso del filtro PB Tipo-1 % M = length(h); L = (M-1)/2; a = [h(L+1) 2*h(L:-1:1)]; % Vector rengon 1x(L+1) n = [0:1:L]; % Vector columna (L+1)x1 w = [0:1:500]'*pi/500; Hr = cos(w*n)*a';

PDF created with pdfFactory trial version www.pdffactory.com

181

2. Hr Tipo-2:

3. Hr Tipo-3:

4. Hr Tipo-4:

function [Hr,w,b,L] = Hr_Tipo2(h); % Calcula la Respuesta en Amplitud Hr(w) de un filtro FIR PB Tipo-2 % ---------------------------------------------------------------------------------- % [Hr,w,b,L] = Hr_Tipo2(h) % Hr = Respuesta en Amplitud % w = frecuencias entre [0 pi] sobre las cuales Hr es calculada % b = Coeficientes del filtro PB Tipo-2 % L = Orden de Hr % h = Respuesta al Impulso del filtro PB Tipo-2 % M = length(h); L = M/2; b = 2*[h(L:-1:1)]; n = [1:1:L]; n = n-0.5; w = [0:1:500]'*pi/500; Hr = cos(w*n)*b';

function [Hr,w,c,L] = Hr_Tipo3(h); % Calcula la Respuesta en Amplitud Hr(w) de un filtro FIR PB Tipo-3 % ----------------------------------------------------------------------------------- % [Hr,w,c,L] = Hr_Tipo3(h) % Hr = Respuesta en Amplitud % w = frecuencias entre [0 pi] sobre las cuales Hr es calculada % c = Coeficientes del filtro FIR PB Tipo-3 % L = Orden de Hr % h = Respuesta al Impulso del filtro PB Tipo-3 % M = length(h); L = (M-1)/2; c = [2*h(L+1:-1:1)]; n = [0:1:L]; w = [0:1:500]'*pi/500; Hr = sin(w*n)*c';

function [Hr,w,d,L] = Hr_Tipo4(h); % Calcula la Respuesta en Amplitud Hr(w) de un filtro FIR PB Tipo-4 % ----------------------------------------------------------------------------------- % [Hr,w,d,L] = Hr_Tipo4(h) % Hr = Respuesta en Amplitud % w = frecuencias entre [0 pi] sobre las cuales Hr es calculada % d = Coeficientes del filtro FIR PB Tipo-4 % L = Orden de d % h = Respuesta al Impulso del filtro PB Tipo-4 % M = length(h); L = M/2; d = 2*[h(L:-1:1)]; n = [1:1:L]; n = n-0.5; w = [0:1:500]'*pi/500; Hr = sin(w*n)*d';

PDF created with pdfFactory trial version www.pdffactory.com

182

Estas cuatro funciones pueden ser combinadas en una sola función, la cual puede ser escrita para determinar el tipo de filtro con fase lineal, e implementar la expresión de la respuesta en amplitud apropiada. Localización de ceros Recordamos que para un filtro FIR existen (M-1) polos en el origen y (M-1) ceros localizados en alguna parte del plano z. Para los filtros FIR con fase lineal, estos ceros poseen ciertas simetrías debido a las restricciones de simetría en h(n). Esto puede ser mostrado si H(z) tiene un cero en

z = z1 = rejθ entonces para la fase lineal debe haber un cero en

z = θ−= jerz11

1

Para un filtro con valores reales también sabemos que si z1 es compleja, entonces debe haber un cero conjugado en θ−= jrez*

1 , lo cual implica que debe haber un cero en θ= jerz )/1(/1 *1 . De esta manera

tenemos que, en general, una constelación de ceros es una cuádrupla

θ−θ−θθ jjjj er

y re er

re 1,,1,

como se muestra en la siguiente figura. A continuación se muestra el código que nos permitió obtener la figura de arriba.

-1.5 -1 -0.5 0 0.5 1 1.5 2

-1

-0.5

0

0.5

1

Parte Real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

z1

conj(z1)

1/z1

1/conj(z1)

PDF created with pdfFactory trial version www.pdffactory.com

183

>> subplot(1,1,1) >> r = 0.6; theta = 50*pi/180; >> z1 = r*exp(j*theta); % localización de un cero arbitrario >> z2 = 1/z1; % localización de un cero con fase lineal >> z3 = conj(z1); % localización de un cero conjugado >> z4 = 1/z3; % localización de un cero conjugado con fase lineal >> b = poly([z1,z2,z3,z4]); >> zplane(b,1) >> title('Diagrama de Polos y Ceros'); >> xlabel('Parte Real'); ylabel('Parte Imaginaria'); >> text(real(z1)-0.1,imag(z1)+0.15,'z1') >> text(real(z3)-0.2,imag(z3)-0.15,'conj(z1)') >> text(real(z2)-0.1,imag(z2)+0.15,'1/z1') >> text(real(z4)-0.2,imag(z4)-0.15,'1/conj(z1)')

Claramente se tiene que si r =1, entonces 1/r = 1, y por lo tanto los ceros están sobre el círculo unitario y se presentan en pares

ejθ y e-jθ Si θ=0 ó θ=π , entonces los ceros están sobre la línea real y también se presentan en pares

r y r1

Finalmente, si r=1 y θ=0 ó θ=π, los ceros están en z=1 ó z=-1. Estas simetrías pueden ser usadas para implementar formas en cascada con secciones de fase lineal. Ahora continuaremos con una serie de ejemplos que nos permiten ilustrar las propiedades de los filtros FIR con fase lineal descritas anteriormente. Ø Dada la secuencia h(n) = -4, 1, -1, -2, 5, 6, 5, -2, -1, 1, -4. ↑ Determinaremos la respuesta en amplitud Hr(ω) y las ubicaciones de los ceros de H(z). Para resolver este problema nos valemos del hecho de que M=11, lo cual es un número impar, y por lo tanto h(n) es simétrica alrededor de α=(11-1)/2 = 5. Con esto tenemos que estamos frente a un filtro FIR con fase lineal Tipo-1, y de (6.7) tenemos que

a(0) = h(α) = h(5) = 6, a(1) = 2h(5 - 1) = 10, a(2) = 2h(2 - 2) = - 4 a(3) = 2h(5 - 3) = - 2, a(4) = 2h(5 - 4) = 2, a(5) = 2h(5 - 5) = - 8

y de (6.8), obtenemos

Hr(ω)= a(0) + a(1)cos ω + a(2)cos 2ω + a(3) cos 3ω + a(4) cos 4ω + a(5) cos 5ω = 6 + 10cos ω - 4cos 2ω - 2cos 3ω + 2cos 4ω - 8cos 5ω El siguiente script nos permite generar las gráficas correspondientes.

PDF created with pdfFactory trial version www.pdffactory.com

184

>> subplot(1,1,1) >> h = [-4,1,-1,-2,5,6,5,-2,-1,1,-4]; >> M = length(h); n = 0:M-1; >> [Hr,w,a,L] = Hr_Tipo1(h); >> a,L a = 6 10 -4 -2 2 -8 L = 5 >> amax = max(a)+1; amin = min(a)-1; >> subplot(2,2,1); stem(n,h); axis([-1 2*L+1 amin amax]) >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n', 'FontSize',8); ylabel('h(n)'); title('Respuesta al Impulso') >> subplot(2,2,3); stem(0:L,a); axis([-1 2*L+1 amin amax]) >> xlabel('n', 'FontSize',8); ylabel('a(n)'); title('Coefficientes de a(n)') >> xaux = [0:L]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,2);plot(w/pi,Hr);grid >> xlabel('Frecuencia en unidades de \pi', 'FontSize',8); ylabel('Hr') >> title('Respuesta en Amplitud Tipo-1') >> subplot(2,2,4);zplane(h,1) >> xlabel('Parte real', 'FontSize',8); ylabel('Parte Imaginaria', 'FontSize',8); >> title('Diagrama de Polos y Ceros'); >> toptitle('Respuesta en Amplitud y Localización de Ceros'); Las gráficas son:

De estas gráficas observamos que no hay restricciones sobre Hr(ω) en ω=0 o en ω=π, además se observa que hay una constelación cuádruple de ceros y, adicionalmente, tres pares de ceros.

0 5 10

-5

0

5

10

n

h(n)

Respuesta al Impulso

0 5 10

-5

0

5

10

n

a(n)

Coeficientes de a(n)

0 0.5 1-20

-10

0

10

20

Frecuencia en unidades de π

Hr

Respuesta en Amplitud Tipo-1

-1 0 1 2

-1

-0.5

0

0.5

1

Parte real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

Respuesta en Amplitud y Localizació n de Ceros

PDF created with pdfFactory trial version www.pdffactory.com

185

Ø Ahora consideraremos la secuencia h(n) = -4, 1, -1, -2, 5, 6, 6, 5, -2, -1, 1, -4 para la cual ↑ determinaremos la respuesta en amplitud Hr(ω) y las ubicaciones de los ceros de H(z). En este caso estamos frente a un filtro FIR con fase lineal Tipo-2 ya que M=12 y h(n) es simétrica con respecto a α=(12-1)/2 = 5.5. De (6.10) tenemos

b(1) = 2h

− 12

12= 12, b(2) = 2h

− 22

12= 10, b(3) = 2h

− 32

12= - 4

b(4) = 2h

− 42

12= - 2, b(5) = 2h

− 52

12= 2, b(6) = 2h

− 62

12= - 8

Por lo tanto de (6.11) obtenemos que

+

+

=

ω+

ω+

ω+

ω+

ω+

ω=ω

ωω

ωωωω

−−−

−−−

2

11

2

9

2

7

2

5

2

3

2

2

16

2

15

2

14

2

13

2

12

2

11

cos8cos2

cos2cos4cos10cos12

cos)6(cos)5(cos)4(

cos)3(cos)2(cos)1()(

bbb

bbbH r

El siguiente script nos permite generar las gráficas correspondientes.

>> subplot(1,1,1) >> h = [-4,1,-1,-2,5,6,6,5,-2,-1,1,-4]; >> M = length(h); n = 0:M-1; >> [Hr,w,b,L] = Hr_Tipo2(h); >> b,L b = 12 10 -4 -2 2 -8 L = 6 >> bmax = max(b)+1; bmin = min(b)-1; >> subplot(2,2,1); stem(n,h); axis([-1 2*L+1 bmin bmax]) >> xaux = [0:M]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n', 'FontSize',8); ylabel('h(n)'); title('Respuesta al Impulso') >> subplot(2,2,3); stem(1:L,b); axis([-1 2*L+1 bmin bmax]) >> xaux = [0:L+3]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n', 'FontSize',8); ylabel('b(n)'); title('Coeficientes de b(n)') >> subplot(2,2,2);plot(w/pi,Hr);grid >> xlabel('Frecuencia en unidades de \pi', 'FontSize',8); ylabel('Hr') >> title('Respuesta en Amplitud Tipo-2') >> subplot(2,2,4);zplane(h,1) >> xlabel('Parte real', 'FontSize',8); ylabel('Parte Imaginaria', 'FontSize',8); >> title('Diagrama de Polos y Ceros'); >> toptitle('Respuesta en Amplitud y Localización de Ceros');

PDF created with pdfFactory trial version www.pdffactory.com

186

Las gráficas son:

De las gráficas podemos observar que Hr(ω) es cero en ω=π, y también observamos que hay una constelación de cuatro ceros, tres pares de ceros y un cero en ω=π, como era de esperarse. Ø Para nuestro siguiente ejemplo consideramos la secuencia h(n) = -4, 1, -1, -2, 5, 0, -5, 2, 1, -1, 4 ↑ para la cual determinaremos la respuesta en amplitud Hr(ω) y las ubicaciones de los ceros de H(z). Ya que M=11, nos indica que es impar y puesto que h(n) es antisimétrica sobre α = (11-1)/2 = 5, entonces estamos tratando con un filtro FIR con fase lineal Tipo-3, y de (6.13) tenemos que

c(0) = h(α) = h(5) = 0, c(1) = 2h(5 - 1) = 10, c(2) = 2h(2 - 2) = - 4 c(3) = 2h(5 - 3) = - 2, c(4) = 2h(5 - 4) = 2, c(5) = 2h(5 - 5) = - 8 de (6.14) obtenemos

)(ωrH = c(0) + c(1) sin ω + c(2) sin 2ω + c(3) sin 3ω + c(4) sin 4ω + c(5) sin 5ω = 0 + 10sin ω - 4sin 2ω - 2 sin 3ω + 2 sin 4ω - 8 sin 5ω El siguiente script nos permite generar las gráficas correspondientes:

>> subplot(1,1,1) >> h = [-4,1,-1,-2,5,0,-5,2,1,-1,4]; >> M = length(h); n = 0:M-1; >> [Hr,w,c,L] = Hr_Tipo3(h); >> c,L c = 0 10 -4 -2 2 -8 L = 5

0 5 10

-5

0

5

10

n

h(n)

Respuesta al Impulso

0 5 10

-5

0

5

10

n

b(n)

Coeficientes de b(n)

0 0.5 1-20

-10

0

10

20

30

Frecuencia en unidades de π

Hr

Respuesta en Amplitud Tipo-2

-1 0 1 2

-1

-0.5

0

0.5

1

Parte real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

Respuesta en Amplitud y Localizació n de Ceros

PDF created with pdfFactory trial version www.pdffactory.com

187

>> cmax = max(c)+1; cmin = min(c)-1; >> subplot(2,2,1); stem(n,h); axis([-1 2*L+1 cmin cmax]) >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('h(n)'); title('Respuesta al Impulso') >> subplot(2,2,3); stem(0:L,c); axis([-1 2*L+1 cmin cmax]) >> xaux = [0:L]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('c(n)'); title('Coeficientes de c(n)') >> subplot(2,2,2);plot(w/pi,Hr);grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr') >> title('Respuesta en Amplitud Tipo-3') >> subplot(2,2,4);zplane(h,1) >> xlabel('Parte real','FontSize',8); ylabel('Parte Imaginaria','FontSize',8); >> title('Diagrama de Polos y Ceros'); >> toptitle('Respuesta en Amplitud y Localización de Ceros'); Las gráficas son:

Podemos observar que Hr(ω)=0 en ω=0 y en ω=π , además se observa que hay una constelación de cuatro ceros, dos pares de ceros y dos ceros en ω=0 y ω=π como era de esperarse. Ø Para nuestro último ejemplo consideramos la secuencia h(n) = -4, 1, -1, -2, 5, 6, -6, -5, 2, 1, -1, 4 ↑ para la cual determinaremos la respuesta en amplitud Hr(ω) y la ubicación de los ceros de H(z). Este es un filtro FIR con fase lineal Tipo-4 ya que M=12, y puesto que h(n) es antisimétrica con respecto a α = (12-1)/2 = 5.5. De (6.16) tenemos que

0 5 10

-5

0

5

10

n

h(n)

Respuesta al Impulso

0 5 10

-5

0

5

10

n

c(n)

Coeficientes de c(n)

0 0.5 1-10

0

10

20

30

Frecuencia en unidades de π

HrRespuesta en Amplitud Tipo-3

-1 0 1

-1

-0.5

0

0.5

1

Parte real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

Respuesta en Amplitud y Localizació n de Ceros

PDF created with pdfFactory trial version www.pdffactory.com

188

d(1) = 2h

− 12

12= 12, d(2) = 2h

− 22

12= 10, d(3) = 2h

− 32

12= - 4

d(4) = 2h

− 42

12= - 2, d(5) = 2h

− 52

12= 2, d(6) = 2h

− 62

12= - 8

Por lo tanto de (6.17) obtenemos

+

+

=

ω+

ω+

ω+

ω+

ω+

ω=ω

ωω

ωωωω

−−−

−−−

2

11

2

9

2

7

2

5

2

3

2

2

16

2

15

2

14

2

13

2

12

2

11

82

241012

)6()5()4(

)3()2()1()(

sinsin

sinsinsinsin

sindsindsind

sindsindsindH r

El siguiente script nos permite generar las gráficas correspondientes:

>> subplot(1,1,1) >> h = [-4,1,-1,-2,5,6,-6,-5,2,1,-1,4]; >> M = length(h); n = 0:M-1; >> [Hr,w,d,L] = Hr_Tipo4(h); >> d,L d = 12 10 -4 -2 2 -8 L = 6 >> dmax = max(d)+1; dmin = min(d)-1; >> subplot(2,2,1); stem(n,h); axis([-1 2*L+1 dmin dmax]) >> xaux = [0:M]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('h(n)'); title('Respuesta al Impulso') >> subplot(2,2,3); stem(1:L,d); axis([-1 2*L+1 dmin dmax]) >> xaux = [0:L+3]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> xlabel('n','FontSize',8); ylabel('d(n)'); title('Coeficientes de d(n)') >> subplot(2,2,2);plot(w/pi,Hr);grid >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr') >> title('Respuesta en Amplitud Tipo-4') >> subplot(2,2,4);zplane(h,1) >> xlabel('Parte real','FontSize',8); ylabel('Parte Imaginaria','FontSize',8); >> title('Diagrama de Polos y Ceros'); >> toptitle('Respuesta en Amplitud y Localización de Ceros'); Las gráficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

189

De estas gráficas observamos que Hr(ω) es cero en ω=0, y además, existe una constelación de cuatro ceros, tres pares de ceros, y un cero en ω=0 como era de esperarse. TÉCNICAS DE DISEÑO CON VENTANAS

La idea básica detrás del diseño con ventana es elegir un filtro ideal adecuado (el cual supone una respuesta al impulso no causal y de duración infinita), y entonces truncar ("ventanear") su respuesta al impulso para obtener un filtro FIR causal y con fase lineal. Por lo tanto, el énfasis en este método es la elección de una apropiada función de ventaneo y un filtro ideal apropiado. Denotaremos a un filtro ideal por Hd(ejω), el cual posee una ganancia de magnitud unitaria y fase lineal características en su banda de paso, y respuesta cero sobre su banda de rechazo. Así, un FPB ideal con ancho de banda ωc < π esta dado por

Hd(ejω) =

π≤ω<ω

ω≤ω⋅ αω−

e

c

cj

||,0||,1

(6.18)

donde ωc también es llamada frecuencia de corte, y α es llamada retraso de la muestra. La respuesta al impulso de este filtro es de duración infinita y esta dada por

0 5 10

-5

0

5

10

n

h(n)

Respuesta al Impulso

0 5 10

-5

0

5

10

n

d(n)

Coeficientes de d(n)

0 0.5 1-10

0

10

20

30

Frecuencia en unidades de π

Hr

Respuesta en Amplitud Tipo-4

-2 -1 0 1 2

-1

-0.5

0

0.5

1

Parte real

Parte

Imag

inar

ia

Diagrama de Polos y Ceros

Respuesta en Amplitud y Localizació n de Ceros

PDF created with pdfFactory trial version www.pdffactory.com

190

hd(n) = F-1[Hd(ejω)] = ∫π

π−

ωω ωπ

deeH njjd )(

21

(6.19)

= ∫ω

ω−

ωαω− ω⋅π

c

c

dee njj121

= [ ]

)()(

α−πα−ω

nnsin c

Aquí, podemos notar que hd(n) es simétrica con respecto a α, lo cual es un hecho de gran utilidad para los filtros FIR con fase lineal. Por lo tanto, para obtener un filtro FIR a partir de hd(n), tenemos que truncar a hd(n) por ambos lados; y para obtener un filtro FIR con fase lineal y causal de longitud M, debemos tener

h(n) = −≤≤

forma otra de Mn nhd

,010),(

y 2

1−=α

M (6.20)

Esta operación es llamada "ventaneo", y en general, h(n) puede ser vista como el producto de hd(n) y una función ventana ω(n) como se muestra enseguida:

h(n) = hd(n) ω(n) (6.21) donde

ω(n) = forma otra de

Mn sobre a respecto con simétrica función unaa

−≤≤α

,010

lg

Dependiendo de cómo definamos a ω(n), obtenemos diferentes diseños por ventana. Por ejemplo, en (6.20)

ω(n) = −≤≤

forma otra de Mn

,010,1

= RM (n)

lo cual corresponde a la ventana rectangular definida anteriormente. En el dominio de la frecuencia la respuesta causal H(ejω) para los filtros FIR esta dada por la convolución periódica de Hd(ejω) y la ventana W(ejω), esto es,

H(ejω) = Hd(ejω) )(∗ W(ejω) = ( )∫π

π−

λ−ωλ λπ

deHeW jd

j )()(21

(6.22)

Esto se muestras esquemáticamente en la siguiente figura

PDF created with pdfFactory trial version www.pdffactory.com

191

la cual es una representación típica de una respuesta con ventana, de la que se desprenden las siguientes observaciones: 1. Puesto que la ventana ω(n) tiene una longitud finita igual a M, entonces su respuesta tiene una longitud

finita igual a M, también tiene un lóbulo principal cuyo ancho es proporcional a 1/M, además posee lóbulos laterales con alturas más pequeñas.

2. La convolución periódica (6.22) produce una versión distorsionada de la respuesta ideal Hd(ejω). 3. El lóbulo principal produce una banda de transición en H(ejω) cuyo ancho se debe al ancho de la

transición, que es proporcional a 1/M. Tenemos que la abertura del lóbulo principal corresponde al ancho de la transición.

4. Los lóbulos laterales producen rizos que tiene formas similares tanto en la banda de paso como en la banda de rechazo.

Idea Básica del Diseño por Ventana Para las especificaciones requeridas del filtro, elegimos un filtro de longitud M y una función de ventana ω(n) para lograr la reducción del ancho del lóbulo principal, así como una atenuación de los lóbulos laterales, de modo que queden lo más pequeños posibles.

A partir de la observación en el punto 4 notamos que las tolerancias δ1 en la banda de paso y δ2 en la banda de rechazo no pueden ser especificadas de manera independiente, por lo que generalmente tenemos cuidado de elegir δ2, lo que da como resultado δ2=δ1. Ahora describiremos brevemente varias funciones de ventana muy conocidas, en donde una de ellas es la ventana rectangular , la cual usaremos como referencia para estudiar sus desempeños en el dominio de la frecuencia.

Ventana Rectangular Esta es la función de ventana más simple, pero es la que proporciona la peor representación desde el punto de vista de la atenuación en la banda de rechazo, y fue definida anteriormente por

ω(n) = −≤≤

forma otra de Mn

,010,1

(6.23)

PDF created with pdfFactory trial version www.pdffactory.com

192

Su función de respuesta en frecuencia es

W(ejω) =

=ω⇒

ω

ω

ω

ω−

ω−

2

2

2

2)(2

1

sin

sinWe

sin

sin MM

r

Mj

que corresponde a la respuesta en amplitud. De (6.22) la actual respuesta en amplitud Hr(ω) esta dada por

Hr(ω) ≅ ∫∫ω+ω

π−

ω+ω

π−

λπ

=λλπ ω

ωcc

dsin

sindW

M

r

)(

)(

21)(

21

2

2 , M >> 1 (6.24)

Esto implica que la integral continua de la respuesta en amplitud de la ventana es necesaria en el riguroso análisis del ancho de banda de transición y la atenuación en la banda de rechazo. Las figuras siguientes muestran la función de ventana rectangular ω(n), su respuesta en amplitud W(ω), la respuesta en amplitud en dB, y la respuesta en amplitud acumulada (6.24) en dB. El código que no permitió obtener las gráficas es el siguiente:

>> N = 1000; omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr);

0 22 45

0

1

Ventana Rectangular : M=45

n

w(n)

-1 0 1

0

45

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 140

13

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es

-1 150

21

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de π

Dec

ibel

es

Ancho=(1.8)*pi/M

PDF created with pdfFactory trial version www.pdffactory.com

193

>> Intdb = 20*log10(abs(IntWr)/N); %l = find(Intdb(471:N/2) > -21)+470; >> k = (N/2+1) - min(find(Intdb > -21)); >> ancho_tr= 2*k*2*M/N; %actual ancho de transicion en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M; % % Gráficas >> subplot(2,2,1); stem(n,w); >> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Ventana Rectangular : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-20,50]); >> set(gca,'YTickMode','manual','YTick',[0,45]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-40,10]); >> set(gca,'YTickMode','manual','YTick',[-40,-13,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['40';'13';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-50,10]); >> set(gca,'YTickMode','manual','YTick',[-50,-21,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['50';'21';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,' Ancho=(1.8)*pi/M','FontSize',8)

Después de una serie de observaciones de las gráficas anteriores, podemos hacer varias anotaciones: 1. La respuesta en amplitud Wr(ω) tiene su primer cero en ω=ω1, donde

M ó M π

=ωπ=ω 2

2 11

por lo tanto el ancho del lóbulo principal es 2ω1=4π/M, así tenemos que el ancho aproximado de la banda de transición es 4π/M.

2. La magnitud del primer lóbulo lateral se encuentra aproximadamente en ω=3π/M y esta dada por

π≅

=

π

=ωπ

π

323

2

3

2

3

M

sin

sin

MW

M

r para M >> 1

PDF created with pdfFactory trial version www.pdffactory.com

194

que comparándola con la amplitud del lóbulo principal, la cual es igual a M, tenemos que la máxima magnitud del lóbulo lateral es

π32

= 21.22% ≡ 13 dB

de la amplitud del lóbulo principal.

3. La respuesta en amplitud acumulada tiene su primer lóbulo lateral con una magnitud en 21 dB, lo que

significa que hay una atenuación mínima de 21 dB en la banda de rechazo independiente de la longitud M de la ventana.

4. Usando la atenuación mínima en la banda de rechazo, tenemos que el ancho de la banda de transición

puede ser calculado con precisión. Esto se muestra en la respuesta en amplitud acumulada de la figura anterior. Así tenemos que la manera de calcular el ancho exacto de la banda de transición es

ωs - ωp = M

π8.1

que es más o menos la mitad del ancho aproximado 4π/M que se obtuvo en el punto 1.

Claramente se observa que esta es una operación de ventana muy simple en el dominio del tiempo, y además es una función fácil de analizar en el dominio de la frecuencia. Sin embargo, hay dos problemas principales: el primero de ellos es que la atenuación mínima de 21 dB en la banda de rechazo es insuficiente en aplicaciones prácticas, y segundo, el ventaneo rectangular realiza un truncamiento de la longitud infinita de hd(n), lo que da lugar al fenómeno de Gibbs. Si incrementamos M, el ancho de cada lóbulo lateral decrecerá, pero el área debajo de cada lóbulo permanecerá constante, por lo tanto las amplitudes relativas de los lóbulos laterales permanecerán constantes, y la atenuación mínima en la banda de rechazo permanecerá en 21 dB. Esto implica que todos los rizos se agruparán cerca de los bordes de la banda, tal y como se muestra en las siguientes gráficas.

-1 0 1

0

1

M = 7

Frecuencia en unidades de π

Resp

uest

a en

Am

plitu

d In

tegr

ada

-1 0 1

0

1

M = 21

Frecuencia en unidades de π

Resp

uest

a en

Am

plitu

d In

tegr

ada

-1 0 1

0

1

M = 51

Frecuencia en unidades de π

Resp

uest

a en

Am

plitu

d In

tegr

ada

-1 0 1

0

1

M = 101

Frecuencia en unidades de π

Resp

uest

a en

Am

plitu

d In

tegr

ada

Fenó meno de Gibbs

PDF created with pdfFactory trial version www.pdffactory.com

195

A continuación se muestra el código que nos permitió obtener las gráficas.

>> subplot(1,1,1); N = 1000; >> M = 7; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = ones(1,M); >> omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr)/N; % gráficas >> subplot(2,2,1); plot(omega/pi,IntWr); >> axis([-1,1,-0.15,1.15]); >> title('M = 7') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Respuesta en Amplitud Integrada','FontSize',8) >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid % % M = 21 >> M = 21; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = ones(1,M); >> omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr)/N; % gráficas >> subplot(2,2,2); plot(omega/pi,IntWr); >> axis([-1,1,-0.15,1.15]); >> title('M = 21') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Respuesta en Amplitud Integrada','FontSize',8) >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid % % M = 51 >> M = 51; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = ones(1,M); >> omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr)/N; % gráficas >> subplot(2,2,3); plot(omega/pi,IntWr); >> axis([-1,1,-0.15,1.15]); >> title('M = 51') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Respuesta en Amplitud Integrada','FontSize',8) >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid %

PDF created with pdfFactory trial version www.pdffactory.com

196

% M = 101 >> M = 101; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = ones(1,M); >> omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr)/N; % gráficas >> subplot(2,2,4); plot(omega/pi,IntWr); >> axis([-1,1,-0.15,1.15]); >> title('M = 101') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Respuesta en Amplitud Integrada','FontSize',8) >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> toptitle('Fenómeno de Gibbs');

Puesto que la ventana rectangular es impráctica en muchas aplicaciones, consideraremos otras funciones de ventana, las cuales llevan los nombres de las personas que primero las propusieron. Aunque estas funciones de ventana también pueden ser analizadas de forma similar a la ventana rectangular, sólo presentaremos los resultados finales. Ventana Bartlett Puesto que el fenómeno de Gibbs resulta del hecho que la ventana rectangular tiene una transición repentina de 0 a 1 (ó 1 a 0), Bartlett propone una transición más gradual en forma de una ventana triangular, la cual esta dada por

ω(n) =

−≤≤−

−−

−≤≤

forma otra de

MnM Mn

Mn M

n

,0

12

1,1

22

210,

12

(6.25)

Esta ventana y sus respuestas en el dominio de la frecuencia se muestran en la siguiente figura.

PDF created with pdfFactory trial version www.pdffactory.com

197

El código que nos permitió obtener las gráficas es el siguiente:

>> M = 45; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = (bartlett(M))'; sumw = sum(w); >> N = 1000; omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr); >> Intdb = 20*log10(abs(IntWr)/N); >> k = (N/2+1) - min(find(Intdb > -25)); >> ancho_tr = 2*k*2*M/N; %actual ancho de transicion en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M; % gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,w); >> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Ventana Triangular : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-5,30]); >> set(gca,'YTickMode','manual','YTick',[0,sumw]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-60,10]);

0 22 45

0

1

Ventana Triangular : M=45

n

w(n)

-1 0 1

0

22

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 160

27

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es-1 1

60

26

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de π

Dec

ibel

es

Ancho=(6.1)*pi/M

Ventana Bartlett (Triangular): M = 45

PDF created with pdfFactory trial version www.pdffactory.com

198

>> set(gca,'YTickMode','manual','YTick',[-60,-27,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['60';'27';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-60,10]); >> set(gca,'YTickMode','manual','YTick',[-60,-26,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';'26';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,'Ancho=(6.1)*pi/M','FontSize',8) >>toptitle('Ventana Bartlett (Triangular): M = 45');

Ventana Hanning Esta es una función ventana que también recibe el nombre de coseno elevado, y esta dada por

ω(n) =

−≤≤

π

forma otra de

Mn M

n

,0

10,cos15.01

2

(6.26)

La ventana y sus respuestas en el dominio de la frecuencia se muestran en la siguiente figura.

0 22 45

0

1

Ventana Hanning : M=45

n

w(n)

-1 0 10

23

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 160

32

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es

-1 160

44

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de π

Dec

ibel

es

Ancho=(6.2)*pi/M

Ventana Hanning

PDF created with pdfFactory trial version www.pdffactory.com

199

El código que nos permitió obtener las gráficas es el siguiente:

>> M = 45; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = (hanning(M))'; sumw = sum(w); >> N = 1000; omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr); >> Intdb = 20*log10(abs(IntWr)/N); >> l = min(find(Intdb > -44)); >> k = (N/2+1) - 467; %k = (N/2+1) - (min(find(Intdb > -44))+l-1); >> ancho_tr = 2*k*2*M/N; %actual ancho de transicion en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M; % gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,w); >> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Ventana Hanning : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-2,sumw+5]); >> set(gca,'YTickMode','manual','YTick',[0,sumw]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-60,10]); >> set(gca,'YTickMode','manual','YTick',[-60,-32,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';'32';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-60,10]); >> set(gca,'YTickMode','manual','YTick',[-60,-44,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['60';'44';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,'Ancho=(6.2)*pi/M','FontSize',8) >> toptitle('Ventana Hanning');

Ventana Hamming Esta ventana es similar a la ventana Hanning excepto que tiene una pequeña cantidad de discontinuidad, y esta dada por

PDF created with pdfFactory trial version www.pdffactory.com

200

ω(n) =

−≤≤

π

forma otra de

Mn M

n

,0

10,cos46.054.01

2

(6.27)

Esta ventana y sus respuestas en el dominio de la frecuencia se muestran en la siguiente figura. El código que nos permitió obtener las gráficas es el siguiente:

>> M = 45; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = (hamming(M))'; sumw = sum(w); >> N = 1000; omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr); >> Intdb = 20*log10(abs(IntWr)/N); >> k = (N/2+1) - min(find(Intdb > -53)); >> ancho_tr = 2*k*2*M/N; %actual ancho de transicion en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M; % gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,w);

-22 0 22

0

1

Ventana Hamming : M=45

n

w(n)

0 22 450

23.84

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 160

43

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es

-1 170

54

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de π

Dec

ibel

es

Ancho=(6.6)*pi/M

Ventana Hamming

PDF created with pdfFactory trial version www.pdffactory.com

201

>> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> title('Ventana Hamming : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-2,sumw+5]); >> set(gca,'YTickMode','manual','YTick',[0,sumw]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-60,10]); >> set(gca,'YTickMode','manual','YTick',[-60,-42,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['60';'43';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-70,10]); >> set(gca,'YTickMode','manual','YTick',[-70,-54,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['70';'54';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,'Ancho=(6.6)*pi/M','FontSize',8) >> toptitle('Ventana Hamming');

Ventana Blackman Esta ventana es similar a las dos anteriores excepto que contiene un segundo término armónico, y esta dada por

ω(n) =

−≤≤

+

π

π

forma otra de

Mn M

n

M

n

,0

10,cos08.0cos5.042.01

4

1

2

(6.28)

Esta ventana y sus respuestas en el dominio de la frecuencia se muestran a continuación.

PDF created with pdfFactory trial version www.pdffactory.com

202

El código que nos permitió obtener las gráficas es el siguiente:

>> M = 45; alpha = (M-1)/2; >> n = -alpha:alpha; >> w = (blackman(M))'; sumw = sum(w); >> N = 1000; omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr); >> Intdb = 20*log10(abs(IntWr)/N); >> k = (N/2+1) - min(find(Intdb > -74)); >> ancho_tr = 2*k*2*M/N; %actual ancho de transicion en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M; % gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,w); >> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> title('Ventana Blackman : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-2,sumw+5]); >> set(gca,'YTickMode','manual','YTick',[0,sumw]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-90,10]);

-22 0 22

0

1

Ventana Blackman : M=45

n

w(n)

0 22 450

18.48

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 1

58

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es-1 1

74

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de πD

ecib

eles

Ancho=(11)*pi/M

Ventana Blackman

PDF created with pdfFactory trial version www.pdffactory.com

203

>> set(gca,'YTickMode','manual','YTick',[-58,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['58';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-100,10]); >> set(gca,'YTickMode','manual','YTick',[-75,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['74';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,'Ancho=(11)*pi/M','FontSize',8) >> toptitle('Ventana Blackman');

En la siguiente tabla se proporciona un resumen de las características de las funciones de ventana, en términos de sus anchos de transición (como una función de M) y sus atenuaciones mínimas (en dB) en su banda de rechazo. También se proporciona la aproximación y el ancho de la banda de transición de cada ventana.

Ancho de la transición ∆ω Ventana

Aproximación Valores Exactos Atenuación

Rectangular Mπ4

Mπ8.1 21 dB

Bartlett Mπ8

Mπ1.6 25 dB

Hanning Mπ8

Mπ2.6 44 dB

Hamming Mπ8

Mπ6.6 53 dB

Blackman M

π12 M

π11 74 dB

Podemos notar que los anchos de transición y las atenuaciones en las bandas de rechazo se incrementan con forme vamos bajando en la tabla. Así tenemos que la ventana Hamming se perfila como la mejor opción para muchas aplicaciones. Ventana Kaiser Esta es una de las ventanas más útiles y óptimas; se dice que es optima en el sentido de que proporciona una gran amplitud en el lóbulo principal dada la atenuación en la banda de rechazo, lo cual implica un ancho de transición muy agudo. Esta función de ventana se debe a J.F. Kaiser y esta dada por

PDF created with pdfFactory trial version www.pdffactory.com

204

ω(n) = [ ] 10,1

211

0

2

0

−≤≤β

−−−β

Mn I

MnI

(6.29)

donde Io[⋅] es la función Bessel modificada de orden-cero , y β es un parámetro que depende de M, que puede ser elegido para producir varios anchos de transición y una atenuación óptima en la banda de rechazo. Esta ventana puede producir diferentes anchos de transición para la misma M, lo cual es algo de lo que las otras ventanas carecen. Por ejemplo, • Si β=5.658, entonces el ancho de transición es igual a 7.8π /M, y la atenuación mínima en la banda de

rechazo es igual a 60 dB. Esto se muestra en la siguiente figura. El código que nos permitió obtener las gráficas es el siguiente:

>> beta = 5.658; M = 45; N = 1000; >> alpha = (M-1)/2; n = -alpha:alpha; >> w = (kaiser(M,beta))'; sumw = sum(w); >> omega = (2*pi/N)*[-N/2:N/2]; >> Wr = real(w*(exp(-j*n'*omega))); >> db = 20*log10(abs(Wr)/max(Wr)); >> IntWr = cumsum(Wr); >> Intdb = 20*log10(abs(IntWr)/N); >> l = min(find(Intdb > -60)); >> k = (N/2+1) - 460; %k = (N/2+1) - min(find(Intdb > -60)); >> ancho_tr = 2*k*2*M/N; %actual ancho de transición en unidades de pi/M >> omega1 = -(ancho_tr/2)/M; omega2 = (ancho_tr/2)/M;

-22 0 22

0

1

Ventana Kaiser : M=45

n

w(n)

0 22 450

22.6383

Respuesta en Amplitud

Frecuencia en unidades de π

Wr

-1 0 1

42

0

Respuesta en Amplitud en dB

Frecuencia en unidades de π

Dec

ibel

es

-1 1

60

0

Respuesta en Amplitud Acumulada

Frecuencia en unidades de π

Dec

ibel

es

Ancho=(7.8)*pi/M

Ventana Kaiser

PDF created with pdfFactory trial version www.pdffactory.com

205

% gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,w); >> axis([-(alpha+8),(alpha+8),-0.1,1.1]); >> set(gca,'YTickMode','manual','YTick',[0,1]) >> set(gca,'XTickMode','manual','XTick',[-22,0,22]); >> title('Ventana Kaiser : M=45') >> xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); plot(omega/pi,Wr); >> axis([-1,1,-2,sumw+5]); >> set(gca,'YTickMode','manual','YTick',[0,sumw]) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']); >> title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Wr') >> subplot(2,2,2); plot(omega/pi,db); >> axis([-1,1,-90,10]); >> set(gca,'YTickMode','manual','YTick',[-42,0]) >> set(gca,'YTickLabelMode','manual','YTickLabels',['42';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid >> title('Respuesta en Amplitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> subplot(2,2,4); plot(omega/pi,Intdb); >> axis([-1,1,-80,10]); >> set(gca,'YTickMode','manual','YTick',[-60,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';' 0']) >> set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid >> set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1']) >> title('Respuesta en Amplitud Acumulada') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> text(omega2,5,'Ancho=(7.8)*pi/M','FontSize',8) >> toptitle('Ventana Kaiser');

• si β=4.538, entonces el ancho de transición es igual a 5.8π /M, y la atenuación mínima en la banda de

rechazo es igual a 50 dB. Por lo tanto el comportamiento de esta ventana es comparable a la de la ventana Hamming. A manera de resumen podemos decir que la ventana Kaiser proporciona anchos flexibles para la banda de transición, y debido a la complejidad involucrada en las funciones Bessel las ecuaciones de diseño para esta ventana no son fáciles de derivar. Afortunadamente Kaiser ha desarrollado ecuaciones de diseño empíricas, las cuales se muestran a continuación. Dados ωp, ωs, Rp, y As

Ancho de Transición = ∆f = πω−ω

2ps

Orden del Filtro = M ≅ 136.1495.7 +∆

−f

As (6.30)

Parámetro

<<−+−

≥−

=β5021),21(07886.0

)21(5842.0

50),7.8(1102.04.0

ss

s

ss

A A A

A A

PDF created with pdfFactory trial version www.pdffactory.com

206

MATLAB proporciona varias rutinas para implementar las funciones ventana discutidas en esta sección, para las cuales a continuación presentamos una breve descripción. • w=boxcar(M) Regresa la función de ventana rectangular con M-puntos en el arreglo w. • w=triang(M) Regresa la función de ventana Bartlett (triangular) con M-puntos en el arreglo w. • w=hanning(M) Regresa la función de ventana Hanning con M-puntos en el arreglo w. • w=hamming(M) Regresa la función de ventana Hamming con M-puntos en el arreglo w. • w=blackman(M) Regresa la función de ventana Blackman con M-puntos en el arreglo w. • w=kaiser(M,beta) Regresa la función de ventana rectangular con M-puntos y un valor determinado de beta.

Usando estas rutinas, podemos usar MATLAB para diseñar filtros FIR basados en las técnicas de ventana, lo cual requiere una respuesta al impulso pasa bajas ideal, hd(n). Por lo tanto es conveniente tener una rutina que implemente hd(n), como la que se muestra a continuación. En el toolbox de procesamiento de señales esta disponible una rutina llamada fir1, la cual sirve para diseñar filtros FIR. Sin embargo, esta rutina no esta disponible en la versión estudiantil de MATLAB. Para desplegar las gráficas de los filtros digitales en el dominio de la frecuencia, MATLAB posee la rutina freqz, que con su uso hemos desarrollado una versión modificada llamada freqz_m, la cual devuelve el valor absoluto de la respuesta en magnitud así como también en escala relativa en dB, la respuesta en fase, y la respuesta de retardo de grupo. El código de esta nueva rutina se muestra a continuación.

function hd = PB_ideal(wc,M); % Calculo de un Filtro Pasa Bajas Ideal % --------------------------------------------- % [hd] = PB_ideal(wc,M) % hd = Respuesta al Impulso ideal entre 0 a M-1 % wc = frecuencia de corte en radianes % M = longitud del filtro ideal % alpha = (M-1)/2; n = [0:1:(M-1)]; m = n - alpha + eps; %se suma un numero muy pequeño para % evitar dividir entre cero. hd = sin(wc*m) ./ (pi*m);

function [db,mag,fase,grp,w] = freqz_m(b,a); % Version modificada de la subrutinna freqz % ----------------------------------------------------------- % [db,mag,fase,grd,w] = freqz_m(b,a); % db = Magnitud Relativa en dB, calculada de 0 a pi radianes % mag = Magnitud absoluta, calculada de 0 a pi radianes %fase = Respuesta en fase en radianes, de 0 a pi radianes % grp = Retardo de Grupo de 0 a pi radianes % w = 501 muestras de frecuencias entre 0 y pi radianes % b = numerador polinomial de H(z) (para FIR: b=h) % a = denominador polinomial de H(z) (para FIR: a=[1]) % [H,w] = freqz(b,a,1000,'whole'); H = (H(1:1:501))'; w = (w(1:1:501))'; mag = abs(H); db = 20*log10((mag+eps)/max(mag)); fase = angle(H); grp = grpdelay(b,a,w);

PDF created with pdfFactory trial version www.pdffactory.com

207

A continuación desarrollamos una serie de ejemplos para el diseño de filtros FIR, usando las técnicas con ventana y rutinas de MATLAB. Ø En este primer ejemplo diseñamos un filtro FIR pasa bajas con las siguientes especificaciones:

ωp = 0.2π, Rp = 0.25 dB ωs = 0.3π, As = 50 dB Elegimos una función de ventana apropiada de las que se muestran en la tabla anterior, y determinamos la respuesta al impulso, para posteriormente graficar la respuesta en frecuencia del filtro diseñado. Aunque ambas ventanas Hamming y Blackman pueden proporcionar una atenuación de más de 50 dB, nos decidimos por la ventana Hamming, la cual proporciona una banda de transición más pequeña y por lo tanto es de orden menor; y aunque no usemos en el diseño el valor del rizo de Rp=0.25 dB en la banda de paso, tenemos que checar su valor actual y verificar que este realmente dentro de la tolerancia establecida. Los pasos del diseño se ven plasmados en el siguiente código.

>> wp = 0.2*pi; ws = 0.3*pi; >> ancho_tr = ws - wp; >> M = ceil(6.6*pi/ancho_tr) + 1 M = 67 >> n=[0:1:M-1]; >> wc = (ws+wp)/2; % Frecuencia de corte >> hd = PB_ideal(wc,M); >> w_ham = (hamming(M))'; >> h = hd .* w_ham; >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w = 2*pi/1000; >> Rp = -(min(db(1:1:wp/delta_w+1))) % Rizo actual en la Banda de Paso Rp = 0.0394 >> As = -round(max(db(ws/delta_w+1:1:501))) % Atenuación minina en la banda % de rechazo As = 52 % Gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,hd); title('Respesta al Impulso Ideal') >> axis([0 M-1 -0.1 0.3]); xlabel('n','FontSize',8); ylabel('hd(n)') >> subplot(2,2,2); stem(n,w_ham);title('Ventana Hamming') >> axis([0 M-1 0 1.1]); xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([0 M-1 -0.1 0.3]); xlabel('n','FontSize',8); ylabel('h(n)') >> subplot(2,2,4); plot(w/pi,db);title('Respuesta en Magnitud en dB');grid >> axis([0 1 -100 10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[-50,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';' 0']) >> toptitle('Filtro Pasa Bajas');

Aquí, podemos notar que la longitud del filtro es M=67, la atenuación en la banda de rechazo es de 52 dB, y el rizo en la banda de paso es de 0.0394 dB. Claramente se observa que el rizo en la banda de paso si satisface el requerimiento de diseño. Además cabe hacer notar que en la práctica, la verificación del rizo en la banda de paso es extremadamente recomendada. Así tenemos que las gráficas en el dominio del tiempo y la frecuencia son las siguientes.

PDF created with pdfFactory trial version www.pdffactory.com

208

Ø Ahora considerando las mismas especificaciones del ejemplo anterior,

ωp = 0.2π, Rp = 0.25 dB ωs = 0.3π, As = 50 dB elegimos la ventana Kaiser para diseñar el filtro pasa bajas correspondiente. Los pasos del diseño se muestran en el siguiente código.

>> wp = 0.2*pi; ws = 0.3*pi; As = 50; >> ancho_tr = ws - wp; >> M = ceil((As-7.95)/(14.36*ancho_tr/(2*pi))+1) + 1 M = 61 >> n=[0:1:M-1]; >> beta = 0.1102*(As-8.7) beta = 4.5513 >> wc = (ws+wp)/2; >> hd = PB_ideal(wc,M); >> w_kai = (kaiser(M,beta))'; >> h = hd .* w_kai; >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w = 2*pi/1000; >> As = -round(max(db(ws/delta_w+1:1:501))) % Atenuación minina en la banda % de rechazo As = 52 % Gráficas >> subplot(1,1,1) >> subplot(2,2,1); stem(n,hd); title('Respuesta al Impulso Ideal') >> axis([0 M-1 -0.1 0.3]); xlabel('n','FontSize',8); ylabel('hd(n)') >> subplot(2,2,2); stem(n,w_kai);title('Ventana Kaiser') >> axis([0 M-1 0 1.1]); xlabel('n','FontSize',8); ylabel('w(n)')

0 20 40 60-0.1

0

0.1

0.2

0.3Respesta al Impulso Ideal

n

hd(n

)

0 20 40 600

0.2

0.4

0.6

0.8

1

Ventana Hamming

n

w(n)

0 20 40 60-0.1

0

0.1

0.2

0.3Respuesta al Impulso Actual

n

h(n)

0 0.20.3 1

50

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es

Filtro Pasa Bajas

PDF created with pdfFactory trial version www.pdffactory.com

209

>> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([0 M-1 -0.1 0.3]); xlabel('n','FontSize',8); ylabel('h(n)') >> subplot(2,2,4);plot(w/pi,db);title('Respuesta en Magnitud en dB');grid >> axis([0 1 -100 10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[-50,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';' 0']) >> toptitle('Filtro Pasa Bajas');

Otra vez notamos que los parámetros de la ventana Kaiser son M=61 y β=4.5513, y que la atenuación en la banda de rechazo es de 52 dB. Las gráficas en el dominio del tiempo y la frecuencia se muestran a continuación.

Ø Ahora diseñaremos el siguiente filtro digital pasa banda Borde inferior en la banda de rechazo : ω1s = 0.2π, As = 60 dB Borde inferior en la banda de paso : ω1p = 0.35π, Rp = 1 dB Borde superior en la banda de paso : ω2p = 0.65π, Rp = 1 dB Borde superior en la banda de rechazo: ω2s = 0.8π, As = 60 dB Estas cantidades se muestran en la siguiente figura:

0 20 40 60-0.1

0

0.1

0.2

0.3Respuesta al Impulso Ideal

n

hd(n

)

0 20 40 600

0.2

0.4

0.6

0.8

1

Ventana Kaiser

n

w(n)

0 20 40 60-0.1

0

0.1

0.2

0.3Respuesta al Impulso Actual

n

h(n)

0 0.20.3 1

50

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es

Filtro Pasa Bajas

PDF created with pdfFactory trial version www.pdffactory.com

210

En este caso tenemos que hay dos bandas de transición, a saber, ∆ω1 = ω1p - ω1s y ∆ω2 = ω2s - ω2p , cuyos anchos de banda debe ser los mismos en el diseño de la ventana; es decir, que no hay independencia sobre el control de ∆ω1 y ∆ω2 . Por lo tanto ∆ω1=∆ω2=∆ω. Para este diseño podemos usar cualquiera de las ventanas Kaiser o Blackman; que para este ejercicio nos inclinamos por la ventana Blackman. Además de la ventana, también necesitamos un filtro pasa banda con respuesta al impulso hd(n) ideal, el cual puede ser obtenido a partir de dos filtros pasa bajas con respuesta en amplitud ideal, con la condición de que tengan la misma respuesta en fase. Esto puede ser apreciado con más claridad en la siguiente figura.

Filtro Pasa Banda Ideal a partir de dos filtros Pasa Bajas

Por consiguiente la rutina en MATLAB PB_ideal(wc,M) es suficiente para determinar la respuesta al impulso de un filtro pasa banda ideal. Los pasos del diseño se muestran en el siguiente código.

>> ws1 = 0.2*pi; wp1 = 0.35*pi; >> wp2 = 0.65*pi; ws2 = 0.8*pi; >> As = 60; >> ancho_tr = min((wp1-ws1),(ws2-wp2)) >> M = ceil(11*pi/ancho_tr) + 1 M = 75 >> n=[0:1:M-1]; >> wc1 = (ws1+wp1)/2; wc2 = (wp2+ws2)/2; >> hd = PB_ideal(wc2,M) - PB_ideal(wc1,M); >> w_bla = (blackman(M))'; >> h = hd .* w_bla;

PDF created with pdfFactory trial version www.pdffactory.com

211

>> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w = 2*pi/1000; >> Rp = -min(db(wp1/delta_w+1:1:wp2/delta_w)) % Rizo en la banda de paso >> Rp = 0.0030 >> As = -round(max(db(ws2/delta_w+1:1:501))) % Atenuación mínima en la % banda de rechazo As = 75 % Gráficas >> subplot(1,1,1); >> subplot(2,2,1); stem(n,hd); title('Respuesta al Impulso Ideal') >> axis([0 M-1 -0.4 0.5]); xlabel('n','FontSize',8); ylabel('hd(n)') >> subplot(2,2,2); stem(n,w_bla);title('Ventana Blackman') >> axis([0 M-1 0 1.1]); xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([0 M-1 -0.4 0.5]); xlabel('n','FontSize',8); ylabel('h(n)') >> subplot(2,2,4);plot(w/pi,db); >> title('Respuesta en Magnitud en dB');grid; >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> axis([0 1 -150 10]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,0.65,0.8,1]) >> set(gca,'YTickMode','manual','YTick',[-60,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';' 0']) >> toptitle('Filtro Pasa Banda');

Notamos que la longitud de la ventana Blackman es M=61, y la atenuación en la banda de rechazo es de 75 dB. Las gráficas en el dominio del tiempo y la frecuencia se muestran a continuación.

0 20 40 60-0.4

-0.2

0

0.2

0.4

Respuesta al Impulso Ideal

n

hd(n

)

0 20 40 600

0.2

0.4

0.6

0.8

1

Ventana Blackman

n

w(n)

0 20 40 60-0.4

-0.2

0

0.2

0.4

Respuesta al Impulso Actual

n

h(n)

0 0.2 0.35 0.65 0.8 1

60

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es

Filtro Pasa Banda

PDF created with pdfFactory trial version www.pdffactory.com

212

Ø Nuestro siguiente ejemplo de diseño consiste en que dada la respuesta en frecuencia de un filtro rechaza banda ideal

He(ejω) =

π≤ω<ππ≤ω≤π

π<ω≤

||3/2,13/2||3/,0

3/||0,1

emplearemos una ventana Kaiser para diseñar un filtro rechaza banda de longitud M=45 con una atenuación en la banda de rechazo de 60 dB. Notar que en las especificaciones de diseño, el ancho de la banda de transición no esta definido, ya que será determinado en base a la longitud M=45 y el parámetro β de la ventana Kaiser. Por lo tanto, de las ecuaciones de diseño (6.30) podemos determinar β a partir de As; esto es,

β = 0.1102 x (As - 8.7) Tenemos que la respuesta al impulso del rechaza banda ideal puede determinarse a partir de la respuesta al impulso del pasa bajas ideal, usando un método similar al de la figura anterior, donde se describe la obtención de un pasa banda a partir de dos pasa bajas. Ahora podemos implementar el diseño empleando la ventana Kaiser y checar la atenuación mínima en la banda de rechazo. El código es el siguiente.

>> M = 45; As = 60; n=[0:1:M-1]; >> beta = 0.1102*(As-8.7) beta = 5.6533 >> w_kai = (kaiser(M,beta))'; >> wc1 = pi/3; wc2 = 2*pi/3; >> hd = PB_ideal(wc1,M) + PB_ideal(pi,M) - PB_ideal(wc2,M); >> h = hd .* w_kai; >> [db,mag,fase,grp,w] = freqz_m(h,[1]); % >> figure(1) >> subplot(2,1,1);plot(w/pi,db); >> title('Respuesta en Magnitud en dB : \beta=5.6533');grid; >> xlabel('Frecuencia en unidades de \pi'); ylabel('Decibeles') >> axis([0 1 -80 10]); >> set(gca,'XTickMode','manual','XTick',[0;0.333;0.667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'1/3';'2/3';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[-60,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';' 0'])

Tenemos que el parámetro β es igual a 5.6533, y de la gráfica siguiente se observa que la mínima atenuación en la banda de rechazo es menor a 60 dB.

PDF created with pdfFactory trial version www.pdffactory.com

213

0 1/3 2/3 1

60

0

Respuesta en Magnitud en dB : β=5.6533

Frecuencia en unidades de π

Dec

ibel

es

Claramente se observa que tenemos que incrementar β para incrementar la atenuación a 60 dB. Así que el valor requerido para β resulta en β=5.9533, como se muestra en el siguiente código.

>> figure(2) >> M = 45; As = 60; n=[0:1:M-1]; >> beta = 0.1102*(As-8.7)+.3 beta = 5.9533 >> w_kai = (kaiser(M,beta))'; >> wc1 = pi/3; wc2 = 2*pi/3; >> hd = PB_ideal(wc1,M) + PB_ideal(pi,M) - PB_ideal(wc2,M); >> h = hd .* w_kai; >> [db,mag,fase,grp,w] = freqz_m(h,[1]); % % Gráficas >> subplot(1,1,1); >> subplot(2,2,1); stem(n,hd); title('Respuesta al Impulso Ideal') >> axis([-1 M -0.2 0.8]); xlabel('n','FontSize',8); ylabel('hd(n)') >> subplot(2,2,2); stem(n,w_kai);title('Ventana Kaiser') >> axis([-1 M 0 1.1]); xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([-1 M -0.2 0.8]); xlabel('n','FontSize',8); ylabel('h(n)') >> subplot(2,2,4);plot(w/pi,db); >> title('Respuesta en Magnitud en dB');grid; >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles') >> axis([0 1 -80 10]); >> set(gca,'XTickMode','manual','XTick',[0;0.333;0.667;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'1/3';'2/3';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[-60,0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';' 0']) >> toptitle('Filtro Rechaza Banda : \beta=5.9533');

Las gráficas en el dominio del tiempo y la frecuencia se muestran a continuación, en las cuales el filtro diseñado satisface los requerimientos necesarios.

PDF created with pdfFactory trial version www.pdffactory.com

214

Ø Para este nuevo ejemplo hacemos uso de la siguiente respuesta en frecuencia de un diferenciador digital ideal

Hd(ejω) =

<ω<πω−π≤ω<ω0,

0, - j

j (6.31)

Empleando una ventana Hamming de longitud 21, diseñaremos un diferenciador FIR digital para el cual graficaremos sus respuestas en el dominio del tiempo y en el dominio de la frecuencia. Comenzamos con el planteamiento de la respuesta al impulso ideal para un diferenciador digital con fase lineal

hd(n) = F[ Hd(ejω) e-jαω ] = ωπ ∫

π

π−

ωαω−ω d ee eH njjjd )(

21

= ωωπ

+ωω−π ∫∫

πωαω−

π−

ωαω− d ee jd ee j njjnjj

0

0

)(21)(

21

=

α=

α≠α−

α−π

n

n nn

,0

,)(

)(cos

La respuesta al impulso anterior puede ser implementada en MATLAB junto con la ventana Hamming para diseñar el diferenciador requerido. Cabe hacer notar que si M es un número par, entonces α=(M-1)/2 no es un entero, y hd(n) será igual a cero para toda n. Por lo tanto M debe ser un número impar, lo que da como

0 10 20 30 40-0.2

0

0.2

0.4

0.6

0.8Respuesta al Impulso Ideal

n

hd(n

)

0 10 20 30 400

0.2

0.4

0.6

0.8

1

Ventana Kaiser

n

w(n)

0 10 20 30 40-0.2

0

0.2

0.4

0.6

0.8Respuesta al Impulso Actual

n

h(n)

0 1/3 2/3 1

60

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es

Filtro Rechaza Banda : β=5.9533

PDF created with pdfFactory trial version www.pdffactory.com

215

resultado un filtro FIR con fase lineal Tipo-3. Sin embargo, el filtro no será un diferenciador de banda completa ya que Hr(π)=0 para los filtros Tipo-3. El siguiente código muestra los pasos del diseño.

>> M = 21; alpha = (M-1)/2; >> n = 0:M-1; >> hd = (cos(pi*(n-alpha)))./(n-alpha); hd(alpha+1)=0; >> w_ham = (hamming(M))'; >> h = hd .* w_ham; >> [Hr,w,P,L] = hr_tipo3(h); % Gráficas >> subplot(1,1,1); >> subplot(2,2,1); stem(n,hd); title('Respuesta al Impulso Ideal') >> axis([-1 M -1.2 1.2]); xlabel('n','FontSize',8); ylabel('hd(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,2); stem(n,w_ham);title('Ventana Hamming') >> axis([-1 M 0 1.2]); xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([-1 M -1.2 1.2]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,4);plot(w/pi,Hr/pi); title('Respuesta en Amplitud');grid; >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Pendiente en unidades de \pi','FontSize',8); >> axis([0 1 0 1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.4,0.6,0.8,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.2,0.4,0.6,0.8,1]) >> toptitle('Diferenciador FIR'); Las gráficas resultantes son las siguientes:

0 5 10 15 20

-1

-0.5

0

0.5

1

Respuesta al Impulso Ideal

n

hd(n

)

0 5 10 15 200

0.2

0.4

0.6

0.8

1

Ventana Hamming

n

w(n)

0 5 10 15 20

-1

-0.5

0

0.5

1

Respuesta al Impulso Actual

n

h(n)

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1Respuesta en Amplitud

Frecuencia en unidades de π

Pend

ient

e en

uni

dade

s de

π

Diferenciador FIR

PDF created with pdfFactory trial version www.pdffactory.com

216

Ø Empleando una ventana Hamming diseñamos un transformador de Hilbert digital con una longitud de 25. Comenzamos con el planteamiento de la respuesta en frecuencia ideal de un transformador de Hilbert con fase lineal,

Hd(ejω) =

<ω<π+

π≤ω<αω−

αω−

0,0,

- je je-

j

j

(6.32)

que después de obtener la transformada inversa, tenemos que la respuesta al impulso ideal esta dada por

hd(n) =

α=

α≠α−

α−ππ

n

n n

nsin

,0

,)(

2/)(2 2

la cual puede ser fácilmente implementada en MATLAB; y puesto que M=25, tenemos que el filtro a diseñar es de Tipo-3. El siguiente código muestra los pasos del diseño.

>> M = 25; alpha = (M-1)/2; >> n = 0:M-1; >> hd = (2/pi)*((sin((pi/2)*(n-alpha)).^2)./(n-alpha)); hd(alpha+1)=0; >> w_han = (hanning(M))'; >> h = hd .* w_han; >> [Hr,w,P,L] = hr_tipo3(h); % Gráficas >> subplot(1,1,1); >> subplot(2,2,1); stem(n,hd); title('Respuesta al Impulso Ideal') >> axis([-1 M -1.2 1.2]); xlabel('n','FontSize',8); ylabel('hd(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,2); stem(n,w_han);title('Ventana Hanning') >> axis([-1 M 0 1.2]); xlabel('n','FontSize',8); ylabel('w(n)') >> subplot(2,2,3); stem(n,h);title('Respuesta al Impulso Actual') >> axis([-1 M -1.2 1.2]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> w = w'; Hr = Hr'; >> w = [-fliplr(w), w(2:501)]; Hr = [-fliplr(Hr), Hr(2:501)]; >> subplot(2,2,4);plot(w/pi,Hr); title('Respuesta en Amplitud');grid; >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr') >> axis([-1 1 -1.1 1.1]); >> set(gca,'XTickMode','manual','XTick',[-1,0,1]) >> set(gca,'YTickMode','manual','YTick',[-1,0,1]) >> toptitle('Transformador de Hilbert FIR');

Las gráficas se muestran enseguida, en las cuales se observa que la respuesta en amplitud es graficada sobre -π ≤ ω ≤ π.

PDF created with pdfFactory trial version www.pdffactory.com

217

TÉCNICAS DE DISEÑO CON MUESTREO EN FRECUENCIA

En este enfoque de diseño nos valemos del hecho que la función del sistema H(z) puede ser obtenida a partir de las muestras H(k) de la respuesta en frecuencia H(ejω). Si tenemos la respuesta al impulso h(n) de un filtro FIR con M-puntos, su TDF H(k) con M-puntos, y su función del sistema H(z), entonces tenemos que:

H(z) = ∑∑−

=π−

=

−−

−−

=1

0/21

1

0 1)(1)(

M

KMkj

M

n

Mn

ezkH

Mzznh (6.33)

y

H(ejω) = ∑−

=πω−

ω−

−− 1

0/21

)(1 M

KMkjj

Mj

eekH

Me

(6.34)

con

H(k) = H(ej2πk/ M) =

−=−

=

1,...,1),(0),0(

* Mk kMHk H

0 5 10 15 20 25

-1

-0.5

0

0.5

1

Respuesta al Impulso Ideal

n

hd(n

)

0 5 10 15 20 250

0.2

0.4

0.6

0.8

1

Ventana Hanning

n

w(n)

0 5 10 15 20 25

-1

-0.5

0

0.5

1

Respuesta al Impulso Actual

n

h(n)

-1 0 1-1

0

1Respuesta en Amplitud

Frecuencia en unidades de π

Hr

Transformador de Hilbert FIR

PDF created with pdfFactory trial version www.pdffactory.com

218

Para un filtro FIR con fase lineal se tiene que

h(n) = ± h(M - 1 - n), n = 0, 1, . . . , M-1 donde el signo positivo corresponde a los filtros con fase lineal Tipo-1 y Tipo-2, mientras que el signo negativo es para los filtros con fase lineal Tipo-3 y Tipo-4. Entonces H(k) esta dada por

H(k) = )(2 kHjr e M

kH ∠

π

(6.35)

donde

−=

−π

==

π

1,...,1,)(20),0(

2Mk

MkMH

k H

MkH

r

r

r (6.36)

y

∠H(k) =

−+

=−π

+

=

π

1,...,12

1),(22

1

21,...,0,2

21

MMk kMM

M

Mk Mk M

, (Tipo-1 y 2) (6.37)

ó

∠H(k) =

−+

=−π

+

π±−

=

π

π±

1,...,12

1),(22

12

21,...,0,2

21

2

MMk kMM

M

Mk Mk M

, (Tipo-3 y 4) (6.38)

Finalmente tenemos que

h(n) = TDFI [H(k)] (6.39) En este punto cabe hacer notar que varios libros de texto proporcionan fórmulas explícitas para calcular h(n)a partir de H(k). Pero nosotros usaremos la rutina ifft de MATLAB para calcular h(n). Idea Básica Dado el filtro pasa bajas ideal Hd(ejω), elegimos M como la longitud del filtro, y entonces muestreamos a Hd(ejω) en M frecuencias equidistantes entre 0 y 2π. Así tenemos que la respuesta actual H(ejω) es la interpolación de las muestras H(k) dadas por (6.34). Esto se muestra en la siguiente figura.

PDF created with pdfFactory trial version www.pdffactory.com

219

Finalmente la respuesta al impulso esta dada por (6.39). De forma similar estos pasos se pueden aplicar a otros filtros selectivos de frecuencias. Lo que es más, esta idea también puede ser extendida para la aproximación de especificaciones arbitrarias en el dominio de la frecuencia. De la figura de arriba observamos lo siguiente: 1. El error de aproximación, esto es, la diferencia entre la respuesta ideal y la actual, es cero en las

frecuencias muestreadas. 2. El error de aproximación en todas las otras frecuencias depende del tamaño del error de aproximación, y

la forma de la respuesta ideal; es decir, entre más aguda se la respuesta ideal, el error de aproximación será mayor.

3. El error es más grande cerca de los bordes de la banda y más pequeño en el interior de la banda. En esta técnica hay dos enfoques de diseño: en el primer enfoque se usa la idea básica tal cual, y no se proporcionan restricciones sobre el error de aproximación; esto es que, aceptamos cualquier error que provenga del diseño, debido a esto el enfoque es llamado método de diseño ingenuo. Por el otro lado, en el segundo enfoque intentamos minimizar el error en la banda de rechazo, variando los valores de las muestras en la banda de transición. Esto da como resultado un mejor diseño llamado método de diseño optimo. Método de Diseño Ingenuo En este método establecemos H(k) = Hd(ej2πk/ M), con k = 0, . . . , M-1, y usamos las expresiones (6.35) a (6.39) para obtener la respuesta al impulso h(n). Para poner en práctica este método nos valemos del siguiente ejemplo. Considerando las siguientes especificaciones para un filtro pasa bajas ωp = 0.2π, Rp = 0.25 dB ωs = 0.3π, As = 50 dB diseñaremos un filtro FIR usando el enfoque de muestreo en frecuencia. Para comenzar con nuestro diseño elegimos M=20 para así tener una muestra en la frecuencia ωp, es decir, en k=2:

ωp = 0.2π = 2202π

y la próxima muestra en ωs, es decir, en k=3:

ωs = 0.3π = 3202π

PDF created with pdfFactory trial version www.pdffactory.com

220

Por consiguiente tenemos 3 muestras en la banda de paso [ 0 ≤ ω ≤ ωp ] y 7 muestras en la banda de rechazo [ ωs ≤ ω ≤ π ]. De (6.36) tenemos que

= 1,1,0.,..,0,1,1,1)(

15

kHceros

r 321

Puesto que M = 20, α = 2

120 − = 9.5, y ya que el filtro con el que tratamos es un filtro con fase lineal Tipo-2,

de (6.37) tenemos que

∠H(k) =

≤≤−π+

≤≤π−=π−

1910),20(95.0

90,95.02025.9

k k

k kk

Ahora a partir de (6.35) ensamblamos H(k), y de (6.39) determinamos la respuesta al impulso h(n). El código en MATLAB es el siguiente.

>> M = 20; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> Hrs = [1,1,1,zeros(1,15),1,1]; >> Hdr = [1,1,0,0]; wdl = [0,0.25,0.25,1]; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo2(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:11)/pi,Hrs(1:11),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Muestras en Frecuencia: M=20') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.1,0.3]) >> title('Respuesta al Impulso'); xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:11)/pi,Hrs(1:11),'o'); >> axis([0,1,-0.2,1.2]); title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-60,10]); grid >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8);ylabel('Decibeles'); >> set(gca,'XTickMode','Manual','XTick',[0;0.2;0.3;1]); >> set(gca,'YTickMode','Manual','YTick',[-16;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['16';' 0']) >> toptitle('Método de Diseño Ingenuo');

Las gráficas resultantes tanto en el dominio del tiempo como en el dominio de la frecuencia se muestran enseguida.

PDF created with pdfFactory trial version www.pdffactory.com

221

Se observa que la atenuación mínima en la banda de rechazo es alrededor de 16 dB, lo que es claramente inaceptable. Si incrementamos M, entonces habrá muestras en la banda de transición, para las que no conocemos con exactitud la respuesta en frecuencia. Por lo tanto el método de diseño ingenuo es raramente usado en la práctica. Método de Diseño Optimo Para obtener más atenuación, tenemos que incrementar M y hacer que la banda de transición este libre de muestras, es decir , tenemos que variar sus valores para obtener una atenuación más grande. Este problema es conocido como el problema de optimización, y se resuelve usando técnicas de programación lineal. Ahora demostraremos los efectos que provoca la variación de las muestras en la banda de transición, haciendo uso del siguiente ejemplo. Diseñaremos un mejor filtro pasa bajas que el que se obtuvo en el ejemplo anterior. Para esto, elegimos M=40 para que de este modo tengamos una muestra en la banda de transición 0.2π < ω < 0.3π, y puesto que ω1 = 2π/40 tenemos que las muestras en la banda de transición se encuentran en k=5 y en k=40-5=35. Ahora denotaremos el valor de estas muestras como T1, donde 0 < T1 < 1. Así tenemos que la respuesta en amplitud muestreada es

= 1,1,1,1,,0,...,0,,1,1,1,1,1)( 1

291 T T kH

ceros r 321

Ya que α =

2

140 − = 19.5, las muestras de la respuesta en fase son

0 0.20.3 1

0

1

Muestras en Frecuencia: M=20

Frecuencia en unidades de π

Hr(k

)

0 5 10 15 20-0.1

0

0.1

0.2

0.3Respuesta al Impulso

n

h(n)

0 0.20.3 1

0

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.20.3 1

16

0

Respuesta en Magnitud

Frecuencia en unidades de π

Dec

ibel

es

Mé todo de Diseñ o Ingenuo

PDF created with pdfFactory trial version www.pdffactory.com

222

∠H(k) =

≤≤−π+

≤≤π−=π−

3920),40(975.0

190,975.04025.19

k k

k kk

Ahora podemos variar T1 para obtener una mejor atenuación mínima en la banda de rechazo, lo cual resultara en un incremento en el ancho de transición. Por ejemplo, veamos que sucede cuando T1=0.5 en el siguiente código:

% (a) T1 = 0.5 >> M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> Hrs = [ones(1,5),0.5,zeros(1,29),0.5,ones(1,4)]; >> Hdr = [1,1,0,0]; wdl = [0,0.25,0.25,1]; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo2(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:21)/pi,Hrs(1:21),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Muestras en Frecuencia: M=40, T1=0.5') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.5,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.1,0.3]) >> title('Respuesta al Impulso'); xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o'); >> axis([0,1,-0.1,1.1]); title('Respuesta en Amplitud') >>xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.5,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles'); >> set(gca,'XTickMode','Manual','XTick',[0;0.2;0.3;1]); >> set(gca,'YTickMode','Manual','YTick',[-30;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['30';' 0']) >> toptitle('Método de Diseño Optimo: T1=0.5');

Las gráficas resultantes se muestran a continuación.

PDF created with pdfFactory trial version www.pdffactory.com

223

Se puede observar que la atenuación mínima en la banda de rechazo es ahora de 30 dB, lo cual representa una mejora de lo que se obtuvo empleando el método de diseño ingenuo, sin embargo este resultado todavía no esta en el nivel aceptable de 50 dB. Así, tenemos que el mejor valor de T1 fue obtenido variándolo manualmente , por lo que la solución optima más cercana fue encontrada para T1=0.39, como se muestra en el siguiente código.

% (b) T1 = 0.39 >> M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> Hrs = [ones(1,5),0.3904,zeros(1,29),0.3904,ones(1,4)]; >> Hdr = [1,1,0,0]; wdl = [0,0.25,0.25,1]; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo2(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:21)/pi,Hrs(1:21),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Muestras en Frecuencia: M=40, T1=0.39') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.39,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.1,0.3]) >> title('Respuesta al Impulso'); xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o'); >> axis([0,1,-0.1,1.1]); title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1])

0 0.20.3 1

0

0.5

1

Muestras en Frecuencia: M=40, T1=0.5

Frecuencia en unidades de π

Hr(k

)

0 10 20 30 40-0.1

0

0.1

0.2

0.3Respuesta al Impulso

n

h(n)

0 0.20.3 1

0

0.5

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.20.3 1

30

0

Respuesta en Magnitud

Frecuencia en unidades de π

Dec

ibel

es

Mé todo de Diseñ o Optimo: T1=0.5

PDF created with pdfFactory trial version www.pdffactory.com

224

>> set(gca,'YTickMode','manual','YTick',[0,0.39,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8);ylabel('Decibeles'); >> set(gca,'XTickMode','Manual','XTick',[0;0.2;0.3;1]); >> set(gca,'YTickMode','Manual','YTick',[-43;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['43';' 0']) >> toptitle('Método de Diseño Optimo: T1=0.39'); Las gráficas resultantes son las siguientes.

Se puede observar que la atenuación optima en la banda de rechazo es de 43 dB. Ahora resulta obvio que para incrementar la atenuación tenemos que variar más de una muestras en la banda de transición. Claramente, este método es superior en el sentido que variando una muestra podemos obtener un diseño mucho mejor. Y puesto que en la práctica el ancho de banda de transición es generalmente pequeño, conteniendo una o dos muestras, entonces necesitamos optimizar en más de dos muestras para obtener la mayor atenuación mínima en la banda de rechazo. Esto también es equivalente a minimizar la magnitudes máximas (el valor absoluto) de los lóbulos laterales. Por lo tanto, este problema de optimización también es llamado problema minimax, el cual es resuelto por Rabiner. Por el momento ilustramos el uso de estas tablas en el siguiente ejemplo. Ø Para desarrollar este ejemplo volvemos a retomar el planteamiento de nuestro filtro pasa bajas que se empleo en el método de diseño ingenuo. Realizamos nuestras solución empleando dos muestras en la banda de transición para así conseguir una mejor atenuación en la banda de rechazo. Comenzamos eligiendo M=60 para que de este modo existan dos muestras en la banda de transición. Dados los valores T1 y T2 de estas muestras en la banda de transición, entonces Hr(ω) esta dada por

0 0.20.3 1

0

0.39

1

Muestras en Frecuencia: M=40, T1=0.39

Frecuencia en unidades de π

Hr(k

)

0 10 20 30 40-0.1

0

0.1

0.2

0.3Respuesta al Impulso

n

h(n)

0 0.20.3 1

0

0.39

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.20.3 1

43

0

Respuesta en Magnitud

Frecuencia en unidades de π

Dec

ibel

es

Mé todo de Diseñ o Optimo: T1=0.39

PDF created with pdfFactory trial version www.pdffactory.com

225

Hr(ω) =

321321321

unos 6ceros 43unos

T T T T 1,...,1,,,0,...,0,,,1,...,1 12217

De las tablas presentes en el libro de Proakis tenemos que T1= 0.5925 y T2= 0.1099. Usando estos valores empleamos MATLAB para calcular h(n), tal y como se muestra en el siguiente código.

>> M = 60; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> Hrs = [ones(1,7),0.5925,0.11,zeros(1,43),0.11,0.5925,ones(1,6)]; >> Hdr = [1,1,0,0]; wdl = [0,0.2,0.3,1]; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo2(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:31)/pi,Hrs(1:31),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Pasa Bajas: M=60,T1=0.59, T2=0.109') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.1,0.3]) >> title('Respuesta al Impulso') ; xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:31)/pi,Hrs(1:31),'o'); >> axis([0,1,-0.1,1.1]); title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles'); >> set(gca,'XTickMode','Manual','XTick',[0;0.2;0.3;1]); >> set(gca,'YTickMode','Manual','YTick',[-63;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['63';' 0']) >> toptitle('Filtro Pasa Bajas: Método Optimo T1 & T2');

Las gráficas resultantes son las siguientes.

PDF created with pdfFactory trial version www.pdffactory.com

226

Se puede observar que la atenuación mínima en la banda de rechazo es ahora de 63 dB, lo cual es aceptable. Ø Como un segundo ejemplo diseñamos el filtro pasa banda que ya fue examinado empleando la técnica de muestreo en frecuencia, cuyas especificaciones de diseño son: Borde inferior en la banda de rechazo : ω1s = 0.2π, As = 60 dB Borde inferior en la banda de paso : ω1p = 0.35π, Rp = 1 dB Borde superior en la banda de paso : ω2p = 0.65π, Rp = 1 dB Borde superior en la banda de rechazo: ω2s = 0.8π, As = 60 dB En este caso elegimos M=40, para así tener dos muestras en la banda de transición. Dadas las muestras en frecuencia T1 y T2 en la banda de transición inferior, tenemos que las muestras de la respuesta en amplitud son

=ω 321321321321321

412

721

912

721

5

0,...,0,,,1,...,1,,,0,...,0,,,1,...,1,,,0,...,0)( T T T T T T T T Hr

Los valores óptimos de T1 y T2 para M=40 y siete muestras en la banda de paso son

T1 = 0.109021, T2 =0.59417456 El código es el siguiente:

>> M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> T1 = 0.109021; T2 = 0.59417456; >> Hrs = [zeros(1,5),T1,T2,ones(1,7),T2,T1,zeros(1,9),T1,T2,ones(1,7),T2,T1,zeros(1,4)]; >> Hdr = [0,0,1,1,0,0]; wdl = [0,0.2,0.35,0.65,0.8,1];

0 0.20.3 1

00.109

0.59

1

Pasa Bajas: M=60,T1=0.59, T2=0.109

Frecuencia en unidades de π

Hr(k

)

0 20 40 60-0.1

0

0.1

0.2

0.3Respuesta al Impulso

n

h(n)

0 0.20.3 1

00.109

0.59

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.20.3 1

63

0

Respuesta en Magnitud

Frecuencia en unidades de πD

ecib

eles

Filtro Pasa Bajas: Mé todo Optimo T1 & T2

PDF created with pdfFactory trial version www.pdffactory.com

227

>> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo2(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:21)/pi,Hrs(1:21),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Pasa Banda: M=40,T2=0.5941, T1=0.109') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,0.65,0.8,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.4,0.4]) >> title('Respuesta al Impulso'); xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o'); >> axis([0,1,-0.1,1.1]); title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,0.65,0.8,1]) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid >> title('Respuesta en Magnitud'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles'); >> set(gca,'XTickMode','Manual','XTick',[0,0.2,0.35,0.65,0.8,1]); >> set(gca,'YTickMode','Manual','YTick',[-60;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['60';' 0']) >> toptitle('Filtro Pasa Banda: Método Optimo T1 & T2'); Las gráficas resultantes que muestran un aceptable diseño del filtro pasa banda son las siguientes:

0 0.2 0.35 0.65 0.8 1

00.109

0.59

1

Pasa Banda: M=40,T2=0.5941, T1=0.109

Frecuencia en unidades de π

Hr(k

)

0 10 20 30 40-0.4

-0.2

0

0.2

0.4Respuesta al Impulso

n

h(n)

0 0.2 0.35 0.65 0.8 1

00.109

0.59

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.2 0.35 0.65 0.8 1

60

0

Respuesta en Magnitud

Frecuencia en unidades de π

Dec

ibel

es

Filtro Pasa Banda: Mé todo Optimo T1 & T2

PDF created with pdfFactory trial version www.pdffactory.com

228

Ø Continuando con nuestra serie de ejemplos, ahora diseñamos el siguiente filtro pasa altas: Borde en la banda de rechazo: ωs = 0.6π, As = 50 dB Borde en la banda de paso : ωp = 0.8π, Rp = 1 dB Recordemos que para un filtro pasa altas, M debe ser impar (o filtro Tipo-1), por lo tanto elegimos M= 33 para que de este modo tengamos dos muestras en la banda de transición. Con estas elección de M no es posible tener muestras de frecuencias en ωs y ωp. Así tenemos que las muestras de la respuesta en amplitud son

= 321321321

1012

821

11

0.,..,0,,,1,...,1,,,0,...,0)( T T T T kHr

mientras que las muestras de la respuesta en fase son

∠H(k) =

≤≤−π+

≤≤π−=π−−

3217),33(3332

160,3332

332

2133

k k

k kk

Los valores óptimos para las muestras de transición son T1= 0.1095 y T2= 0.598. Con el uso de estos valores obtenemos el siguiente código:

>> M = 33; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; >> T1 = 0.1095; T2 = 0.598; >> Hrs = [zeros(1,11),T1,T2,ones(1,8),T2,T1,zeros(1,10)]; >> Hdr = [0,0,1,1]; wdl = [0,0.6,0.8,1]; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [db,mag,fase,grp,w] = freqz_m(h,1); >> [Hr,ww,a,L] = hr_tipo1(h); >> subplot(1,1,1) >> subplot(2,2,1);plot(wl(1:17)/pi,Hrs(1:17),'o',wdl,Hdr); >> axis([0,1,-0.1,1.1]); title('Pasa Altas: M=33,T1=0.1095,T2=0.598') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(k)') >> set(gca,'XTickMode','manual','XTick',[0;.6;.8;1]) >> set(gca,'XTickLabelMode','manual','XTickLabel',[' 0';'.6';'.8';' 1']) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,2); stem(l,h); axis([-1,M,-0.4,0.4]) >> title('Respuesta al Impulso'); xlabel('n','FontSize',8); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> subplot(2,2,3); plot(ww/pi,Hr,wl(1:17)/pi,Hrs(1:17),'o'); >> axis([0,1,-0.1,1.1]); title('Respuesta en Amplitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0;.6;.8;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'.6';'.8';' 1']) >> set(gca,'YTickMode','manual','YTick',[0,0.109,0.59,1]); grid >> subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid >> title('Respuesta en Magnitud');

PDF created with pdfFactory trial version www.pdffactory.com

229

>> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',[0;.6;.8;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'.6';'.8';' 1']) >> set(gca,'YTickMode','Manual','YTick',[-50;0]); >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';' 0']) >> toptitle('Filtro Pasa Altas: Método Optimo T1 & T2'); Las gráficas resultantes son las siguientes:

Ø Ahora diseñamos un diferenciador digital con 33-puntos, basado en el diferenciador ideal (6.31), donde las muestras de la respuesta en amplitud (parte imaginaria) están dadas por

jHr(k) =

−+

−=−π−

−=π+

1,...,121),(2

21,...,0,2

M Mk kMMj

M k kMj

y para la fase lineal, las muestras son:

∠H(k) =

−+

−=−π−+

−=π−−=π−−

1.,..,121),(1

21.,..,0,12

21

M Mk kMMM

M k kMMkM

M

0 .6 .8 1

00.109

0.59

1

Pasa Altas: M=33,T1=0.1095,T2=0.598

Frecuencia en unidades de π

Hr(k

)

0 10 20 30-0.4

-0.2

0

0.2

0.4Respuesta al Impulso

nh(

n)

0 .6 .8 1

00.109

0.59

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 .6 .8 1

50

0

Respuesta en Magnitud

Frecuencia en unidades de π

Dec

ibel

es

Filtro Pasa Altas: Mé todo Optimo T1 & T2

PDF created with pdfFactory trial version www.pdffactory.com

230

Por lo tanto

H(k) = jHr(k) ej∠H(k), 0 ≤ k ≤ M-1 y h(n) = TDFI[H(k)] El código que muestra los pasos del diseño es el siguiente:

>> M = 33; alpha = (M-1)/2; Dw = 2*pi/M; >> l = 0:M-1; wl = Dw*l; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> Hrs = [j*Dw*k1,-j*Dw*(M-k2)]; >> angH = [-alpha*Dw*k1, alpha*Dw*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [Hr,ww,a,P]=hr_tipo3(h); % % Gráficas >> subplot(1,1,1) >> subplot(2,1,1); k = 1:(M+1)/2; >> plot(ww/pi,+Hr/pi,wl(k)/pi,abs(Hrs(k))/pi,'o',wl(k)/pi,wl(k)/pi); >> title('Diferenciador, Diseño por Muestreo en Frecuencia: M = 33'); >> xlabel('Frecuencia en unidadesde \pi','FontSize',9); ylabel('Hr en unidades de \pi'); >> subplot(2,1,2); stem(l,h); axis([-1,M,-1.1,1.1]); >> title('Respuesta al Impulso'); xlabel('n','FontSize',9); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0;alpha;M-1])

De este modo obtenemos las correspondientes gráficas tanto en el dominio del tiempo como en el dominio de la frecuencia. Se puede observar que el diferenciador no es de banda completa.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-0.5

0

0.5

1

1.5Diferenciador, Diseñ o por Muestreo en Frecuencia: M = 33

Frecuencia en unidadesde π

Hr e

n un

idad

es d

e π

0 16 32-1

-0.5

0

0.5

1Respuesta al Impulso

n

h(n)

PDF created with pdfFactory trial version www.pdffactory.com

231

Ø Por último diseñamos un transformador de Hilbert digital con 51-puntos basado en el transformador de Hilbert ideal (6.32), donde las muestras de la respuesta en amplitud (parte imaginaria) están dadas por

jHr(k) =

−+

−=+

=

−=−

1.,..,121,

0,02

1.,..,1,

M Mk j

k

M k j

Puesto que este es un filtro con fase lineal Tipo-3, la respuesta en amplitud será cero en ω=π. Por lo tanto para reducir los rizos tenemos que elegir las dos muestras (en las bandas de transición) más cercanas a ω=π entre 0 y j, que haciendo uso de nuestra experiencia previa podemos seleccionar este valor como 0.39j. Las muestras de la respuesta en fase son seleccionadas de forma similar que en el ejemplo anterior. El siguiente código muestra los pasos del diseño.

>> M = 51; alpha = (M-1)/2; Dw = 2*pi/M; >> l = 0:M-1; wl = Dw*l; >> k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1; >> Hrs = [0,-j*ones(1,(M-3)/2),-0.39j,0.39j,j*ones(1,(M-3)/2)]; >> angH = [-alpha*Dw*k1, alpha*Dw*(M-k2)]; >> H = Hrs.*exp(j*angH); >> h = real(ifft(H,M)); >> [Hr,ww,a,P]=hr_tipo3(h); % % Gráficas >> subplot(1,1,1) >> subplot(2,1,1); k = 1:(M+1)/2; >> plot(ww/pi,-Hr,wl(k)/pi,abs(H(k)),'o'); >> title('Transformador de Hilbert, Diseño por Muestreo en Frecuencia: M = 51') >> xlabel('Frecuencia en unidades de \pi','FontSize',9); >> ylabel('Respuesta en Amplitud'); >> set(gca,'XTickMode','manual','XTick',[0:0.2:1]) >> set(gca,'YTickMode','manual','YTick',[0;0.39;1]);grid >> subplot(2,1,2); stem(l,h); axis([-1,M,-1,1]); >> title('Respuesta al Impulso'); xlabel('n','FontSize',9); ylabel('h(n)'); >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0;alpha;M-1])

Las gráficas resultantes muestran el efecto de las muestras en la banda de transición.

PDF created with pdfFactory trial version www.pdffactory.com

232

A este tipo de filtro con muestreo en frecuencia que consideramos se le conoce como filtro Tipo-A, donde las frecuencias muestreadas son

ωk = kMπ2 , 0 ≤ k ≤ M-1

Existe una segunda serie de muestras distribuidas uniformemente, dadas por

ωk = Mk )(2

2

1+π , 0 ≤ k ≤ M-1

A esto se le conoce como filtro Tipo-B, para el cual también esta disponible una estructura por muestreo en frecuencia, donde sus expresiones para la respuesta en magnitud H(ejω) y la respuesta al impulso h(n) son algo más complicadas. TÉCNICA DE DISEÑO POR EQUIRIZO OPTIMO

Las últimas dos técnicas, a saber, el diseño por ventana y el diseño por muestreo en frecuencia, fueron fáciles de entender e implementar. Sin embargo, tienen algunas desventajas: la primera de ellas es que no podemos especificar con exactitud la banda de las frecuencias ωp y ωs en el diseño, es decir, tenemos que aceptar cualquier valor que obtengamos después del diseño. La segunda desventaja consiste en que no podemos especificar los factores de rizo δ1 y δ2 simultáneamente, ya que para cualquiera de los dos tenemos

0 0.2 0.4 0.6 0.8 10

0.39

1

Transformador de Hilbert, Diseñ o por Muestreo en Frecuencia: M = 51

Frecuencia en unidades de π

Res

pues

ta e

n Am

plitu

d

0 25 50-1

-0.5

0

0.5

1Respuesta al Impulso

n

h(n)

PDF created with pdfFactory trial version www.pdffactory.com

233

que δ1 =δ2 en el método de diseño por ventana, o podemos optimizar solamente δ2 en el método por muestreo en frecuencia. Finalmente, el error de aproximación ; esto es, la diferencia entre la respuesta ideal y la respuesta actual, no esta uniformemente distribuido sobre los intervalos de la banda, ya que es mayor cerca de los bordes de la banda, y es más pequeño en las regiones alejadas de los bordes de la banda. Distribuyendo el error uniformemente, podemos obtener un filtro de orden menor que satisfaga las mismas especificaciones. Afortunadamente, existen técnicas capaces de eliminar los tres problemas anteriores, pero son algo difíciles de entender, y requieren una computadora para su implementación. Para el caso de los filtros FIR con fase lineal, es posible encontrar una serie de condiciones para las cuales se puede demostrar que la solución del diseño es optimo, en el sentido de minimizar el máximo error de aproximación. Los filtros que tienen esta propiedad son llamados filtros equirizo, debido a que el error de aproximación esta distribuido uniformemente tanto en la banda de paso como en la banda de rechazo, lo que da como resultado filtros de orden más bajo. En lo que sigue de este apartado, formularemos un problema de diseño para un filtro FIR minimax optimo, y discutiremos el número total de máximos y mínimos que se pueden obtener en la respuesta en amplitud de un filtro FIR con fase lineal. En base a esto, discutiremos un algoritmo general de diseño para filtros FIR equirizo, el cual usa interpolación polinomial para su solución, y es conocido como el algoritmo Parks-McClellan, que incorpora la rutina de intercambio Remez para la solución polinomial. Este algoritmo esta disponible como una subrutina en muchas plataformas de cálculo. A continuación vemos como usando MATLAB podemos diseñar filtros FIR equirizo. Anteriormente mostramos que la respuesta en frecuencia para los cuatro casos de filtros FIR con fase lineal puede ser escrita en la forma

H(ejω) = )(21

ωω−−β

r

Mjj Hee donde los valores para β y las expresiones para Hr(ω) se muestran en la siguiente tabla

Tipo de Filtro FIR con fase lineal β Hr(ejω)

Tipo 1: M impar, h(n) simétrica 0 ∑−

ω2/)1(

0cos)(

M

nna

Tipo 2: M para, h(n) simétrica 0 [ ]∑ −ω2/

1)2/1(cos)(

M

n nb

Tipo 3: M impar, h(n) antisimétrica 2π ∑

ω2/)1(

1)(

M

n sin nc

Tipo 4: M para, h(n) antisimétrica 2π [ ]∑ −ω

2/

1)2/1()(

M

n sinnd

PDF created with pdfFactory trial version www.pdffactory.com

234

Usando entidades trigonométricas simples, cada expresión de Hr(ω) en la tabla anterior, puede ser escrita como el producto de una función de ω (llamada Q(ω)) y una función que es una suma de cosenos (llamada P(ω)). Así obtenemos

Hr(ω) = Q(ω)P(ω) (6.40) donde P(ω) es de la forma

P(ω) = ∑=

ωαL

nnn

0cos)( (6.41)

y Q(ω), L, P(ω) para los cuatro casos, se muestran en la tabla siguiente:

Tipo de Filtro FIR PB Q(ω) L P(ω)

Tipo 1: 1 21−M ∑ ω

L

nna0

cos)(

Tipo 2: 2cos ω 12 −M ∑ ωL

nnb0

cos)(~

Tipo 3: ω sin 23−M ∑ ω

L

nnc0

cos)(~

Tipo 4: 2ω sin 12 −M ∑ ω

L

nnd0

cos)(~

El propósito de este análisis es tener una forma común de Hr(ω) para los cuatro casos, haciendo que la formulación del problema sea más fácil. Así que, para formular nuestro problema como un problema de aproximación Chebyshev, tenemos que definir la respuesta en amplitud Hdr(ω) deseada, así como también una función de peso W(ω), ambas definidas sobre las bandas de paso y las bandas de rechazo. La función de peso es necesaria para poder tener un control independiente sobre δ1 y δ2 . También tenemos que el error de peso esta definido como

E(ω) = W(ω)[ Hdr(ω) - Hr(ω)] , ω∈ S = [0, ωp] ∪ [ωs, π] (6.42) Estos conceptos se hacen más claros en la siguiente figura, donde se muestra una típica respuesta de un filtro equirizo, junto con su respuesta ideal.

PDF created with pdfFactory trial version www.pdffactory.com

235

El código que nos permitió obtener la figura es el siguiente:

% ------ Respuesta en Amplitud ------ >> figure(1); subplot(1,1,1) >> f = [0,0.3,0.5,1]; m = [1,1,0,0]; pesos = [0.5,1]; >> h = remez(10,f,m,pesos); >> M = length(h); n = 0:M-1; >> [Hr,w,a,L] = hr_tipo1(h); >> plot(w/pi,Hr);axis([0,1,-0.15,1.15]) >> xlabel('Frecuencia en unidades de \pi'); >> title('Respuesta en Amplitud de un Filtro Equirizo');hold on >> wp = w(1:151); ws = w(251:501); >> BandPasSup=Hr(1)*ones(length(wp),1); >> BandPasInf=(2-Hr(1))*ones(length(wp),1); >> BandPasIdeal=ones(length(wp),1); >> plot(wp/pi,BandPasSup,'r',wp/pi,BandPasIdeal,'--b',wp/pi,BandPasInf,'r') >> BandRechSup=Hr(251)*ones(length(ws),1); >> BandRechIdeal=zeros(length(ws),1); >> BandRechInf=-Hr(251)*ones(length(ws),1); >> plot(ws/pi,BandRechSup,'r',ws/pi,BandRechIdeal,'--b',ws/pi,BandRechInf,'r'); >> set(gca,'XTickMode','manual','XTick',[0,0.3,0.5,1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'0.3';'0.5';' 1 ']) >> set(gca,'XGrid','on') >> set(gca,'YTickMode','manual','YTick',[-0.05,0,0.05,0.90,1,1.10]) >> set(gca,'YTickLabelMode','manual',... >> 'YTickLabels',['-0.05';' 0.0 ';' 0.05';' 0.90';' 1.0 ';' 1.10']) >> text(0.31,1,'Respuesta Ideal','FontSize',8); >> text(0.32,0.0,'Respuesta Ideal','FontSize',8) >> hold off

0 0.3 0.5 1

-0.05 0.0 0.05

0.90

1.0

1.10

Frecuencia en unidades de π

Respuesta en Amplitud de un Filtro Equirizo

Respuesta Ideal

Respuesta Ideal

PDF created with pdfFactory trial version www.pdffactory.com

236

0 0.3 0.5 1

-0.10

-0.05

0.0

0.05

0.10

Frecuencia en unidades de π

Funció n de Error

La figura de la respuesta del error [ Hdr(ω) - Hr(ω) ] se muestra enseguida El código que nos permitió obtener la figura es el siguiente:

>> figure(2); clf; subplot(2,1,1); >> ErrBandPas=Hr(1:151)-BandPasIdeal; ErrBandRech=Hr(251:501)-BandRechIdeal; >> plot(wp/pi,ErrBandPas,ws/pi,ErrBandRech); axis([0,1,-.15,.15]); >> xlabel('Frecuencia en unidades de \pi'); >> title('Función de Error');hold on >> plot(wp/pi,BandPasSup-BandPasIdeal,'r',wp/pi,BandPasInf-BandPasIdeal,'r') >> plot(ws/pi,BandRechSup-BandRechIdeal,'r',ws/pi,BandRechInf-BandRechIdeal,'r'); >> set(gca,'XTickMode','manual','XTick',[0,0.3,0.5,1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'0.3';'0.5';' 1 ']) >> set(gca,'XGrid','on') >> set(gca,'YTickMode','manual','YTick',[-0.1,-0.05,0,0.05,0.1]) >> set(gca,'YTickLabelMode','manual',... >> 'YTickLabels',['-0.10';'-0.05';' 0.0 ';' 0.05';' 0.10']) >> hold off

Ahora, si elegimos

W(ω) =

δδ

rechazo de banda la en

paso de banda la en

,1

,1

2

(6.43)

Entonces la respuesta para el error de peso E(ω) es

PDF created with pdfFactory trial version www.pdffactory.com

237

0 0.3 0.5 1

-0.05

0.0

0.05

Frecuencia en unidades de π

Funció n de Error de Peso

peso = 0.5 peso = 1.0

El código que nos permitió obtener la figura es el siguiente:

% ------ Función de Error de Peso ------ >> figure(3); clf; subplot(2,1,1); >> ErrPesBandPas = pesos(1)*ErrBandPas; ErrPesBandRech = pesos(2)*ErrBandRech; >> plot(wp/pi,ErrPesBandPas,ws/pi,ErrPesBandRech); axis([0,1,-.1,.1]); >> xlabel('Frecuencia en unidades de \pi'); >> title('Función de Error de Peso');hold on >> plot(wp/pi,pesos(1)*(BandPasSup-BandPasIdeal),'r',... >> wp/pi,pesos(1)*(BandPasInf-BandPasIdeal),'r') >> plot(ws/pi,pesos(2)*(BandRechSup-BandRechIdeal),'r',... >> ws/pi,pesos(2)*(BandRechInf-BandRechIdeal),'r'); >> set(gca,'XTickMode','manual','XTick',[0,0.3,0.5,1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'0.3';'0.5';' 1 ']) >> set(gca,'XGrid','on') >> set(gca,'YTickMode','manual','YTick',[-0.05,0,0.05]) >> set(gca,'YTickLabelMode','manual',... >> 'YTickLabels',['-0.05';' 0.0 ';' 0.05']) >> text(0.08,0.075,'peso = 0.5') >> text(0.70,0.075,'peso = 1.0') >> hold off

Por consiguiente, el error máximo tanto en la banda de paso como en la banda de rechazo es δ2. Por lo tanto, si conseguimos minimizar el error de peso máximo a δ2, automáticamente satisfacemos la especificación en la banda de paso para δ1. Si sustituimos Hr(ω) de (6.40) en (6.42), obtenemos E(ω) = W(ω) [ Hdr(ω) - Q(ω)P(ω) ]

= W(ω)Q(ω)

ω−ω

ω )()()( PQ

Hdr , ω∈ S

si definimos

)()()(ˆ)()()(ˆ

ωω=ωωω=ω Q

HH y QWW drdr

PDF created with pdfFactory trial version www.pdffactory.com

238

entonces obtenemos

E(ω) = [ ])()(ˆ)(ˆ ω−ωω PHW dr , ω∈ S (6.44) Por consiguiente tenemos una forma común de E(ω) para los cuatro casos. El problema de aproximación Chebyshev ahora puede ser definido como:

Determinar la serie de coeficientes a(n) o )(~ nb o )(~ nc o )(~ nd [ o equivalentemente a(n) o b(n) o c(n) o d(n)] para minimizar el máximo valor absoluto de E(ω) sobre la banda de paso y la banda de rechazo, Vg.,

[ ] Emax minSsobre coef

|)(|..

ω∈ω

(6.45)

Ahora tenemos que conseguir los valores exactos para ωp, ωs, δ1, y δ2. En suma tenemos que, el error puede ser distribuido uniformemente tanto en la banda de paso como en la banda de rechazo. Antes de dar solución al problema anterior, discutiremos la cuestión; ¿Cuántos máximos y mínimos locales existen en la función de error E(ω) dado un filtro con M-puntos?, ya que esta información es usada por el algoritmo Parks-McClellan para obtener la interpolación polinomial. La respuesta la encontramos en la expresión P(ω) de (6.41), la cual es una función trigonométrica en ω. Usando identidades trigonométricas de la forma cos(2ω) = 2cos2 (ω) - 1

cos(3ω) = 4cos3 (ω) - 3cos(ω)

MM = P(ω) puede ser convertida en un polinomio trigonométrico en función del cos(ω), por lo que podemos escribir (6.41) como

P(ω) = ∑=

ωβL

n

nn0

cos)( (6.46)

A continuación nos valemos de un ejemplo para demostrar este hecho.

Dada h(n) =15

1 [1, 2, 3, 4, 3, 2, 1], entonces M= 7 y además h(n) es simétrica; lo que significa que tenemos un

filtro con fase lineal Tipo-1. Por lo tanto L= (M-1)/2=3. Ahora de (6.7)

α(n) = a(n) = 2h(3 - n), 1 ≤ n ≤ 2; y α(0) = a(0) = h(3)

ó α(n) = 15

1 [4, 6, 4, 2]. Por lo tanto

PDF created with pdfFactory trial version www.pdffactory.com

239

P(ω) = )3cos22cos4cos64(cos)(3

0 15

1 ω+ω+ω+=ωα∑ nn

= )cos3cos4(2)1cos2(4cos64 32

15

1 ω−ω+−ω+ω+

= ∑ ωβ=ω+ω++3

0

32 cos)(coscos0015

8

15

8 nn

ó β(n) =

158,15

8,0,0 .

De (6.46) notamos que P(ω) es un polinomio en función del cos(ω) de orden L, y puesto que cos(ω) es una función monótona en el intervalo abierto 0 < ω < π, esto da lugar a que el polinomio P(ω) de orden L se comporte como un simple polinomio P(x) de orden L en función de x. Por lo tanto P(ω) tiene a lo mucho (no más de ) L -1 extremos locales en el intervalo abierto 0 < ω < π. Por ejemplo,

22cos1)(cos2 ω+=ω

tiene solamente un mínimo en ω= π/2. Sin embargo, tiene tres extremos en el intervalo cerrado 0 ≤ ω ≤ π, que corresponde a : un máximo en ω=0, un mínimo en ω= π/2 y un máximo en ω=π. Ahora, si incluimos los puntos finales ω=0 y ω=π, entonces P(ω) tiene a lo mucho L+1 extremos en el intervalo cerrado 0 ≤ ω ≤ π. Finalmente, desearíamos que las especificaciones del filtro se encontraran exactamente en los bordes de las bandas ωp y ωs, por lo que las especificaciones pueden encontrarse en no más de L+3 frecuencias extremas en el intervalo 0 ≤ ω ≤ π. A manera de conclusión podemos decir que la función de error E(ω) tiene a lo mucho L+3 extremos en S. Esto se comprueba en el siguiente ejemplo, basado en las gráficas de la respuesta en amplitud del filtro en el ejemplo anterior, y el número total de extremos en la correspondiente función de error. La respuesta al impulso es

h(n) = 15

1 [1, 2, 3, 4, 3, 2, 1], M = 7 ó L = 3

donde α(n) = 15

1 [4, 6, 4, 2] y β(n) =

15

8

15

8 ,,0,0 del ejemplo anterior. Por lo tanto

P(ω) = ω+ω 32 cos158cos15

8

Esto se muestra en la siguiente figura.

PDF created with pdfFactory trial version www.pdffactory.com

240

Claramente se observa que P(ω) tiene (L-1)=2 extremos en el intervalo abierto 0 < ω < π. También se muestra la función de error, la cual tiene (L+3)=6 extremos. Poniendo nuestra atención en la declaración del problema, y a la ecuación (6.45), observamos que éste problema es bien conocido en la teoría de aproximación, cuya solución esta dada por el siguiente teorema. TEOREMA 1 Teorema de la Alternancia

Dada S que corresponde a cualquier subconjunto cerrado en el intervalo cerrado [0, π], y para que P(ω) sea la única aproximación minimax para Hdr(ω) sobre S, es necesario y suficiente que la función de error E(ω) exhiba por lo menos L+2 "alternancias" o frecuencias extremas en S; esto es, deben existir L+2 frecuencias ωi en S tal que

|)(|)()( 1 ω±=ω−=ω − EmaxEESii (6.47)

= S∈ω<<ω<ω∀δ± +110, L L Combinando este teorema con nuestra conclusión anterior, inferimos que el filtro equirizo optimo tiene L+2 ó L+3 alternancias en su función de error sobre S. Como dato tenemos que muchos de los filtros equirizo tienen L+2 alternancias. No obstante, para muchas combinaciones de ωp y ωs, podemos conseguir filtros con L+3 alternancias; y debido a que estos filtros tienen un rizo extra, son llamados filtros Extra-rizo.

PDF created with pdfFactory trial version www.pdffactory.com

241

Algoritmo Parks-McClellan El teorema de alternancia asegura que la solución a nuestro problema de aproximación minimax existe y además en única, pero éste no dice como obtener la solución. Ya que no conocemos el orden M (o equivalentemente L), ni las frecuencias extremas ωi, ni los parámetros α(n), ni el error máximo δ, Parks y McClellan proporcionan una solución iterativa usando el algoritmo de intercambio Remez, el cual asume que la longitud M del filtro (ó L), y la relación δ2/δ1 son conocidas. Si elegimos la función de peso como en (6.43), y si elegimos el orden M correctamente, entonces δ=δ2 cuando la solución es obtenida. Claramente se tiene que δ y M están relacionados, siendo M más grande que δ. También tenemos que las especificaciones del filtro δ1,δ2,ωp y ωs son proporcionadas, por consiguiente M tiene que ser asumida. Afortunadamente, gracias a Kaiser, existe una fórmula que permite obtener una aproximación de M, y esta dada por

πω−ω

=∆+∆−δδ−

= 216.1413log20ˆ 2110 psf ; f M (6.48)

El algoritmo Parks-McClellan comienza suponiendo L+2 frecuencias extremas ωi y estimando el error máximo δ en estas frecuencias, lo que corresponde a un polinomio de orden L (6.46) a través de los puntos dados en (6.47). Los errores máximos locales son determinados sobre una fina rejilla , y las frecuencias extremas ωi son ajustadas en estos nuevos valores extremos, por lo que un nuevo polinomio de orden L es adaptado a estas nuevas frecuencias, y el procedimiento se repite. Esta iteración continua hasta que el conjunto optimo ωi y el error máximo global δ son encontrados. Este procedimiento iterativo esta garantizado para converger, dando como resultado el polinomio P(ω), y a partir de (6.46) se determinan los coeficientes β(n). Finalmente, los coeficientes a(n) y la respuesta al impulso h(n) son calculados. Este algoritmo esta disponible en MATLAB en forma de una función llamada remez, que se describe más adelante. Puesto que aproximamos M, el error máximo δ puede no ser igual a δ2; en este caso tenemos que incrementar M (si δ > δ2) o decrementarla (si δ < δ2), y usar otra vez el algoritmo remez para determinar una nueva δ. Este procedimiento se repite hasta que δ ≤ δ2. De este modo obtenemos el filtro FIR equirizo que satisface los tres requerimientos discutidos anteriormente. El algoritmo Parks-McClellan esta disponible en MATLAB como una función llamada remez, cuya sintaxis más general es

[h] = remez(N, f, m, pesos, tipoF) Cabe hacer notar que hay varias versiones de esta sintaxis, como las que se muestran a continuación: • [h] = remez(N, f, m) Diseña un filtro digital de orden N (notar que la longitud del filtro es M=N+1) cuya respuesta en frecuencia esta especificada por los arreglos f y m. Los coeficientes del filtro (o respuesta al impulso) son colocados en el arreglo h de longitud M, mientras que el arreglo f contiene las frecuencias que se encuentran en el borde de la banda, las cuales están en unidades de π; esto es, 0.0 ≤ f ≤1.0; además estas frecuencias tiene que estar en orden creciente, iniciando con 0.0 y terminando con 1.0. Por otra parte, el arreglo m contiene la respuesta en magnitud deseada en las frecuencias especificadas por el arreglo f. Un punto importante es que las longitudes de los arreglos f y m deben ser las mismas, a la vez que deben ser un número par. Por último tenemos que la función de peso usada en cada banda es igual a la unidad, lo que significa que las tolerancias (δi´s) en cada banda son las mismas.

PDF created with pdfFactory trial version www.pdffactory.com

242

• [h] = remez(N, f, m, pesos) Es similar al caso anterior excepto que el arreglo pesos especifica la función de peso en cada banda. • [h] = remez(N, f, m, tipoF) Es similar al primer caso excepto cuando tipoF es la cadena 'differentiator' o 'hilbert', esto diseña diferenciadores digitales o transformadores digitales de Hilbert, respectivamente. Para el transformador digital de Hilbert la frecuencia más baja en el arreglo f no debe ser 0, y la frecuencia más alta no debe ser 1. Para el caso del diferenciador digital, el vector m no especifica la pendiente deseada en cada banda, pero sí la magnitud deseada. • [h] = remez(N, f, m, pesos, tipoF) Es similar al caso anterior excepto que el arreglo pesos especifica la función de peso en cada banda. Como se explico durante la descripción del algoritmo Parks-McClellan , primero tenemos que obtener el orden del filtro usando (6.48) para poder usar la rutina remez. Después de obtener los coeficientes del filtro, los cuales se colocan en el arreglo h, tenemos que checar la atenuación mínima en la banda de rechazo y compararla con la As establecida; y entonces incrementar (o decrementar) el orden del filtro. Tenemos que repetir este proceso hasta obtener la As deseada. Para ilustrar este procedimiento desarrollamos a continuación una serie de ejemplos. Ø Para este ejemplo diseñamos un filtro pasa bajas, el cual ya fue analizado anteriormente usando la técnica de diseño por ventana. Los parámetros de diseño son

ωp = 0.2π , Rp = 0.25 dB ωs = 0.3π , As = 50 dB El siguiente código describe los pasos del diseño:

>> wp = 0.2*pi; ws = 0.3*pi; Rp = 0.25; As = 50; >> delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1); >> delta2 = (1+delta1)*(10^(-As/20)); >> deltaH = max(delta1,delta2); deltaL = min(delta1,delta2); >> pesos = [delta2/delta1 1]; >> deltaf = (ws-wp)/(2*pi); >> M = ceil((-20*log10(sqrt(delta1*delta2))-13)/(14.6*deltaf)+1) M = 43 >> f = [0 wp/pi ws/pi 1]; >> m = [1 1 0 0]; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); > delta_w = 2*pi/1000; wsi=ws/delta_w+1; wpi = wp/delta_w; >> Asd = -max(db(wsi:1:501)) Asd = 47.8404 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(wsi:1:501)) Asd = 48.2131 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(wsi:1:501)) Asd = 48.8689

PDF created with pdfFactory trial version www.pdffactory.com

243

>> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(wsi:1:501)) Asd = 49.8241 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(wsi:1:501)) Asd = 51.0857 >> M M = 47 >> [Hr,w,a,L] = hr_tipo1(h); % % Gráficas >> figure(1); subplot(1,1,1) >> subplot(2,2,1); stem([0:1:M-1],h); title('Respuesta al Impulso Actual') >> axis([0 M-1 -0.1 0.3]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0,M-1]) >> set(gca,'YTickMode','manual','YTick',[-0.1:0.1:0.3]) >> subplot(2,2,2);plot(w/pi,db);title('Respuesta en Magnitud en dB'); >> axis([0,1,-80,10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[-50,0]); >> set(gca,'YTickLabelMode','manual','YTickLabels',['50';' 0']);grid >> subplot(2,2,3);plot(w/pi,Hr);title('Respuesta en Amplitud'); >> axis([0 1 -0.1 1.1]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Hr(w)'); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[0,1]);grid >> subplot(2,2,4); >> wBandPas = w(1:1:wpi+1)/pi; ErrBandPas = Hr(1:1:wpi+1)-1; >> wBandRech = w(wsi+1:501)/pi; ErrBandRech = Hr(wsi+1:501); >> plot(wBandPas,ErrBandPas,wBandRech,ErrBandRech); >> axis([0,1,-deltaH,deltaH]);title('Respuesta del Error'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]) >> set(gca,'YTickMode','manual','YTick',[-deltaH,-deltaL,0,deltaL,deltaH]); >> set(gca,'XGrid','on') >> toptitle('Filtro FIR Pasa Bajas - Equirizo');

Notar que el procedimiento iterativo anterior se detiene cuando la atenuación calculada en la banda de rechazo excede la atenuación As establecida, obteniéndose así, que el valor optimo de M fue de 47. Este valor de M es considerablemente más pequeño, en comparación al que se obtuvo con la técnica de diseño por ventana (M= 61, para una ventana Kaiser) o la técnica por muestreo en frecuencia (M= 60). A continuación se muestran las gráficas en el dominio del tiempo y la frecuencia para el filtro diseñado, junto con la función de error para la banda de paso y la banda de rechazo; esto con el fin de ilustrar el comportamiento del equirizo.

PDF created with pdfFactory trial version www.pdffactory.com

244

Ø Ahora diseñamos un filtro pasa banda, que anteriormente fue descrito usando también la técnica de diseño por ventana. Los parámetros de diseño son:

ω1s = 0.2π ; Rp = 1 dB

ω1p = 0.35π ω2p = 0.65π

; As = 60 dB ω2s = 0.8π

El siguiente código muestra como diseñar este filtro usando el algoritmo Parks-McClellan.

>> ws1 = 0.2*pi; wp1 = 0.35*pi; wp2 = 0.65*pi; ws2 = 0.8*pi; >> Rp = 1.0; As = 60; >> delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1); >> delta2 = (1+delta1)*(10^(-As/20)); >> deltaH = max(delta1,delta2); deltaL = min(delta1,delta2); >> pesos = [1 delta2/delta1 1]; >> delta_f =min((ws2-wp2)/(2*pi), (wp1-ws1)/(2*pi)); >> M = ceil((-20*log10(sqrt(delta1*delta2))-13)/(14.6*delta_f)+1) M = 28 >> f = [0 ws1/pi wp1/pi wp2/pi ws2/pi 1]; >> m = [0 0 1 1 0 0]; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w=2*pi/1000; >> ws1i=floor(ws1/delta_w)+1; wp1i = floor(wp1/delta_w)+1; >> ws2i=floor(ws2/delta_w)+1; wp2i = floor(wp2/delta_w)+1;

0 46-0.1

0

0.1

0.2

0.3Respuesta al Impulso Actual

n

h(n)

0 0.20.3 1

50

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es0 0.20.3 1

0

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.20.3 1-0.0144

-0.00320

0.0032

0.0144Respuesta del Error

Frecuencia en unidades de π

Hr(w

)

Filtro FIR Pasa Bajas - Equirizo

PDF created with pdfFactory trial version www.pdffactory.com

245

>> Asd = -max(db(1:1:ws1i)) Asd = 56.5910 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(1:1:ws1/delta_w)) Asd = 61.2843 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(1:1:ws1/delta_w)) Asd = 60.3811 >> M = M+1; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(1:1:ws1/delta_w)) Asd = 61.3081 >> M M = 31 >> [Hr,w,a,L] = hr_tipo1(h); % % Gráficas >> figure(1); subplot(1,1,1) >> subplot(2,2,1); stem([0:1:M-1],h); title('Respuesta al Impulso Actual') >> axis([0,M-1,-0.4,0.5]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0,M-1]) >> set(gca,'YTickMode','manual','YTick',[-0.4:0.2:0.5]) >> subplot(2,2,2);plot(w/pi,db);title('Respuesta en Magnitud en dB'); >> axis([0,1,-80,10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-60,0]); >> set(gca,'YTickLabelMode','manual','YTickLabels',['60';' 0']);grid >> subplot(2,2,3);plot(w/pi,Hr);title('Respuesta en Amplitud'); >> axis([0 1 -0.1 1.1]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Hr(w)'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[0,1]);grid >> delta_w = 2*pi/1000; sp_borde1 = ws1/delta_w+1; sp_borde2 = ws2/delta_w+1; >> subplot(2,2,4); >> BandRech_w1 = w(1:1:ws1i)/pi; BandRech_Err1 = Hr(1:1:ws1i); >> BandPas_w = w(wp1i:wp2i)/pi; BandPas_Err = Hr(wp1i:wp2i)-1; >> BandRech_w2 = w(ws2i:501)/pi; BandRech_Err2 = Hr(ws2i:501); >> plot(BandRech_w1,BandRech_Err1,BandPas_w,BandPas_Err*(delta2/delta1),... >> BandRech_w2,BandRech_Err2); >> title('Error de Peso'); >> axis([0,1,-deltaL,deltaL]); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-deltaL,0,deltaL]); >> set(gca,'XGrid','on','YGrid','on') >> toptitle('Filtro FIR Pasa Banda - Equirizo');

PDF created with pdfFactory trial version www.pdffactory.com

246

Finalmente se obtuvo el valor optimo de M= 31. Las gráficas resultantes son las siguientes. Ø Ahora diseñamos un filtro pasa altas con las siguientes especificaciones:

ωs = 0.6π , As = 50 dB ωp = 0.75π , Rp = 0.5 dB Puesto que este es un filtro pasa altas, debemos asegurarnos que la longitud M sea un número impar, como se muestra en el siguiente código.

>> ws = 0.6*pi; wp = 0.75*pi; Rp = 0.5; As = 50; >> delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1); >> delta2 = (1+delta1)*(10^(-As/20)); >> deltaH = max(delta1,delta2); deltaL = min(delta1,delta2); >> pesos = [1 delta2/delta1]; >> deltaf = (wp-ws)/(2*pi); >> M = ceil((-20*log10(sqrt(delta1*delta2))-13)/(14.6*deltaf)+1); % M debe ser impar >> M = 2*floor(M/2)+1 M = 27 >> f = [0 ws/pi wp/pi 1];

0 30-0.4

-0.2

0

0.2

0.4

Respuesta al Impulso Actual

n

h(n)

0 0.2 0.35 0.65 0.8 1

60

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es

0 0.2 0.35 0.65 0.8 1

0

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.2 0.35 0.65 0.8 1-1.0575

0

1.0575x 10-3 Error de Peso

Frecuencia en unidades de π

Hr(w

)

Filtro FIR Pasa Banda - Equirizo

PDF created with pdfFactory trial version www.pdffactory.com

247

>> m = [0 0 1 1]; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w = 2*pi/1000; wsi=ws/delta_w; wpi = wp/delta_w; >> Asd = -max(db(1:1:wsi)) Asd = 49.5918 >> M = M+2; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(1:1:wsi)) Asd = 50.2253 >> M M = 29 >> [Hr,w,a,L] = hr_tipo1(h); % % Gráficas >> figure(1); subplot(1,1,1) >> subplot(2,2,1); stem([0:1:M-1],h); title('Respuesta al Impulso Actual') >> axis([0 M-1 -0.4 0.4]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0,M-1]) >> set(gca,'YTickMode','manual','YTick',[-0.4:0.2:0.4]) >> subplot(2,2,2);plot(w/pi,db);title('Respuesta en Magnitud en dB'); >> axis([0,1,-80,10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-50,0]);grid >> set(gca,'YTickLabelMode','manual','YTickLabels',['50';' 0']); >> subplot(2,2,3);plot(w/pi,Hr);title('Respuesta en Amplitud'); >> axis([0 1 -0.1 1.1]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Hr(w)'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[0,1]);grid >> subplot(2,2,4); >> wBandRech = w(1:1:wsi+1)/pi; ErrBandRech = Hr(1:1:wsi+1); >> wBandPas = w(wpi+1:501)/pi; ErrBandPas = Hr(wpi+1:501)-1; >> plot(wBandRech,ErrBandRech,wBandPas,ErrBandPas); >> axis([0,1,-deltaH,deltaH]);title('Respuesta del Error'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-deltaH,-deltaL,0,deltaL,deltaH]); >> set(gca,'XGrid','on') >> toptitle('Filtro FIR Pasa Altas - Equirizo');

Cabe hacer notar que se tuvo que incrementar el valor de M para mantenerlo como un valor impar; de este modo se obtuvo que la M optima fue de 29. Las gráficas correspondientes se muestran enseguida.

PDF created with pdfFactory trial version www.pdffactory.com

248

Ø En este ejemplo diseñamos un filtro "escalera", el cual tiene tres bandas, con diferentes respuestas ideales y diferentes tolerancias en cada banda. Las especificaciones de diseño son: Banda - 1: 0 ≤ ω ≤ 0.3π, Ganancia ideal = 1, Tolerancia δ1 = 0.01 Banda - 2: 0.4π ≤ ω ≤ 0.7π, Ganancia ideal = 0.5, Tolerancia δ2 = 0.005 Banda - 3: 0.8π ≤ ω ≤ π, Ganancia ideal = 0, Tolerancia δ3 = 0.001 El siguiente código describe el procedimiento del diseño:

>> w1 = 0; w2 = 0.3*pi; delta1 = 0.01; >> w3 = 0.4*pi; w4 = 0.7*pi; delta2 = 0.005; >> w5 = 0.8*pi; w6 = pi; delta3 = 0.001; >> deltaH = max([delta1,delta2,delta3]); deltaL = min([delta1,delta2,delta3]); >> pesos = [delta3/delta1 delta3/delta2 1]; >> delta_f = min((w3-w2)/(2*pi), (w5-w3)/(2*pi)); >> M = ceil((-20*log10(sqrt(delta1*delta2))-13)/(14.6*delta_f)+1) M = 43 >> f = [0 w2/pi w3/pi w4/pi w5/pi 1]; >> m = [1 1 0.5 0.5 0 0]; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> delta_w = 2*pi/1000; >> w1i=floor(w1/delta_w)+1; w2i = floor(w2/delta_w)+1; >> w3i=floor(w3/delta_w)+1; w4i = floor(w4/delta_w)+1; >> w5i=floor(w5/delta_w)+1; w6i = floor(w6/delta_w)+1;

0 28-0.4

-0.2

0

0.2

0.4Respuesta al Impulso Actual

n

h(n)

0 0.6 0.75 1

50

0

Respuesta en Magnitud en dB

Frecuencia en unidades de π

Dec

ibel

es0 0.6 0.75 1

0

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.6 0.75 1-0.0288

-0.003300.0033

0.0288Respuesta del Error

Frecuencia en unidades de π

Hr(w

)

Filtro FIR Pasa Altas - Equirizo

PDF created with pdfFactory trial version www.pdffactory.com

249

>> Asd = -max(db(w5i:w6i)) Asd = 56.2016 El valor optimo fue encontrado en M=49 >> M = 49; >> h = remez(M-1,f,m,pesos); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> Asd = -max(db(w5i:w6i)) Asd = 60.6068 >>[Hr,w,a,L] = hr_tipo1(h); % % Gráficas >> figure(1); subplot(1,1,1) >> subplot(2,2,1); stem([0:1:M-1],h); title('Actual Respuesta al Impulso') >> axis([0,M-1,-0.1,0.6]); xlabel('n','FontSize',8); ylabel('h(n)') >> xaux = [0:M-1]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0,M-1]) >> set(gca,'YTickMode','manual','YTick',[-0.1:0.1:0.6]) >> subplot(2,2,2);plot(w/pi,db);title('Respuesta en Magnitud, en dB'); >> axis([0,1,-80,10]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Decibeles'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-60,0]); >> set(gca,'YTickLabelMode','manual','YTickLabels',['60';' 0']);grid >> subplot(2,2,3);plot(w/pi,Hr);title('Respuesta en Amplitud'); >> axis([0 1 -0.1 1.1]); xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Hr(w)'); >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[0,0.5,1]);grid >> delta_w = 2*pi/1000; sp_borde = w5/delta_w+1; >> subplot(2,2,4); >> banda1w = w(w1i:w2i)/pi; ErrBand1 = (Hr(w1i:w2i)-m(1))*pesos(1); >> banda2w = w(w3i:w4i)/pi; ErrBand2 = (Hr(w3i:w4i)-m(3))*pesos(2); >> banda3w = w(w5i:w6i)/pi; ErrBand3 = (Hr(w5i:w6i)-m(5))*pesos(3); >> plot(banda1w,ErrBand1,banda2w,ErrBand2,banda3w,ErrBand3); >> title('Error de Peso'); >> axis([0,1,-delta3,delta3]); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Hr(w)') >> set(gca,'XTickMode','manual','XTick',f) >> set(gca,'YTickMode','manual','YTick',[-delta3,0,delta3]); grid >> toptitle('Filtro FIR Escalera - Equirizo'); Las gráficas resultantes son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

250

Ø Ahora diseñamos un diferenciador digital con diferentes pendientes en cada banda. Las especificaciones de diseño son las siguientes: Banda - 1: 0 ≤ ω ≤ 0.2π, Pendiente = 1 muestra / ciclo Banda - 2: 0.4π ≤ ω ≤ 0.6π, Pendiente = 2 muestras / ciclo Banda - 3: 0.8π ≤ ω ≤ π, Pendiente = 3 muestras / ciclo En este caso necesitamos los valores de la respuesta en magnitud de cada banda, los cuales pueden ser obtenidos multiplicando las frecuencias que se encuentran en los bordes de las bandas (en ciclos / muestra) por los valores de las pendientes (en muestras / ciclo), como se muestra Banda - 1: 0 ≤ f ≤ 0.1, Pendiente = 1 muestra / ciclo ⇒ 0.0 ≤ | H | ≤ 0.1 Banda - 2: 0.2 ≤ f ≤ 0.3, Pendiente = 2 muestras / ciclo ⇒ 0.4 ≤ | H | ≤ 0.6 Banda - 3: 0.4 ≤ f ≤ 0.5, Pendiente = 3 muestras / ciclo ⇒ 1.2 ≤ | H | ≤ 1.5 Haciendo que los pesos sean iguales en todas las bandas, el código correspondiente resulta en:

>> f = [0 0.2 0.4 0.6 0.8 1]; % en unidades de w/pi >> m = [0,0.1,0.4,0.6,1.2,1.5]; % valores de la magnitud >> h = remez(25,f,m,'differentiator'); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> figure(1); subplot(1,1,1) >> subplot(2,1,1); stem([0:25],h); title('Respuesta al Impulso'); >> xlabel('n'); ylabel('h(n)'); axis([0,25,-0.6,0.6])

0 48-0.1

00.10.20.30.40.50.6

Actual Respuesta al Impulso

n

h(n)

0 0.30.4 0.70.8 1

60

0

Respuesta en Magnitud, en dB

Frecuencia en unidades de π

Dec

ibel

es

0 0.30.4 0.70.8 1

0

0.5

1

Respuesta en Amplitud

Frecuencia en unidades de π

Hr(w

)

0 0.30.4 0.70.8 1-1

0

1x 10

-3 Error de Peso

Frecuencia en unidades de π

Hr(w

)

Filtro FIR Escalera - Equirizo

PDF created with pdfFactory trial version www.pdffactory.com

251

>> xaux = [0:25]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25); >> set(gca,'XTickMode','manual','XTick',[0,25]) >> set(gca,'YTickMode','manual','YTick',[-0.6:0.2:0.6]); >> subplot(2,1,2); plot(w/(2*pi),mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia Normalizada, f'); ylabel('|H|') >> set(gca,'XTickMode','manual','XTick',f/2) >> set(gca,'YTickMode','manual','YTick',m); grid Las gráficas correspondientes son las siguientes:

Ø Por último, diseñamos un transformador de Hilbert sobre la banda 0.05π ≤ ω ≤ 0.95π. Puesto que este es un transformador de Hilbert de banda ancha, tenemos que elegir una longitud impar para nuestro filtro, Vg., filtro Tipo-3. Así que elegimos M= 51, por lo que el código correspondiente es el siguiente:

>> f = [0.05,0.95]; m = [1 1]; M = 51; N = M-1; >> h = remez(N,f,m,'hilbert'); >> [db,mag,fase,grp,w] = freqz_m(h,[1]); >> figure(1); subplot(1,1,1) >> subplot(2,1,1); stem([0:N],h); title('Respuesta al Impulso'); >> xlabel('n'); ylabel('h(n)'); axis([0,N,-0.8,0.8]) >> xaux = [0:N]; yaux = zeros(size(xaux)); >> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

0 25-0.6

-0.4

-0.2

0

0.2

0.4

0.6Respuesta al Impulso

n

h(n)

0 0.1 0.2 0.3 0.4 0.50

0.1

0.40.6

1.2

1.5Respuesta en Magnitud

Frecuencia Normalizada, f

|H|

PDF created with pdfFactory trial version www.pdffactory.com

252

>> set(gca,'XTickMode','manual','XTick',[0,N]) >> set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8]); >> subplot(2,1,2); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi'); ylabel('|H|') >> set(gca,'XTickMode','manual','XTick',[0,f,1]) >> set(gca,'YTickMode','manual','YTick',[0,1]);grid Las gráficas de este transformador de Hilbert se muestran a continuación.

0 50-0.8-0.6-0.4-0.2

00.20.40.60.8

Respuesta al Impulso

n

h(n)

0 0.05 0.95 10

1

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

PDF created with pdfFactory trial version www.pdffactory.com

280

Respuestas en fase de los Filtros Prototipo Los filtros elípticos proporcionan un optimo rendimiento en la respuesta en magnitud, pero tienen una respuesta en fase con un alto grado de no linealidad en la banda de paso (lo que es indeseable en muchas aplicaciones). Aunque decimos no preocuparnos por la respuesta en fase en nuestros diseños, la fase es una cuestión importante que se debe considerar en una visión de conjunto del sistema. En el otro extremo de la escala de rendimiento están los filtros Butterworth, los cuales exhiben una respuesta en magnitud totalmente plana y requieren un orden N superior (más polos) para alcanzar la misma especificación en la banda de rechazo; sin embargo, presentan una respuesta en fase bastante lineal en su banda de paso. Por su parte los filtros Chebyshev tienen características de fase intermedias. Así, en aplicaciones prácticas donde consideramos a los filtros Butterworth, Chebyshev, y también a los filtros Elípticos, la elección que hagamos dependerá tanto del orden del filtro (el cual influye en la velocidad de procesamiento y en la complejidad de la implementación) como de las características de fase.

TRANSFORMACIONES ANALÓGICO A DIGITAL

Una vez que hemos presentado los diferentes enfoques para el diseño de filtros analógicos, estamos listos para transformarlos en filtros digitales. Las transformaciones son mapeos complejos, que son derivadas a partir de la conservación de diferentes aspectos de los filtros analógicos y digitales. Si queremos conservar la forma de la respuesta impulsiva de un filtro analógico hacia uno digital, podemos usar una técnica llamada transformación de invarianza impulsiva; si lo que queremos es convertir una representación de una ecuación diferencial en su correspondiente representación ecuación de diferencias, entonces podemos aplicar una técnica de aproximación por diferencias finitas. Cabe mencionar que, también, son posibles otras técnicas, entre ellas la llamada invarianza al escalón, que conserva la forma de la respuesta al escalón; sin embargo, la técnica más popular es la conocida como transformación Bilineal, la cual conserva la representación de la función del sistema al pasar del dominio analógico al digital. En este apartado estudiaremos en detalle las transformaciones de invarianza impulsiva y bilineal, las cuales implementamos en MATLAB. Transformación de Invarianza Impulsiva En este método de diseño queremos que la respuesta al impulso del filtro digital luzca "similar" a la de un filtro analógico. En consecuencia, muestreamos ha(t) en cierto intervalo de muestreo T para obtener h(n); esto es,

h(n) = ha(nT) El parámetro T es elegido de modo que la forma de ha(t) sea "captada" por las muestras. Puesto que esto es una operación de muestreo, las frecuencias analógicas y digitales quedan relacionadas por

ω = ΩT ó ejω = ejΩT Puesto que z = ejω sobre el círculo unitario y s = jΩ sobre los ejes imaginarios, tenemos la siguiente transformación del plano-s al plano-z:

z = esT (7.24) Las funciones del sistema H(z) y Ha(s) están relacionadas a través de la fórmula de aliasing (3.27) en el dominio de la frecuencia:

PDF created with pdfFactory trial version www.pdffactory.com

281

H(z) = ∑∞

−∞=

π

−k

a kT

jsHT

21

La transformación del plano complejo, bajo el mapeo de (7.24), se muestra en la siguiente figura:

de la cual entresacamos las siguientes observaciones: 1. Usando σ = Re(s), notamos que

σ < 0 se mapea en |z| < 1 (dentro del círculo unitario) σ = 0 se mapea sobre |z| = 1 (sobre el círculo unitario) σ > 0 se mapea en |z| > 1 (fuera del círculo unitario)

2. Todas las franjas semi infinitas (mostradas en la figura de arriba) de ancho 2π/T se mapean en |z| < 1. Por consiguiente este mapeo no es único por ser un mapeo muchos a uno.

3. Ya que toda la mitad izquierda del plano-s se mapea sobre el círculo unitario, un filtro analógico causal y

estable se mapea en un filtro digital causal y estable.

4. Si Ha(jΩ) = Ha(jω/T) = 0 para |Ω| ≥ π /T, entonces

H(ejω) = ),/(1 TjH

T a ω |ω| ≤ π

en donde no habrá aliasing. Sin embargo, un filtro no analógico de orden finito puede estar exactamente limitado en banda. Por lo tanto ocurrirá algún error de aliasing en este procedimiento de diseño, por lo que el intervalo de muestreo T juega un rol menor es éste método de diseño. Procedimiento de Diseño Dadas las especificaciones de un filtro digital pasa bajas: ωp, ωs, Rp, y As queremos determinar H(z) diseñando en primer lugar un filtro analógico equivalente, para entonces mapearlo en el filtro digital deseado. Los pasos requeridos para este procedimiento son:

PDF created with pdfFactory trial version www.pdffactory.com

282

1. Elegir T y determinar las frecuencias analógicas

Ωp = p

p

y Ωs = T

2. Diseñar un filtro analógico Ha(s) usando las especificaciones Ωp, Ωs, Rp, y As. Esto puede ser

hecho usando uno de los tres prototipos del apartado anterior (Butterworth, Chebyshev, o Elliptic).

3. Usando una expansión en fracciones parciales, expandemos Ha(s) en

Ha(s) = ∑= −

N

k k

k

psR

1

4. Ahora transformamos los polos analógicos pk en polos digitales Tkp

e para obtener el filtro digital:

H(z) = ∑=

−−

N

kTp

k

zeR

k1

11 (7.25)

A continuación nos valemos de un ejemplo para mostrar este procedimiento. El ejemplo consiste en transformar

Ha(s) = 65

12 ++

+ss

s

en un filtro H(z) usando la técnica de invarianza impulsiva, en donde T = 0.1. Primero expandemos Ha(s) usando expansión en fracciones parciales:

Ha(s) = 65

12 ++

+ss

s =

21

32

+−

+ ss

Se puede observar que los polos se encuentran en p1 = -3 y p2 = -2 . Entonces de (7.25) y usando T = 0.1, obtenemos

H(z) = 21

1

1213 6065.05595.118966.01

11

12

−−

−−−− +−−

=−

−− zz

zzeze TT

Es fácil desarrollar una función en MATLAB que implemente el mapeo de la invarianza impulsiva. Así que, dada una descripción de la función racional de Ha(s), podemos usar la función residue para obtener la descripción de los polos y ceros. Entonces cada polo analógico es mapeado en un polo digital usando (7.24). Finalmente, puede ser usada la función residuez para convertir H(z) en una función en forma racional. Este procedimiento es implementado en la siguiente función llamada invar_impul.

PDF created with pdfFactory trial version www.pdffactory.com

283

Valiéndonos de la función del sistema del ejemplo anterior, demostramos el uso de esta función. El script es el siguiente:

>> c = [1,1]; d = [1,5,6]; T = 0.1; Fs = 1/T; >> [b,a] = invar_impul(c,d,T) b = 1.0000 -0.8966 a = 1.0000 -1.5595 0.6065

Así obtenemos que el filtro digital es

H(z) = 21

1

6065.05595.118966.01

−−

+−−

zzz

,

como era de esperarse. El siguiente código nos permite generar las gráficas donde se muestran las respuestas impulsivas y las respuestas en magnitud (graficadas por encima de la frecuencia de muestreo 1/T) de los filtros analógico y digital resultantes.

% Respuesta al Impulso del Filtro Analógico >> t = [0:0.01:3]; subplot(2,1,1); impulse(c,d,t); >> axis([0,3,-0.1,1]); hold on % % Respuesta al Impulso del Filtro Digital >> n = [0:1:3/T]; hn = filter(b,a,SecuenciaImpulso(0,0,3/T)); >> stem(n*T,hn); hold off % % Respuesta en Magnitud del Filtro Digital >> [db,magd,fase,grd,wd] = freqz_m(b,a); % % Respuesta en Magnitud del Filtro Analógico >> [db,mags,fase,ws] = freqs_m(c,d,2*pi*Fs); >> subplot(2,1,2); plot(ws/(2*pi),mags*Fs,wd/(2*pi)*Fs,magd) >> xlabel('Frecuencia en Hz','FontSize',8); title('Respuestas en Magnitud'); >> ylabel('Magnitud'); >> text(1.4,.4,'Filtro Analógico','FontSize',8); text(1.5,1.5,'Filtro Digital','FontSize',8)

function [b,a] = invar_impul(c,d,T) % Transformación de Invarianza Impulsiva % de un Filtro Analógico a un Filtro Digital % ----------------------------------------------------------------------- % [b,a] = invar_impul(c,d,T) % b = Polinomio del Numerador en z^(-1) del filtro digital % a = Polinomio del Denominador en z^(-1) del filtro digital % c = Polinomio del Numerador en s del filtro analógico % d = Polinomio del Denominador en s del filtro analógico % T = Parámetro de muestreo (transformación) % [R,p,k] = residue(c,d); p = exp(p*T); [b,a] = residuez(R,p,k); b = real(b'); a = real(a');

PDF created with pdfFactory trial version www.pdffactory.com

284

Las gráficas son: Claramente se observa que el aliasing es evidente en el dominio de la frecuencia. A continuación desarrollaremos una serie de ejemplos para ilustrar el procedimiento de diseño con el método de invarianza impulsiva para los tres prototipos.

Ø En este primer ejemplo diseñaremos un filtro digital usando un prototipo Butterworth, cuyas especificaciones son:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El procedimiento de diseño se muestra en el siguiente script:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo inverso para frecuencias >> T = 1; % Hacemos T=1 >> OmegaP = wp * T; % frecuencia prototipo en la Banda de Paso >> OmegaS = ws * T; % frecuencia prototipo en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Prototipo Butterworth: >> [cs,ds] = dfa_butt(OmegaP,OmegaS,Rp,As);

Time (sec.)

Ampl

itude

Impulse Response

0 0.5 1 1.5 2 2.5 3

0

0.5

1

0 1 2 3 4 5 6 7 8 9 100

1

2

3

Frecuencia en Hz

Respuestas en Magnitud

Mag

nitu

d

Filtro Analó gico

Filtro Digital

PDF created with pdfFactory trial version www.pdffactory.com

285

%%*** Orden del Filtro Butterworth = 6 % % Transformación de Invarianza Impulsiva: >> [b,a] = invar_impul(cs,ds,T); >> [C,B,A] = sdir2cas(b,a) C = 4.9960e-015 B = 1.0e+012 * 0.0000 0.1263 1.7996 0.0000 0.0000 0.0000 0 0.0000 0.0000 A = 1.0000 -0.9973 0.2570 1.0000 -1.0691 0.3699 1.0000 -1.2972 0.6949

El filtro deseado es un filtro Buterworth de 6º orden, cuya función sistema H(z) esta dada en forma paralela.

21

1

21

1

21

1

6449.02972.114463.02871.0

3699.00691.111454.11428.2

257.09973.016304.08587.1

)(

−−

−−

−−

+−−

+

+−+−

++−

−=

zzz

zzz

zzz

zH

El siguiente código nos permite obtener las gráficas de las respuestas en frecuencia.

% **** Gráficas **** >> subplot(1,1,1); >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,10]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:2:10]); grid >> toptitle('Filtro Digital Butterworth Pasa Bajas: Orden 6'); Las gráficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

286

Ø Ahora diseñaremos un filtro digital pasa bajas usando un prototipo Chebyshev-I, cuyas especificaciones son:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El procedimiento del diseño se muestra en el siguiente script:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; % Hacemos T=1 >> OmegaP = wp * T; % frecuencia en la Banda de Paso >> OmegaS = ws * T; % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Chebyshev-I Prototipo: >> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Chebyshev-I = 4 %

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

2

4

6

8

10Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Butterworth Pasa Bajas: Orden 6

PDF created with pdfFactory trial version www.pdffactory.com

287

% Transformación de Invarianza Impulsiva: >> [b,a] = invar_impul(cs,ds,T); >> [C,B,A] = sdir2cas(b,a) C = -1.3878e-017 B = 1.0e+014 * 0.0000 0.0000 0.0000 0 0.0000 -3.8714 A = 1.0000 -1.4934 0.8392 1.0000 -1.5658 0.6549

El filtro deseado es un filtro Chebyshev-I de 4º orden cuya función sistema H(z) es:

H(z) = 21

1

21

1

6549.05658.110239.00833.0

8392.04934.110246.00833.0

−−

−−

+−+−

++−

−−zz

zzz

z

El siguiente código nos permite obtener las gráficas de las respuestas en frecuencia.

% Gráficas >> subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:5:15]); grid >> toptitle('Filtro Digital Chebyshev-I Pasa Bajas: Orden 4'); Las gráficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

288

Ø Ahora diseñaremos un filtro digital pasa bajas usando un prototipo Chebyshev-II, cuyas especificaciones son las siguientes:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

Cabe recordar que el filtro Chebyshev-II es equirizo en la banda de rechazo. Esto significa que la respuesta de este filtro analógico no tiende a cero en las frecuencias altas en la banda de rechazo. Por lo tanto, después de la transformación de invarianza impulsiva, el efecto de aliasing será significativo, lo que puede degradar la respuesta en la banda de paso. El script es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; % Hacemos T=1 >> OmegaP = wp * T; % frecuencia en la Banda de Paso >> OmegaS = ws * T; % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Prototipo Chebyshev-II: >> [cs,ds] = dfa_chb2(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Chebyshev-II = 4 % % Transformación de Invarianza Impulsiva: >> [b,a] = invar_impul(cs,ds,T); >> [C,B,A] = sdir2cas(b,a);

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π0 0.20.3 1

0

5

10

15Retardo de Grupo

Frecuencia en unidades de πM

uest

ras

Filtro Digital Chebyshev-I Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

289

El código que nos permite obtener las gráficas de las respuestas en frecuencia es el siguiente:

% Gráficas >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:5:15]); grid >> toptitle('Filtro Digital Chebyshev-II Pasa Bajas: Orden 4'); Las gráficas son:

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Chebyshev-II Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

290

De las gráficas claramente observamos la banda de paso, así como también la degradación en la banda de rechazo. Por lo tanto, concluimos que la técnica de diseño de invarianza impulsiva ha fracasado en la producción del filtro digital deseado. Ø En este último ejemplo diseñaremos un filtro digital pasa bajas usando un prototipo Elíptico, con especificaciones:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El filtro Elíptico es equirizo en ambas bandas. Por lo tanto, esta situación es similar a la del filtro Chebyshev-II, por lo que no deberíamos esperar un buen filtro digital. El script correspondiente es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; % Hacemos T=1 >> OmegaP = wp * T; % frecuencia en la Banda de Paso >> OmegaS = ws * T; % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Elíptico Prototipo: >> [cs,ds] = dfa_elip(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Elíptico = 3 % % Transformación de Invarianza Impulsiva: >> [b,a] = invar_impul(cs,ds,T); >> [C,B,A] = sdir2cas(b,a);

El código que nos permite obtener las gráficas de las respuestas en frecuencia es el siguiente:

% Gráficas >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi');

PDF created with pdfFactory trial version www.pdffactory.com

291

>> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:5:15]); grid >> toptitle('Filtro Digital Elíptico Pasa Bajas: Orden 3'); Las gráficas son:

Claramente, observamos de las gráficas que una vez más la técnica de diseño de invarianza impulsiva ha fracasado. Las ventajas del mapeo con invarianza impulsiva son que: se trata de un diseño estable, y las frecuencias Ω y ω están relacionadas linealmente. Pero la desventaja es que deberíamos esperar algún aliasing por parte de la respuesta en frecuencia analógica, aunque en algunos casos este aliasing es intolerable. Consecuentemente, este método de diseño es útil solamente cuando el filtro analógico esta fuertemente limitado en banda, para los filtros pasa bajas o pasa banda, en los cuales no hay oscilaciones en la banda de rechazo. Transformación Bilineal Este mapeo es el mejor método de transformación; el cual involucra a una función ya conocida, dada por

s = 2/12/1

112

1

1

sTsT

zz

Tz

−+

=⇒+−

(7.26)

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Elí ptico Pasa Bajas: Orden 3

PDF created with pdfFactory trial version www.pdffactory.com

292

donde T es un parámetro. Otro nombre para esta transformación es transformación lineal fraccional debido a que cuando despejamos las fracciones, obtenemos la expresión

0122

=+−+ zsTszT

la cual es lineal en cada una de las variables si la otra permanece fija, o bilineal en s y z. El mapeo del plano complejo bajo (7.26) se muestra en la siguiente figura:

de la cual resaltamos las siguientes observaciones: 1. Usando s = σ + jΩ en (7.26), obtenemos

z =

Ω

−σ

Ω

+22

122

1 / TjTTjT (7.27)

Por lo tanto

σ < 0 ⇒ |z| =

22

22

1

1

TT

TT

j

j

Ω−

σ

Ωσ

++ < 1

σ = 0 ⇒ |z| =

2

2

1

1

T

T

j

j

Ω

Ω

+ = 1

σ > 0 ⇒ |z| =

22

22

1

1

TT

TT

j

j

Ω−

σ

Ωσ

++ > 1

PDF created with pdfFactory trial version www.pdffactory.com

293

2. Ésta es una transformación estable, debido a que el total de la mitad izquierda del plano se mapea en el

interior del círculo unitario.

3. No hay aliasing en el dominio de la frecuencia, debido a que el eje imaginario se mapea sobre el círculo unitario en una relación uno a uno.

Sustituyendo σ = 0 en (7.27), obtenemos

z =

2

2

1

1

T

T

j

j

Ω

Ω

+ = ejω

ya que la magnitud es 1. Resolviendo para ω como una función de Ω, obtenemos

ω = 2 tan-1

Ω

2T

ó Ω = T2

tan

ω

2 (7.28)

Esto muestra que Ω no esta relacionada linealmente con ω, y no se presenta aliasing. Por lo tanto, de acuerdo con (7.28), diremos que ω esta predispuesta hacia Ω. A continuación desarrollaremos un ejemplo en el cual transformaremos

Ha(s) = 65

12 ++

+ss

s

en un filtro digital usando la transformación bilineal. En este caso elegimos T=1. Usando (7.26), obtenemos

61125

112

1112

112

112

1

12

1

1

1

1

1

1

11

1

)(

+

+−

+

+−

++−

=

+−

=

+−

=

=−

zz

zz

zz

zzH

zz

TH a

TazH

Simplificando,

H(z) = 1

21

1

21

2.0105.01.015.0

42023

−−

−−

+−+

=+

−+z

zzz

zz

MATLAB posee una función llamada bilinear que implementa este mapeo, cuya invocación, además de ser similar a la de la función invar_impul también toma varias formas para diferentes cantidades de entrada-salida. Ahora mostraremos el uso de esta función en el siguiente ejemplo.

PDF created with pdfFactory trial version www.pdffactory.com

294

Transformaremos la función del sistema Ha(s) del ejemplo anterior usando la función bilinear. El script es el siguiente:

>> c = [1,1]; d = [1,5,6]; T = 1; Fs = 1/T; >> [b,a] = bilinear(c,d,Fs) b = 0.1500 0.1000 -0.0500 a = 1.0000 0.2000 -0.0000

Por lo tanto el filtro es

H(z) = 1

21

2.0105.01.015.0

−−

+−+z

zz

como antes. Procedimiento de Diseño Dadas las especificaciones de un filtro digital: ωp, ωs, Rp, y As, queremos determinar H(z). Así que los pasos del diseño en este procedimiento son los siguientes: 1. Elegimos un valor arbitrario para T, que puede ser T = 1.

2. Predisponemos las frecuencias de corte ωp y ωs; esto es, calculamos Ωp y Ωs usando (7.28):

Ωp = T2

tan

ω

2p , Ωs =

T2

tan

ω

2s (7.29)

3. Diseñamos un filtro analógico Ha(s) que satisfaga las especificaciones Ωp, Ωs, Rp, y As. Tal y como se

hizo en el apartado anterior.

4. Finalmente, establecemos

H(z) = Ha

+−

1

1

112

zz

T

y simplificamos para obtener H(z) como una función racional en z -1. A continuación, valiéndonos de algunos ejemplos demostraremos este procedimiento de diseño sobre nuestros filtros analógicos prototipo. Ø En primer lugar diseñaremos el filtro digital Butterworth, que fue analizado seis ejemplos atrás empleando el método de invarianza impulsiva. Las especificaciones son:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El script correspondiente es el siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

295

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; Fs = 1/T; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Butterworth Prototipo: >> [cs,ds] = dfa_butt(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Butterworth = 6 % % Transformación Bilineal : >> [b,a] = bilinear(cs,ds,T); >> [C,B,A] = dir2cas(b,a) C = 5.7969e-004

B = 1.0000 2.0188 1.0191 1.0000 1.9809 0.9813 1.0000 2.0003 1.0000

A = 1.0000 -0.9459 0.2342 1.0000 -1.0541 0.3753 1.0000 -1.3143 0.7149

El filtro deseado es, una vez más, de 6º orden con 6 ceros. Y puesto que el cero de sexto orden de Ha(s) en s =-∞ es mapeado a z =-1; estos ceros deberían estar en z = -1. Pero debido a la precisión finita de MATLAB estos ceros no estarán exactamente en z = -1. Por lo tanto la función del sistema debería ser

H(z) = )7149.03143.11)(3753.00541.11)(2342.09459.01(

)1(00057969.0212121

61

−−−−−−

+−+−+−+

zzzzzzz

El siguiente código nos permite obtener las gráficas de la respuesta en frecuencia.

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0'])

PDF created with pdfFactory trial version www.pdffactory.com

296

>> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,10]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:2:10]); grid >> toptitle('Filtro Digital Butterworth Pasa Bajas: Orden 6'); Las gráficas son:

Comparando estas gráficas con las que se obtuvieron con el método de invarianza impulsiva, observamos que estos dos diseños son muy similares.

Ø Ahora diseñaremos el filtro digital Chebyshev-I planteado anteriormente con el método de invarianza impulsiva. Las especificaciones son

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El script del diseño es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

2

4

6

8

10Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Butterworth Pasa Bajas: Orden 6

PDF created with pdfFactory trial version www.pdffactory.com

297

% Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; Fs = 1/T; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en al Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Chebyshev-I Prototipo: >> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Chebyshev-I = 4 % % Transformación Bilineal: >> [b,a] = bilinear(cs,ds,T); >> [C,B,A] = dir2cas(b,a) C = 0.0018

B = 1.0000 2.0000 1.0000 1.0000 2.0000 1.0000

A = 1.0000 -1.4996 0.8482 1.0000 -1.5548 0.6493

El filtro resultante es de 4º orden con 4 ceros en z = -1. La función del sistema es

H(z) = )6493.05548.11)(8482.04996.11(

)1(0018.02121

41

−−−−

+−+−+

zzzzz

El siguiente código nos permite obtener las gráficas de la respuesta en frecuencia.

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XtickMode','manual','Xtick',[0,0.2,0.3,1]); >> set(gca,'Ytickmode','manual','Ytick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XtickMode','manual','Xtick',[0,0.2,0.3,1]); >> set(gca,'Ytickmode','manual','Ytick',[-50,-15,-1,0]); grid >> set(gca,'YtickLabelMode','manual','YtickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XtickMode','manual','Xtick',[0,0.2,0.3,1]); >> set(gca,'Ytickmode','manual','Ytick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XtickMode','manual','Xtick',[0,0.2,0.3,1]); >> set(gca,'Ytickmode','manual','Ytick',[0:5:15]); grid >> toptitle('Filtro Digital Chebyshev-I Pasa Bajas: Orden 4');

PDF created with pdfFactory trial version www.pdffactory.com

298

Las gráficas son:

Ø Ahora rediseñaremos el filtro digital Chebyshev-II, planteado anteriormente con el método de invarianza impulsiva. Las especificaciones son

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El script del diseño es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; Fs = 1/T; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Chebyshev-II Prototipo: >> [cs,ds] = dfa_chb2(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Chebyshev-II = 4 %

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Chebyshev-I Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

299

% Transformación Bilineal : >> [b,a] = bilinear(cs,ds,T); >> [C,B,A] = dir2cas(b,a) C = 0.1797

B = 1.0000 0.5574 1.0000 1.0000 -1.0671 1.0000

A = 1.0000 -0.4183 0.1503 1.0000 -1.1325 0.7183

El filtro deseado es, de nuevo, de 4º orden con función del sistema

H(z) =

)7183.01325.11)(1503.04183.01()0671.11)(5574.01(1797.0

2121

2121

−−−−

−−−−

+−+−+−++

zzzzzzzz

El siguiente código nos permite obtener las gráficas de la respuesta en frecuencia:

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:5:15]); grid >> toptitle('Filtro Digital Chebyshev-II Pasa Bajas: Orden 4')

Las gráficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

300

En este caso, podemos notar que la transformación bilineal ha implementado correctamente el filtro digital Chebyshev-II. Ø Por último diseñaremos el filtro digital Elíptico, que fue analizado anteriormente usando el método de invarianza impulsiva. Las especificaciones son

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El script es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; Fs = 1/T; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Elíptico Prototipo: >> [cs,ds] = dfa_elip(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Elíptico = 3 %

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π0 0.20.3 1

0

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Chebyshev-II Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

301

% Transformación Bilineal : >> [b,a] = bilinear(cs,ds,T); >> [C,B,A] = dir2cas(b,a) C = 0.1214

B = 1.0000 -1.4211 1.0000 1.0000 1.0000 0

A = 1.0000 -1.4928 0.8612 1.0000 -0.6183 0

El filtro resultante es de 3er orden, con función del sistema

H(z) =

)6183.01)(8612.04928.11()1)(4211.11(1214.0

121

121

−−−

−−−

−+−++−

zzzzzz

El siguiente código nos permite obtener las gráficas de la respuesta en frecuencia:

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1); plot(w/pi,mag); title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); >> axis([0,1,0,1.1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0,Aten,Rizo,1]); grid >> subplot(2,2,3); plot(w/pi,db); title('Magnitud en dB'); >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); >> axis([0,1,-40,5]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-50,-15,-1,0]); grid >> set(gca,'YTickLabelMode','manual','YTickLabel',['50';'15';' 1';' 0']) >> subplot(2,2,2); plot(w/pi,fase/pi); title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('unidades de \pi'); >> axis([0,1,-1,1]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[-1,0,1]); grid >> subplot(2,2,4); plot(w/pi,grd); title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras'); >> axis([0,1,0,15]); >> set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1]); >> set(gca,'YTickmode','manual','YTick',[0:5:15]); grid >> toptitle('Filtro Digital Elíptico Pasa Bajas: Orden 3'); Las gráficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

302

Notamos que, una vez más, la transformación bilineal ha implementado correctamente el filtro digital Elíptico.

Las ventajas de este mapeo son que: a) Es un diseño estable, b) no se presenta aliasing, y c) no hay restricciones sobre el tipo de filtro que puede ser transformado. DISEÑO DE FILTROS PASA BAJAS USANDO MATLAB

Mostraremos ahora el uso de las rutinas que posee MATLAB para diseñar filtros digitales pasa bajas, mismas que emplean la transformación bilineal, debido a las atractivas ventajas que presenta. Estas funciones son las siguientes. 1. [b, a] = butter(N, wn) Esta función diseña un filtro Butterworth digital pasa bajas de orden N, y regresa los coeficientes del filtro en los arreglos b y a de longitud N+1. El orden del filtro esta dado por (7.10), y la frecuencia de corte wn es determinada por la fórmula (7.29). Sin embargo, en MATLB todas las frecuencias digitales están dadas en unidades de π. Por lo tanto wn es calculada usando la siguiente relación.

ωn = π2

tan-1

Ω

2Tc

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π0 0.20.3 1

0

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Elí ptico Pasa Bajas: Orden 3

PDF created with pdfFactory trial version www.pdffactory.com

303

Demostramos el uso de esta función por medio de un ejemplo, en el que diseñamos un filtro Butterworth digital pasa bajas, cuyas especificaciones son:

ωp = 0.2π, Rp = 1 dB ωs = 0.3π, As = 15 dB

El script correspondiente es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: >> T = 1; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo de Orden del Prototipo Analógico: >> N =ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(OmegaP/OmegaS))); >> fprintf('\n*** Orden del Filtro Butterworth = %2.0f \n',N) %%*** Orden del Filtro Butterworth = 6 >> OmegaC = OmegaP/((10^(Rp/10)-1)^(1/(2*N))); %frecuencia de corte analógica >> wn = 2*atan((OmegaC*T)/2); %frecuencia de corte Digital % % Diseño del Filtro Digital Butterworth: >> wn = wn/pi; %frecuencia de corte digital en unidades de pi >> [b,a]=butter(N,wn); >> [b0,B,A] = dir2cas(b,a) b0 = 5.7969e-004

B = 1.0000 2.0037 1.0037 1.0000 1.9963 0.9963 1.0000 2.0000 1.0000

A = 1.0000 -0.9459 0.2342 1.0000 -1.0541 0.3753 1.0000 -1.3143 0.7149

La función del sistema es

H(z) = )7149.03143.11)(3753.00541.11)(2342.09459.01(

)1(00057969.0212121

61

−−−−−−

+−+−+−+

zzzzzzz

que es la misma que se obtuvo en un ejemplo anterior, en el cual se usaron las funciones dfa_butt y bilinear para el diseño del filtro. Por lo tanto, las gráficas de la respuesta en frecuencia son las mismas, las cuales mostramos a continuación:

PDF created with pdfFactory trial version www.pdffactory.com

304

2. [b, a] = cheby1(N, Rp, wn) Esta función implementa un filtro digital Chebyshev-I pasa bajas de orden N, con un rizo de Rp decibeles en la banda de paso. La función regresa los coeficientes del filtro en los vectores b y a de longitud N+1. El orden del filtro esta dado por (7.20), y la frecuencia de corte wn es la frecuencia digital en la banda de paso expresada en unidades de π; esto es

ωn = ωp /π

Para mostrar el uso de esta función nos valemos de un ejemplo, el cual consiste en diseñar un filtro digital Chebyshev-I pasa bajas. Empleamos las mismas especificaciones del ejemplo anterior; con el fin de comparar resultados; el script correspondiente es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: >> T = 1; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Orden del Prototipo Analógico: >> ep = sqrt(10^(Rp/10)-1); %factor de Rizo en la Banda de Paso >> A = 10^(As/20); %factor de atenuación en la Banda de Rechazo

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π0 0.20.3 1

0

2

4

6

8

10Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Butterworth Pasa Bajas: Orden 6

PDF created with pdfFactory trial version www.pdffactory.com

305

>> OmegaC = OmegaP; %frecuencia de corte analógica >> OmegaR = OmegaS/OmegaP; %Relación de Transición analógica >> g = sqrt(A*A-1)/ep; >> N = ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1))); >> fprintf('\n*** Orden del Filtro Chebyshev-I = %2.0f \n',N) %%*** Orden del Filtro Chebyshev-I = 4 % % Diseño del Filtro Digital Chebyshev-I: >> wn = wp/pi; %frecuencia Digital en la Banda de Paso en unidades de pi >> [b,a]=cheby1(N,Rp,wn); >> [b0,B,A] = dir2cas(b,a) b0 = 0.0018

B = 1.0000 2.0000 1.0000 1.0000 2.0000 1.0000

A = 1.0000 -1.4996 0.8482 1.0000 -1.5548 0.6493

La función del sistema es

H(z) =

)6493.05548.11)(8482.04996.11()1(0018.0

2121

41

−−−−

+−+−+

zzzzz

que es la misma que se obtuvo en un ejemplo anterior, en el que se usaron las funciones dfa_chb1 y bilinear para el diseño. Por lo tanto las gráficas de la respuesta en frecuencia son las mismas, y son las siguientes:

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Chebyshev-I Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

306

3. [b, a] = cheby2(N, As, wn) Esta función diseña un filtro digital chebyshev-II pasa bajas de orden N, con una atenuación de As decibeles en la banda de rechazo. La función regresa los coeficientes del filtro en los vectores b y a de longitud N+1. El orden del filtro esta dado por (7.20), y la frecuencia de corte wn es la frecuencia digital en la banda de rechazo expresada en unidades de π; esto es,

ωn = ωs /π Para demostrar el uso de esta función nos valemos de un ejemplo, que consiste en diseñar un filtro digital Chebysev-II pasa bajas. Al igual que en los dos ejemplos anteriores las especificaciones son las mismas. Por lo tanto el script es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: >> T = 1; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Orden del Prototipo Analógico: >> ep = sqrt(10^(Rp/10)-1); %factor de Rizo en la Banda de Paso >> A = 10^(As/20); %factor de atenuación en la Banda de Rechazo >> OmegaC = OmegaP; %frecuencia de corte analógica >> OmegaR = OmegaS/OmegaP; %Relación de Transición analógica >> g = sqrt(A*A-1)/ep; >> N = ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1))); >> fprintf('\n*** Orden del Filtro Chebyshev-II = %2.0f \n',N) %%*** Orden del Filtro Chebyshev-II = 4 % % Diseño del Filtro Digital Chebyshev-II: >> wn = ws/pi; %frecuencia Digital en la Banda de Paso en unidades de pi >> [b,a]=cheby2(N,As,wn); >> [b0,B,A] = dir2cas(b,a) b0 = 0.1797

B = 1.0000 0.5574 1.0000 1.0000 -1.0671 1.0000

A = 1.0000 -0.4183 0.1503 1.0000 -1.1325 0.7183

La función del sistema es

H(z) = )7183.01325.11)(1503.04183.01(

)0671.11)(5574.01(1797.02121

2121

−−−−

−−−−

+−+−+−++

zzzzzzzz

PDF created with pdfFactory trial version www.pdffactory.com

307

que es la misma que se obtuvo en un ejemplo anterior en el cual se utilizaron las funciones dfa_chb2 y bilinear para el diseño del filtro. A continuación presentamos las mismas gráficas de la respuesta en frecuencia. 4. [b, a] = ellip(N, Rp, As, wn) Esta función diseña un filtro elíptico digital pasa bajas de orden N, con un rizo en la banda de paso de Rp decibeles, y una atenuación de As decibeles en la banda de rechazo. La función regresa los coeficientes del filtro en los vectores b y a de longitud N+1. El orden del filtro esta dado por (7.23), y la frecuencia de corte wn es la frecuencia digital en la banda de paso, expresada en unidades de π; esto es,

ωn = ωp /π En el siguiente ejemplo mostramos el uso de esta función, el cual consiste en diseñar un filtro elíptico digital pasa bajas. También en este ejemplo las especificaciones son las mismas. Por lo tanto, el script del diseño es el siguiente:

% Especificaciones del Filtro Digital: >> wp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: >> T = 1; % Hacemos T=1 >> OmegaP = (2/T)*tan(wp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(ws/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo %

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Chebyshev-II Pasa Bajas: Orden 4

PDF created with pdfFactory trial version www.pdffactory.com

308

% Cálculo del Orden del Filtro Elíptico Analógico: >> ep = sqrt(10^(Rp/10)-1); % factor de Rizo en la Banda de Paso >> A = 10^(As/20); % factor de Atenuación en la Banda de Rechazo >> OmegaC = OmegaP; % frecuencia de corte analógica >> k = OmegaP/OmegaS; % relación de Transición Analógica >> k1 = ep/sqrt(A*A-1); >> capk = ellipke([k.^2 1-k.^2]); >> capk1 = ellipke([(k1 .^2) 1-(k1 .^2)]); >> N = ceil(capk(1)*capk1(2)/(capk(2)*capk1(1))); >> fprintf('\n*** Orden del Filtro Elíptico = %2.0f \n',N) %%*** Orden del Filtro Elíptico = 3 % % Diseño del Filtro Digital Elíptico: >> wn = wp/pi; %frecuencia Digital en la Banda de Paso en unidades de pi >> [b,a]=ellip(N,Rp,As,wn); >> [b0,B,A] = dir2cas(b,a) b0 = 0.1214

B = 1.0000 -1.4211 1.0000 1.0000 1.0000 0

A = 1.0000 -1.4928 0.8612 1.0000 -0.6183 0

La función del sistema es

H(z) = )6183.01)(8612.04928.11(

)1)(4211.11(1214.0121

121

−−−

−−−

−+−++−

zzzzzz

que es la misma que se obtuvo anteriormente en otro ejemplo, en el que se hizo uso de las funciones dfa_elip y bilinear para el diseño. Una vez más las gráficas de la respuesta en frecuencia son las mismas.

0 0.20.3 10

0.1778

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

|H|

0 0.20.3 1

15

1 0

Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.20.3 1-1

0

1Respuesta en Fase

Frecuencia en unidades de π

unid

ades

de

π

0 0.20.3 10

5

10

15Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Elí ptico Pasa Bajas: Orden 3

PDF created with pdfFactory trial version www.pdffactory.com

309

Todas estas funciones pueden ser usadas para diseñar otros tipos de filtros, como los pasa altas y pasa banda. También existen otras funciones llamadas buttord, cheb1ord, cheb2ord, y ellipord, las cuales proporcionan un filtro de orden N con una frecuencia de corte ωn, dadas las especificaciones. Estas funciones están disponibles en el toolbox de procesamiento de señales de MATLAB. Como se pudo observar en el desarrollo de los ejemplos anteriores, los parámetros fueron determinados usando las fórmulas dadas anteriormente. En los ejemplos anteriores diseñamos el mismo filtro digital usando cuatro diferentes filtros analógicos prototipo, por lo que resulta interesante comparar sus desempeños. Las especificaciones empleadas fueron: ωp = 0.2π, Rp = 1 dB, ωs = 0.3π, y As = 15 dB. Esta comparación en términos del orden N y la atenuación mínima en la banda de rechazo se muestra en la siguiente tabla:

Prototipo Orden N Aten. Banda de Rechazo

Butterworth 6 15

Chebyshev - I 4 25

Elliptic 3 27

Claramente se observa que el prototipo elíptico proporciona el mejor diseño. Sin embargo, si comparamos sus respuestas en fase, entonces el diseño elíptico presentará una respuesta en fase con un mayor grado de no-linealidad en la banda de paso. TRANSFORMACIONES DE BANDA DE FRECUENCIA

En los dos apartados anteriores diseñamos filtros digitales pasa bajas a partir de sus correspondientes filtros analógicos. Ciertamente, nos gustaría diseñar otros tipos de filtros, pasa altas, pasa banda, y rechaza banda. Esto es posible realizarlo mediante una transformación del eje de la frecuencia (o banda) de un filtro pasa bajas, para que se comporte como otro filtro. Estas transformaciones sobre la variable compleja z son muy similares a las transformaciones bilineal y, además, las ecuaciones de diseño son algebraicas. El procedimiento para diseñar un filtro general consiste en diseñar, en primer lugar, un filtro digital prototipo pasa bajas ( con ancho de banda fijo, es decir, ancho de banda unitario), y entonces aplicar estas transformaciones algebraicas. En este apartado describimos la filosofía básica que hay detrás de estos mapeos, e ilustramos sus mecanismos a través de ejemplos. Por su parte MATLAB posee funciones que incorporan la transformación de la banda de frecuencia en el plano-s; sin embargo, primero mostraremos el uso del mapeo en el plano-z, y entonces ilustraremos el uso de las funciones de MATLAB. Las especificaciones típicas para los tipos más comúnmente usados de filtros digitales son las que se muestran en la siguiente figura.

PDF created with pdfFactory trial version www.pdffactory.com

310

Dado el filtro digital prototipo pasa bajas HPB(Z), y el filtro digital H(z) deseado, notamos que estamos usando dos variables de frecuencia diferentes, z y Z, en HPB y H, respectivamente, definimos un mapeo de la forma

Z-1 = G(z -1) tal que

H(z) = )( 11)( −− = zGZPB ZH

Para hacer esto, simplemente reemplazamos Z-1 en HPB por la función G(z -1). Dado que HPB(Z) es un filtro estable y causal, también queremos que H(z) sea estable y causal, lo que impone los siguientes requerimientos:

1. G(⋅) debe ser una función racional en z -1 para que H(z) se implemente.

2. El círculo unitario del plano-Z debe mapearse sobre el círculo unitario del plano-z.

3. Para los filtro estables, el interior del círculo unitario en el plano-Z también debe mapearse sobre el interior del círculo unitario en el plano-z.

Dadas las variables de frecuencia ω' y ω de Z y z, respectivamente; esto es, Z = ejω' y z = ejω sobre sus respectivos círculos unitarios. Entonces el segundo requerimiento implica que

PDF created with pdfFactory trial version www.pdffactory.com

311

1)()( 11 === ω−−− jeGzGZ

y

)()(ω−∠ω−ω′− =

jeGjjj e eGe

ó )( ω−∠=ω′− jeG

Por lo tanto la forma general de la función G(⋅) que satisface los requerimientos anteriores es una función racional del tipo pasa todo dada por

Z-1 = G(z -1) = ∏=

α−α−

±n

k k

k

zz

11

1

1

donde se debe cumplir que |αk| < 1 para obtener estabilidad y para satisfacer el tercer requerimiento. Ahora eligiendo los coeficientes αk y un orden n apropiado, podemos obtener una variedad de mapeos. Las transformaciones más ampliamente usadas se muestran en la siguiente tabla.

Tipo de Transformación Parámetros Transformación

Pasa Bajas 11

11

−α−

α−−→−

z

zz ωc = frecuencia de corte del nuevo filtro

[ ][ ]2/)(

2/)(

cc sincc sin

ω+ω′

ω−ω′=α

Pasa Altas 11

11

−α+

α+−−→−

z

zz ωc = frecuencia de corte del nuevo filtro

[ ][ ]2/)(cos

2/)(cos

cc cc

ω−ω′

ω+ω′−=α

Pasa Banda 11

12

2

21

12

1

+−α−−α

α+−α−−

−→−

zz

zzz lω = frecuencia de corte inferior

ωu = frecuencia de corte superior α1 = -2βK /(K+1) α2 = (K-1)/(K+1)

β = [ ][ ]2/)(cos

2/)(cos

l

l

ω−ω

ω+ω

u

u

K = cot 2

lω−ωu tan 2cω′

PDF created with pdfFactory trial version www.pdffactory.com

312

Rechaza Banda 11

12

2

21

12

1

+−α−−α

α+−α−−

→−

zz

zzz lω = frecuencia de corte inferior

ωu = frecuencia de corte superior α1 = -2β/(K+1) α2 = (K-1)/(K+1)

β = [ ][ ]2/)(cos

2/)(cos

l

l

ω−ω

ω+ω

u

u

K = tan 2

lω−ωu tan 2cω′

Ahora diseñaremos un filtro digital pasa altas con el objetivo de ilustrar el uso de esta tabla. Para esto nos basamos en el diseño que se hizo de un filtro Chebyshev-I pasa bajas con especificaciones

ω´p = 0.2π, Rp = 1 dB

ω´s = 0.3π, As = 15 dB

y cuya función sistema obtenida fue

HPB(Z) = )6493.05548.11)(8482.04996.11(

)1(001836.02121

41

−−−−

+−+−+

ZZZZZ

Diseñaremos el filtro pasa altas con las tolerancias anteriores pero con una banda de paso iniciando en ωp = 0.6π. Para esto necesitamos transformar el filtro pasa bajas en un filtro pasa altas, tal que la frecuencia de corte ω´p = 0.2π este mapeada sobre la frecuencia de corte ωp = 0.6π. Entonces, de la tabla anterior

α = [ ][ ]2/)6.02.0(cos

2/)6.02.0(cosπ−ππ+π

= -0.38197 (7.30)

Por lo tanto

HPB(z) = 1

1

38197.0138197.0)(

−−=

zzZ

ZH

= )4019.00416.11)(7657.05661.01(

)1(02426.02121

41

−−−−

++++−

zzzzz

que corresponde al filtro deseado.

PDF created with pdfFactory trial version www.pdffactory.com

313

En base a este ejemplo es obvio que para obtener la función racional de un nuevo filtro digital, a partir de un filtro digital pasa bajas prototipo, deberíamos ser capaces de implementar una función racional sustituyendo de la tabla anterior. Esto parece ser una tarea difícil, pero ya que estas son funciones algebraicas, podemos usar la función conv repetidamente para este propósito. La siguiente función llamada zmapeo ilustra este enfoque. Ahora usamos la función zmapeo para llevar a cabo la transformación pasa bajas a pasa altas en el ejemplo anterior.

function [bz,az] = zmapeo(bZ,aZ,Nz,Dz) % Transformación de Banda de Frecuencia: % Dominio-Z a Dominio-z % ------------------------------------------------------- % [bz,az] = zmapeo(bZ,aZ,Nz,Dz) % Representación: % % b(z) b(Z)| % ---- = ---- | N(z) % a(z) a(Z)| @Z = ---- % D(z) % bzord = (length(bZ)-1)*(length(Nz)-1); azord = (length(aZ)-1)*(length(Dz)-1); % bz = zeros(1,bzord+1); for k = 0:bzord pln = [1]; for l = 0:k-1 pln = conv(pln,Nz); end pld = [1]; for l = 0:bzord-k-1 pld = conv(pld,Dz); end bz = bz+bZ(k+1)*conv(pln,pld); end % az = zeros(1,azord+1); for k = 0:azord pln = [1]; for l = 0:k-1 pln = conv(pln,Nz); end pld = [1]; for l = 0:azord-k-1 pld = conv(pld,Dz); end az = az+aZ(k+1)*conv(pln,pld); end % az1 = az(1); az = az/az1; bz = bz/az1;

PDF created with pdfFactory trial version www.pdffactory.com

314

En primer lugar diseñaremos el filtro digital pasa bajas usando el procedimiento de transformación bilineal, y posteriormente usaremos la función zmapeo. El script es el siguiente:

% Especificaciones del Filtro Digital Pasa Bajas: >> wplp = 0.2*pi; % frecuencia digital en la Banda de Paso en Hz >> wslp = 0.3*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % % Especificaciones del Prototipo Analógico: Mapeo Inverso para frecuencias >> T = 1; Fs = 1/T; % Hacemos T=1 >> OmegaP = (2/T)*tan(wplp/2); % frecuencia en la Banda de Paso >> OmegaS = (2/T)*tan(wslp/2); % frecuencia en la Banda de Rechazo >> ep = sqrt(10^(Rp/10)-1); % parámetro de Rizo en la Banda de Paso >> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso >> Aten = 1/(10^(As/20)); % Atenuación en la Banda de Rechazo % % Cálculo del Filtro Analógico Chebyshev-I Prototipo: >> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As); %%*** Orden del Filtro Chebyshev-I = 4 % % Transformación Bilineal : >> [blp,alp] = bilinear(cs,ds,T); % % Frecuencia de Corte del Filtro Digital Pasa Altas: >> wphp = 0.6*pi; % frecuencia en el borde de la Banda de Paso % % Transformación de la Banda de Frecuencia -> PB a PA: >> alpha = -(cos((wplp+wphp)/2))/(cos((wplp-wphp)/2)) alpha = -0.3820 % >> Nz = -[alpha,1]; Dz = [1,alpha]; >> [bhp,ahp] = zmapeo(blp,alp,Nz,Dz); >> [C,B,A] = dir2cas(bhp,ahp) C = 0.0243

B = 1.0000 -2.0000 1.0000 1.0000 -2.0000 1.0000

A = 1.0000 1.0416 0.4019 1.0000 0.5561 0.7647

La función del sistema para el filtro pasa altas es

H(z) = )4019.00416.11)(7647.05661.01(

)1(0243.02121

41

−−−−

++++−

zzzzz

que es esencialmente idéntica a la del ejemplo anterior. El siguiente código nos permite obtener las gráficas de la respuesta en frecuencia del filtro pasa bajas y del nuevo filtro pasa altas.

PDF created with pdfFactory trial version www.pdffactory.com

315

% Gráficas: figure(1); subplot(1,1,1) [dbl,magl,fasel,grdl,w] = freqz_m(blp,alp); subplot(2,2,1); plot(w/pi,magl); title('Respuesta en Magnitud del Filtro Pasa Bajas') xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); axis([0,1,0,1]); set(gca,'XTickMode','manual','XTick',[0,0.2,1]); set(gca,'YTickMode','manual','YTick',[0,Rizo,1]);grid subplot(2,2,2); plot(w/pi,dbl); title('Magnitud del Filtro Pasa Bajas en dB'); xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); axis([0 1 -30 0]); set(gca,'XTickMode','manual','XTick',[0,0.2,1]) set(gca,'YTickMode','manual','YTick',[-30,-Rp,0]);grid set(gca,'YTickLabelMode','manual','YTickLabel',['30';' 1';' 0']); [dbh,magh,faseh,grdh,w] = freqz_m(bhp,ahp); subplot(2,2,3); plot(w/pi,magh); title('Respuesta en Magnitud del Filtro Pasa Altas') xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('|H|'); axis([0,1,0,1]); set(gca,'XTickMode','manual','XTick',[0,0.6,1]); set(gca,'YTickMode','manual','YTick',[0,Rizo,1]);grid subplot(2,2,4); plot(w/pi,dbh); title('Magnitud del Filtro Pasa Altas en dB'); xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('decibeles'); axis([0 1 -30 0]); set(gca,'XTickMode','manual','XTick',[0,0.6,1]) set(gca,'YTickMode','manual','YTick',[-30,-Rp,0]);grid set(gca,'YTickLabelMode','manual','YTickLabel',['30';' 1';' 0']); toptitle('Transformación Pasa Bajas a Pasa Altas');

Las gráficas son:

0 0.2 10

0.89131

Respuesta en Magnitud del Filtro Pasa Bajas

Frecuencia en unidades de π

|H|

0 0.2 130

1 0Magnitud del Filtro Pasa Bajas en dB

Frecuencia en unidades de π

deci

bele

s

0 0.6 10

0.89131

Respuesta en Magnitud del Filtro Pasa Altas

Frecuencia en unidades de π

|H|

0 0.6 130

1 0Magnitud del Filtro Pasa Altas en dB

Frecuencia en unidades de π

deci

bele

s

Transformacion Pasa Bajas a Pasa Altas

PDF created with pdfFactory trial version www.pdffactory.com

316

Procedimiento de Diseño En el ejemplo anterior se dispuso de un filtro digital prototipo pasa bajas, el cual fue transformado en un filtro pasa altas de modo que una frecuencia particular en el borde de la banda fuera mapeada apropiadamente. En la práctica, primero tenemos que diseñar un filtro digital prototipo pasa bajas, cuyas especificaciones deberían ser obtenidas a partir de las especificaciones de otros filtros. Ahora demostraremos que las especificaciones de un filtro prototipo pasa bajas pueden ser obtenidas a partir de las fórmulas de transformación dadas en la tabla anterior. Nos basamos en un ejemplo previo, en el cual se diseño un filtro Chebyshev-I pasa bajas; donde las frecuencias en el borde de la banda de paso fueron transformadas usando el parámetro α = -0.38197 en (7.30). Ahora la cuestión es: ¿Cuál es la frecuencia en el borde de la banda de rechazo del filtro pasa altas, es decir ωs, correspondiente al borde en la banda de rechazo ωs' = 0.3π del filtro prototipo pasa bajas?. Esta cuestión puede ser respondida por (7.30). Ahora, puesto que α esta fijada por la transformación, establecemos la ecuación

α = [ ][ ]2/)3.0(cos

2/)3.0(cos

s

s

ω−πω+π

− = -0.38197

Esta es una ecuación trascendental cuya solución puede ser obtenida iterativamente a partir de una condición inicial. Esto puede ser alcanzado usando MATLAB, y la solución es:

ωs = 0.4586π En la práctica conoceremos las frecuencias ωs y ωp del pasa altas deseado, y sólo necesitaríamos encontrar las frecuencias de corte ωs' y ωp' del prototipo pasa bajas. Podemos elegir la frecuencia ωp' en la banda de paso con un valor razonable, es decir, ωp' = 0.2π y determinar α, a partir de ωp usando las formulas de la tabla anterior. Ahora ωs' puede ser determinada (para nuestro ejemplo del filtro pasa altas) a partir de α y

Z = 1

1

1 −

α+α+

−z

z

donde Z = sje ω′ y z = sje ω , ó

α+

α+−∠=ω′

ω−

ω−

s

s

j

j

s ee1

(7.31)

Continuando con nuestro ejemplo del filtro pasa altas, dadas las frecuencias en el borde de la banda: ωp = 0.6π y ωs = 0.4586π; establecemos ωp' = 0.2π. Entonces de (7.30) α = -0.38197, y de (7.31) tenemos que

−−∠=ω′

−−

π−

38197.0

4586.0

38197.0138197.0j

j

s ee

= 0.3π

como esperábamos. Ahora podemos diseñar un filtro digital pasa bajas, y posteriormente transformarlo en un filtro pasa altas usando la función zmapeo para completar nuestro procedimiento de diseño. El procedimiento anterior puede ser incorporado en una función llamada fpacheb1 para diseñar un filtro digital Chebyshev-I pasa altas. El código es el siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

317

Mostraremos este procedimiento valiéndonos de un ejemplo, que consiste en diseñar un filtro digital pasa altas usando un prototipo Chebyshev-I, cuyas especificaciones son: ωp = 0.6π, Rp = 1 dB

ωs = 0.4586π, As = 15 dB El script es el siguiente:

% Especificaciones del Filtro Digital Pasa Altas: >> wp = 0.6*pi; % frecuencia digital en la Banda de Paso en Hz >> ws = 0.4586*pi; % frecuencia digital en la Banda de Rechazo en Hz >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB % >> [b,a] = fpacheb1(wp,ws,Rp,As); >> [C,B,A] = dir2cas(b,a) C = 0.0243

B = 1.0000 -2.0000 1.0000 1.0000 -2.0000 1.0000

A = 1.0000 1.0416 0.4019 1.0000 0.5561 0.7647

function [b,a] = fpacheb1(wp,ws,Rp,As) % Diseño de un Filtro Pasa Altas IIR: % Usando el prototipo Chebyshev-I % % [b,a] = fpacheb1(wp,ws,Rp,As) % b = polinomio del Numerador del Filtro Pasa Altas % a = polinomio del Denominador del Filtro Pasa Altas % wp = frecuencia en la Banda de Paso en radianes % ws = frecuencia en la Banda de Rechazo en radianes % Rp = Rizo en la Banda de Paso en dB % As = Atenuación en la Banda de Rechazo en dB % % Frecuencia de corte del Pasa Bajas digital: wplp = 0.2*pi; alpha = -(cos((wplp+wp)/2))/(cos((wplp-wp)/2)); wslp = angle(-(exp(-j*ws)+alpha)/(1+alpha*exp(-j*ws))); % % Especificaciones del prototipo analógico Pasa Bajas: T = 1; Fs = 1/T; OmegaP = (2/T)*tan(wplp/2); OmegaS = (2/T)*tan(wslp/2); % % Diseño del Filtro Analógico Prototipo Chebyshev-I Pasa Bajas: [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As); % % Transformación Bilineal para obtener el Pasa Bajas Digital: [blp,alp] = bilinear(cs,ds,Fs); % % Transformación del Pasa Bajas digital en un Filtro Pasa Altas: Nz = -[alpha,1]; Dz = [1,alpha]; [b,a] = zmapeo(blp,alp,Nz,Dz);

PDF created with pdfFactory trial version www.pdffactory.com

318

La función del sistema es

H(z) = )4019.00416.11)(7647.05661.01(

)1(0243.02121

41

−−−−

++++−

zzzzz

que es idéntica a la del ejemplo anterior. El procedimiento de diseño del filtro pasa altas anterior puede ser fácilmente extendido a otros filtros, usando las funciones de transformación de la tabla. Ahora describiremos las funciones que posee MATLAB para diseñar filtros arbitrarios. En el apartado anterior discutimos cuatro funciones de MATLAB que permiten diseñar filtros digitales pasa bajas. Estas mismas funciones también pueden ser usadas para diseñar filtros pasa altas, pasa banda y rechaza banda; donde las transformaciones de la banda de frecuencia son hechas en el plano-s. Con el propósito de ilustración, usaremos la función butter, la cual puede ser usada con las siguientes variaciones en sus argumentos de entrada.

• [b, a] = BUTTER(N, wn, 'high') diseña un filtro pasa altas de orden N con 3 dB en la frecuencia de corte digital wn, expresada en unidades de π.

• [b, a] = BUTTER(N, wn) diseña un filtro pasa banda de orden 2N con 3 dB en la banda de paso, w1 < w < w2 en unidades de π, si wn es un vector con dos elementos, wn = [w1 w2].

• [b, a] = BUTTER(N, wn, 'stop') es un filtro rechaza banda de orden 2N con 3 dB en la banda de rechazo w1 < w < w2 en unidades de π, si wn = [w1 w2].

Para diseñar cualquier filtro Butterworth, necesitamos conocer el orden N y el vector wn de la frecuencia de corte a 3 dB. En este apartado describimos como determinar estos parámetros para filtros pasa bajas; sin embargo, estos cálculos son más complicados para los filtros pasa banda y rechaza banda. MATLAB posee en su toolbox de procesamiento de señales una función llamada buttord que permite calcular estos parámetros, dadas las especificaciones: ωp, ωs, Rp, y As. Su sintaxis es: [N, wn] = buttord(wp, ws, Rp, As) Los parámetros wp y ws tienen algunas restricciones, dependiendo del tipo de filtro, como son:

• para filtros pasa bajas wp < ws, • para filtros pasa altas wp > ws, • para filtros pasa banda wp y ws son vectores con dos elementos, wp=[wp1,wp2] y ws=[ws1,ws2], tal

que ws1 < wp1 < wp2 < ws2, y • para filtros rechaza banda wp1 < ws1 < ws2 < wp2.

Ahora, usando la función buttord en conjunto con la función butter, podemos diseñar cualquier filtro Butterworth IIR. Planteamientos similares son aplicables a las funciones: cheby1, cheby2, y ellip, con las modificaciones apropiadas. A continuación ilustramos el uso de estas funciones a través de los siguientes ejemplos. Ø En este ejemplo diseñaremos un filtro Chebyshev-I pasa altas, cuyas especificaciones son: ωp = 0.6π, Rp = 1 dB

ωs = 0.4586π, As = 15 dB El script del diseño es el siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

319

% Especificaciones del Filtro Digital: % Tipo: Chebyshev-I Pasa Altas >> ws = 0.4586*pi; % frecuencia digital en la banda de rechazo >> wp = 0.6*pi; % frecuencia digital en la banda de paso >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 15; % Atenuación en la Banda de Rechazo en dB >> Rizo = 10 ^ (-Rp/20); % Rizo en la Banda de Paso >> Aten = 10 ^ (-As/20); % Atenuación en la Banda de Rechazo % % Cálculo de los parámetros de Filtro Chebyshev-I: >> [N,wn] = cheb1ord(wp/pi,ws/pi,Rp,As); % % Diseño del Filtro Digital Chebyshev-I Pasa Altas: >> [b,a] = cheby1(N,Rp,wn,'high'); % % Realización en forma de Cascada: >> [b0,B,A] = dir2cas(b,a) b0 = 0.0243

B = 1.0000 -2.0000 1.0000 1.0000 -2.0000 1.0000

A = 1.0000 1.0416 0.4019 1.0000 0.5561 0.7647

La función del sistema en forma de cascada

H(z) = )4019.00416.11)(7647.05661.01(

)1(0243.02121

41

−−−−

++++−

zzzzz

es idéntica a la del filtro diseñado anteriormente, lo que demuestra que los dos enfoques son idénticos. El siguiente código nos permite obtener las gráficas en el dominio de la frecuencia.

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1);plot(w/pi,mag);grid;title('Respuesta en Magnitud') >> xlabel('Frecuencia Digital en unidades de \pi','FontSize',8); axis([0,1,0,1]) >> set(gca,'XTickMode','manual','XTick',[0;ws/pi;wp/pi;1]) >> set(gca,'XTickLabelMode','manual','XTickLabel',[' 0 ';'0.46';'0.6 ';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[0;Aten;Rizo;1]) >> subplot(2,2,3);plot(w/pi,db);grid;title('Magnitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); axis([0,1,-30, 0]); >> ylabel('decibeles') >> set(gca,'XTickMode','manual','XTick',[0;ws/pi;wp/pi;1]) >> set(gca,'XTickLabelMode','manual','XTickLabels',[' 0 ';'0.46';'0.6 ';' 1 ']) >> set(gca,'YTickMode','manual','YTick',[-30;-As;-Rp;0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['30';'15';' 1';' 0']) >> subplot(2,2,2);plot(w/pi,fase/pi);grid;title('Respuesta en Fase') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en unidades de \pi','FontSize',9); axis([0,1,-1,1]) >> set(gca,'XTickMode','manual','XTick',[0;ws/pi;wp/pi;1]) >> set(gca,'XTickLabelMode','manual','XTickLabel',[' 0 ';'0.46';'0.6 ';' 1 ']) >> subplot(2,2,4);plot(w/pi,grd);grid;title('Retardo de Grupo')

PDF created with pdfFactory trial version www.pdffactory.com

320

>> xlabel('Frecuencia en unidades de \pi','FontSize',8);axis([0,1,0,10]) >> ylabel('Retardo en Muestras','FontSize',9) >> set(gca,'XTickMode','manual','XTick',[0;ws/pi;wp/pi;1]) >> set(gca,'XTickLabelMode','manual','XTickLabel',[' 0 ';'0.46';'0.6 ';' 1 ']) >> toptitle('Filtro Digital Chebyshev-I Pasa Altas'); Las gráficas son:

Ø Ahora diseñaremos un filtro elíptico pasa banda, cuyas especificaciones están dadas en el siguiente script:

% Especificaciones del Filtro Digital: % Tipo: Elíptico Pasa Banda >> ws = [0.3*pi 0.75*pi]; % frecuencia digital en la banda de rechazo >> wp = [0.4*pi 0.6*pi]; % frecuencia digital en la banda de paso >> Rp = 1; % Rizo en la banda de paso en dB >> As = 40; % Atenuación en la banda de rechazo en dB >> Rizo = 10 ^ (-Rp/20); % Rizo en la banda de paso >> Aten = 10 ^ (-As/20); % Atenuación en la banda de rechazo % % Cálculo de los parámetros del Filtro Elíptico: >> [N,wn] = ellipord(wp/pi,ws/pi,Rp,As); % % Diseño del Filtro Digital Elíptico Pasa Banda: >> [b,a] = ellip(N,Rp,As,wn); % % Realización en forma de Cascada: >> [b0,B,A] = dir2cas(b,a)

0 0.46 0.6 1 0

0.1778

0.89131

Respuesta en Magnitud

Frecuencia Digital en unidades de π

0 0.46 0.6 1 30

15

1 0Magnitud en dB

Frecuencia en unidades de π

deci

bele

s

0 0.46 0.6 1 -1

-0.5

0

0.5

1Respuesta en Fase

Frecuencia en unidades de π

Fase

en

unid

ades

de

π

0 0.46 0.6 1 0

2

4

6

8

10Retardo de Grupo

Frecuencia en unidades de π

Ret

ardo

en

Mue

stra

s

Filtro Digital Chebyshev-I Pasa Altas

PDF created with pdfFactory trial version www.pdffactory.com

321

b0 = 0.0197

B = 1.0000 1.5066 1.0000 1.0000 0.9268 1.0000 1.0000 -0.9268 1.0000 1.0000 -1.5066 1.0000

A = 1.0000 0.5963 0.9399 1.0000 0.2774 0.7929 1.0000 -0.2774 0.7929 1.0000 -0.5963 0.9399

Notamos que el filtro diseñado es un filtro de décimo orden, cuyas gráficas en el dominio de la frecuencia se muestran a continuación: El código que nos permitió obtener las gráficas es el siguiente:

% Gráficas: >> figure(1); subplot(1,1,1) >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1);plot(w/pi,mag);grid;title('Respuesta en Magnitud') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); axis([0, 1, 0, 1]) >> set(gca,'XTickMode','manual','XTick',[0;0.3;0.4;0.6;0.75;1]) >> set(gca,'YTickMode','manual','YTick',[0,Rizo,1]); >> subplot(2,2,3);plot(w/pi,db);grid;title('Magnitud en dB') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); axis([0 1 -50 0]); >> set(gca,'XTickMode','manual','XTick',[0;0.3;0.4;0.6;0.75;1]) >> set(gca,'YTickMode','manual','YTick',[-40;0]) >> set(gca,'YTickLabelMode','manual','YTickLabel',['40';' 0']) >> subplot(2,2,2);plot(w/pi,fase/pi);grid;title('Respuesta en Fase')

0 0.30.4 0.6 0.75 10

0.89131

Respuesta en Magnitud

Frecuencia en unidades de π

0 0.30.4 0.6 0.75 1

40

0Magnitud en dB

Frecuencia en unidades de π

0 0.30.4 0.6 0.75 1-1

-0.5

0

0.5

1Respuesta en Fase

Frecuencia en unidades de π

Fase

en

unid

ades

de

π

0 0.30.4 0.6 0.75 10

10

20

30

40Retardo de Grupo

Frecuencia en unidades de π

Mue

stra

s

Filtro Digital Elí ptico Pasa Banda

PDF created with pdfFactory trial version www.pdffactory.com

322

>> xlabel('Frecuencia en unidades de \pi','FontSize',8); >> ylabel('Fase en unidades de \pi') >> set(gca,'XtickMode','manual','Xtick',[0;0.3;0.4;0.6;0.75;1]) >> subplot(2,2,4);plot(w/pi,grd);grid;title('Retardo de Grupo') >> xlabel('Frecuencia en unidades de \pi','FontSize',8); ylabel('Muestras') >> set(gca,'XtickMode','manual','Xtick',[0;0.3;0.4;0.6;0.75;1]) >> toptitle('Filtro Digital Elíptico Pasa Banda');

Ø Finalmente, diseñaremos un filtro Chebyshev-II rechaza banda, cuyas especificaciones están dadas en el siguiente script:

% Especificaciones del Filtro Digital % Tipo: Chebyshev-II Rechaza Banda >> ws = [0.4*pi 0.7*pi]; % frecuencia digital en la banda de rechazo >> wp = [0.25*pi 0.8*pi]; % frecuencia digital en la banda de paso >> Rp = 1; % Rizo en la Banda de Paso en dB >> As = 40; % Atenuación en la Banda de Rechazo en dB >> Rizo = 10 ^ (-Rp/20); % Rizo en la banda de paso >> Aten = 10 ^ (-As/20); % Atenuación en la banda de rechazo % % Cálculo de los parámetros del Filtro Chebyshev-II: >> [N,wn] = cheb2ord(wp/pi,ws/pi,Rp,As); % % Diseño del Filtro Digital Chebyshev-II Rechaza Banda: >> [b,a] = cheby2(N,As,ws/pi,'stop'); % % Realización en forma de Cascada: >> [b0,B,A] = dir2cas(b,a) b0 = 0.1558

B = 1.0000 1.1456 1.0000 1.0000 0.8879 1.0000 1.0000 0.3511 1.0000 1.0000 -0.2434 1.0000 1.0000 -0.5768 1.0000

A = 1.0000 1.3041 0.8031 1.0000 0.8901 0.4614 1.0000 0.2132 0.2145 1.0000 -0.4713 0.3916 1.0000 -0.8936 0.7602

Se observa que éste también es un filtro de décimo orden. El siguiente código nos permite obtener las gráficas en el dominio de la frecuencia.

% Gráficas: >> [db,mag,fase,grd,w] = freqz_m(b,a); >> subplot(2,2,1);plot(w/pi,mag);grid;title('Respuesta en Magnitud') >> xlabel('Frecuencia Digital en unidades de \pi','FontSize',8); axis([0 1 0 1]) >> set(gca,'XTickMode','manual','XTick',[0;0.25;0.4;0.7;0.8;1]) >> set(gca,'YTickMode','manual','YTick',[0;Rizo;1]) >> subplot(2,2,3);plot(w/pi,db);grid;title('Magnitud en dB') >> xlabel('Frecuencia Digital en unidades de \pi','FontSize',8); axis([0 1 -50 0]); >> set(gca,'XTickMode','manual','XTick',[0;0.25;0.4;0.7;0.8;1]) >> set(gca,'YTickMode','manual','YTick',[-40;0])

PDF created with pdfFactory trial version www.pdffactory.com

323

>> subplot(2,2,2);plot(w/pi,fase/pi);grid;title('Respuesta en Fase') >> xlabel('Frecuencia Digital en unidades de \pi','FontSize',8); >> ylabel('Fase en unidades de \pi','FontSize',9) >> set(gca,'XTickMode','manual','XTick',[0;0.25;0.4;0.7;0.8;1]) >> subplot(2,2,4);plot(w/pi,grd);grid;title('Retardo de Grupo') >> xlabel('Frecuencia Digital en unidades de \pi','FontSize',8); >> set(gca,'XTickMode','manual','XTick',[0;0.25;0.4;0.7;0.8;1]) >> toptitle('Filtro Digital Chebyshev-II Rechaza Banda'); Las gráficas son:

FILTROS FIR vs IIR

Hemos visto muchas técnicas para diseñar filtros FIR e IIR; en la práctica podríamos elegir cualquiera de estos filtros para una aplicación dada, y usar algún método para diseñarlo. Debido a que estas técnicas de diseño involucran diferentes metodologías, es difícil compararlas; sin embargo, podemos intentar algunas comparaciones significativas si nos enfocamos en los filtros minimax óptimos (ó equirizo). En el caso de los filtros FIR estos filtros óptimos son los filtros equirizo diseñados vía el algoritmo Parks-McClellan (ó algoritmo de intercambio Remez), mientras que en el caso de los filtros IIR son los filtros elípticos. Una base de comparación es el número de multiplicaciones requeridas para calcular una muestra de salida en la realización estándar de estos filtros. Para los filtros FIR la realización estándar es la forma directa de la fase lineal, mientras que para los filtros elípticos se usan, generalmente, las formas en cascada. Sea M la longitud de un filtro FIR con fase lineal (asumiendo M impar), entonces necesitamos que

0 0.25 0.4 0.70.8 10

0.89131

Respuesta en Magnitud

Frecuencia Digital en unidades de π

0 0.25 0.4 0.70.8 1

-40

0Magnitud en dB

Frecuencia Digital en unidades de π

0 0.25 0.4 0.70.8 1-1

-0.5

0

0.5

1Respuesta en Fase

Frecuencia Digital en unidades de π

Fase

en

unid

ades

de

π

0 0.25 0.4 0.70.8 10

5

10

15Retardo de Grupo

Frecuencia Digital en unidades de π

Filtro Digital Chebyshev-II Rechaza Banda

PDF created with pdfFactory trial version www.pdffactory.com

324

221 MM

≅+

para M grande

multiplicaciones por muestra de salida. Sea N (asumiendo N par) el orden de un filtro elíptico con la realización en forma de cascada, entonces hay N/2 secciones de segundo orden, requiriendo cada una de 3 multiplicaciones (en la implementación más eficiente). Por lo tanto, en suma, hay tres multiplicaciones en la estructura general, para un total de

233

23 NN

≅+ (para N grande)

multiplicaciones por muestra de salida. Si ahora asumimos que cada filtro cuenta exactamente con las mismas especificaciones: ωp, ωs, δ1 (ó rizo Rp en la banda de paso), y δ2 (ó atenuación As en la banda de rechazo ) para un filtro pasa bajas, entonces estos dos filtros son equivalentes si

3132

332

1≅+=⇒

+=

+NN

M NM para N grande

Esto significa que si la relación M/N = 3, entonces los dos filtros son más o menos eficientes. Sin embargo, un filtro FIR equirizo es más eficiente si M/N < 3, ó un filtro IIR elíptico es más eficiente si M/N > 3. Ha sido experimentalmente demostrado que:

• Para ωp ≥ 0.3, M/N ≥ 3 para toda δ1, δ2, N • Para N ≥ 10, M/N ≥ 3 para toda δ1, δ2, N • Para N grande, M/N ≈ centésimas.

Esto muestra que los filtros IIR elípticos son más convenientes en más aplicaciones, desde el punto de vista computacional. Por su parte las condiciones más favorables para los filtros FIR son:

• valores grandes de δ1, • valores pequeños de δ2, y • un ancho de transición grande.

PDF created with pdfFactory trial version www.pdffactory.com