0% encontró este documento útil (0 votos)
159 vistas300 páginas

Pdslab 8

Cargado por

jose_gallego_b
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
159 vistas300 páginas

Pdslab 8

Cargado por

jose_gallego_b
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 300

Unidad: Iztapalapa

Divisin: Ciencias Bsicas e Ingenieras



Carrera: Ing. Electrnica especializacin en Computacin

Materia: Proyecto de Ing. Electrnica

Ttulo: Laboratorio Virtual para Sistemas Discretos

Fecha: MAYO DE 2005

Alumno: Mata Zamora Jos Gibrn 96322786

Asesor: Ing. Jess Barrios Romano





________________________________________

Firma de Aceptacin del Asesor
PDF created with pdfFactory trial version www.pdffactory.com
NDICE
GENERAL





PREFACIO ........................................................................................................... i

SECCIN 1
EL MUNDO DEL PDS 1
__________________________________________________________________________________________________________________________________________________________

1 Introduccin .......................................................................................................... 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


SECCIN 2
SISTEMAS Y SEALES EN TIEMPO DISCRETO 9
__________________________________________________________________________________________________________________________________________________________

1 SEALES DISCRETAS EN TIEMPO .............................................................. 9
Operaciones Sobre Secuencias ..................................................................... 12
1 SISTEMAS DISCRETOS ................................................................................... 23
1 CONVOLUCIN ............................................................................................... 25
1 ECUACIONES DE DIFERENCIA .................................................................... 34
Respuestas de Estado-Cero y Entrada-Cero ................................................. 38
1 Filtros Digitales ................................................................................................... 38


SECCIN 3
ANLISIS 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
n j
o
e

.............................................. 53
Respuesta a una Secuencia Senoidal .............................................................. 54
Respuesta a Secuencias Arbitrarias ............................................................... 55
Funcin de Respuesta en Frecuencia
para Ecuaciones de Diferencia ....................................................................... 57
PDF created with pdfFactory trial version www.pdffactory.com
1 MUESTREO Y RECONSTRUCCION
DE SEALES ANALGICAS ......................................................................... 60
El Muestreo ................................................................................................... 60
Teorema del Muestreo .................................................................................. 62


SECCIN 4
TRANSFORMADA Z 75
__________________________________________________________________________________________________________________________________________________________

1 TRANSFORMADA Z BILATERAL .................................................................. 75
Propiedades de la Regin de Convergencia .................................................. 78
1 PROPIEDADES DE LA TRANSFORMADA Z ............................................... 79
Pares Transformados Z ms comunes ........................................................... 81
1 INVERSIN DE LA TRANSFORMADA Z .......................................................83
1 REPRESENTACIN DE SISTEMAS EN EL DOMINIO Z ............................. 91
Representacin de la Funcin de Transferencia ............................................ 92
Estabilidad y Causalidad ............................................................................... 98
1 SOLUCION DE ECUACIONES DE DIFERENCIA ....................................... 100


SECCIN 5
TRANSFORMADA DISCRETA DE FOURIER 109
__________________________________________________________________________________________________________________________________________________________

1 SERIES DISCRETAS DE FOURIER .............................................................. 109
Relacin con la Transformada-z ..................................................................... 115
Relacin con la TFDT ..................................................................................... 116
1 MUESTREO Y RECONSTRUCCIN EN EL DOMINIO - Z ....................... 117
Muestreo en Frecuencia .................................................................................. 120
Frmula de Reconstruccin ............................................................................. 121
Frmula de Interpolacin para la TFDT ......................................................... 122
1 TRANSFORMADA DISCRETA DE FOURIER ............................................. 123
1 PROPIEDADES DE LA TRANSFORMADA
DISCRETA DE FOURIER .............................................................................. 135
Linealidad ........................................................................................................ 135
Desdoblamiento Circular ................................................................................ 136
Conjugacin .................................................................................................... 137
Propiedades de Simetra para secuencias reales ............................................. 138
Desplazamiento Circular de una secuencia ..................................................... 141
Desplazamiento Circular en el dominio de la frecuencia ............................... 145
Convolucin Circular ...................................................................................... 146
Multiplicacin ................................................................................................. 149
Relacin de Parseval ....................................................................................... 150
1 CONVOLUCIN LINEAL USANDO LA TDF .............................................. 150
1 TRANSFORMADA RPIDA DE FOURIER ................................................. 156
Algoritmo TRF radix-2 ................................................................................... 161
Convoluciones Rpidas . .................................................................................. 164
Convoluciones de Alta Velocidad por Bloque ............................................... 166
PDF created with pdfFactory trial version www.pdffactory.com

SECCIN 6
DISEO DE FILTROS FIR 169
__________________________________________________________________________________________________________________________________________________________

1 PROPIEDADES DE LOS FILTROS FIR CON FASE LINEAL ..................... 172
Respuesta al Impulso h(n) ........................................................................... 173
Respuesta en Frecuencia H(e
j
) .................................................................. 176
Localizacin de Ceros . ................................................................................ 182
1 TCNICAS DE DISEO CON VENTANAS ................................................. 189
Ventana Rectangular ................................................................................... 191
Ventana Bartlett .......................................................................................... 196
Ventana Hanning ........................................................................................ 198
Ventana Hamming ...................................................................................... 199
Ventana Blackman ...................................................................................... 201
Ventana Kaiser ............................................................................................ 203
1 TCNICAS DE DISEO CON MUESTREO EN FRECUENCIA ................. 217
Mtodo de Diseo Ingenuo ......................................................................... 219
Mtodo de Diseo Optimo .......................................................................... 221
1 TCNICA DE DISEO POR EQUIRIZO OPTIMO ....................................... 232
Algoritmo Parks-McClellan ........................................................................ 241



SECCIN 7
DISEO DE FILTROS IIR 253
__________________________________________________________________________________________________________________________________________________________

1 FILTROS ANALOGICOS PROTOTIPO ......................................................... 256
Filtros Butterworth Pasa Bajas ........................................................................ 256
Filtros Chebyshev Pasa Bajas ......................................................................... 265
Filtros Elpticos Pasa Bajas . ............................................................................ 275
Clculo del Orden N del Filtro ........................................................................ 276
Respuestas en Fase de los Filtros Prototipo . ................................................... 280
1 TRANSFORMACIONES ANALGICO A DIGITAL ................................... 280
Transformacin de Invarianza Impulsiva ....................................................... 280
Transformacin Bilineal .................................................................................. 291
1 DISEO 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 aos 80s, la disciplina del procesamiento digital de seales irrumpi en la
currcula de las carreras de ingeniera en todas las universidades del mundo, y ello obedeci al enorme
impacto que resultaba del desarrollo tecnolgico impulsado, a su vez, por las innovaciones y
reducciones de costo en las computadoras. En esos aos, 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 ingeniera biomdica y de comunicaciones hasta la electrnica del consumidor, la
comunicacin por satlite, el diseo de sistemas de control aeroespacial, la prospeccin de recursos
naturales y, desde luego, la industria militar.


Hoy es ms que evidente el impacto de la tecnologa digital en la sociedad que nos ha tocado vivir; y
ello ha empujado la constante modificacin y profundidad de los niveles de instruccin en ciencia e
ingeniera, lo mismo a nivel de licenciatura que en el posgrado. Hoy se presentan serio retos para
posibilitar el buen aprendizaje y la mejor enseanza de una de las reas de conocimiento que se mueve a
mayor rapidez y volumen, como lo es el procesamiento digital de seales. No obstante, las tcnicas de
anlisis siguen siendo bsicas y fundamentales, lo mismo para lograr una adecuada formacin
universitaria que para acceder a niveles de diseo 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
mquina digital, real o virtual, que desarrolla el proceso de filtrado mediante la evaluacin numrica de
una ecuacin 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 cuestin central en el campo de la ciencia e ingeniera: por
un lado el desarrollo de la tecnologa electrnica, y por otro el desarrollo de la ciencia de la
computacin. Ambos hechos han provocado que las ideas, mtodos, y aplicaciones de los filtros
digitales operen en reas tan diversas como el anlisis de series de tiempo, el anlisis numrico, la
econometra, los sistemas de control, la estadstica, la ingeniera elctrica y, por supuesto, el
procesamiento de las seales. En todas estas reas de aplicacin, los procesos y operaciones de
alisamiento, prediccin, diferenciacin, integracin, separacin de seales, y remocin de ruido son
operaciones muy comunes, y con frecuencia tales procesos son transformaciones lineales operando
sobre datos que implican una extraordinaria cantidad de operaciones aritmticas.


En los aos iniciales, la velocidad de las computadoras y las herramientas de programacin
disponibles limitaban la potencia de las aplicaciones pues si bien los algoritmos para el procesamiento
de las seales eran conocidos, el tiempo en que se obtenan resultados era insuficiente para apreciar en
tiempo real la respuesta de los sistemas que se diseaban. Sin embargo, hoy da ese ya no es un
problema y ambas limitantes estn superadas. Particularmente, en nuestro caso, hemos aprovechado la
disponibilidad de un lenguaje de cuarta generacin ampliamente difundido en el ambiente universitario,
que nos ha permitido resaltar los conceptos ms que las complejidades que puedan suponer el estudio de
los sistemas y seales discretos, el anlisis de Fourier discreto, la transformada discreta de Fourier, la
transformacin en z, y el filtrado digital; tal herramienta de programacin es MATLAB.


El contenido de nuestro trabajo lo hemos desarrollado con el menor nmero posible sobre el
conocimiento de antecedentes necesarios; en particular, slo asumimos conocimientos de clculo
elemental, anlisis numrico, circuitos elctricos, y anlisis de seales. Nos hemos interesado ms en la
exposicin de ideas para evitar caer en el frecuente vicio de involucrarse con los detalles o teora
PDF created with pdfFactory trial version www.pdffactory.com

ii

matemtica del anlisis y diseos de filtros, lo cual provoca la perdida del horizonte de dnde y cmo;
nos ha parecido ms conveniente buscar el objetivo de la claridad y simplicidad en la presentacin 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 seccin abordamos, panormicamente, los principales aspectos que identifican a un
sistema de procesamiento digital de seales y resaltamos, mediante comparacin, las ventajas que
supone el proceso digital con respecto al mtodo analgico. Presentamos un modelo general que
incorpora los principales elementos a considerar en todo sistema PDS e identificamos la funcin bsica
de cada unos de esos elementos. En la seccin segunda anotamos las definiciones y conceptos asociados
a la teora de seales y sistemas discretos en tiempo; resaltamos los tipos de secuencias que se utilizan
para la modelacin y las operaciones que sobre estas secuencias se pueden realizar, particularmente la
operacin de convolucin que es la fuente de muchos anlisis y conocimiento sobre la actuacin de los
sistemas que son del inters de la ingeniera 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 temtica correspondiente al anlisis de Fourier
discreto en tiempo, y resaltamos la representacin de sistemas lineales e invariantes en tiempo en el
dominio de la frecuencia. En esta seccin incorporamos las tcnicas de muestreo y reconstruccin,
usualmente necesarias para el tratamiento de seales analgicas. Como extensin de la transformada de
Fourier discreta en tiempo, en la seccin cuatro consideramos a la transformada z, tanto en su versin
bilateral como unilateral, cuya caracterstica principal reside en el hecho de que mediante ella se pueden
obtener respuesta de sistemas con condiciones iniciales o entradas cambiantes. Tambin 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 solucin de ecuaciones de diferencia.


En la seccin cinco hemos puesto nuestra atencin en los algoritmos que permiten calcular
numricamente la transformada de Fourier y hemos hecho una comparacin de la transformada discreta
de Fourier con la transformada rpida de Fourier; con ambos algoritmos hemos hecho simulaciones para
realizar convoluciones y convoluciones rpidas, 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 rpidos.


Finalmente, en las secciones seis y siete abordamos la temtica correspondiente al filtrado digital; en
la seccin seis tratamos con los filtros de respuesta finita al impulso, conocidos tambin como filtros de
fase lineal y tocamos algunas de las tcnicas de diseo, resaltando la tcnica 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 mtodos. La seccin siete, la ltima,
la hemos dedicado a la presentacin de algunos de los mtodos empleados para el anlisis y diseo de
filtros de respuesta infinita al impulso, y hemos tenido cuidado de dejar muy claro el proceso de
transformacin de un filtro analgico a un filtro digital, cuestin que es fundamental para la compresin
de los mtodos de diseo por invarianza impulsiva y transformacin bilineal. En esta ltima parte hemos
seguido la presentacin clsica para las respuestas Butterworth, Chebyshev, y Elptica pasa bajas, que
hemos utilizado como referencias prototipo para la generacin de un gran nmero de simulaciones.
Nuestro trabajo lo concluimos con una comparacin 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 seales es uno de los campos ms rpidamente crecientes en la electrnica
moderna. Hace apenas unos cuantos aos las tcnicas de PDS eran consideradas materias avanzadas y
esotricas, cuyo uso quedaba limitado a los laboratorios de investigacin o aplicaciones avanzadas. Hoy da,
esta tecnologa ha encontrado vida en virtualmente todos los segmentos de la electrnica, por ejemplo:
muecos que hablan, grficas por computadora, y reproductores de disco compacto, y en una extraordinaria
variedad de disciplinas tales como la ingeniera mecnica, la ingeniera qumica o la industria aeroespacial.

La rpida aceptacin y comercializacin de esta tecnologa ha enfrentado al ingeniero de diseo moderno con
un serio reto: adquirir el conocimiento relacionado con estas nuevas tcnicas o arriesgarse a caer prontamente
en la obsolescencia; desafortunadamente, aquellos que intentan obtener este conocimiento pueden enfrentar
algunos obstculos serios. Tradicionalmente, los ingenieros han tenido dos opciones para adquirir nuevas
habilidades: regresar a la escuela voltear hacia la documentacin tcnica de los vendedores. En el caso del
PDS, ninguna de estas opciones resulta particularmente til.

Los programas de licenciatura - y an ms los programas para graduados - dedicados al PDS son cursos
disfrazados de la disciplina matemtica conocida como Anlisis Complejo. La mayora de los programas
universitarios no intentan ensear un conocimiento operativo del PDS; ms bien el propsito de estos
programas es preparar a los estudiantes para avanzar hacia el posgrado e investigacin; muchos aspectos
como los de Transformada de Laplace, funciones pares e impares, y ms son cubiertos en profundidad,
mientras que mucha de la informacin necesaria para realmente comprender los "porqus y dnde" de las
tcnicas PDS quedan sin mencionar.

La documentacin del fabricante, con frecuencia, es de poca utilidad para el no iniciado; en tanto que las
notas de aplicacin y guas de diseo, usualmente son reimpresiones de libros de texto enfocan casi
exclusivamente las caractersticas 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 teora del PDS y el conocimiento
prctico necesario para comprender la operacin de un sistema PDS. Intentamos, apoyndonos de las
herramientas matemticas indispensables, explicar los cmo y porqus, y hacer ejemplos que puedan ayudar a
obtener confianza y comprensin de los procesos PDS.


Qu cosa es el PDS y por qu debemos usarlo?

El trmino PDS generalmente se refiere al uso de computadoras digitales para procesar seales.
Normalmente, estas seales se pueden manipular mediante procesos analgicos pero, por una diversidad de
razones, se prefiere manejarlas digitalmente.

Para entender los mritos relativos de los procesamientos analgico y digital, es conveniente comparar las dos
tcnicas con una aplicacin comn. La siguiente figura muestra dos formas de grabar sonidos como la msica
voz:
SECCIN
1
PDF created with pdfFactory trial version www.pdffactory.com

2



El mtodo analgico trabaja de la siguiente forma:

Las ondas de sonido impactan el micrfono, donde son convertidas a impulsos elctricos.
Estas seales elctricas son amplificadas, y convertidas a campos magnticos por medio de la cabeza
grabadora.
Conforme la cinta magntica se mueve debajo de la cabeza, la intensidad del campo magntico es
almacenado en la cinta.

El proceso de reproduccin es justo el inverso del de grabacin:

Conforme la cinta magntica se mueve debajo de la cabeza reproductora, el campo magntico sobre la
cinta es convertido a una seal elctrica.
La seal es entonces amplificada y enviada a la bocina, la cual se encarga de convertir la seal
amplificada a su forma de sonido original.

La ventaja del proceso analgico es doble: primero, es conceptualmente muy simple; segundo, por definicin,
una seal analgica puede tomar virtualmente un nmero infinitos de valores dentro del rango dinmico de la
seal; sin embargo, este proceso analgico es inherentemente inestable. Los amplificadores estn sometidos a
variaciones por modificacin de la temperatura, humedad, y tiempo; la cinta magntica se estira y encoge,
produciendo distorsiones en la seal grabada. Los campos magnticos por s mismos, con el tiempo, perdern
algo de su fuerza; y variaciones en la rapidez del motor que impulsa la cinta producen distorsin adicional.
Todas estas se combinan para asegurar que la seal de salida ser considerablemente de menor calidad que la
seal de entrada. Cada vez que la seal es pasada por otro proceso analgico, estos efectos adversos se
multiplican. Es raro que un sistema analgico sea capaz de lograr ms de dos tres generaciones de copias.

Por lo que toca al proceso digital, observamos que:

Como en el caso analgico, las ondas de sonido impactan el micrfono y son convertidas a seales
elctricas; estas seales son entonces amplificadas y dispuestas a un nivel apropiado.
Las seales elctricas son convertidas a nmeros.

PDF created with pdfFactory trial version www.pdffactory.com

3

Estos nmeros pueden ser almacenados o manipulados por una computadora.
Para reproducir la seal, sencillamente, los nmeros son convertidos otra vez a seales elctricas que, al
igual que en el caso analgico, son usadas para excitar la bocina.

Existen dos desventajas distintivas al proceso digital: primera, es ms complicado que el proceso analgico;
segundo, las computadoras slo pueden manejar nmeros de resolucin finita. As, la "resolucin infinita" de
las seales analgicas se pierde.


Ventajas del PDS

Obviamente, deben existir algunos beneficios compensatorios del proceso digital. Primero, una vez que se
convierte a nmeros, la seal es absolutamente estable, y usando tcnicas de deteccin y correccin de errores
es posible almacenar, transmitir y reproducir nmeros sin ningn tipo de corrupcin (ruido). Por supuesto,
esto hace posible reproducir todas las copias igual de fieles que la primera generacin.

Este hecho posee algunas implicaciones interesantes. Las futuras generaciones nunca conocern realmente
cmo sonaban, por ejemplo, los Beatles. La tecnologa analgica comercial de los 60's simplemente no era
capaz de registrar exactamente y reproducir las seales. Varias generaciones de seales analgicas eran
necesarias para reproducir el sonido: primero, una cinta maestra sera grabada, para luego ser regulada y
editada; a partir de esto, un registro maestro metlico sera producido, a partir del cual vendra la impresin
plstica. Cada paso del proceso era una nueva generacin de grabado, y cada generacin actuaba sobre la
seal 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 msicos actuales. Aunque pasen miles de aos, los historiadores del futuro
sern capaces de reproducir exactamente los CD's de hoy, masterizandolos digitalmente. Los discos por s
mismos podrn deteriorarse, pero antes de hacerlo los nmeros digitales sobre ellos se podrn copiar con
absoluta perfeccin. Las seales almacenadas digitalmente son en realidad grandes arreglos de nmeros, y
como tales son inmunes a las limitaciones fsicas de las seales analgicas.

Existen otras ventajas significativas para procesar seales digitalmente. Los geofsicos fueron uno de los
primeros grupos en aplicar las tcnicas del procesamiento digital de seales; las seales ssmicas de inters
para ellos son, usualmente, de muy baja frecuencia, 0.01 Hz a 10 Hz. Es difcil construir filtros analgicos que
trabajen a estas bajas frecuencias, pues los valores de los componentes deben ser tan grandes que la
implementacin fsica del filtro puede ser imposible. Sin embargo, una vez que las seales han sido
convertidas a nmeros digitales, es un proceso directo programar una computadora para realizar el filtrado.

Otras ventajas relativas a las seales digitales tiene que ver con el mejor uso de los canales de comunicacin;
por ejemplo, el PDS puede permitir que seales de gran ancho de banda puedan enviarse sobre canales de
banda angosta. Una seal de 20 KHz se puede digitalizar y enviarse sobre un canal de 5 KHz; a la seal le
puede tomar cuatro veces ms 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 seal es enviada como nmeros, se puede encriptar fcilmente. Cuando es recibida, los nmeros son
desencriptados y entonces reproducidos como la seal original. Desde luego, todas estas ventajas se pueden
lograr eficiente y econmicamente. Los modernos sistemas PDS de 'telefona segura' logran que el
procesamiento sea hecho sin efecto detectable alguno en la conversacin.

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 seal analgica como entrada.
Convierte esta seal analgica en nmeros.
Realiza clculos usando los nmeros.
Convierte los resultados de los clculos a otra seal analgica.

Opcionalmente, se pueden derivar diferentes tipos de informacin a partir de los nmeros usados en este
proceso. Esta informacin 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
seccin de entrada analgica; un instrumento de laboratorio podra no tener la salida analgica. Sin
embargo, lo realmente sorprendente de los sistemas PDS es que el modelo se podr ajustar a cualquier
aplicacin; el sistema podra ser uno de sonar radar, un sistema de correo de voz, una cmara de video, etc.
Las especificaciones de los elementos clave individuales podrn cambiar pero su funcin permanecer siendo
la misma.

A fin de comprender, panormicamente, lo que es un sistema PDS, proporcionamos una explicacin
cualitativa de los elementos clave.

Entrada

Todo procesamiento de seal inicia con un transductor de entrada, que toma la seal y la convierte a seal
elctrica. En las aplicaciones, el transductor puede tomar muchas formas; un ejemplo comn de transductor de
entrada lo es el micrfono. Otros ejemplos son los gefonos, para trabajo ssmico; las antenas de radar, los
sensores infrarojos. Generalmente, la salida del transductor es muy pequea, de unos cuantos microvolts o
milivolts.

PDF created with pdfFactory trial version www.pdffactory.com

5

Circuito de Acondicionamiento de Seal

El propsito 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 seal a un
rango entre 3 y 12V. El circuito de acondicionamiento, tambin, limita la seal de entrada para prevenir daos
a las etapas siguientes y proporcionar aislamiento entre el transductor y el resto de la circuitera del sistema.
Tpicamente, los circuitos de acondicionamiento de seal estn basados en amplificadores operacionales de
instrumentacin.


Filtro Anti-Alias

Desde un punto de vista conceptual, se puede pensar como un mecanismo para limitar la rapidez con que
cambia una seal de entrada. Esta es una funcin crtica, en la que el filtro anti-aliasing asegura que el resto
del sistema ser capaz de rastrear la seal. Si la seal cambia demasiado rpidamente, el resto del sistema
podra perder (no ver) porciones crticas de la seal.


Convertidor Analgico - Digital (ADC)

El propsito de este circuito es convertir la seal de su forma analgica a su representacin como dato
digital. Debido a la fsica del circuito, la mayora de los ADCs requieren entradas de por lo menos varios
volts para presentarse dentro de su rango operativo. Dos de la caractersticas ms importantes de estos
circuitos son su tasa de conversin y su resolucin. La tasa de conversin establece que tan rpido un ADC
puede convertir un valor analgico a un valor digital; la definicin define que tan prximo est el nmero
digital de su valor analgico real. La salida de un ADC es un nmero binario que se puede manipular
matemticamente.


Procesador

Tericamente, no hay nada de especial acerca del procesador. Simplemente realiza los clculos requeridos
para el procesamiento de la seal. Por ejemplo, s el sistema PDS es, sencillamente, un amplificador, entonces
el valor de entrada es multiplicado por la constante de ganancia (amplificacin).

En los das iniciales del procesamiento de seales, el procesador era una computadora de propsito general.
Sin embargo, conforme el campo del PDS progres, se disearon procesadores especiales de gran velocidad
para manipular la carga de trabajo numrica. Hay, una amplia variedad de procesadores especializados que
estn dedicados al PDS; especialmente diseados para lograr muy altas tasas de desempeo, usando una
combinacin de hardware de alta velocidad, arquitecturas especializadas, y repertorios de instruccin
dedicados; funciones, todas estas, diseadas para implementar los algoritmos PDS eficientemente.


Almacenamiento de Programas y Datos

La seccin de almacenamiento de programas contiene las instrucciones usadas en la implementacin de los
algoritmos PDS requeridos. En una computadora de propsito general (arquitectura Von Neumann), las
instrucciones y los datos se almacenan juntos. En la mayora de los sistemas PDS, el programa se almacena en
forma separada de los datos (arquitectura Harvard), ya que esto permite una ejecucin ms rpida de las
instrucciones. Los datos se pueden mover sobre su propio bus al mismo tiempo que las instrucciones estn
siendo localizadas. Con frecuencia, el bus de datos y el bus de instrucciones tienen diferentes tamaos.

PDF created with pdfFactory trial version www.pdffactory.com

6

Transmisin de Datos

Los datos PDS son comnmente enviados a otros sistemas PDS; algunas veces, se almacenan masivamente
sobre cintas magnticas, discos pticos u otros medios. Esta habilidad para almacenar y transmitir la
informacin en forma digital es uno de los beneficios clave de las operaciones PDS. Por otro lado, una seal
analgica, sin importar cmo es almacenada, se comenzar a degradar inmediatamente. Sin embargo, una
seal digital es mucho ms robusta dado que est compuesta de 0s y 1s; adems, la seal digital se puede
proteger mediante cdigos detectores y correctores de error.


Entrada de Usuario y Visualizacin

No todos los sistemas PDS contienen teclados pantalla de visualizacin. Sin embargo, con frecuencia es
til contar con algn medio para visualizar la seal. Si el propsito del sistema es manipular la seal, entonces
el usuario necesitar una forma de introducir comandos al sistema, lo cual se puede hacer con algn teclado
interruptores.


Convertidor Digital - Analgico (DAC)

En muchos sistemas PDS la seal se debe convertir de regreso a su forma analgica despus de haber sido
procesada. Esta es la funcin del DAC. Conceptualmente, los DACs son bastantes simples: un nmero
binario puesto a su entrada produce un voltaje correspondiente en su salida. Una de sus especificaciones clave
es que tan rpido el voltaje de salida se ajusta al valor comandado. Aqu, el slew rate del DAC se debe
empatar con la tasa de adquisicin del ADC.


Filtro de Alisamiento de Salida

Como su nombre lo dice, el propsito de este filtro es quitar los filos de la forma de onda proveniente del
DAC. Esto es necesario dado que la seal 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 propsitos: 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 atrs del PDS es

Adquirir la seal
Convertirla a una secuencia de nmero digitales
Procesar, conforme se requiera, los nmeros
Transmitir almacenar, conforme se requiera, los datos
Convertir la secuencia de nmeros procesada a una nueva seal analgica.
PDF created with pdfFactory trial version www.pdffactory.com

7

Este proceso puede ser considerablemente ms complicado que el tradicional, realizado por procesadores
analgicos (radios, telfonos, TVs, stereos, etc ). Sin embargo, debido a los avances en la tecnologa, las
soluciones PDS pueden ser ms baratas y eficientes que las tcnicas tradicionales.

Con el objetivo de comprender ms a fondo el PDS se desarroll ste proyecto, que proporciona las
herramientas analticas necesarias para procesar seales reales usando tcnicas digitales. Trabajamos
normalmente con seales y sistemas en tiempo discreto, los cuales son analizados en los dominios del tiempo
y la frecuencia. Adems, tratamos a gran detalle el anlisis y diseo del procesamiento de estructuras
llamadas: filtro y analizadores espectrales, que son uno de los aspectos ms importantes dentro del
Procesamiento Digital de Seales, PDS.

La primera mitad de este proyecto (seccin 2 a 5) trata sobre el anlisis de seales orientado al PDS.
Comenzando con la descripcin bsica de seales y sistemas en tiempo discreto, los cuales son analizados en
el dominio de la frecuencia. Posteriormente, se introduce una generalizacin del dominio en la frecuencia,
llamada transformada z. Por ltimo discutimos los algoritmos prcticos para el clculo de la transformada de
Fourier. La segunda mitad est dedicada al filtrado de seales, donde se describen varias implementaciones y
estructuras de filtros digitales. Adems se proporcionan algoritmos y tcnicas de diseo para construir filtros
del tipo FIR e IIR.


PDF created with pdfFactory trial version www.pdffactory.com
9


SISTEMAS Y SEALES
EN TIEMPO DISCRETO




Para el desarrollo de nuestro trabajo es esencial conocer los conceptos referentes a la teora de seales y
sistemas discretos en tiempo; particularmente, los sistemas lineales invariantes en el tiempo son de inters
debido a su facilidad de anlisis e implementacin. Una operacin peculiarmente relevante y que merece
especial atencin es la convolucin, siendo tambin de utilidad conocer la representacin mediante
ecuaciones de diferencia de los sistemas; todo ello de suma importancia en el procesamiento digital de
seales. Justamente, el nfasis en esta seccin se orientar a la representacin e implementacin de seales y
sistemas usando MATLAB.


SEALES DISCRETAS EN TIEMPO

Las seales se clasifican, generalmente, como seales analgicas y seales discretas; las seales
analgicas pueden ser expresadas por x
a
(t), pudiendo la variable t representar cualquier cantidad fsica,
aunque usualmente representa al tiempo. Por otro lado, una seal 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 seal
se le denomina seal discreta en tiempo, la cual da lugar a una secuencia numrica 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 seal en el instante n = 0.


En MATLAB se puede representar una secuencia de duracin finita con un vector fila conteniendo los
valores apropiados; sin embargo, tiene el inconveniente de no presentar ninguna informacin acerca de la
posicin de la muestra n-esima. En este contexto, una adecuada representacin 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 representacin del vector x en forma individual cuando la informacin
de la posicin de la muestra no es requerida, o cuando tal informacin 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 propsitos de anlisis, por lo que
consideramos conveniente presentar algunas de ellas:

SECCIN
2
PDF created with pdfFactory trial version www.pdffactory.com
10

1. Secuencia Impulso unitario:

(n) = } { ,... 0 , 0 , 1 , 0 , 0 ...,
0 , 0
0 , 1

'


n
n



Una forma de implementar (n) en MATLAB, sobre un intervalo finito, es empleando la funcin
zeros(1,N,), la cual genera un vector fila con N ceros. Sin embargo, el empleo de la relacin lgica n==0
es una forma ms elegante de implementar (n). Por ejemplo, si tenemos

(n - n
0
) =

'

0
0
, 0
, 1
n n
n n


sobre el intervalo n
1
n
0
n
2
, se puede implementar la siguiente funcin en MATLAB:




















2. Secuencia Escaln unitario:


u(n) = } { ,... 1 , 1 , 1 , 0 , 0 ...,
0 , 0
0 , 1

'

<


n
n



La funcin 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 1s. Una vez ms la forma elegante de implementacin es empleando la
relacin lgica n>=0. Por ejemplo, para implementar:


u(n - n
0
) =

'

<

0
0
, 0
, 1
n n
n n



sobre el intervalo n
1
n
0
n
2
, se logra construyendo la siguiente funcin 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) = a
n
, 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 atenuacin y w
0
es la frecuencia en radianes. La funcin en MATLAB que genera esta
secuencia es exp, y un ejemplo sera: 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(
0
n + ), n


en donde es la fase en radianes. La funcin que MATLAB usa para generar la secuencia sinusoidal es
cos (o sin). Por ejemplo, para generar x(n) = 3cos(0.1n + /3) + 2sin(0.5n), 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 prctica, muchas secuencias no pueden ser descritas por medio de expresiones matemticas, estas
son las llamadas secuencias aleatorias (o estocsticas), las cuales son caracterizadas por medio de
funciones de densidad probabilstica. En MATLAB se dispone de dos tipos de (pseudo) secuencias
aleatorias, las cuales son:

function [x,n] = SecuenciaEscalon(n0,n1,n2)
% Genera la secuencia Escaln 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 distribucin Gaussiana de longitud N con media 0 y
varianza 1.


7. Secuencias peridicas:

Una secuencia x(n) es peridica si x(n) = x(n + N), n. El valor ms pequeo del entero N que satisface la
relacin es llamado periodo fundamental y, normalmente, se usa la notacin x
p
(n) para denotar que una
secuencia es peridica. Desde luego, es posible generar P periodos de x
p
(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 ms elegante de generar la secuencia anterior, utilizando las poderosas capacidades de
indexacin 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 slo 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 continuacin:


>> xp = x*ones(1,P); %P columnas de x; donde x es un vector rengln
>> xp = xp(:); %vector columna largo
>> xp = xp; %vector fila largo




Operaciones Sobre Secuencias


A continuacin describimos brevemente algunas operaciones bsicas sobre secuencias y entre secuencias, y
su correspondiente representacin en MATLAB.


1. Suma de seales:

La operacin de adicin se hace sumando muestra con muestra en las secuencias operando:


{x
1
(n)} + {x
2
(n)} = {x
1
(n) + x
2
(n)}


En MATLAB, la condicin que se debe cuidar es que las longitudes de x
1
(n) y x
2
(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 x
1
(n) y x
2
(n), de modo que tengan el mismo vector n de posicin (y por lo
tanto la misma longitud), para lo cual se requiere de especial atencin en las operaciones de indexacin.
En particular, la operacin lgica de interseccin "&", las operaciones relacionales "<=" y "==", y la
funcin find son necesarias para lograr que x
1
(n) y x
2
(n) sean de igual longitud. La siguiente funcin, que
llamamos SumaSeniales, muestra el uso de los elementos anteriores:

PDF created with pdfFactory trial version www.pdffactory.com
13




















2. Multiplicacin de seales:

La multiplicacin se efecta muestra con muestra en las secuencias operando, y es especificada por:

{x
1
(n)} {x
2
(n)} = {x
1
(n) x
2
(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 funcin MultSeniales resuelta en el
siguiente script:





















3. Operacin de escalamiento:

En esta operacin cada muestra se multiplica por un escalar .:

{x(n)} = {x(n)}

El operador aritmtico, usado en MATLAB, para implementar la operacin de escalamiento es "*" .

function [y,n] = SumaSeniales(x1,n1,x2,n2)
% Implementa la suma de dos seales:
% -----------------------------------------------------------------------------------------
% 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)); % duracin de y(n)
y1 = zeros(1,length(n)); y2 = y1; % inicializacin
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duracin de y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duracin de y
y = y1+y2;
function [y,n] = MultSeniales(x1,n1,x2,n2)
% Implementa la multiplicacin de dos seales
% 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)); % duracin de y(n)
y1 = zeros(1,length(n)); y2 = y1; % Inicializacin
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 con duracin de y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 con duracin de y
y = y1 .* y2; % secuencia de la mult.
PDF created with pdfFactory trial version www.pdffactory.com
14

4. Corrimiento:

En esta operacin cada muestra de x(n) es desplazada una cantidad k, para obtener una nueva secuencia
y(n) que es una versin 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 operacin se puede reescribir como:

y(m+k) = {x(m)}

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













5. Desdoblamiento.

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

y(n) = {x(-n)}

En MATLAB esta operacin 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 cdigo para la
funcin RotaSenial:











6. Suma de muestras.

Esta operacin realiza la suma de todos los valores de las muestras de una secuencia x(n), entre n
1
y n
2
, y
se expresa como:

2
1
) (
n
n n
n x = x(n
1
) + ... + x(n
2
)

Su implementacin queda establecida por la funcin: sum(x(n1:n2)).
function [y,n] = DesplazaSenial(x,m,n0)
% Implementa el desplazamiento de una seal
% y(n) = x(n-n0)
% -------------------------
% Sintaxis:
% [y,n] = DesplazaSenial(x,m,n0)
%
% m es el vector posicin de la seal x.
n = m+n0; y = x;
function [y,n] = RotaSenial(x,n)
% Implementa la rotacin de una seal
% 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 operacin efecta la multiplicacin de todos los valores de las muestras de una secuencia x(n), entre
n
1
y n
2.
, y se expresa por:

2
1
) (
n
n
n x
= x(n
1
) x ... x x(n
2
)

Su implementacin esta dada por la funcin prod(x(n1:n2)).



8. Energa de seal.

La energa de una seal x(n) es dada por :

x
=

2 *
| ) ( | ) ( ) ( n x n x n x

donde el ndice superior * indica la operacin de conjugacin compleja. La energa de una secuencia
x(n) de duracin 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 seal.

La potencia promedio de una secuencia peridica con periodo fundamental N es dada por:

P
x
=

1
0
2
| ) ( |
1
N
n x
N



A continuacin, 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 cdigo:


>> 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 grfica 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 cdigo 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 grfica 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.04n) + 0.2w(n), 0 n 50, para la cual se ha escrito el cdigo 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 grfica de la secuencia resulta es:























La siguiente secuencia peridica resulta interesante de describir:

(d) x
p
(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

cdigo:

>> 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 grfica 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) x
1
(n) = 2x(n-5) - 3x(n+4)
(b) x
2
(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 x
1
(n) = 2x(n-5) - 3x(n+4).

La primera parte de la ecuacin 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 fcilmente llevadas a cabo usando las funciones DesplazaSenial y SumaSeniales
implementadas anteriormente, como se muestra a continuacin:


>> [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 grfica de x
1
(n) se muestra a continuacin:


-10 -8 -6 -4 -2 0 2 4 6 8
-1
0
1
2
3
4
5
6
n
x
p
(
n
)
PDF created with pdfFactory trial version www.pdffactory.com
19





















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

El primer trmino puede ser escrito como x(-(n-3)), de modo que lo primero que hay que hacer es girar
x(n) y a continuacin desplazarle 3 unidades. La segunda parte de la secuencia es una multiplicacin de
x(n) y x(n-2), con ambas secuencias de igual longitud pero diferente vector de posicin. 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 grfica de x
2
(n) se muestra a continuacin:






















-5 0 5 10 15
-20
-15
-10
-5
0
5
10
15
n
x
1
(
n
)
-5 0 5 10
0
5
10
15
20
25
30
35
40
n
x
2
(
n
)
PDF created with pdfFactory trial version www.pdffactory.com
20

Ahora, intentamos generar la siguiente seal 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 grficas de las secuencias resultantes se muestran a continuacin:
























En este punto, consideramos conveniente detenernos un momento para resaltar la existencia de algunos
resultados importantes en la teora de seales discretas en tiempo, entre los cuales se encuentran:

Sntesis 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
continuacin:

x(n) =

k
k n k x ) ( ) ( (2.1)

-10 -5 0 5 10
-3
-2
-1
0
1
2
Parte Real
n
-10 -5 0 5 10
-2
-1
0
1
Parte Imaginaria
n
-10 -5 0 5 10
0
1
2
3
Magnitud
n
-10 -5 0 5 10
-200
-100
0
100
200
Fase
n
PDF created with pdfFactory trial version www.pdffactory.com
21

Sntesis por simetra par e impar. Una secuencia real x
e
(n), se dice que es par (simtrica) si

x
e
(-n) = x
e
(n)

Similarmente, una secuencia real x
o
(n) se dice que es impar (asimtrica) si

x
o
(-n) = -x
o
(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) = x
e
(n) + x
o
(n) (2.2)

con las componentes par e impar especificadas por:

x
e
(n) =
2
1
[x(n) + x(-n)] y x
o
(n) =
2
1
[x(n) - x(-n)] (2.3)

Esta operacin de descomposicin 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 funcin en
MATLAB que permita la descomposicin de una secuencia en sus componentes par e impar; a tal funcin la
denominamos DescomParImpar, y la escribimos a continuacin:






















De la funcin 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 funcin 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 ecuacin (2.3) con especial atencin en las operaciones de indexacin en
MATLAB. Finalmente los componentes resultantes son almacenados en los arreglos xe y xo.


Consideremos a continuacin 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 duracin 10), y para la cual generamos el siguiente script que
permite obtener sus componentes par e impar:

function [xe, xo, m] = DescomParImpar(x,n)
% Descomposicin de una seal 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('Descomposicin Par - Impar');

Las grficas que muestran la descomposicin se presentan a continuacin:




























Series geomtricas. Una secuencia exponencial de la forma {
n
, n0}, donde es una constante arbitraria,
es llamada serie geomtrica.

En el procesamiento digital de seales la expresin y convergencia de la suma de ests series son usadas en
muchas aplicaciones. Adems, tenemos que las series convergen para || < 1, mientras que la suma de sus
componentes converge a



0
1
1
n
n
, para || < 1 (2.4)


Desde luego, se necesitar una expresin para la suma de cualquier nmero finito de trminos de la serie, lo
cual se puede lograr con:

-10 -5 0 5 10
0
0.2
0.4
0.6
0.8
1
Pulso Rectangular
n
x
(
n
)
-10 -5 0 5 10
0
0.2
0.4
0.6
0.8
1
Componente Par
n
x
e
(
n
)
-10 -5 0 5 10
-0.4
-0.2
0
0.2
0.4
0.6
Componente Impar
n
x
o
(
n
)
Descomposici n Par - Impar
PDF created with pdfFactory trial version www.pdffactory.com
23

1
0
1
1
N
n
N
n

, (2.5)

Correlacin de secuencias. La correlacin es una operacin usada en muchas aplicaciones, desde luego
tambin en el procesamiento digital de seales, debido a que es una medida del grado de similitud entre dos
secuencias. As, dadas dos secuencias reales, x(n) y y(n), con energa finita, la correlacin cruzada de x(n) y
y(n) es una secuencia r
xy
(l) definida como:

r
x,y
(l) =

n
l n y n x ) ( ) ( (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 autocorrelacin, y queda definido por:

r
xx
(l) =

n
l n x n x ) ( ) ( (2.7)

La autocorrelacin debe entenderse como una medida de auto-similitud segn diferentes alineamientos de la
secuencia. Desde luego, existen funciones en MATLAB que permiten calcular la autocorrelacin y la
correlacin cruzada entre secuencias (vectores).




SISTEMAS DISCRETOS

Matemticamente, un sistema discreto en tiempo es descrito con un operador T[] , el cual toma una secuencia
x(n) (denominada excitacin) y la transforma en otra secuencia y(n) (denominada respuesta).
Simblicamente, esto se puede describir como:

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

En el contexto del PDS se dice que el sistema procesa una seal de entrada en una seal de salida. En nuestro
caso, los sistemas que consideraremos, bsicamente, sern los conocidos como sistemas lineales.


Sistemas Lineales

Un sistema discreto T[] es un operador lineal L[], si y slo si L[] satisface el principio de superposicin,
como se muestra:

L[a
1
x
1
(n) + a
2
x
2
(n)] =a
1
L[x
1
(n)] + a
2
L[x
2
(n)], a
1
, a
2
, x
1
(n), x
2
(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
1
]
1

n
k n k x ) ( ) ( = [ ]

n
k n L k x ) ( ) (

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

y(n) =

n
k n h k x ) , ( ) ( (2.9)

El clculo de (2.9) requiere que la respuesta al impulso sea variante en el tiempo, lo cual en la prctica no es
muy conveniente, razn por la cual los sistemas invariantes en el tiempo son los ms 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 seales x(n) y y(n), entrada y salida respectivamente, no varia cuando se
realiza un corrimiento por k muestras en el tiempo. La caracterstica de un sistema LIT es que los operadores
L[] y de corrimiento son reversibles, como se muestra a continuacin:



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 funcin
h(n, k) variante en el tiempo, sta se convierte en la funcin h(n-k) invariante en el tiempo, por lo que la
ecuacin (2.9) queda expresada como:

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


) ( ) ( k n h k x (2.10)

A esta relacin, que expresa una operacin matemtica, se le conoce como sumatoria de convolucin 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 continuacin:



Estabilidad. La estabilidad es un concepto muy importante en la teora de los sistemas lineales, debido a que
evita la construccin de sistemas autodestructivos, o la saturacin en la operacin del sistema. Se dice que un
sistema es estable siempre que una entrada de amplitud limitada produce una salida de amplitud limitada.
Simblicamente:

|x(n)| < |y(n)| < , x,y

PDF created with pdfFactory trial version www.pdffactory.com
25

Tambin se dice que un sistema es estable si y slo si su respuesta al impulso es absolutamente sumable, esto
es:

Estabilidad


| ) ( | n h < (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 n
0
depende slo de la entrada previa o, a
lo ms, la entrada presente en el ndice n
0
; 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 slo 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 sealado, la operacin de convolucin permite describir la respuesta de un sistema LIT,
por lo cual es una operacin importante, fuente de muchos anlisis y conocimiento sobre la actuacin de los
sistemas que nos son de inters. Una caracterstica de esta operacin de convolucin es que puede ser
evaluada de muchas formas distintas, por ejemplo: si las secuencias son funciones matemticas (de duracin
finita o infinita), entonces la ecuacin (2.11) puede ser evaluada analticamente 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 cdigo 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 ecuacin (2.11) tenemos que:

y(n) =




9
0
9
0
) (
) ( ) 9 . 0 ( ) 9 . 0 ( ) ( ) 9 . 0 )( 1 (
k k
k n k n
k n u k n u (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 geomtrica, excepto que el trmino 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 ecuacin (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 ecuacin
(2.14) se sigue que:

y(n) = [ ]


n
k
n
k
k
n k n
0 0
1
) 9 . 0 ( ) 9 . 0 ( ) 9 . 0 ( ) 9 . 0 ( (2.16)

= (0.9)
n
[ ]
1
1
) 1 (
) 9 . 0 ( 1 10
) 9 . 0 ( 1
) 9 . 0 ( 1
+

n
n
, 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 50
0
0.5
1
1.5
2
Secuencia de Entrada
n
x
(
n
)
-5 0 5 10 15 20 25 30 35 40 45 50
0
0.5
1
1.5
2
Respuesta 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 50
0
2
4
6
8
Secuencia 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 ecuacin (2.14)

y(n) =

9
0
) 9 . 0 ( ) 9 . 0 (
k
k n
(2.17)

= (0.9)
n
[ ]
10 9
1
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 distorsin del pulso de entrada. A continuacin tambin se
presenta el cdigo 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, tambin pudo haberse realizado empleando el mtodo de convolucin grfica, en el
cual a la ecuacin (2.11) se le da una interpretacin grfica. En este mtodo h(n-k) es interpretada como una
versin 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 mtodo de convolucin grfica.


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 convolucin, 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 continuacin se muestran x(k) y h(-k), en donde h(-k) es la versin girada de h(k):







.




















Las grficas siguientes muestran x(k) y h(-1-k), en donde h(-1-k) es la versin 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
4
h(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
4
h(-k)
k
PDF created with pdfFactory trial version www.pdffactory.com
29
























Entonces tenemos que:


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

Las grficas de abajo muestran x(k) y h(2-k), en donde h(2-k) es la versin girada y desplazada -2 unidades
de h(k), lo cual da como resultado que:


k
k h k x ) 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
4
h(-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
4
h(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 operacin. En este caso, el primer punto de contacto ocurre cuando la
separacin 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 convolucin de dos secuencias finitas, mediante una funcin
propia llamada conv, la cual asume que las dos secuencias comienzan en n=0. La funcin conv es invocada
de la siguiente manera:

>> y = conv(x,h);

Por ejemplo, para realizar la convolucin de las secuencias empleadas en el ejemplo anterior, se podra 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 funcin conv no proporciona ni acepta informacin 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
duracin finita, es fcil determinar esos puntos.


Consideremos
{x(n); n
xb
n n
xe
} y {h(n); n
hb
n n
he
}

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

n
yb
= n
xb
+ n
hb
y n
ye
= n
xe
+ n
he


respectivamente. Con esta informacin es posible crear una extensin de la funcin conv, que denominamos
conv_m, la cual puede efectuar la convolucin de secuencias con vectores n-arbitrarios; como se muestra a
continuacin:




















Con tal cdigo podemos realizar la convolucin 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 convolucin modificada para procesamiento de seales
% -------------------------------------------------------------------------------
% [y,ny] = conv_m(x,nx,h,nh)
% y = resultado de la convolucin
% 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 operacin de convolucin en (2.11) con la correlacin cruzada de dos secuencias,
definida en (2.6), se observa cierto parecido. La correlacin cruzada r
yx
(l) puede ser puesta en la forma:


r
yx
(l) = y(l) * x(-l)

y la autocorelacin r
xx
(l) en la forma:

r
xx
(l) = x(l) * x(-l)


De modo que estas correlaciones pueden ser calculadas usando la funcin conv, si las secuencias involucradas
son de duracin finita. Por ejemplo, si consideramos la secuencia de correlacin cruzada de la secuencia


x(n) = [ 3, 11, 7, 0, -1, 4, 2 ]


con la secuencia y(n), que es una versin 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 construccin de y(n)
muestra que y(n) es "similar" a x(n-2), por lo que su correlacin cruzada habr de mostrar su fuerte similitud
con x(n) en l=2. Para probar esto calculamos la correlacin cruzada usando dos secuencias de ruido
diferentes:


% Secuencia de ruido 1
>> x = [3, 11, 7, 0, -1, 4, 2]; nx=[-3:3]; % seal 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); % correlacin cruzada
>> figure(1);clf
>> subplot(1,1,1);stem(nrxy,rxy)
>> text(2.2,203,'Mximo');
>> axis([-3,8 ,-50,250]);xlabel('variable l retrasada')
>> ylabel('rxy');title('Correlacin Cruzada: Secuencia de ruido 1')
>> xaux = [-4:8]; yaux = zeros(size(xaux));
>> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La grfica 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]; % seal 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); % correlacin cruzada
>> figure(2); clf
>> subplot(1,1,1);stem(nrxy,rxy)
>> text(2.2,203,'Mximo')
>> axis([-3,8,-50,250]);xlabel('variable l retrasada')
>> ylabel('rxy');title('Correlacin Cruzada: Secuencia de ruido 2')
>> xaux = [-4:8]; yaux = zeros(size(xaux));
>> line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La grfica 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
r
x
y
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
r
x
y
Correlaci n Cruzada: Secuencia de ruido 2
PDF created with pdfFactory trial version www.pdffactory.com
34

De las dos grficas anteriores se observa que la correlacin cruzada, efectivamente, presenta un mximo 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 seales de radar, para identificar y localizar objetivos.


Cabe mencionar que el toolbox de procesamiento de seales que acompaa a MATLAB tambin
proporciona una funcin llamada xcorr para calcular la correlacin de secuencias. Su forma de invocacin es
la siguiente:

>> xcorr(x,y)

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

>> xcorr(x)

realiza la autocorrelacin del vector x. Esta funcin no esta disponible en la Edicin Estudiantil de MATLAB,
pero los resultados que genera son idnticos a los que se obtienen con la funcin conv_m,; sin embargo, la
funcin xcorr no proporciona la informacin del tiempo (o retraso) como lo hace la funcin conv_m. Estos
tiempos pueden ser obtenidos por algunos otros medios, pero no de forma tan elegante como lo hemos hecho
con la funcin conv_m.




ECUACIONES DE DIFERENCIA


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




M
m
m
N
k
k
m n x b k n y a
0 0
), ( ) ( n (2.18)

S a
N
0, la ecuacin de diferencias es de orden N. Esta ecuacin es de naturaleza recursiva, y permite el
clculo de la salida actual sirvindose de los valores de entrada y los valores de salida calculados
previamente. Otra forma de representacin de esta ecuacin es:


y(n) =



N
k
k
M
m
m
k n y a m n x b
1 0
) ( ) ( (2.19)


Lo cual permite establecer una solucin de la forma:

y(n) = y
H
(n) + y
P
(n)


en donde la parte homognea de la solucin, y
H
(n), esta dada por:

y
H
(n) =

N
k
n
k k
z c
1


PDF created with pdfFactory trial version www.pdffactory.com
35

donde z
k
, con k=1,2,...,N , son las N races (tambin llamadas frecuencias naturales) de la ecuacin
caracterstica


N
k
k
z a
0
0

Esta ecuacin caracterstica es importante en la determinacin de la estabilidad de los sistemas. Si las races z
k

satisfacen la condicin

|z
k
| < 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 solucin,
y
P
(n), es determinada a partir del lado derecho de la ecuacin (2.18). Desde luego, existen mtodos analticos
para determinar la solucin de las ecuaciones de diferencias, mtodos 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 numricamente
ecuaciones de diferencia, dada la entrada y los coeficientes de la ecuacin. La forma ms 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 ecuacin (2.18), y x es el arreglo de la secuencia de entrada; adems
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 ecuacin 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 ecuacin 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 grfica 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 escaln 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 Escaln');xlabel('n');ylabel('s(n)')
>> xaux = [-20:120]; yaux = zeros(size(xaux));
>>line('XData',xaux,'YData',yaux,'LineWidth',0.25);

La grfica de la respuesta al escaln 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.5
Respuesta 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 mtodo para resolver la ecuacin de diferencia, podemos usar la grfica
de la respuesta al impulso para observar que h(n) es prcticamente 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 mtodo alterno para determinar la estabilidad del sistema, de acuerdo con la relacin (2.20), consiste en
usar la funcin roots de MATLAB:

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

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


Ya hemos mencionado que si una o ambas secuencias en la convolucin son de longitud infinita, entonces
la funcin conv no puede ser usada. Sin embargo, si una de las secuencias es de longitud infinita, entonces es
posible usar MATLAB para realizar una evaluacin numrica de la convolucin, lo cual es posible si se usa la
funcin filter. Consideremos la convolucin ya conocida, realizada para la secuencia de entrada de duracin
finita
x(n) = u(n) - u(n - 10)

y la secuencia de respuesta al impulso de duracin 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 ecuacin de
diferencias, entonces y(n) se puede obtener con la funcin filter. De la expresin 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 slo en n=0. Por definicin 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 ecuacin de
diferencia es

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


Ahora la funcin filter puede ser usada para calcular la convolucin 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 50
0
2
4
6
8
Secuencia de Salida
n
y
(
n
)

La grfica 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 anlisis anterior puede ser extendido a una combinacin lineal de un
tipo de secuencias exponenciales, las cuales resultan en ecuaciones de diferencia de orden alto. Este tema de
conversin de una representacin a otra ser visto ms adelante.


Respuestas de Estado-Cero y Entrada-Cero

En el procesamiento digital de seales una ecuacin 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 ecuacin de diferencias esta dada por:

y(n) =



N
k
k
M
m
m
k n y a m n x b
1 0
) ( ) ( ; n 0 (2.21)

sujeta a las condiciones iniciales:

{y(n); -N n -1} y {x(n); -M n -1 }

Una solucin para (2.21) puede ser obtenida en la forma:

y(n) = y
ZI
(n) + y
ZS
(n)

donde y
ZI
(n) es llamada la solucin entrada-cero, la cual es una solucin slo para las condiciones iniciales
(asumiendo que existan), mientras que la solucin estado-cero, y
ZS
(n), es una solucin slo para la entrada
x(n) (asumiendo que las condiciones iniciales son cero). En MATLAB, tambin, se puede usar la funcin
filter para resolver la ecuacin de diferencia, dadas sus condiciones iniciales.


Filtros Digitales

Los sistemas LIT en tiempo discreto tambin son llamados filtros digitales, y se clasifican en dos tipos:

Filtros FIR.

Si la respuesta al impulso unitario de un sistema LIT es de duracin finita, entonces a tal sistema se le
denomina filtro de respuesta al impulso de duracin 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 ecuacin de diferencias describe a un
filtro FIR.

PDF created with pdfFactory trial version www.pdffactory.com
39

y(n) =

M
m
m
m n x b
0
) ( (2.22)

Adems, de sta ecuacin se tiene que h(0) = b
0
, h(1) = b
1
, ... , h(M) = b
M
, , mientras que todas las otras h(n)s
son 0. Los filtros FIR tambin son llamados filtros no recursivos o de promedio mvil (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 ecuacin de diferencia {b
m
} y {a
0
=1}; por lo tanto, para implementar filtros FIR se
puede usar la funcin conv(x,h) o la funcin filter(b,1,x). Hay una diferencia en la salida de estas dos
implementaciones; la secuencia de salida de la funcin conv(x,h) tiene una longitud ms grande que
cualquiera de las secuencias x(n) y h(n). Por el otro lado la secuencia de salida de la funcin filter(b,1,x) tiene
exactamente la misma longitud de la secuencia de entrada x(n). En la prctica (y especialmente para el
procesamiento de seales) el uso de la funcin filter es el ms empleado.



Filtros IIR.

Si la respuesta al impulso de un sistema LIT es de duracin infinita, entonces el sistema es llamado un filtro
de respuesta al impulso de duracin infinita (IIR, infinite-duration impulse response), y se expresa con la
ecuacin de diferencias:

) ( ) (
0
n x k n y a
N
k
k

(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. Tambin se le conoce como filtro autoregresivo (AR), cuya respuesta al impulso es de duracin
infinita. La ecuacin general (2.18) tambin describe un filtro IIR; la cual tiene dos partes: una parte AR y una
parte MA. Tal filtro es llamado filtro autoregresivo de promedio mvil, o filtro ARMA.


En MATLAB los filtros IIR son descritos por medio de los coeficientes {b
m
} y {a
k
} de la ecuacin de
diferencia, y son implementados por la funcin filter(b,a,x).














PDF created with pdfFactory trial version www.pdffactory.com

41

ANLISIS 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 operacin de convolucin, como
grficamente se ilustra a continuacin:


x(n) y(n) = x(n) * h(n)


Esta representacin se justifica en el hecho de que cualquier seal puede ser expresada por una combinacin
lineal de muestras unitarias ponderadas y desplazadas. Similarmente, tambin, es posible representar una
seal discreta arbitraria como una combinacin de seales base (escalones, exponenciales, sinusoidales, etc.),
pudiendo obtenerse diversas representaciones de la seal, en funcin del conjunto base utilizado. Desde luego,
cada representacin tendr sus ventajas y desventajas, dependiendo del tipo de sistema bajo consideracin; sin
embargo, cuando el sistema es lineal e invariante en el tiempo, una representacin se destaca como la ms
til: la que usa como componente central a la seal exponencial compleja {e
jn
}.



LA TRANSFORMADA DE FOURIER
DISCRETA EN TIEMPO (TFDT).


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


| ) ( | n x < , entonces su transformada de
Fourier discreta en tiempo queda especificada por:

X(e
j
) = F[x(n)] =



n
n j
e n x ) ( (3.1)

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

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

d e e X
n j j
) (
2
1
(3.2)

De este modo, el operador F[] transforma una seal discreta x(n) en una funcin continua compleja, X(e
j
),
de variable real , la cual es reconocida como una frecuencia digital que est expresada en radianes.
SECCIN
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(e
j
) =


n j
e n x ) ( =


0
) 5 . 0 (
n j n
e
=

0
5 . 0 5 . 0 1
1
) 5 . 0 (
j
j
j
n j
e
e
e
e


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

x(n) = { 1, 2, 3, 4, 5 }


Podemos emplear la definicin (3.1) y obtener la siguiente expresin:

X(e
j
)=


n j
e n x ) ( = e
j
+ 2 +3 e
-j
+ 4e
-j2
+ 5e
-j3


Ya que X(e
j
) es una funcin compleja, se tendr que graficar su magnitud y su fase ( o su parte real y su
parte imaginaria) con respecto a , para poder visualizarla. Tambin, como es una variable real que toma
valores entre - y , solo se podr graficar una parte de la funcin X(e
j
) 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(e
j
), es peridica en con periodo de 2, es decir:

X(e
j
) = X(e
j[ + 2]
)

De este modo, slo es necesario conocer un periodo de X(e
jw
), Vg. [0,2], o [-,], etc., para
efectos de anlisis, y no el dominio entero - < < .


2. Simetra.

Para una secuencia x(n) real, X(e
j
) es conjugado-simtrica, es decir:

X(e
-j
) = X
*
( e
j
)

lo cual significa que
Re[X(e
-j
)] = Re[X(e
j
)] (simetra par)
Im[X(e
-j
)] = -Im[X(e
j
)] (simetra impar)

| X(e
-j
) | = | X(e
j
) | (simetra par)
X(e
-j
) = - X(e
j
) (simetra impar)

PDF created with pdfFactory trial version www.pdffactory.com

43

De tal suerte, para graficar X(e
j
) slo se requerir considerar la mitad de un periodo. Generalmente,
en la prctica este periodo se elige para en el intervalo [0, ].

Si x(n) fuera de duracin infinita, MATLAB no se podra utilizar para calcular la correspondiente
transformada de Fourier discreta, X(e
j
). Sin embargo, para evaluar la expresin X(e
j
) 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(e
j
) para 501 puntos dentro del intervalo
[0, ], y graficar su magnitud, fase, parte real y parte imaginaria. Esto lo hacemos sirvindonos 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 grficas resultantes se muestran a continuacin:























0 0.5 1
0.5
1
1.5
2
Magnitud
Frecuencia en unidades de
M
a
g
n
i
t
u
d
0 0.5 1
-0.8
-0.6
-0.4
-0.2
0
Fase
Frecuencia en unidades de
R
a
d
i
a
n
e
s
0 0.5 1
0.5
1
1.5
2
Parte Real
Frecuencia en unidades de
R
e
a
l
0 0.5 1
-0.8
-0.6
-0.4
-0.2
0
Parte Imaginaria
Frecuencia en unidades de
I
m
a
g
i
n
a
r
i
a
PDF created with pdfFactory trial version www.pdffactory.com

44

Es de resaltar la divisin por del arreglo w, antes de graficar, de forma que el eje de frecuencias
quede en unidades de y su lectura pueda ser ms fcil.


Si x(n) es de duracin finita, se puede emplear MATLAB para calcular numricamente a X(e
j
) en
cualquier frecuencia . La idea es implementar directamente la ecuacin (3.1); s, adems, se evalua X(e
j
) en
frecuencias equidistantes distribuidas en el intervalo [0,], dicha ecuacin se puede implementar como una
operacin de multiplicacin de matrices. Para comprender esto, asumamos que la secuencia x(n) tiene N
muestras entre n
1
n n
N
, y que queremos evaluar X(e
j
) en

k
= k
M

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

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

N
kn M j j
n x e e X
k
1
) / (
) ( ) (
l
l
l
, k = 0,1,...,M


Cuando { ) (
l
n x } y { ) (
k
j
e X

} 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 = {
l
kn M j
e
) / (
; n
1
n n
N
, k = 0,1,...,M}


Adems, si colocamos {k} y {n
l
} como vectores rengln k y n respectivamente, entonces

W =
1
]
1

,
_

n k
T
M
j

exp

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

X
T
= x
T

1
]
1

,
_

k n
T
M
j

exp (3.4)


Debiendo observarse que n
T
k es una matriz de N x (M+1). Esta ltima ecuacin 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 numricamente 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 grficas en el dominio de la frecuencia son mostradas a continuacin:





























Es de notar que la grfica de la fase es presentada como una funcin discontinua entre - y , lo cual se debe
a que la funcin angle de MATLAB calcula la fase principal.

0 0.5 1
0
5
10
15
Magnitud
Frecuencia en unidades de
M
a
g
n
i
t
u
d
0 0.5 1
-4
-2
0
2
4
Fase
Frecuencia en unidades de
R
a
d
i
a
n
e
s
0 0.5 1
-5
0
5
10
15
Frecuencia en unidades de
Parte Real
R
e
a
l
0 0.5 1
-10
-5
0
5
Frecuencia en unidades de
Parte Imaginaria
I
m
a
g
i
n
a
r
i
a
PDF created with pdfFactory trial version www.pdffactory.com

46

Ciertamente, el procedimiento mostrado, y que est basado en la definicin (3.1), no es la forma ms
elegante de calcular numricamente la transformada de Fourier de una secuencia de duracin finita; aparte de
que genera una matriz de N x (M+1) en (3.4) que podra exceder el limite de tamao que soporta la edicin
estudiantil de MATLAB. No obstante, por lo pronto es suficiente para los propsitos de ilustracin que
pretendemos; ms adelante habr oportunidad de presentar y trabajar con algoritmos ms eficaces. Por el
momento, consideramos un par de ejemplos que nos permiten identificar las propiedades de periodicidad y
simetra 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(e
j
)
e investigar su periodicidad. Ya que x(n) es una funcin 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 propsito 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 grficas de magnitud y fase muestran que X(e
j
) es peridica en , pero no es simtrica
conjugada:


























-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
2
4
6
8
Magnitud
Frecuencia en unidades de
|
X
|
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-1
-0.5
0
0.5
1
Fase
Frecuencia en unidades de
r
a
d
i
a
n
e
s

/

PDF created with pdfFactory trial version www.pdffactory.com



47

Por otro lado, si consideramos la secuencia x(n) = 2
n
, en el intervalo -10 n 10, podemos nuevamente
calcular y graficar a X(e
j
) sobre dos periodos para estudiar su propiedad de simetra. 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 grficas de la magnitud y la fase se muestran a continuacin:






























Donde es evidente que X(e
j
) no slo es peridica en sino que tambin es simtrica conjugada. Por lo tanto,
para secuencias reales, podemos graficar la magnitud y la fase de su transformada de Fourier slo en el
intervalo de 0 a .


-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
5
10
15
Magnitud
Frecuencia en unidades de
|
X
|
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-1
-0.5
0
0.5
1
Fase
Frecuencia en unidades de
r
a
d
i
a
n
e
s

/

PDF created with pdfFactory trial version www.pdffactory.com



48

PROPIEDADES DE LA TFDT


Si X(e
j
) es la transformada de Fourier discreta en tiempo de x(n), entonces:

1. Linealidad.

La transformada de Fourier discreta en tiempo una transformacin lineal; esto es

F[x
1
(n) + x
2
(n)] = F[x
1
(n)] + F[x
2
(n)] (3.5)

para cada , , x
1
(n), y x
2
(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(e
j
)e
-jw
(3.6)

3. Desplazamiento en la frecuencia.

A una multiplicacin por una exponencial compleja corresponde un desplazamiento en el dominio de la
frecuencia, lo cual se expresa como

F[
n j
e n x
0
) (

] = X(
) (
0
j
e ) (3.7)

4. Conjugacin.

La conjugacin en el dominio del tiempo corresponde a la rotacin y conjugacin en el dominio de la
frecuencia; simblicamente

F[x
*
(n)] = X
*
(e
-j
) (3.8)

5. Rotacin (desdoblamiento).

La rotacin en el dominio del tiempo corresponde a la rotacin en el dominio de la frecuencia,

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

6. Simetras en secuencias reales.

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

x(n) = x
e
(n) + x
o
(n)
entonces
F[x
e
(n)] = Re[X(e
j
)]
F[x
o
(n)] = j Im[X(e
j
)] (3.10)

lo cual implica que si la secuencia x(n) es una funcin real y par, entonces X(e
j
) es tambin una funcin
real y par, por lo que solo es necesario graficar sobre el intervalo [0, ] para su completa representacin.

PDF created with pdfFactory trial version www.pdffactory.com

49

7. Convolucin.

Esta es una de las propiedades ms tiles y que hace conveniente el anlisis de un sistema en el dominio
de la frecuencia, se expresa mediante

F[x
1
(n) * x
2
(n)] = F[x
1
(n)] F[x
2
(n)] = X
1
(e
j
) X
2
(e
j
) (3.11)

8. Multiplicacin.

Esta propiedad es la dual de la propiedad de convolucin, y dicta

F[x
1
(n) x
2
(n)] = F[x
1
(n)] F[x
2
(n)] =


d e X e X
j j
) ( ) (
2
1
) (
2 1
(3.12)

La operacin expresada por esta relacin es llamada convolucin peridica y es denotada por .


9. Energa.

La energa de la secuencia x(n) puede ser escrita como:

d e X n x
j
x
2 2
| ) ( |
2
1
| ) ( | (3.13)

=


d
e X
j
0
2
| ) ( |
(para secuencias reales usando simetra par)

A esta expresin tambin se le conoce como Teorema de Parseval, y nos dicta que el espectro de la
densidad de energa de x(n) queda definido como:


2
| ) ( |
) (
j
x
e X
(3.14)

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


2
1
) ( d
x
, 0
1
<
2



A continuacin, usaremos el procedimiento numrico establecido para calcular la transformada de Fourier
discreta en tiempo para algunas secuencias de duracin finita, con el propsito de ganar experiencia en la
visualizacin de las propiedades anotadas.


Consideremos dos secuencias, x
1
(n) y x
2
(n), aleatorias y uniformemente distribuidas entre [0,1] sobre el
intervalo 0 n 10, entonces podemos emplear nuestro procedimiento numrico 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; % Combinacin lineal de x1 y x2
>> = x * (exp(-j*pi/500)).^(n'*k); % TFDT de x
% verificacin
>> X_check = alpha*X1 + beta*X2; % Combinacin lineal de X1 y X2
>> error = max(abs(X-X_check)) % Diferencia
error =

7.1193e-015

Puesto que el error del mximo valor absoluto entre los dos arreglos de transformadas de Fourier es menor
que 10
-14
tenemos que los dos arreglos son idnticos dentro del limite de la precisin numrica 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
% Seal desplazada por dos muestras
>> y = x; m = n+2;
>> Y = y * (exp(-j*pi/500)).^(m'*k); % TFDT de y
% verificacin
>> Y_check = (exp(-j*2).^w).*X; % Multiplicacin 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 grfico. Para esto,
las secuencias de que nos servimos son las siguientes:

x(n) = cos(n/2), 0 n 100 y y(n) = e
jn/4
x(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; % seal multiplicada por exp(j*pi*n/4)
>> Y = y * (exp(-j*pi/100)).^(n'*k); % TFDT de y
%
% Verificacin grfica
>> 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 grficas resultantes se muestran a continuacin:



























De las grficas se observa que X(e
j
) est, efectivamente, desplazada /4 tanto en su magnitud como en su
fase.

Para apreciar la propiedad de conjugacin, establecida en (3.8), construimos una secuencia x(n) aleatoria,
compleja y definida en el intervalo -5 n 10, cuyas partes real e imaginaria estn 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 conjugacin
>> y = conj(x); % cojugacin de la seal
>> Y = y * (exp(-j*pi/100)).^(n'*k); % TFDT de y
% verificacin
>> Y_check = conj(fliplr(X)); % conj(X(-w))
>> error = max(abs(Y-Y_check)) % Diferencia
error =
0

-1 -0.5 0 0.5 1
0
20
40
60
Frecuencia en unidades de
|
X
|
Magnitud de X
-1 -0.5 0 0.5 1
-1
-0.5
0
0.5
1
Fase de X
Frecuencia en unidades de
r
a
d
i
a
n
e
s
/

-1 -0.5 0 0.5 1
0
20
40
60
Magnitud de Y
Frecuencia en unidades de
|
Y
|
-1 -0.5 0 0.5 1
-1
-0.5
0
0.5
1
Fase de Y
Frecuencia en unidades de
r
a
d
i
a
n
e
s
/

PDF created with pdfFactory trial version www.pdffactory.com



52

Ahora, para verificar la propiedad de rotacin, 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 rotacin
>> y = fliplr(x); m = -fliplr(n); % seal rotada
>> Y = y * (exp(-j*pi/100)).^(m'*k); % TFDT de y
% verificacin
>> Y_check = fliplr(X); % X(-w)
>> error = max(abs(Y-Y_check)) % Diferencia
error =
1.8310e-015

Finalmente, podemos verificar la propiedad de simetra en las seales reales; para ello empleamos la
secuencia:
x(n) = sin(n/2), -5 n 10

Con ayuda de la funcin 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
%
% Descomposicin de la seal
>> [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
% verificacin
>> 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
% Verificacin grfica
>> 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 grficas generadas son:



























A partir de las cuales se observa que la parte real de X(e
jw
) (o la parte imaginaria de X(e
jw
) ) es igual a la
transformada de Fourier discreta en tiempo de x
e
(n) (o x
o
(n)).





REPRESENTACION EN EL DOMINIO DE
LA FRECUENCIA DE SISTEMAS LIT.


Ya hemos establecido que la transformada de Fourier es la forma ms til y poderosa de representacin para
las seales y sistemas LIT, lo cual se debe a resultados como los siguientes:


Respuesta a una Exponencial Compleja
n j
o
e



Si consideramos una secuencia x(n) =
n j
o
e

como la entrada a un sistema LIT, representado por la respuesta
al impulso h(n), entonces


n j
o
e

h(n)*
n j
o
e




h(n)
-1 -0.5 0 0.5 1
-2
-1
0
1
2
Parte Real de X
Frecuencia en unidades de
R
e
(
X
)
-1 -0.5 0 0.5 1
-10
-5
0
5
10
Parte Imaginaria de X
Frecuencia en unidades de
I
m
(
X
)
-1 -0.5 0 0.5 1
-2
-1
0
1
2
Transformada de la parte Par
Frecuencia en unidades de
X
E
-1 -0.5 0 0.5 1
-10
-5
0
5
10
Transformada de la parte Impar
Frecuencia en unidades de
X
O
PDF created with pdfFactory trial version www.pdffactory.com

54

Donde:
y(n) = h(n) *
n j
o
e

=


) (
) (
k n j
o
e k h

=
n j k j
o o
e e k h



1
]
1

) ( (3.15)

= [ ] [ ]
o
n h F

| ) (
n j
o
e




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

H(e
jn
) =


n j
e n h ) ( (3.16)

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


x(n) =
n j
o
e

y(n) = H(
o
j
e

) x
n j
o
e

(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 definicin de H(e
j
) 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 combinacin lineal de exponenciales complejas, usando la propiedad de linealidad de los
sistemas LIT, como se ilustra:


k
n j
k
k
e A


k
n j n j
k
k k
e e H A ) (

En general, la respuesta en frecuencia H(e
j
) es una funcin compleja de , donde la magnitud, |H(e
j
)|, de
H(e
j
) es llamada funcin de Respuesta de Magnitud (o ganancia), y el ngulo, H(e
j
), es denominado
funcin de Respuesta de Fase.




Respuesta a una Secuencia Senoidal

Si consideramos la secuencia x(n) = A cos(
o
n +
o
) como entrada a un sistema LIT con respuesta impulsiva
h(n), a partir de la expresin (3.17), podemos mostrar que la respuesta y(n) es otra secuencia senoidal de la
misma frecuencia w
o
, con ganancia en amplitud dada por |H(e
jo
)| y desplazamiento en fase H(e
jo
), esto es:


y(n) = A| H(e
jo
) | cos(
o
n +
o
+ H(e
jo
)) (3.18)

H(e
jw
)
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 y
ss
(n). Desde luego,
este resultado se puede hacer extensivo a una combinacin lineal de secuencias sinusoidales, como se muestra
a continuacin:

k
k
A cos(
k
n +
k
)

k
k
A |H(e
jk
)| cos(
k
n +
k
+ H(e
jk
) )



Respuesta a Secuencias Arbitrarias

Finalmente, (3.17) se puede generalizar a cualesquiera secuencias arbitrarias absolutamente sumables. As,
s X(e
j
) = F[x(n)] y Y(e
j
) = F[y(n)], la propiedad de convolucin nos permite establecer que:

Y(e
j
) = H(e
j
) X(e
j
) (3.19)


Por lo que un sistema LIT puede ser representado, en el dominio de la frecuencia, por:


X(e
j
) Y(e
j
) = H(e
j
) X(e
j
)


De tal suerte, la salida y(n) se calcula a partir de Y(e
j
), empleando la transformada inversa de Fourier
discreta en tiempo, dada en (3.2). Para esto se requiere una operacin de integracin, lo cual no es una
operacin conveniente en MATLAB; no obstante, ms adelante veremos que existe un camino alternativo
para el clculo de la salida para una entrada arbitraria, que emplea la denominada Transformada Z. Por el
momento nos concentraremos en el clculo de la respuesta de estado estacionario en los sistemas LIT.


Pasamos a determinar la respuesta en frecuencia, H(e
j
), 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 expresin (3.16):

H(e
jn
) =


n j
e n h ) ( =


0
) 9 . 0 (
n j n
e

=

0
9 . 0 1
1
) 9 . 0 (
j
n j
e
e

Por lo tanto,

|H(e
j
)| =

+ cos 8 . 1 81 . 1
1
) 9 . 0 ( ) cos 9 . 0 1 (
1
2 2
sin


es la respuesta de magnitud, y
H(e
j
) = -arctan
1
]
1

cos 9 . 0 1
9 . 0 sin

es la respuesta de fase.

H(e
j
)
H(e
j
)
PDF created with pdfFactory trial version www.pdffactory.com

56

Para graficar estas respuestas, construimos la funcin H(e
j
), 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 grficas que resultan son:


























Si para este mismo sistema consideramos como entrada a la secuencia 0.1u(n), podemos determinar la
respuesta de estado estacionario, y
ss
(n). Esta secuencia no es absolutamente sumable, por lo que la
transformada de Fourier discreta en tiempo no es particularmente til en el clculo 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:

y
ss
(n) = 0.1 x H(e
j0
) = 0.1 x 10 = 1


donde la ganancia del sistema en =0 (tambin llamada ganancia de DC) es H(e
j0
) = 10, se obtiene de la
respuesta de magnitud de la grfica anterior.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
2
4
6
8
10
Respuesta 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
0
Respuesta en Fase
Frecuencia en unidades de
F
a
s
e

e
n


R
a
d
i
a
n
e
s
PDF created with pdfFactory trial version www.pdffactory.com

57

Funcin de Respuesta en Frecuencia
para Ecuaciones de Diferencia

Cuando un sistema LIT es representado por la ecuacin de diferencias

y(n) +



M
m
m
N
m n x b n y a
0 1
) ( ) (
l
l
l , (3.20)

evaluar su respuesta en frecuencia a partir de (3.16), requerira conocer la respuesta impulsiva h(n). Sin
embargo, usando la expresin (3.17) podemos fcilmente obtener H(e
j
); sabemos que cuando x(n) = e
jn
,
entonces y(n) debe ser H(e
j
) e
jn
, lo que al sustituirse en (3.20) deja:

H(e
j
) e
jn
+

M
m
m n j
m
n j
N
j
e b e e H a
0
) ( ) (
1
) (
l
l
l


H(e
j
) =


+
N
j
M
m
m j
m
e a
e b
1
0
1
l
l
l
(3.21)

Esta ecuacin se puede implementar bien desde MATLAB, dados los parmetros de la ecuacin de diferencia.
Vemoslo con un sistema LIT especificado por la ecuacin de diferencias

y(n) = 0.8y(n-1) + x(n)

Si reescribimos la ecuacin de diferencias como y(n) - 0.8y(n-1) = x(n), y empleamos la representacin
indicada en (3.21), obtenemos que
H(e
j
) =

j
e 8 . 0 1
1
(3.22)

Para el caso particular en el que la entrada sea la secuencia x(n) = cos(0.05n), con frecuencia
o
=0.05 y

o
=0, la respuesta del sistema es
H(e
j0.05
) =

05 . 0
8 . 0 1
1
j
e
= 4.0928e
-j0.5377


Por lo tanto
y
ss
(n) = 4.0928 cos(0.05n - 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 grficas resultantes se muestran a continuacin:

























De estas grficas se observa que la amplitud de y
ss
(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 ecuacin de diferencias de primer orden; sin
embargo, en la prctica, las ecuaciones de diferencias son de mayor orden y por ello se requiere un
procedimiento compacto para implementar la expresin general (3.21). Desde luego, esto puede hacerse
empleando una simple multiplicacin de matrices. Si evaluamos H(e
j
) en k=0,1, ...,K frecuencias
equidistantes distribuidas sobre el intervalo [0,], entonces

H(e
jk
) =


+
N
j
M
m
m j
m
k
k
e a
e b
1
0
1
l
l
l
, k = 0,1,...,K (3.23)

Si establecemos los arreglos (o vectores rengln) {b
m
}, {
l
a } con (a
o
=1), {m=0,..,M}, { l =0,..,N}, y {w
k
},
entonces el numerador y el denominador de esta expresin quedan como:

b exp(-jm
T
); a exp(-j l
T
)

respectivamente. As, el arreglo H(e
jk
) en (3.23) puede ser calculado empleando el operador . / . Este
procedimiento puede ser implementado en una funcin de MATLAB para determinar la respuesta en
frecuencia, dados los arreglos {b
m
} y {
l
a }. Para ver como funciona esto, consideremos un filtro pasa bajas
de tercer orden descrito por la ecuacin de diferencias siguiente:

0 10 20 30 40 50 60 70 80 90 100
-1
-0.5
0
0.5
1
x
(
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 grficas 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 1
0
0.2
0.4
0.6
0.8
1
Respuesta 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
1
Respuesta en Fase
Frecuencia en unidades de
F
a
s
e

e
n


r
a
d
i
a
n
e
s
PDF created with pdfFactory trial version www.pdffactory.com

60

MUESTREO Y RECONSTRUCCIN
DE SEALES ANALGICAS


En muchas aplicaciones, por ejemplo las comunicaciones digitales, las seales analgicas del mundo real
son convertidas en seales discretas realizando operaciones de muestreo y cuantizacin, proceso al que se
conoce como conversin Analgico-Digital (ADC). Estas seales discretas son procesadas por procesadores
digitales de seales, y entonces convertidas a su formato analgico original mediante una operacin de
reconstruccin (llamada conversin Digital-Analgica, o DAC). Usando el anlisis de Fourier es posible
describir la operacin de muestreo, desde un punto de vista del dominio de la frecuencia, analizar sus efectos
y orientar la operacin de reconstruccin; tambin, asumiremos que el nmero de niveles de cuantizacin es
suficientemente grande, de modo que el efecto de la cuantizacin sobre las seales discretas sea
insignificante.



El Muestreo

Consideremos la seal analgica x
a
(t) (absolutamente sumable), entonces su transformada de Fourier continua
en tiempo (TFCT) esta dada por

X
a
(j) =



dt e t x
t j
a
) ( (3.24)

donde es una frecuencia analgica, en radianes/seg. La correspondiente transformada inversa esta dada por


x
a
(t) =

d e j X
t j
a
) (
2
1

(3.25)

Si ahora muestreamos x
a
(t) a intervalos de T
s
segundos, para as obtener la seal discreta en tiempo x(n),
podemos escribir:

x(n) = x
a
(nT
s
)


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


X(e
j
) =


1
]
1

,
_

l
l
s s
a
s
T T
j X
T
2 1
(3.26)


Las frecuencias analgica y digital quedan relacionadas, a travs de T
s
, como:

= T
s
, (3.27)
PDF created with pdfFactory trial version www.pdffactory.com

61

mientras que la frecuencia de muestreo F
s
esta dada por:

F
s
=
s
T
1
, muestras/segundo (3.28)

La ilustracin grfica de (3.26) se muestra en la siguiente figura, de la cual se observa que, en general, la
seal discreta es una versin replicada y sobrepuesta (aliased) de la seal analgica correspondiente.




No obstante, es posible recuperar la transformada de Fourier X
a
(j) a partir de X(e
j
) (o, equivalentemente,
la seal analgica x
a
(t) a partir de sus muestras x(n)) si las replicas de X
a
(j) no se traslapan entre ellas
para formar X(e
j
), lo cual slo es cierto para seales analgicas limitadas en banda.

En este punto, es importante detenernos un momento y recordar que una seal es limitada en banda si existe
una frecuencia finita o en radianes tal que X
a
(j) es cero para || > o. La frecuencia Fo=o/2 se
conoce como ancho de banda de la seal, y es expresada en Hz.

PDF created with pdfFactory trial version www.pdffactory.com

62

Refirindonos a la figura anterior, s > oT
s
equivalentemente F
s
/2 > Fo, entonces


X(e
j
) =

,
_


s s
T
j X
T
1
;
s s s
T T T

<

(3.29)

Lo cual nos conduce a establecer el teorema de muestreo para seales limitadas en banda.



Teorema del Muestreo.

Una seal x
a
(t) limitada en banda con ancho de banda F
o
puede ser reconstruida a partir de sus muestras
x(n) = x
a
(nT
s
) si la frecuencia de muestreo F
s
= 1/T
s
es dos veces ms grande que el ancho de banda F
o
de la
seal x
a
(t). Esto es
F
s
> 2F
o


De lo contrario podra ocurrir aliasing en x(n). Esta velocidad de muestreo de 2F
o
para una seal analgica en
banda limitada se conoce como ndice de Nyquist.


Cabe mencionar que una vez que x
a
(t) es muestreada, la frecuencia analgica ms grande que x(n)
representa es F
s
/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 seales analgicas con MATLAB, a menos que usemos el
Toolbox de matemticas simblicas; sin embargo, si tomamos muestras de x
a
(t) en una rejilla muy fina que
considere incrementos de tiempo suficientemente pequeos para producir una grfica suave, y un tiempo
mximo suficientemente grande para mostrar todas sus evoluciones, entonces podemos bien aproximar su
anlisis. Hagamos que t sea el intervalo de la retcula, tal que t << T
s
, entonces

x
G
(m) = x
a
(m t) , (3.30)

se puede usar como un arreglo para simular una seal analgica. Adems, el intervalo de muestreo T
s
no debe
ser confundido con el intervalo de rejilla t, el cual es usado estrictamente para representar una seal
analgica en MATLAB. De igual forma, la relacin (3.24) de la transformada de Fourier tambin podra ser
aproximada como en (3.30), como se muestra a continuacin.


X
a
(j)



m m
t m j
G
t m j
G
e m x t t e m x ) ( ) ( (3.31)


Ahora si x
a
(t) (y por lo tanto x
G
(m)) es de duracin finita, entonces (3.31) es similar a la transformada de
Fourier discreta en tiempo de la relacin (3.3) y, por lo tanto, puede ser implementada en MATLAB en una
forma similar; para as poder analizar el fenmeno del muestreo.


Usemos lo hasta aqu anotado para determinar y graficar la transformada de Fourier de la seal

x
a
(t) = e
-1000| t |


PDF created with pdfFactory trial version www.pdffactory.com

63

De la expresin (3.24):

X
a
(j) =



dt e t x
t j
a
) ( =




+
0
1000
0
1000
dt e e dt e e
t j t t j t

=
2
1000
1
002 . 0

,
_


+
(3.32)


la cual es una funcin real, ya que x
a
(t) es una seal real y par. Ahora tenemos que para evaluar X
a
(j)
numricamente, primero hay que aproximar a x
a
(t) como una secuencia de duracin finita x
G
(m), y para ello
usamos la aproximacin e
-5
0. Notamos que x
a
(t) puede ser aproximada por una seal de duracin finita
sobre el intervalo de tiempo -0.005 t 0.005 (, equivalentemente, sobre [-5,5] mseg). De igual forma de la
expresin (3.22), X
a
(j) 0 para 2(2000). Por lo tanto, elegimos


t = 5 X 10
-5
<<
) 2000 ( 2
1
= 25 X 10
-5
,


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


% Seal Analgica
%
>> 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('Seal Analgica')
>> 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 grficas de x
a
(t) y X
a
(j), debiendo notarse que, para reducir el
nmero de clculos, se calcul X
a
(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 x
a
(t) a dos
frecuencias de muestreo diferentes. Primeramente nos servimos de una velocidad de Fs= 5000 muestras/seg
para obtener x
1
(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 seal en cuestin es de 2000 Hz.; el script con que
nos ayudamos es el siguiente:

% Seal Analgica
>> Dt = 0.00005;
>> t = -0.005:Dt:0.005;
>> xa = exp(-1000*abs(t));
% Seal 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('Seal 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 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
t
)
Se al Anal gica
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
0.5
1
1.5
2
Frecuencia en KHz
X
a
(
j
W
)
*
1
0
0
0
Transformada de Fourier Continua en Tiempo
PDF created with pdfFactory trial version www.pdffactory.com

65

Las grficas que resultan son:


























En la grfica superior se muestra superpuesta la seal discreta x
1
(n) sobre x
a
(t), para resaltar la operacin de
muestreo. Por otro lado, la grfica de X
1
(e
j
) muestra ser una versin escalada (por F
s
=5000) de X
a
(j),
pudiendo percibirse claramente que no existe aliasing.

Si ahora consideramos una velocidad de muestreo por debajo del ndice de Nyquist, por ejemplo
F
s
= 1000 < 4000, se producir una buena cantidad de aliasing. El script modificado que nos soporta esta
situacin es:

%Seal Analgica
>> Dt = 0.00005; t = -0.005:Dt:0.005; xa = exp(-1000*abs(t));
% Seal 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('Seal 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 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
1
(
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 1
0
2
4
6
8
10
Frecuencia en unidades de
X
1
(
w
)
Transformada de Fourier Discreta en Tiempo
PDF created with pdfFactory trial version www.pdffactory.com

66

Las grficas resultantes para esta situacin son:




























En donde el aliasing se hace evidente en la grfica inferior, en la que es claro que la forma de X
2
(e
j
) es
diferente a la forma de X
a
(j), lo cual puede ser interpretado como resultado de la suma de replicas
traslapadas de X
a
(j).


A partir del teorema de muestreo y de las situaciones que hemos considerado, es claro que si muestreamos
a x
a
(t) -limitada en banda- por encima de su ndice de Nyquist, entonces es posible reconstruir x
a
(t) a partir de
sus muestras x(n). Esta reconstruccin consta de dos pasos:

Primero las muestras son convertidas en un tren de impulsos ponderados



n
s
nT t n x ) ( ) ( ...+ x(-1)(n+T
s
) + x(0) (t) + x(1)(n-T
s
) +...

Posteriormente, empleando un filtro analgico ideal pasa bajas, el tren de impulsos es filtrado para la
banda [-F
s
/2, F
s
/2]. Un diagrama de bloques muestra esta situacin:



x(n) x
a
(t)



Tal procedimiento puede ser descrito matemticamente, empleando una frmula de interpolacin, como se
muestra con la siguiente expresin:
Conversin a
tren de impulsos
Filtro ideal
Pasa-Bajas
-5 -4 -3 -2 -1 0 1 2 3 4 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
2
(
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 1
0
0.5
1
1.5
2
2.5
Frecuencia en unidades de
X
2
(
w
)
Transformada de Fourier Discreta en Tiempo
PDF created with pdfFactory trial version www.pdffactory.com

67


x
a
(t) = [ ]

n
s s
nT t F sinc n x ) ( ) ( , (3.33)


donde la funcin sinc(x) =
x
x sin

corresponde a la funcin de interpolacin. La interpretacin fsica de la


reconstruccin (3.33) se muestra en la siguiente figura, de la cual se observa que se trata de una interpolacin
ideal, que no es factible en la prctica 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 prctica, es necesario considerar un planteamiento distinto al indicado por (3.33); por lo que es
conveniente reemplazar el filtro pasa bajas ideal por uno analgico prctico. Desde luego, podemos hacer
interpretacin de (3.33) como si se tratara de una interpolacin 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:



Interpolacin y retencin de orden cero (ZOH).

En este tipo de interpolacin 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:

x
a
(t) = x(n), nT
s
n < (n +1)T
s
,

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

h
o
(t) =

'

contrario lo de
T t
s
, 0
0 , 1


La seal resultante es una escalera, con valores constantes durante los intervalos de muestreo, que sigue la
forma de onda de la seal analgica original y que requiere un post-filtro analgico apropiado para
reconstruir la seal:



x(n) x
a
(t) x
a
(t)




Interpolacin y retencin de primer orden (FOH).

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


h
1
(t) =

'


+
contrario lo del
T t T
T
t
T t
T
t
s s
s
, 0
2 , 1
0 , 1



De nuevo, ser necesario el post-filtrado analgico adecuado para lograr la reconstruccin correcta.
Desde luego, las interpolaciones pueden ser extendidas a ordenes ms altos; sin embargo, existe una
interpolacin particularmente til que es explotada con MATLAB, y es la siguiente:

ZOH Post-Filtro
PDF created with pdfFactory trial version www.pdffactory.com

69

Interpolacin con spline cbico.

Este enfoque emplea interpoladores tipo spline para lograr una mejor definicin entre muestras, aunque
no necesariamente una estimacin ms correcta, de las seales analgicas; as, con este tipo de
interpolacin se podr prescindir del postfiltro analgico, gracias a que la reconstruccin suavizada se
obtiene empleando una serie de polinomios de tercer orden, denominados splines cbicos, especificados
por:

x
a
(t) =
o
(n) +
1
(n)(t - nT
s
) +
2
(n)(t - nT
s
)
2

+
3
(n)(t - nT
s
)
3
, nT
s
n < (n + 1)T
s
(3.34)


donde {
i
(n), 0 i 3} son los coeficientes de los polinomios, mismos que son determinados empleando
un anlisis de mnimos cuadrados sobre los valores muestra. Estrictamente hablando, sta no es una
operacin causal, pero su uso es conveniente si usamos MATLAB.


Para realizar la interpolacin entre muestras, MATLAB proporciona varias posibilidades, por ejemplo la
funcin sinc(x), la cual genera la funcin (sinx)/x, puede ser usada para implementar (3.33), dado un
nmero finito de muestras. De este modo, si tenemos {x(n) , n
1
n n
2
}, y deseamos interpolar x
a
(t) sobre
una rejilla muy fina con un intervalo de rejilla t, entonces de (3.33) tenemos


x
a
(mt) [ ], ) ( ) (
2
1


n
n n
s
nT t m Fs sinc n x t
1
mt t
2
(3.35)


la cual puede ser implementada como una operacin de multiplicacin 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 seal analgica x
a
(t) exacta, ya que se ha
asumido un nmero finito de muestras. Por lo pronto, usaremos la funcin sinc para estudiar el problema de
aliasing en el dominio del tiempo.


A partir de las muestras de x
1
(n) en el ejemplo anterior, para las cuales se empleo una velocidad de
muestreo de 5000 muestras/seg. (T
s
= 1/F
s
= 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 x
a
(t). El script que hemos escrito para esta prueba es:


% Seal en tiempo discreto x1(n)
>> Ts = 0.0002; Fs = 1/Ts; n = -25:1:25; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
%
% Reconstruccin de la seal analgica
>> 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 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
t
)
Se al Reconstruida usando la funci n sinc
% Verificacin
>> error = max(abs(xa - exp(-1000*abs(t))))
error =
0.0363
%
% Grfica
>> subplot(2,1,1)
>> plot(t*1000,xa,'r');
>> xlabel('t en mseg.'); ylabel('xa(t)')
>> title('Seal Reconstruida usando la funcin sinc'); hold on
>> stem(n*Ts*1000,x); hold off


As, el error mximo entre la seal analgica y la reconstruida es de 0.0363, lo cual se debe al hecho de que
x
a
(t) no esta, estrictamente, limitada en banda (adems de que se cuenta con un nmero finito de muestras).
La siguiente figura muestra que la reconstruccin es excelente:















Por otro lado, para el caso de x
2
(n), que fue obtenida por el muestreo de la seal x
a
(t) con T
s
= 1/F
s
= 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:

% Seal discreta en tiempo x2(n)
>> Ts = 0.001; Fs = 1/Ts; n = -5:1:5; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
%
% Reconstruccin de la seal analgica
>> Dt = 0.00005;
>> t = -0.005:Dt:0.005;
>> xa = x * sinc(Fs*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
%
% Verificacin
>> error = max(abs(xa - exp(-1000*abs(t))))
error =
0.1852
% Grficas
>> 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('Seal Reconstruida usando la funcin 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.
x
a
(
t
)
Se al Reconstruida usando la funci n sinc

En este caso, se observa que el mximo error entre la seal analgica y la reconstruida es de 0.1852, lo cual es
significativo y no puede ser atribuido slo al hecho de que x
a
(t) no esta limitada en banda. En la siguiente
figura se observa que la seal reconstruida difiere de la analgica en muchos puntos sobre las regiones
interpoladas, lo cual constituye la demostracin visual del anlisis en el dominio del tiempo.

















Esta grfica corresponde a la demostracin visual del aliasing en el dominio del tiempo.


El segundo enfoque, en MATLAB, para la reconstruccin de la seal es de naturaleza grfica: la funcin
stairs grafica una representacin en escalera (ZOH) de la seal analgica, dadas sus muestras, mientras que la
funcin plot representa una interpolacin lineal (FOH) entre muestras. Para las seales anteriores, sta
aproximacin la logramos con el script siguiente:


% En esta reconstruccin no se calcula x
a
(t) sino que simplemente
% se le grafica empleando sus muestras.
% Seal discreta en tiempo x1(n) : Ts = 0.0002
>> Ts = 0.0002; n = -25:1:25; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
% Reconstruccin de la seal analgica usando stairs
>> subplot(2,1,1); stairs(nTs*1000,x,'r');
>> xlabel('t en mseg.','FontSize',8); ylabel('xa(t)')
>> title('Seal Reconstruida usando ZOH'); hold on
>> stem(n*Ts*1000,x); hold off
%
% Seal discreta en tiempo x2(n) : Ts

=

0.001
>> Ts = 0.001; n = -5:1:5; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
% Reconstruccin de la seal analgica usando plot
>> subplot(2,1,2); plot(nTs*1000,x,'r');
>> xlabel('t en mseg.', 'FontSize',8); ylabel('xa(t)')
>> title('Seal Reconstruida usando FOH'); hold on
>> stem(n*Ts*1000,x); hold off


Las grficas correspondientes se muestran a continuacin.


PDF created with pdfFactory trial version www.pdffactory.com

72

























A partir de estas grficas se visualiza que la reconstruccin ZOH es muy burda, lo que hace necesario un
procesamiento adicional de la seal. Por otro lado, la reconstruccin FOH parece ser mejor, pero una
observacin cuidadosa cerca de t=0 revela que el pico de la seal no es reproducido correctamente; sin
embargo, en general, si la frecuencia de muestreo es mucho ms grande que el ndice de Nyquist, entonces la
interpolacin FOH proporciona una reconstruccin aceptable.


El tercer enfoque de reconstruccin involucra el uso de funciones spline cbicas, en donde la funcin
spline implementa la interpolacin entre puntos de muestras. Esto se hace con xa = spline(nTs,x,t), donde x y
nT
s
son los arreglos que contienen a las muestras x(n) en los momentos nT
s
, respectivamente, y el arreglo t
contiene una fina rejilla en la cual se encuentran los valores de x
a
(t) deseados. Es de resaltar, una vez ms, que
no es posible obtener una seal analgica x
a
(t) exacta. Usando el siguiente script, para las muestras x
1
(n) y
x
2
(n), tenemos:

% Seal discreta en tiempo x1(n): Ts = 0.0002
>> Ts = 0.0002; n = -25:1:25; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
% Reconstruccin de la seal analgica
>> Dt = 0.00005;
>> t = -0.005:Dt:0.005;
>> xa = spline(nTs,x,t);
% Verificacin
>> error = max(abs(xa - exp(-1000*abs(t))))
error =
0.0317
% Grfica
subplot(2,1,1); plot(t*1000,xa,'r');
xlabel('t en mseg.'); ylabel('xa(t)')
title('Seal Reconstruida a partir de x1(n) usando la funcin spline cbica'); hold on
stem(n*Ts*1000,x); hold off

-5 -4 -3 -2 -1 0 1 2 3 4 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
t
)
Se al Reconstruida usando ZOH
-5 -4 -3 -2 -1 0 1 2 3 4 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
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 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
t
)
Se al Reconstruida a partir de x1(n) usando la funci n spline c bica

Se observa que el error mximo entre la seal analgica y la reconstruida es de 0.0317, lo cual es de esperarse
debido a la interpolacin no ideal y al hecho de que x
a
(t) no es limitada en banda. Comparando este error con
el de la interpolacin sinc (ideal), notamos que el error es menor. La grfica correspondiente se muestra a
continuacin, en la cual se observa que visualmente la reconstruccin es excelente:




















Script correspondiente a las muestras x
2
(n):


% Seal en tiempo discreto x2(n): Ts = 0.001
>> Ts = 0.001; n = -5:1:5; nTs = n*Ts;
>> x = exp(-1000*abs(nTs));
% Reconstruccin de la seal analgica
>> Dt = 0.00005;
>> t = -0.005:Dt:0.005;
>> xa = spline(nTs,x,t);
% Verificacin
>> error = max(abs(xa - exp(-1000*abs(t))))
error =
0.1679
% Grfica
>> figure(2); clf
>> subplot(2,1,1); plot(t*1000,xa,'r');
>> xlabel('t en mseg.'); ylabel('xa(t)')
>> title('Seal Reconstruida a partir de x2(n) usando la funcin spline cbica'); hold on
>> stem(n*Ts*1000,x); hold off



El error mximo en este caso es de 0.1679, el cual es significativo, y no puede ser atribuido a la interpolacin
no ideal o al hecho de que x
a
(t) es no limitada en banda. La grfica correspondiente se muestra a continuacin,
en la cual se observa que la seal 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 5
0
0.2
0.4
0.6
0.8
1
t en mseg.
x
a
(
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 seales
discretas sirvindonos de secuencias exponenciales complejas; tambin, observamos que tal representacin
presenta algunas ventajas para el anlisis de los sistemas LIT, ya que permite describirlos en el dominio de la
frecuencia empleando la funcin de respuesta en frecuencia H(e
jw
). De igual modo, anotamos que el clculo
de la respuesta de estado estacionario sinusoidal se simplifica mucho usando a H(e
jw
); adems, la respuesta a
cualquier secuencia arbitraria x(n) absolutamente sumable puede ser sencillamente calculada, en el dominio
de la frecuencia, multiplicando la transformada X(e
jw
) y la respuesta en frecuencia H(e
jw
). Sin embargo,
existen dos defectos en el mtodo de la transformada de Fourier: uno, existen muchas seales 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 extensin de la transformada de Fourier discreta en tiempo para contender con
los dos problemas sealados; tal extensin 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 versin 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
n
z n x ) ( (4.1)

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

R
x-
< |z| < R
x+
(4.2)

para los nmeros positivos R
x-
y R
x+
.

Tambin, se tiene que la transformada-z inversa de una funcin compleja X(z) queda especificada por:

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

C
n
dz z z X
j
1
) (
2
1
(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.
SECCIN
4
PDF created with pdfFactory trial version www.pdffactory.com

76

Con base a lo sealado, podemos anotar lo siguiente:

1. La variable compleja z es llamada frecuencia compleja, y est dada por z = |z|e
jw
, donde |z| es la magnitud
y w es la frecuencia real.
2. Puesto que la RDC en (4.2) esta definida en trminos 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 R
x-
sea igual a cero y/o R
x+
ser .

3. Si R
x+
< R
x-
, entonces la RDC es un espacio nulo y, por lo tanto, la transformada-z no existe.
4. La funcin |z| = 1 (o z= e
jw
), que constituye un crculo de radio unitario en el plano-z, es llamada crculo
unitario. Y si la RDC contiene al crculo, entonces podemos evaluar X(z) sobre el crculo unitario, lo
cual deja:

[ ] ) ( ) ( ) ( ) ( n x F e n x e X z X
n
jw jw
e z
jw



As, la transformada de Fourier, X(e
jw
), 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 x
1
(n) = a
n
u(n), 0 < |a| < , (denominada secuencia positiva derecha), entonces:

X
1
(z) =


,
_

0
1
0
1
1
az z
a
z a
n
n n
; si
z
a
< 1

=
a z
z

, |z| > |a| RDC


1
:
{
x
R
a | | < |z| <
{
+

x
R
,

pudiendo notarse que X
1
(z) es una funcin racional; esto es

X
1
(z) =
) (
) (
z A
z B
=
a z
z



con B(z)=z y A(z)=z-a, ambos, polinomios. Recordamos, tambin, que las races de B(z) son
denominadas los ceros de X(z), mientras que las races de A(z) son llamadas los polos de X(z). As, en este
caso X
1
(z) tiene un cero en el origen z=0 y un polo en z=a. De tal suerte, x
1
(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 continuacin:


(b) Ahora consideremos la secuencia x
2
(n) = -b
n
u(-n-1), 0 < |b| < , (llamada secuencia negativa
izquierda), entonces

X
2
(z) =

,
_


1 1
n
n n
z
b
z b

=

,
_


,
_

0 1
1
n n
b
z
b
z


=
b z
z
b z

/ 1
1
1 , RDC
2
:
{
x
R
0 < |z| <
{
+ x
R
b | |

La RDC
2
y el diagrama de polos y ceros correspondientes, se muestran a continuacin


Hay que notar que si b=a, entonces X
2
(z) = X
1
(z), excepto por sus respectivas RDCs ; esto es,
RDC
1
RDC
2
. Esto nos indica que la RDC es una caracterstica distintiva, que garantiza la unicidad de la
transformada Z, por lo que juega un papel muy importante en el anlisis de los sistemas.

(c) Por ltimo, consideremos la secuencia x
3
(n) = x
1
(n) + x
2
(n) = a
n
u(n) - b
n
u(-n-1), (denominada secuencia
bilateral), que es la suma de las dos secuencias anteriores. Tenemos que:

X
3
(z) =


1
0
n n
n
n n
z b z a

=

'

<

'

>

| | | | : , | | | | : ,
1 1
b z RDC
b z
z
a z RDC
a z
z

=
b z
z
a z
z

; RDC
3
: RDC
1
RDC
2
PDF created with pdfFactory trial version www.pdffactory.com

78

Desde luego, si |b| < |a| , la RDC
3
sera un espacio nulo y, por lo tanto, X
3
(z) no existira.
Si |a| < |b| , entonces la RDC
3
es |a| < |z| < |b| y X
3
(z) existe en esta regin , como se muestra en las figuras
siguientes:





Propiedades de la Regin de Convergencia

A partir de observar las RDCs, de las tres secuencias anteriores, podemos establecer las siguientes
propiedades:

1. La RDC est siempre limitada por un crculo, ya que la condicin de convergencia est delimitada por
la magnitud |z|.

2. La secuencia x
1
(n) = a
n
u(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 < n
0
. Este caso muestra que la RDC para las secuencias
derechas est siempre en el exterior de un crculo de radio R
x-
. Si n
o
0, entonces la secuencia lateral
derecha es, tambin, llamada una secuencia causal.

3. La secuencia x
2
(n) = -b
n
u(-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 > n
0
. Si n
o
0, la secuencia resultante es llamada
secuencia anticausal. En este caso la RDC para la secuencia izquierda est siempre en el interior de un
crculo de radio R
x+
.

4. La secuencia x
3
(n) vista anteriormente es una secuencia bilateral (existe a izquierda y derecha de cero)
cuya RDC est siempre en un anillo abierto R
x-
<|z| <R
x+
, si ste existe.

5. Las secuencias que son cero para n < n
1
y n > n
2
son llamadas secuencias de duracin finita, y su RDC
es el todo el plano-z. Si n
1
< 0 entonces z = no est en la RDC, y si n
2
> 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 regin contigua, es decir, no viene en piezas.


En el procesamiento digital de seales, se da por hecho que las seales son causales, ya que casi todo dato
digital es adquirido en tiempo real. Por lo tanto, la nica RDC de inters para nosotros es la expuesta en el
punto 2 de las propiedades sealadas.

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[a
1
x
1
(n) + a
2
x
2
(n)] = a
1
X
1
(z) + a
2
X
2
(z); RDC : RDC
x1
RDC
x2
(4.4)

2. Desplazamiento en tiempo:

Z[x(n - n
o
)] = z
-no
X(z); RDC : RDC
x
(4.5)

3. Desplazamiento en frecuencia:

Z[a
n
x(n)] = X
,
_

a
z
; RDC : RDC
x
ponderada por |a| (4.6)

4. Rotacin (Desdoblamiento):

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

5. Conjugacin:

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

6. Diferenciacin en z:

Z[nx(n)] =
dz
z dX
z
) (
; RDC : RDC
x
(4.9)

7. Multiplicacin:

Z[x
1
(n)x
2
(n)] =

C
d z X X
j
1
2 1
) / ( ) (
2
1
; (4.10)

RDC : RDC
x1
RDC
x2
invertida

En donde C es una curva cerrada que contiene al origen y adems se encuentra en la RDC comn.

8. Convolucin:

Z[x
1
(n) * x
2
(n)] = X
1
(z)X
2
(z); RDC : RDC
x1
RDC
x2
(4.11)

Esta propiedad transforma la operacin de convolucin en el dominio del tiempo en una multiplicacin
entre dos funciones. Es una propiedad significativa en muchos sentidos, y el primero de ellos es que
si X
1
(z) y X
2
(z) son dos polinomios, entonces sus productos pueden ser implementados usando la funcin
conv de MATLAB.
PDF created with pdfFactory trial version www.pdffactory.com

80

A continuacin mostramos dos ejemplos, con los cuales aplicamos la propiedad de convolucin:


(a) Si X
1
(z) = 2 + 3z
-1
+ 4z
-2
y X
2
(z) = 3 +43z
-1
+ 5z
-2
+ 6z
-3
, entonces X
3
(z) = X
1
(z)X
2
(z) se puede
determinar con base en la definicin de la transformada Z, dado que

x
1
(n) = {2, 3, 4} y x
2
(n) = {3, 4, 5, 6}


As, la convolucin de las dos secuencias proporcionar los coeficientes del producto polinomial
requerido. El siguiente cdigo 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:
X
3
(z) = 6 + 17z
-1
+ 34z
-2
+ 43z
-3
+ 38z
-4
+ 24z
-5



Empleando la funcin conv_m, que desarrollamos con anterioridad, tambin podemos multiplicar dos
polinomios, en el dominio de z, correspondientes a secuencias no causales. Por ejemplo:


(b) Si X
1
(z) = z + 2 + 3z
-1
y X
2
(z) = 2z
2
+ 4z + 3 + 5z
-1
, Entonces para determinar X
3
(z) = X
1
(z)X
2
(z)

Notamos que

x
1
(n) = { 1, 2, 3 } y x
2
(n) = { 2, 4, 3, 5 }


El cdigo 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:
X
3
(z) = 2z
3
+ 8z
2
+ 17z + 23 + 19z
-1
+ 15z
-2



En otro orden de ideas, para dividir un polinomio entre otro requeriramos una operacin inversa, llamada
deconvolucin, cuya forma de invocacin en MATLAB es: [p,r] = deconv(b,a). Esta expresin 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 X
3
(z) por X
1
(z) en el ejemplo del inciso (a) anterior, obtenemos el siguiente cdigo:

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


Observndose que obtenemos los coeficientes del polinomio X
2
(z), como era de esperarse. En base a este
resultado, podemos decir que la operacin deconv es til en la obtencin de la parte racional, de una funcin
racional impropia.

Otro uso importante de la propiedad de convolucin reside en el clculo de las respuestas en un sistema,
como veremos ms adelante. Esta interpretacin es particularmente til para verificar la expresin X(z),
transformada en Z, con el empleo de MATLAB. Dado que MATLAB es un procesador numrico, no se le
puede usar para calcular transformadas z directamente; podemos explicar esto con ms detalle si
consideramos la secuencia x(n) con una transformada racional de la forma

X(z) =
) (
) (
z A
z B


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
aproximacin numrica al clculo 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 ms comunes

Usando la definicin de la transformada-z y sus propiedades, se puede determinar la transformada de algunas
de las secuencias ms comunes, dando origen a la tabla siguiente:


Secuencia Transformada RDC
(n) 1 z
u(n)
1
1
1

z
|z | > 1
-u(-n-1)
1
1
1

z
|z | < 1
a
n
u(n)
1
1
1

az
|z | > |a |
-b
n
u(-n-1)
1
1
1

bz
|z | < |b |
[a
n
sin
o
n] u(n)
2 2 1
1
) cos 2 ( 1
) (

z a z a
z asin
o
o
|z | > |a |

PDF created with pdfFactory trial version www.pdffactory.com

82
[a
n
cos
o
n] u(n)
2 2 1
1
) cos 2 ( 1
) cos ( 1

+

z a z a
z a
o
o
|z | > |a |
na
n
u(n)
2 1
1
) 1 (

az
az
|z | > |a |

-nb
n
u(-n-1)
2 1
1
) 1 (

bz
bz
|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
1
]
1

) 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
1
]
1

,
_


) (
3
cos ) 5 . 0 ( n u
n
n
n


con ningn cambio en la RDC. Si ahora aplicamos la propiedad de multiplicacin por una rampa
(diferenciacin en z), obtenemos lo siguiente:

X(z) = z
-2

'

1
]
1

dz
n u n co dZ
z
n
) ( ) ( ) 5 . 0 (
3


en donde, nuevamente, no hay cambio en la RDC. Ahora, tenemos que la transformada Z de
(0.5)
n
cos( n
3

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



Z
2 1
1
25 . 0 ) cos 5 . 0 ( 2 1
) cos 5 . 0 ( 1
) (
3
cos ) 5 . 0 (
3
3

1
]
1

,
_

z z
z
n u
n
n
; |z | > 0.5


2 1
1
25 . 0 5 . 0 1
25 . 0 1

z z
z
; |z | > 0.5

por lo tanto

X(z) = -z
-1

'

2 1
1
25 . 0 5 . 0 1
25 . 0 1
z z
z
dz
d
, |z | > 0.5

PDF created with pdfFactory trial version www.pdffactory.com

83

=-z
-1

'

+ +
+


4 3 2 1
4 3 2
0625 . 0 25 . 0 75 . 0 1
0625 . 0 5 . 0 25 . 0
z z z z
z z z
, |z | > 0.5

=
4 3 2 1
5 4 3
0625 . 0 25 . 0 75 . 0 1
0625 . 0 5 . 0 25 . 0


+ +
+
z z z z
z z z
, |z | > 0.5



Para verificar, con MATLAB, que la X(z) anterior es la expresin correcta, calcularemos las primeras 8
muestras de la secuencia x(n) correspondiente a X(z). El cdigo 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 clculos de la transformada Z.




Inversin de la Transformada Z


A partir de la definicin (4.3) se puede observar que el clculo de la transformada Z inversa requiere de la
evaluacin de una integral de lnea compleja que, en general, es un procedimiento complicado; por lo que se
prefiere usar un mtodo alternativo, ms prctico, consistente en la expansin por fracciones parciales, el cual
hace uso de la tabla de transformadas mostrada anteriormente. Sin embargo, la transformada Z debe ser una
funcin racional, requerimiento que, generalmente, se satisface en el procesamiento digital de seales.

PDF created with pdfFactory trial version www.pdffactory.com

84

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

Dada

X(z) =
N
N
M
M o
z a z a
z b z b b


+ + +
+ + +
... 1
...
1
1
1
1
, R
x-
< | z | < R
x+
(4.12)


1. Se puede expresar como:


X(z) =
43 42 1 4 4 4 4 4 3 4 4 4 4 4 2 1
N M si polinomial parte
N M
k
k
k
racional parte
N
N
N
N o
z C
z a z a
z b z b b

+
+ + +
+ + +

_
0

1
1
) 1 (
1
1
1
... 1
~
...
~ ~



donde podemos observar la parte racional propia y la parte polinomial (de longitud finita). Resultados que
se pueden obtener llevando a cabo la divisin polinomial, s M N, empleando la funcin deconv.


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


X(z) =

N
k
N M
N M
k
k
k
k
k
z C
z p
R
1 0
1
1
43 42 1
, (4.13)

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


R
k
=
k
z z k
N
N
N
N o
z p
z a z a
z b z b b

+ + +
+ + +
) 1 (
... 1
~
...
~ ~
1
1
1
) 1 (
1
1
1



Para los polos repetidos, la expresin (4.13) tiene una forma ms general. Si un polo p
k
tiene
multiplicidad r, entonces su expansin es dada por:

+ +

r
r
k
r
r k
k
k
k
k
k
k
z p
z R
z p
z R
z p
R
z p
z R
1
1
) 1 (
,
2 1
1
2 ,
1
1 ,
1
) 1 (
,
) 1 (
...
) 1 ( 1 ) 1 (
l
l
l
l
, (4.14)


donde los residuos
l , k
R son calculados empleando una frmula (Teorema de residuos de Cauchy) ms
general.
PDF created with pdfFactory trial version www.pdffactory.com

85

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


x(n) =
4 4 3 4 4 2 1
N M
N M
k
k
N
k
k
k
k n C
z p
Z R


+
1
]
1

0 1
1
1
) (
1
1



4. Finalmente, se usa la siguiente relacin de la tabla de pares transformados:


Z
-1

'

1
]
1

x k
n
k
x k
n
k
k
R z n u p
R z n u p
p z
z
| | ) 1 (
| | ) (
(4.15)


para completar x(n).



Podemos ejemplificar el mtodo de expansin en fracciones parciales, si calculamos la transformada Z
inversa de

X(z) =
1 4 3
2
+ z z
z



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

X(z) =
2 1
1
2
3
1
3
4
3
1
3
1
3
4
1 ) ( 3

+ z z
z
z z
z


=
1
1
1 1
1
3
1
2
1
2
1
3
1
3
1
1
1
) 1 )( 1 (

z
z
z z
z



X(z) =

,
_


,
_

1
1
3
1
1
1
2
1
1
1
2
1
z
z



Donde podemos observar que X(z) tiene dos polos: z
1
=1 y z
2
=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) RDC
1
: 1< | z | < . Aqu ambos polos estn en el interior de la RDC
1
; esto es, | z
1
| R
x-
= 1 y
| z
2
| 1.

Por lo tanto, de (4.15): x
1
(n) = ) (
3
1
2
1
) (
2
1
n u n u
n

,
_



lo cual corresponde a una secuencia derecha.

b) RDC
2
: 0< | z | < 1/3. Aqu ambos polos estn en el exterior de la RDC
2
; esto es, | z
1
| R
x+
= 1/3 y
| z
2
| 1/3.

Por lo tanto, de (4.15): x
2
(n) = { }

'


,
_

) 1 (
3
1
2
1
) 1 (
2
1
n u n u
n


= ) 1 (
2
1
) 1 (
3
1
2
1

,
_

n u n u
n


lo cual corresponde a una secuencia izquierda.

c) RDC
3
: 1/3< | z | < 1. Aqu el polo z
1
esta en el lado externo de la RDC
3
; esto es, | z
1
| R
x+
= 1;
mientras que el polo z
2
esta en el lado interno; esto es, | z
2
| 1/3.


PDF created with pdfFactory trial version www.pdffactory.com

87

Por lo tanto, de (4.15): x
3
(n) = ) (
3
1
2
1
) 1 (
2
1
n u n u
n

,
_



lo cual corresponde a una secuencia bilateral.



En MATLAB existe una funcin, llamada residuez, la cual permite calcular la parte residual y los trminos
directos (polinomiales) de una funcin racional en z
-1
. Consideremos la funcin racional



X(z) =

+ + +
+ + +
N
k
N M
N M
k
k
k
k
k
N
N o
M
M o
z C
z p
R
z A
z B
z a z a a
z b z b b
1 0
1 1
1
1
1
1 ) (
) (
...
...
43 42 1
,


en la cual las potencias de z
-1
, de los polinomios del numerador y el denominador, estn en orden ascendente.
Entonces, la funcin [R,p,C] = residuez(b,a) encuentra los residuos, polos, y trminos directos de X(z), en la
que dos polinomios B(z) y A(z) estn dados por los vectores b y a, respectivamente. El vector columna R,
regresado por la funcin, contiene los residuos, el vector columna p contiene la localizacin de los polos, y el
vector fila C contiene los trminos directos. Si p(k) = ... = p(k+r-1) es un polo de multiplicidad r, entonces la
expansin incluye al trmino de la forma


r
k
r k
k
k
k
k
z p
R
z p
R
z p
R
) 1 (
...
) 1 ( 1
1
1
2 1
1
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 expresin de la fraccin parcial anterior a polinomios, con sus coeficientes en los vectores fila b y
a.


A continuacin, nos servimos de algunas funciones racionales para ilustrar el funcionamiento de la funcin
residuez.

(a) Consideremos la funcin racional X(z) =
1 4 3
2
+ z z
z



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

X(z) =
2 1
1
2 1
1
4 3
0
4 3

+
+

+ z z
z
z z
z

PDF created with pdfFactory trial version www.pdffactory.com

88

Ahora empleando el siguiente cdigo:

>>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
1
2
1
2
1
1
1

z
z
, como se haba obtenido anteriormente.

Similarmente, para regresar a la forma de funcin racional empleamos el siguiente cdigo:

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

y obtenemos

X(z) =
+

+
2 1
1
2 1
1
4 3
1
3
1
3
4
3
1
0
z z
z
z z
z
1 4 3
2
+ z z
z
, como antes.

(b) Ahora, intentemos la transformada Z inversa de

X(z) =
) 09 1 ( ) 9 . 0 1 (
1
1 2 1
+ z z
, | z | > 0.9

Podemos evaluar el polinomio denominador y, tambin, obtener el residuo empleando el siguiente
cdigo:

>>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 funcin polinomial poly de
MATLAB, la cual calcula los coeficientes del polinomio, dadas sus races. Podramos haber usado la
funcin conv, pero el uso de la funcin poly es ms conveniente para ste propsito. A partir del clculo
de los residuos, y empleando los residuos dados en (4.16), tenemos que


X(z) =
1 2 1 1
9 . 0 1
25 . 0
) 9 . 0 1 (
5 . 0
9 . 0 1
25 . 0

+
+

+
z z z
, | z | > 0.9

=
1 2 1
1
1
9 . 0 1
25 . 0
) 9 . 0 1 (
) 9 . 0 (
9 . 0
5 . 0
9 . 0 1
25 . 0

+
+

+
z z
z
z
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) +
9
5
(n+1)(0.9)
n+1
u(n+1) + 0.25(-0.9)
n
u(n)
la cual, despus 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) =
2 1
1
64 . 0 2 8 . 0 1
2 4 . 0 1

+
+
z z
z


de modo que la secuencia resultante sea causal y no contenga nmeros 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 cdigo 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) =
1
4
1
4
| 8 . 0 | 1
5 . 0
| 8 . 0 | 1
5 . 0

+
z e
j
z e
j
j j
, | z | > 0.8

y de la tabla de transformadas obtenemos la expresin de x(n):

x(n) = ) ( | 8 . 0 | ) 5 . 0 ( ) ( | 8 . 0 | ) 5 . 0 (
4 4
n u e j n u e j
n j
n
n j
n

+ +

= ) ( 5 . 0 | 8 . 0 |
4 4 4 4
n u e e j e e
n j n j n j n j
n
1
1
]
1

'

+ +

'



= ) (
4
2
4
cos | 8 . 0 | n u
n
sin
n
n
1
]
1

,
_


+
,
_





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 funcin de respuesta en frecuencia H(e
jw
), podemos definir a la funcin H(z) en el
dominio z, denominada como la funcin del sistema. Sin embargo, a diferencia de H(e
jw
), H(z) existe para
sistemas que pueden no ser estables (en el sentido de entrada limitada salida limitada).


La funcin del sistema H(z) esta dada por:

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


n
z n h ) ( ; R
h-
< | z | < R
h+
(4.17)

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

Y(z) = H(z) X(z) :RDC
y
= RDC
h
RDC
x
(4.18)

Con la condicin de que la RDC
x
coincida con la RDC
h
. 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
x k
n b k n y a
1 0
) ( ) (
l
l
l (4.19)


la funcin del sistema H(z) puede ser fcilmente calculada. Tomando la transformada Z de ambos lados de la
igualdad, y empleando la propiedad de desplazamiento en tiempo:


Y(z) +


N
k
M
k
k
z X z b z Y z a
1 0
) ( ) (
l
l
l


H(z) =
) (
) (
1
) (
) (
1
0
z A
z B
z a
z b
z X
z Y
N
k
k
k
M

l
l
l
(4.20)

H(z)
PDF created with pdfFactory trial version www.pdffactory.com

92
=
) ... (
) ... (
N
N N
o
M M M
o
a z z
b
b
z z b
+ +
+ +



Despus de factorizar, obtenemos:
H(z) =

N
k
k
N
M N
o
p z
z z
z b
1
1
) (
) (
l
l
(4.21)

en donde las
l
z s son los ceros del sistema y las
k
p s son los polos. As, H(z) (y por lo tanto un sistema
LIT) puede ser representada en el dominio-z empleando una grfica de polos y ceros. Todo esto puede ser
usado en el diseo de filtros simples, por medio de la correcta colocacin de los polos y ceros.

Para determinar los polos y ceros de una H(z) racional, podemos usar la funcin roots en los polinomios
tanto del numerador como del denominador. Tambin es posible usar MATLAB para graficar estas races por
medio de una grfica de polos y ceros, la cual es implementada por la funcin zplane(b,a) dado el vector fila
del numerador b, y el vector fila del denominador a; en donde el smbolo "o" representa un cero y el smbolo
"x" representa un polo. Adems, la grfica en cuestin incluye un crculo 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 funcin.


Representacin de la Funcin de Transferencia.

Si la RDC de H(z) incluye un crculo unitario (z = e
jw
), entonces podemos evaluar H(z) sobre el crculo
unitario, dando como resultado una funcin de respuesta en frecuencia o funcin de transferencia H(e
jw
).
Entonces, de (4.21):
H(e
jw
) =

N
k
jw
M
jw
w M N j
o
p e
z e
e b
1
1 ) (
) (
) (
l
(4.22)
El factor (
l
z e
jw
) puede ser interpretado como un vector en el plano-z complejo, desde un cero
l
z hasta el
crculo unitario en z = e
jw
, mientras que el factor (
k
jw
p e ) puede ser interpretado como un vector desde un
polo
k
p hasta el crculo unitario en z = e
jw
. Esto se muestra en la siguiente figura.
PDF created with pdfFactory trial version www.pdffactory.com

93

En consecuencia, la magnitud de la funcin respuesta esta dada por la siguiente expresin:

| H(e
jw
) | = | b
o
|
| | ... | |
| | ... | |
1
1
N
jw jw
M
jw jw
p e p e
z e z e


(4.23)

la cual puede ser interpretada como un producto de longitudes de los vectores que van de los ceros al crculo
unitario, dividido por las longitudes de los vectores que van de los polos hasta el crculo unitario, y todo esto
ponderado por | b
o
|. Similarmente, la funcin de respuesta en fase es la siguiente.


H(e
jw
) = [ ] [ ]
4 4 4 4 4 4 3 4 4 4 4 4 4 2 1
43 42 1 3 2 1
lineal no
N
k
jw
M
k
jw
lineal constante
p e z e w M N

+ +
1 1
) ( ) ( ) ( 0 (4.24)


funcin 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 captulo anterior graficamos las respuestas en magnitud y fase implementando directamente, en
MATLAB, sus formas funcionales. Para el enfoque en el dominio-z, MATLAB, tambin, proporciona una
funcin llamada freqz para ste clculo, la cual usa la interpretacin dada anteriormente. En su forma ms
simple sta funcin 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 crculo unitario. Debemos notar que los vectores b y a son los mismos vectores que usamos en la funcin
filter o, derivados de la representacin de la ecuacin de diferencia (4.19). Una segunda forma de la funcin
freqz es la siguiente.

[H,w] = freqz(b,a,N,'whole')

la cual usa N puntos, alrededor del crculo unitario completo, para el clculo. Otra forma de sta funcin 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 continuacin nos valemos del siguiente sistema causal, representado por una ecuacin de diferencias,
para mostrar el uso de la funcin freqz:

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


(a) Nos proponemos encontrar H(z), adems de realizar un bosquejo de su grfica de polos y ceros.

La ecuacin 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) =
1
9 . 0 1
1

z
; | z | > 0.9

Esta expresin posee un polo en 0.9 y un cero en el origen. El cdigo 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 funcin zplane asume que
los polos o los ceros son escalares. La grfica resultante se muestra a continuacin:



























(b) Para graficar | H(e
jw
) | y H(e
jw
), podemos emplear (4.23) y (4.24) para determinar la magnitud y fase
de H(e
jw
). Si tomamos 100 puntos a lo largo de la mitad superior del crculo unitario, el cdigo 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
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
Diagrama de Polos y Ceros
X
0.9 0
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 grficas siguientes:



























Si estudiamos estas grficas cuidadosamente, observamos que son calculadas entre 0 w 0.99 y,
adems, se cortan en w=, lo cual es de esperarse debido a que en MATLAB la mitad inferior del crculo
unitario empieza en w=. Para superar este problema empleamos la segunda forma de la funcin 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 funcin 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, segn nos convenga. Tambin, debemos notar que
para las grficas 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 1
0
5
10
15
Frecuencia en unidades de
M
a
g
n
i
t
u
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
F
a
s
e

e
n

u
n
i
d
a
d
e
s

d
e

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

1
]
1

>


9 . 0 | | ,
9 . 0 1
1
1
z
z
=(0.9)
n
u(n)



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

H(z) =
81 . 0 9 . 0
1
2
+
+
z z
z


(a) Para el cual nos proponemos encontrar la representacin de su funcin de transferencia; de modo que
debemos ubicar los polos de la funcin, mismos que quedan en z = 0.9 t/3. En consecuencia la RDC
del sistema causal es | z | > 0.9; por lo que el crculo unitario est en la RDC, y la transformada de
Fourier discreta en tiempo, H(e
jw
), existe. As, sustituyendo z = e
jw
en H(z), obtenemos:

H(e
jw
) =
3 / 3 / 2
9 . 0 )( 9 . 0 (
1
81 . 0 9 . 0
1


+

+
+
j jw j jw
jw
jw w j
jw
e e e e
e
e e
e


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

2 1
2 1
2
2
2
81 . 0 9 . 0 1 81 . 0 9 . 0
1
) (
) (

+
+

,
_

+
+

z z
z z
z
z
z z
z
z X
z Y


realizando una multiplicacin 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 ecuacin de diferencias de segundo orden.

(c) Por ltimo, si usamos MATLAB, podemos determinar la representacin de su respuesta al impulso, y
para ello emplearemos el siguiente cdigo.

>> 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 +
1 3 / 1 3 /
| 9 . 0 | 1
9979 . 0 6173 . 0
| 9 . 0 | 1
9979 . 0 6173 . 0

+
z e
j
z e
j
j j
, | z | > 0.9

y de la tabla de transformadas obtenemos:

h(n) =
3 /
| 9 . 0 | ) 9979 . 0 6173 . 0 [( ) ( 2346 . 1
n j n
e j n

+ +

3 /
| 9 . 0 | ) 9979 . 0 6173 . 0 (
n j n
e j

+ ] u(n)
= [ ] ) ( ) 3 / ( 9958 . 1 ) 3 / cos( 2346 . 1 | 9 . 0 | ) ( 2346 . 1 n u n sin n n
n
+ +
= [ ] ) 1 ( ) 3 / ( 9958 . 1 ) 3 / cos( 2346 . 1 | 9 . 0 | + n u n sin n
n


lo cual asume que h(0) = 0.


En la siguiente figura se resumen las distintas representaciones, desarrolladas hasta aqu, para la descripcin
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
<


| ) ( | k h , por lo que, a partir de la existencia de la transformada de Fourier discreta en tiempo, sta
implica que H(e
jw
) existe, lo cual da como resultado que el crculo 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 lneas punteadas en la figura anterior existen slo si el sistema es estable.


Estabilidad de un sistema LIT en el dominio-z.

Un sistema LIT es estable si y slo si el crculo 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 algn crculo de radio R
h-
. Pero esto no es
una condicin suficiente ya que cualquier secuencia derecha tiene una RDC similar; sin embargo, cuando el
sistema es estable su causalidad es fcil de verificar.


Estabilidad de un sistema causal LIT en el dominio-z.

Un sistema causal LIT es estable si y slo si la funcin del sistema, H(z), tiene todos sus polos dentro del
crculo unitario.


Consideremos el sistema causal descrito por la ecuacin de diferencia siguiente:

y(n) = 0.81y(n - 2) + x(n) - x(n - 2) ,


sistema para el cual la RDC quedar fuera de un crculo con radio igual a la magnitud del polo ms grande;
por lo que podemos determinar su funcin H(z) si tomamos la transformada Z de ambos lados de la ecuacin,
y resolvemos para Y(z) / X(z), con lo cual obtenemos:

H(z) =
) 9 . 0 1 )( 9 . 0 1 (
1
81 . 0 1
1
1 1
2
2
2

z z
z
z
z
, | z | > 0.9


Si usamos MATLAB para generar la expansin 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) =
1 1
9 . 0 1
1
1173 . 0
9 . 0 1
1
1173 . 0 2346 . 1

z z
, | z | > 0.9

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

h(n) = ) ( ) 9 . 0 }( ) 1 ( 1 { 1173 . 0 ) ( 2346 . 1 n u n
n n
+


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

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

V(z) = H(z)U(z) =
1
]
1

1
]
1

+
+


1 1 1
1 1
1
1
) 9 . 0 1 )( 9 . 0 1 (
) 1 )( 1 (
z z z
z z
, | z | > 0.9 | z | >1

=
) 9 . 0 1 )( 9 . 0 1 (
1
1 1
1

+
+
z z
z
, | z | > 0.9



V(z) =
1 1
9 . 0 1
1
0556 . 0
9 . 0 1
1
0556 . 1

+

z z
, | 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 escaln del sistema. Es interesante notar que en el clculo de V(z) hay una
cancelacin 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 an { | z | > 0.9 } y no { | z | > 0.9 | z | > 1 = | z | > 1}; la segunda consecuencia es que la
respuesta escaln v(n) no contiene trminos estacionarios u(n).

Si ahora sustituimos z = e
jw
en la funcin H(z), tenemos:

H(e
jw
) =
w j
w j
e
e
2
2
81 . 0 1
1



a partir de la cual, usando MATLAB, podemos calcular y graficar las respuestas. El cdigo 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 grficas de respuesta en frecuencia se muestran a continuacin:





























SOLUCIN 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 solucin particular y
homognea, 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 mtodo alternativo, que involucra la transformada Z, y
mediante el cual se pueden obtener ambos tipos de solucin; adems, tal mtodo nos permitir agregar luz
sobre las respuestas transitoria y de estado estacionario. En el procesamiento digital de seales, 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 versin 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
n
z n x (4.25)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.5
1
1.5
Frecuencia en unidades de
M
a
g
n
i
t
u
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.5
0
0.5
Frecuencia en unidades de
F
a
s
e

e
n

u
n
i
d
a
d
e
s

d
e

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

=



+


k m
k m
n
n
z m x z k n x
) (
0
) ( ) (

=
k
m
m
k m
k m
z z m x z m x


+
1
]
1

+

0
)
1
) (
) ( ) (


Z
+
[x(n - k)] = x(-1) z
1-k
+ x(-2) z
2-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 ecuacin de diferencia



+
N
k
M
m
m k
n m n x b k n y a
1 0
0 ), ( ) ( 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 ecuacin de diferencia:


0 ), ( ) 2 (
2
1
) 1 (
2
3
) ( + n n x n y n y n y

en donde
) (
4
1
) ( n u n x
n

,
_

,


y sujeta a las condiciones: y(-1) = 4 y y(-2) = 10.


Tomamos la transformada Z unilateral de ambos lados de la ecuacin , y obtenemos:

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

z


Sustituyendo las condiciones iniciales, y reagrupando obtenemos,
PDF created with pdfFactory trial version www.pdffactory.com

102


) 2 1 (
4
1
1
1
2
1
2
3
1 ) (
1
1
2 1

+
+

1
]
1

+ z
z
z z z Y


2 1
1
2 1
1
2
1
2
3
1
2 1
2
1
2
3
1
4
1
1
1
) (

+
+

+
+

z z
z
z z
z
z Y (4.27)

Finalmente,
)
4
1
1 )( 1 )(
2
1
1 (
2
1
4
9
2
) (
1 1 1
2 1


+

+

z z z
z z
z Y


Aplicando la expansin en fracciones parciales, obtenemos

1
1
1
4
1
1
3
1
1
3
2
2
1
1
1
) (

z
z
z
z Y (4.28)


Ahora, si tomamos la transformada inversa, la solucin resulta en:

y(n) = ) (
4
1
3
1
3
2
2
1
n u
n n
1
1
]
1

,
_

+ +
,
_

(4.29)


Esta solucin constituye la respuesta completa de la ecuacin de diferencia, la cual puede ser expresada en
varias formas:

Partes homognea y particular:

y(n) =
43 42 1
4 4 3 4 4 2 1
Particular Parte
n
Homognea Parte
n
n u n u ) (
4
1
3
1
) (
3
2
2
1

,
_

+
1
1
]
1

+
,
_




Obviamente, la parte homognea 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) =
3 2 1
4 4 4 3 4 4 4 2 1
io Estacionar Estado al spuesta
a Transitori spuesta
n n
n u
3
2
n u
Re
Re
) ( ) (
2
1
4
1
3
1
+
1
1
]
1

,
_

+
,
_




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


Respuestas de entrada cero y de estado cero:

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

Y
ZS
(z) = H(z)X(z)
y la segunda como
Y
ZI
(z) = H(z)X
IC
(z)

donde X
IC
(z) puede ser vista como una entrada equivalente, de condicin inicial, que genera la misma
salida Y
ZI
que es determinada por las condiciones iniciales.

Para nuestro ejemplo, en particular, x
IC
(n) es

x
IC
(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) =
4 4 3 4 4 2 1 4 4 4 4 3 4 4 4 4 2 1
cero entrada la a spuesta
n
cero estado al spuesta
n n
n u n u
Re Re
) ( 2
2
1
3 ) (
3
8
2
1
2
4
1
3
1
1
1
]
1


,
_

+
1
1
]
1

+
,
_


,
_




Es claro que cada parte de la solucin completa es, en general, una funcin diferente y acenta un aspecto
diferente del anlisis del sistema.


En la seccin 2 empleamos la funcin filter para resolver ecuaciones de diferencia, dados sus coeficientes
y una entrada. Esta funcin tambin 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 condicin inicial.
PDF created with pdfFactory trial version www.pdffactory.com

104

A continuacin, presentamos el cdigo para encontrar la respuesta completa de la ecuacin 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

% Verificacin
>> 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 prctica, y especialmente para
ecuaciones de diferencia de orden grande, es tedioso determinar x
IC
(n) analticamente; por lo que MATLAB
proporciona una funcin llamada filtic, la cual esta disponible en el toolbox de procesamiento de seales,
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 funcin filtic. Por lo tanto para la
ecuacin de diferencia anterior podramos haber usado el siguiente cdigo para determinar x
IC
(n):

>> Y = [4,10];
>> xic = filtic(b,a,Y)
xic =
1 -2


Con estos nuevos elementos, consideremos la siguiente ecuacin de diferencia, misma que resolveremos
primero en forma analtica y, posteriormente, usando MATLAB:

y(n) =
3
1
[ 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

Solucin Analtica:

Aplicando la transformada Z unilateral a la ecuacin de diferencia, tenemos:

Y
+
(z) =
3
1
[ 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) =
2 1
2 1
9025 . 0 95 . 0 1
3
1
3
1
3
1


+
+ +
z z
z z
X
+
(z) +
2 1
1
9025 . 0 95 . 0 1
1383 . 2 4742 . 1

+
+
z z
z


Claramente, se observa que x
IC
(n) = [1.4742, 2.1383]. Ahora sustituyendo X
+
(z) =
2 1
1
1
5 . 0 1

z z
z
y
simplificando, obtenemos a Y
+
(z) en forma de funcin racional. Esta simplificacin y la expansin en
fracciones parciales pueden ser implementadas con MATLAB, como se muestra con el siguiente cdigo:

>> 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) =
4 3 2 1
3 2 1
9025 . 0 8525 . 1 8525 . 2 95 . 1 1
9717 . 1 4975 . 0 8308 . 0 8076 . 1


+ +
+ +
z z z z
z z z


=
1 3 / 1 3 /
1
9468 . 3 0584 . 0
1
9468 . 3 0584 . 0

+
z e
j
z e
j
j j



1 3 / 1 3 /
95 . 0 1
0311 . 2 8453 . 0
95 . 0 1
0311 . 2 8453 . 0

+
+
z e
j
z e
j
j j



Usando la tabla de pares transformados, obtenemos la siguiente expresin:

y(n) =
3 / 3 /
) 9468 . 3 0584 . 0 ( ) 9468 . 3 0584 . 0 (
n j n j
e j e j

+ +

3 / 3 /
) 95 . 0 )( 031 . 2 8453 . 0 ( ) 95 . 0 )( 031 . 2 8453 . 0 (
n j n n j n
e j e j

+ + +

= ) 3 / ( 8937 . 7 ) 3 / cos( 1169 . 0 n sin n +
[ ] ) 3 / ( 0623 . 4 ) 3 / cos( 6906 . 1 ) 95 . 0 ( n sin n
n
+ , n 0


Los primeros dos trminos de y(n) corresponden a la respuesta de estado estacionario, as como tambin a la
respuesta particular, mientras que los dos ltimos trminos son los trminos de la respuesta transitoria (y
respuesta homognea).



Solucin usando MATLAB:

Aqu necesitamos la funcin filtic, que fue usada para determinar la secuencia x
IC
(n). El siguiente cdigo
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

% Verificacin
>> 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 representacin de las seales 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 representacin en el dominio de la frecuencia () para secuencias absolutamente sumables,
mientras que el segundo enfoque proporciona una representacin en el dominio de la frecuencia (z) para
secuencias arbitrarias. Estas transformadas tienen dos caractersticas en comn: la primera de ellas es que
ambas estn definidas para secuencias de longitud infinita; la segunda caracterstica, y la ms importante, es
que son funciones de variables continuas ( z), por lo que, desde el punto de vista del clculo numrico,
stas caractersticas no resultan del todo convenientes, debido a que implican la evaluacin 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 clculos exactos, lo cual supone que la transformada de Fourier discreta en tiempo y la transformada-z
no son transformadas que puedan ser calculadas numricamente.

De este modo, pondremos nuestra atencin en una transformada que pueda ser calculada numricamente,
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 crculo unitario). Para el desarrollo de sta transformada,
comenzamos analizando secuencias peridicas, supuesto el conocimiento de que una funcin (o secuencia)
peridica se puede representar por una combinacin lineal de exponenciales complejas relacionadas
armnicamente (lo cual es una forma de muestreo), lo que da lugar a la representacin de las Series Discretas
de Fourier (o SDF). Una extensin de estas SDF a secuencias de duracin 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 numricamente. Puesto que el clculo numrico de la TDF
para secuencias largas consume mucho tiempo se han desarrollado varios algoritmos para realizar el clculo
eficientemente, a los cuales, genricamente, se les conoce como Transformada Rpida de Fourier (o FFT,
Fast Fourier Transform).



SERIES DISCRETAS DE FOURIER


Anteriormente se defini la secuencia peridica x
~
(n), la cual satisface la condicin

) (
~
) (
~
kN n x n x + , n, k (5.1)

en donde N es el periodo fundamental de la secuencia. Sabemos que las funciones peridicas pueden ser
sintetizadas como una combinacin lineal de exponenciales complejas cuyas frecuencias son mltiplos (o
armnicos) de la frecuencia fundamental (la cual en nuestro caso es 2/N). Tambin, a partir de la
periodicidad de la transformada de Fourier discreta en tiempo, en el dominio de la frecuencia, concluimos que
existe un nmero finito de armnicos, para las frecuencias

{ k
N
2
, k = 0, 1, ... , N - 1}
SECCIN
5
PDF created with pdfFactory trial version www.pdffactory.com

110

Por tanto, una secuencia peridica x
~
(n) se puede expresar como

x
~
(n) =

1
0
2
) (
~ 1
N
k
kn
N
j
e k X
N
, n = 0, t1, ... , (5.2)

en donde { X
~
(k), k = 0, t1, ... , } son llamados coeficientes de las series discretas de Fourier, los cuales
estn dados por
X
~
(k) =

1
0
2
) (
~
N
n
nk
N
j
e n x , k = 0, t1, ... , (5.3)

Es de notar que X
~
(k) es en s misma una secuencia peridica 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 representacin de las series discretas de Fourier de
secuencias peridicas. Si hacemos W
N
=
N
j
e

2
para denotar al trmino de la exponencial compleja, podemos
expresarlas de la siguiente forma:


X
~
(k) = SDF[ ] ) (
~
n x =

1
0
) (
~
N
n
nk
N
W n x : Ecuacin de Anlisis SDF (Directa)
x
~
(n) = SDFI [ ] ) (
~
k X =

1
0
) (
~ 1
N
k
nk
N
W k X
N
: Ecuacin de Sntesis SDF (Inversa)
(5.5)
A continuacin hacemos uso de la siguiente secuencia peridica (en tiempo) para encontrar la representacin
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 W
4
=
4
2
j
e = -j. Con lo
que obtenemos la siguiente expresin

X
~
(k) =

3
0
4
) (
~
n
nk
W n x , k = 0, t1, t2, ...

Por lo que:

X
~
(0) =


3
0
0
4
) (
~ n
W n x =

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

PDF created with pdfFactory trial version www.pdffactory.com

111
X
~
(1) =

3
0
4
) (
~ n
W n x =


3
0
) )( (
~ n
j n x = ( -2 + 2j )

X
~
(2) =

3
0
2
4
) (
~ n
W n x =


3
0
2
) )( (
~ n
j n x = 2

y, X
~
(3) =

3
0
3
4
) (
~ n
W n x =


3
0
3
) )( (
~ n
j n x = ( -2 - 2j )

Un anlisis cuidadoso de (5.5) revela que la SDF es una representacin que puede ser calculada
numricamente 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 podramos hacer uso de otro ciclo for ... end, dando como resultado una
implementacin con dos ciclos for ... end anidados, lo cual es claramente ineficiente en MATLAB, donde
una implementacin ms eficiente podra obtenerse con el uso de una multiplicacin 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
x X
~
~
N
W
(5.6)
X
~ 1
~ *
N
N
W x
en donde la matriz W
N
esta dada por
W
N
= [ ]
1 , 0 N n k
kn
N
W =

1
1
1
1
]
1

n
N
N
N
N
N
N N
W W
W W
k
2
) 1 ( ) 1 (
) 1 ( 1
1
1
1 1 1
L
M O M M
L
L
(5.7)

Esta matriz W
N
es una matriz cuadrada y es llamada matriz de la SDF. Todos estos conceptos los reunimos
en la siguiente funcin, 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 seal periodica sobre 0 <= n <= N-1
% N = Periodo fundamental de xn
%
n = [0:1:N-1]; % vector rengln para n
k = [0:1:N-1]; % vector rengln 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 rengln para los coeficientes de la SDF
PDF created with pdfFactory trial version www.pdffactory.com

112

Para hacer uso de nuestra nueva funcin podemos resolver el ejemplo anterior, como se muestra a
continuacin:

>> 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 ecuacin de sntesis mediante la funcin 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 implementacin de (5.5) en MATLAB, aunque en el aspecto computacional no lo son
necesariamente, en especial para N grandes.


Para familiarizarnos ms con nuestras nuevas funciones, hacemos uso de la siguiente secuencia peridica (la
cual corresponde a una onda cuadrada), para realizar su anlisis:


x
~
(n) = ... , 2 , 1 , 0 ;
1 ) 1 ( , 0
1 , 1
m
- N m n L mN
- L mN n mN
t t

'

+ +
+



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 peridica con la que trataremos:

%Forma de la secuencia peridica
>> 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 seal peridica 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 rengln para n
k = [0:1:N-1]; % vector rengln 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 rengln 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
x
t
i
l
d
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 grfica es la siguiente:















a) La expresin para | X
~
(k) |, en trminos de L y N, resulta del uso de la ecuacin (5.3),

X
~
(k) =
n
L
n
k
N
j
L
n
nk
N
j
N
n
nk
N
j
e e e n x

,
_


1
0
2
1
0
2
1
0
2
) (
~


=

'

t t


contrario lo de
e
e
N N k L
N k j
N Lk j
,
1
1
... , 2 , , 0 ,
/ 2
/ 2


Lo cual resulta de la formula para una serie geomtrica. sta ltima expresin puede simplificarse a


N k j N k j
N Lk j N Lk j
N k j
N Lk j
N k j
N Lk j
e e
e e
e
e
e
e
/ /
/ /
/
/
/ 2
/ 2
1
1







=
) / (
) / (
/ ) 1 (
N k sin
N kL sin
e
N k L j





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

'

t t

contrario lo de
N k sin
N kL sin
N N k L
k X
,
) / (
) / (
... , 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 seal cuadrada con cuatro diferentes ciclos de trabajo. El cdigo 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 grficas resultantes se muestran a continuacin:

PDF created with pdfFactory trial version www.pdffactory.com

115
























Ya que X
~
(k) es peridica, las grficas son mostradas de -N/2 a N/2.


Podemos hacer varias observaciones interesantes, a partir de las cuatro grficas 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 mltiplos de
N/L, los cuales corresponden al reciproco del ciclo de trabajo para cada uno de los casos.



Relacin con la Transformada-z

Consideremos una secuencia x(n) de duracin finita N, tal que

x(n) =

'

contrario lo de
N n cero No
, 0
1 0 ,
, (5.8)

podemos encontrar su transformada-z:

X(z) =

1
0
) (
N
n
n
z n x (5.9)

S construimos una secuencia peridica x
~
(n) , repitiendo peridicamente x(n) con un periodo N, tenemos que


x(n) =

'

contrario lo de
N n n x
, 0
1 0 ), (
~
, (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
X
t
i
l
d
e
(
k
)
L=5, N=20
-20 -10 0 10 20
0
1
2
3
4
5
k
X
t
i
l
d
e
(
k
)
L=5, N=40
-20 0 20
0
1
2
3
4
5
k
X
t
i
l
d
e
(
k
)
L=5, N=60
-20 0 20
0
2
4
6
k
X
t
i
l
d
e
(
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) =
n
N
n
k
N
j
N
n
nk
N
j
e n x e n x

1
]
1

1
0
2
1
0
2
) ( ) (
~
(5.11)

y al comparar con (5.9), tenemos que

X
~
(k) =
k
N
j
e z
z X

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 crculo unitario.



Relacin con la TFDT

Ya que x(n) en (5.8) es de duracin finita y de longitud N, y tambin es absolutamente sumable, entonces su
TFDT existe, y esta dada por:

X(e
j
) =

1
0
1
0
) (
~
) (
N
n
n j
N
n
n j
e n x e n x (5.13)

Comparando (5.13) con (5.11), tenemos que

X
~
(k) =
k
N
j
e X

2
) ( (5.14)

y asumiendo que

1
=
N
2
y
k
=
N
2
k = k
1



entonces la SDF X(k) = ) ( ) (
1

jk j
e X e X
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 representacin
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, tambin llamado resolucin de frecuencia debido a que es un indicador de que tan
prximas estn 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 peridica y de duracin finita, y para la que deseamos calcular su transformada de
Fourier discreta en tiempo, X(e
j
), como se muestra a continuacin:

X(e
j
) =



+ +

3 2
3 2 ) (
j j j
n
n j
e e e e n x

S ahora muestreamos a X(e
j
) en k
1
=
4
2
k , para valores de k = 0, 1, 2, 3, y usamos

X
~
(k) =

3
0
4
) (
~
n
nk
W n x , k = 0, t1, t2, ...

Los resultados sern:

X(e
j0
) = 1 + 2 + 3 = 6 = X
~
( 0 )
X(e
j2 / 4
) = e
-j2 / 4
+ 2e
-j4 / 4
+ 3e
-j6 / 4
= -2 + 2j = X
~
( 1 )
X(e
j4 / 4
) = e
-j4 / 4
+ 2e
-j8 / 4
+ 3e
-j12 / 4
= 2 = X
~
( 2 )
X(e
j6 / 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 duracin finita; tenemos que su
transformada-z esta dada por:

X(z) =

m
m
z m x ) (

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

X
~
(k) =
k
N
j
e z
z X

2
) ( , k = 0, t1, t2, ... (5.15)

=


m
km
N
m
km
N
j
W m x e m x ) ( ) (
2


la cual es peridica con periodo N. Finalmente, podemos calcular la SDFI de X
~
(k),
PDF created with pdfFactory trial version www.pdffactory.com

118

x
~
(n) = SDFI [ ] ) (
~
k X


la cual tambin es peridica con periodo N. Claramente, debe haber una relacin entre la x(n) arbitraria y la
x
~
(n) peridica, lo cual es una cuestin importante. Adems, debido a que debemos tratar con un nmero
finito de muestras de X(z) alrededor del crculo unitario, debemos conocer el efecto de tal muestreo sobre la
secuencia en el dominio del tiempo, lo cual es fcil de obtener mediante el siguiente procedimiento:

x
~
(n) =

1
0
) (
~ 1
N
k
kn
N
W k X
N
( de (5.2) )

=

'

1
0
) (
1
N
k
kn
N
m
km
N
W W m x
N
( de (5.15) )



x
~
(n) =


'

r m
N
m n k
N
m
rn m n m x
contrario o l de
rN m n
W
N
m x ) ( ) (
, 0
, 1
1
) (
1
0
) (
4 4 3 4 4 2 1


=

r m
rn) - m - (n x(m)


x
~
(n) =

r
rN n x ) ( = ... + x(n + N) + x(n) + x(n - N) + ... (5.16)

lo cual significa que cuando muestreamos a X(z) sobre el crculo unitario, obtenemos una secuencia peridica
en el dominio del tiempo, la cual es una combinacin lineal de la x(n) original y sus infinitas replicas, cada
una desplazada por mltiplos de t 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 crculo 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 seccin anterior tenemos que la transformada-z de
x(n) es:

X(z) =
7 . 0 7 . 0 1
1
1


z
z
z
, |z| > 0.7

Podemos usar MATLAB para implementar la operacin de muestreo

X
~
(k) =
N k j
e z
z X
/ 2
) (

, k = 0, t1, t2, ...


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 cdigo 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 peridica
>> 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 grficas resultantes se muestran a continuacin, 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 pequeo como para no observar
una cantidad apreciable de traslapamiento; desde luego, esta informacin es de gran utilidad para el
truncamiento de una secuencia de duracin infinita antes de tomar su transformada.

Regresemos a nuestra discusin 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 seramos 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) R
N
(n) = x
~
(n)

'

contrario lo de
N n
, 0
0 , 1
,

donde R
N
(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 duracin finita) para [0, N-1], entonces N muestras de X(z)
sobre el crculo unitario determinan a X(z) para toda z.


Para ejemplificar el muestreo y la reconstruccin en el dominio-z haremos uso de la secuencia

x
1
(n) = {6, 5, 4, 3, 2, 1}

cuya TFDT, X
1
(e
j
), es muestreada en
0 10 20 30 40
0
0.5
1
1.5
x
t
i
l
d
e
(
n
)
N=5
0 10 20 30 40
0
0.5
1
1.5
x
t
i
l
d
e
(
n
)
N=10
0 10 20 30 40
0
0.5
1
1.5
n
x
t
i
l
d
e
(
n
)
N=20
0 10 20 30 40
0
0.5
1
1.5
n
x
t
i
l
d
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, t1, t2, t3, ...

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 frmula (5.16), por lo que:
2
~
x (n) =

r
r n x ) 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, ... }



Frmula de Reconstruccin

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) R
N
(n)]
= Z[SDFI{
3 2 1
) (
) (
~
z X de muestras
k X } R
N
(n)]


Este planteamiento da lugar a la frmula de reconstruccin en el dominio-z.

X(z) =

1
0
1
0
) (
~
) (
N
n
N
n
z n x z n x

=

'

1
0
1
0
) (
~ 1
N
n
N
kn
N
z W k X
N


=

'

1
0
1
0
) (
~ 1
N
k
n
N
kn
N
z W k X
N


=

'

1
0
1
1
0
) ( ) (
~ 1
N
k
n
N
k
N
z W k X
N


=

'

1
0
1
1
1
) (
~ 1
N
k
k
N
N kN
N
z W
z W
k X
N


puesto que 1
kN
N
W , tenemos que
PDF created with pdfFactory trial version www.pdffactory.com

122

X(z) =

1
0
1
1
) (
~
1
N
k
k
N
N
z W
k X
N
z
(5.17)


Frmula de interpolacin para la TFDT

La frmula de reconstruccin en (5.17) puede ser especialmente trabajada para la transformada de Fourier
discreta en tiempo, evalundola sobre el crculo unitario z = e
j
, con lo que obtenemos

X(e
j
) =

1
0
/ 2
1
) (
~
1
N
k
j N k j
N j
e e
k X
N
e


=
{ }

1
0
/ 2
1
1
) (
~
N
k
j N k j
N j
e e N
e
k X

si consideramos que


{ }

'




)
2
(
)
2
(
/ 2
1
1
1
1
N
k
j
N
N
k
j
j N k j
N j
e N
e
e e N
e


=

'

1
]
1

,
_



1
]
1

,
_


2
1 2
2
2
)
2
(
2
1
)
2
(
2
N
k
sin N
N
N
k
sin
e
e
N
k
j
N
k N
j


y asumida la interpolacin polinomial siguiente

)
2
1
(
)
2
(
)
2
(
) (


N
j
e
sin N
N
sin
(5.18)

Entonces
X(e
j
) =

,
_



1
0
2
) (
~
N
k
N
k
k X (5.19)

sta es la frmula de interpolacin TFDT para reconstruir X(e
j
) a partir de sus muestras X
~
(k). Ya que
(0)=1, tenemos que X(e
j2k/N
) = X
~
(k), lo que significa que la interpolacin es exacta en los puntos de
muestreo. Ahora si recordamos la frmula de interpolacin en el dominio del tiempo (3.33) para seales
analgicas:
x
a
(t) = [ ]

n
s s
nT t F sinc n x ) ( ) ( (5.20)
PDF created with pdfFactory trial version www.pdffactory.com

123

y la comparamos con la frmula de interpolacin para la TFDT (5.19) observamos que son similares. Sin
embargo, existen algunas diferencias: la primera de ellas es que la frmula en el dominio del tiempo (5.20)
reconstruye una seal analgica arbitraria no peridica, mientras que la frmula en el dominio de la
frecuencia (5.19) nos proporciona una forma de onda peridica. La segunda diferencia es que, en (5.19)
usamos una funcin de interpolacin de la forma

sinx N
Nx sin ) (


en lugar de nuestra ya conocida funcin sinc, de la forma
x
sinx
. Por esta razn, la funcin () es referida,
algunas veces, como funcin sinc digital, misma que es peridica.


La frmula de interpolacin (5.19) sufre la misma suerte que (5.20) cuando es implementarla en la prctica,
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(e
j
), a partir de sus muestras calculadas, X
~
(k).
En MATLAB, tendramos 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 funcin de interpolacin mediante spline cbico (la
cual se emple para implementar (5.20) en la seccin 3) como una aproximacin eficiente a (5.19). Sin
embargo, existe un mtodo ms 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 numricamente la transformada
de Fourier discreta en tiempo, adems de que su uso nos alerta de un posible problema de traslapamiento en el
dominio del tiempo. Los resultados matemticos dictan que el muestreo de la transformada de Fourier discreta
en tiempo resulta en una secuencia peridica x
~
(n), aunque la mayora de las seales en la prctica son no
peridicas. Ahora la cuestin es cmo podemos desarrollar un mtodo que nos permita calcular
numricamente la representacin de Fourier para dichas seales. Tericamente, podemos considerar este
problema definiendo una seal peridica cuyo perido primario corresponde al de la seal de duracin finita
y, entonces, usar la SDF sobre esta seal peridica. Con esto, prcticamente, se define una nueva
transformada denominada Transformada Discreta de Fourier (TDF), la cual corresponde a un periodo
primario de la SDF.


A continuacin describimos el procedimiento para encontrar la TDF de una secuencia:

En primer lugar, definimos una secuencia x(n), de duracin finita, constituida por N muestras sobre 0 n N-
1, quedando como una secuencia de N-puntos. A continuacin, asumimos a x
~
(n) como la seal peridica de
periodo N, creada con los N-puntos de la secuencia x(n); entonces de (5.19)

x
~
(n) =


+
r
rN n x ) (

Si empleamos la operacin modulo-N sobre el argumento de esta expresin, 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 operacin es la siguiente: si el argumento n esta entre 0 y N-1, entonces
la expresin se queda tal cual; de lo contrario se suman o restan mltiplos de N, hasta que el resultado quede
entre 0 y N-1, debiendo notarse que (5.21) es valida slo si la longitud de x(n) es menor o igual que N, por lo
que se usar la siguiente notacin para denotar la operacin 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
(extensin peridica)
(5.23)
x(n) = x
~
(n)R
N
(n) (operacin ventana)


Con la ayuda de la funcin rem(n, N) de MATLAB, la cual obtiene el residuo de dividir n entre N,
podemos implementar la operacin modulo-N cuando n 0. (Cuando n < 0, requerimos modificar el resultado
para obtener los valores correctos ). El cdigo es el siguiente:












En esta funcin "n" puede ser cualquier arreglo de enteros, y el arreglo "m" es en donde se encontrarn los
correspondientes valores de la operacin 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(e
j
) de la secuencia x(n) pueden reconstruir de manera nica a
X(e
j
); estas N muestras alrededor del crculo unitario son llamadas coeficientes de la transformada discreta
de Fourier. Ahora, s X
~
(k) = SDF x
~
(n), la cual es una secuencia peridica (y por lo tanto de duracin
infinita), tenemos que su periodo primario constituye la transformada discreta de Fourier, que es de duracin
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
N k k X
, 0
1 0 ), (
~
= ) (
~
k X R
N
(k)



X(k) =

1
0
) (
N
n
nk
N
W n x , 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 tambin 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 slo la SDF X
~
(k) est definida, lo cual es debido a que
naturalmente X
~
(k) es la extensin peridica de X(k). Finalmente, X(k) = X(k) R
N
(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) R
N
(n)


x(n) =

1
0
) (
1
N
k
kn
N
W k X
N
, 0 n N-1 (5.25)


en donde, una vez ms, x(n) no esta definida fuera de 0 n N-1, y su extensin fuera de ste rango es x
~
(n).


De las discusiones anteriores observamos que la SDF es prcticamente equivalente a la TDF cuando
0 n N-1. Por lo tanto, la implementacin 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 = W
N
x

x = X W
*
1
N
N
(5.26)


en donde W
N
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 clculos de la transformada discreta de Fourier. Los cdigos 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 duracin finita con N-puntos
% N = Longitud de la TDF
%
n = [0:1:N-1]; % vector rengln para n
k = [0:1:N-1]; % vector rengln 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 rengln para los coeficientes de la TDF
PDF created with pdfFactory trial version www.pdffactory.com

126



















Para poner en prctica estas nuevas funciones, haremos uso de la siguiente secuencia x(n) con 4-puntos, dada
por:

x(n) =

'

forma otra de
n
, 0
3 0 , 1



a) Procedemos a calcular la transformada de Fourier discreta en tiempo X(e
j
) para, posteriormente, graficar
su magnitud y fase. As, tenemos que la transformada de Fourier discreta en tiempo esta dada por


X(e
j
) =


3
0
) (
n j
e n x = 1 + e
-j
+ e
-j2
+ e
-j3


=
2 / 3
4
) 2 / (
) 2 (
1
1


j
j
j
e
sin
sin
e
e


por lo tanto

| X(e
j
) | =
) 2 / (
) 2 (

sin
sin

y

X(e
j
) =

'

<

>

0
) 2 / (
) 2 (
,
2
3
0
) 2 / (
) 2 (
,
2
3
sin
sin
cuando
sin
sin
cuando



el cdigo que nos permite obtener las grficas 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 rengln para n
k = [0:1:N-1]; % vector rengln 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 rengln 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 grficas resultantes son:


























b) Ahora, determinamos la TDF de la secuencia x(n), donde los cuatro puntos de la transformada los
representamos por X
4
(k). Entonces

X
4
(k) =

3
0
4
) (
n
nk
W n x ; k = 0, 1, 2, 3; W
4
= e
-j2/4
= -j

El cdigo 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 2
0
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
G
r
a
d
o
s
Fase de la TFDT
PDF created with pdfFactory trial version www.pdffactory.com

128

con esto tenemos que

X
4
(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 podran ser ignorados. El siguiente cdigo 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 grficas 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
G
r
a
d
o
s
Fase de la TDF: N=4
PDF created with pdfFactory trial version www.pdffactory.com

129

Las lneas discontinuas en las grficas representan a X(e
j
) para propsitos de comparacin. Adems podemos
observar que X
4
proporciona correctamente 4 muestras de X(e
j
), 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 extensin peridica es

x
~
(n) = 1, n

la cual representa una seal constante. Esto es reflejado por la TDF X
4
(k), la cual tiene una muestra distinta de
cero en k=0 (o =0) y no tiene valores en otras frecuencias.

A continuacin mostramos cmo podemos obtener una TFDT X(e
j
) con mayor nmero de muestras. En
primer lugar, podramos muestrear en ms frecuencias; es decir, podramos incrementar N; por ejemplo,
podramos tomar dos veces el nmero 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 continuacin:

x(n) = {1, 1, 1, 1, 0, 0, 0, 0}


Esta operacin de agregar ceros es llamada operacin de relleno y es muy importante, debido a que es
necesaria en la prctica para obtener un espectro de mayor definicin, como veremos a continuacin.

Dada la TDF X
8
(k) con 8-puntos, entonces

X
8
(k) =

7
0
8
) (
n
nk
W n x ; k = 0, 1, . . . , 7; W
8
= e
-j/4


En este caso la resolucin de frecuencia es
1
= 2 /8 = /4.
El cdigo con el que pudimos determinar la magnitud y fase de X
8
(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

X
8
(k) = { 4, 2.6131e
-j67.5
, 0, 1.0824e
-j22.5
, 0, 1.0824e
j22.5
, 0, 2.6131e
j67.5
}

El siguiente cdigo nos permiti construir las grficas de magnitud y fase.

>> x = [1,1,1,1];
%
% TFDT para cuestiones de comparacin
>> 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 grficas son las siguientes:



























Ahora, si nos vamos ms 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 resolucin de frecuencia es
1
= 2 /16 = /8 y W
16
= e
-j/ 8
. Por lo tanto obtenemos un espectro
todava ms definido, con muestras espectrales separadas por /8. El siguiente cdigo nos permite observar la
forma de X
16
(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
G
r
a
d
o
s
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 comparacin
>> 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 grficas 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
G
r
a
d
o
s
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 operacin en la cual ms ceros son agregados a la secuencia original, dando
como resultado una TDF ms larga, la cual proporciona un espacio entre muestras ms cerrado en la
transformada de Fourier discreta en tiempo. Como puede observarse, el rellenado con ceros es
implementado usando la funcin zeros de MATLAB.

2. En el ejemplo con N=4, tuvimos que graficar la transformada de Fourier discreta en tiempo X(e
j
) de x(n)
debido a que, x(n) tuvo solamente 4 muestras distintas de cero. Tambin podramos haber usado la
frmula de interpolacin (5.19) sobre X
4
(k) para obtener X(e
j
). Sin embargo, en la prctica, es ms fcil
obtener X
8
(k) y X
16
(k), y as sucesivamente, simplemente sustituyendo los valores de X(e
j
) en lugar de
usar la frmula de interpolacin.

3. El rellenado con ceros nos entrega un espectro de mayor definicin (ms frecuencias), adems de que
proporciona una mejor visualizacin de las grficas.

4. Para conseguir un espectro de alta resolucin, es necesario obtener ms datos a partir del experimento u
observaciones.


Para ilustrar la diferencia entre el espectro de alta densidad y el espectro de alta resolucin nos valemos de la
siguiente secuencia:

x(n) = cos(0.48n) + cos(0.52n)


Ahora determinaremos su espectro basado en un nmero 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 podramos determinar analticamente la transformada de Fourier discreta en
tiempo, pero MATLAB es un buen vehculo para estudiar estos problemas. A si que, en primer lugar
determinaremos la TDF para los 10 puntos de x(n), para as obtener una estimacin de su transformada de
Fourier discreta en tiempo. El cdigo 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('seal 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 grficas 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 cdigo 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('seal 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 grficas 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 1
0
2
4
6
8
10
Muestras 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 slo tiene dos frecuencias. Por lo que podemos concluir que el rellenado con
ceros proporciona la versin 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 informacin espectral. El cdigo es el siguiente:


>> figure(3);
>> subplot(1,1,1)
>> subplot(2,1,1);stem(n,x);
>> title('seal 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 grficas 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 1
0
2
4
6
8
10
Magnitud 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 estn muy juntas una de la otra. Con esto queda
demostrado el espectro de alta resolucin de x(n). Cabe notar que el rellenado con ceros para la secuencia con
100 puntos dara como resultado una versin suavizada del espectro obtenido, pero no revelara nueva
informacin.




PROPIEDADES DE LA TRANSFORMADA
DISCRETA DE FOURIER


Las propiedades de la TDF son derivadas de las propiedades de la SDF debido a que matemticamente la
SDF es la representacin valida. Ahora describimos algunas de las propiedades ms 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[ ax
1
(n) + bx
2
(n) ] = a TDF[x
1
(n)] + b TDF[x
2
(n)] (5.27)

Si x
1
(n) y x
2
(n) tienen diferente duracin, esto es que, existen secuencias con N
1
-puntos y N
2
-puntos
respectivamente, entonces se elige N
3
= max(N
1
, N
2
) y se procede a tomar la TDF de los N
3
-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 1
0
20
40
60
Magnitud 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) podra no ser una secuencia con N-
puntos, y entonces no sera posible calcular su TDF. Por tal motivo se usa la operacin modulo-N sobre el
argumento (-n), dando como resultado la siguiente definicin para la operacin de desdoblamiento

x((-n))
N
=

'

1 1 ), (
0 ), 0 (
N n n N x
n x
(5.28)

En donde una forma de visualizar esto es imaginando que la secuencia x(n) es "enrollada" (wrapped)
alrededor de un crculo en la direccin 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
=

'

1 1 ), (
0 ), 0 (
N k k N x
k 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 cdigo 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 grficas 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

m
o
d

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

>> 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 grficas resultantes que verifican la propiedad se muestran a continuacin:

























3. Conjugacin

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
50
TDF[x(n)] Parte Real
k
0 5 10
-20
-10
0
10
20
TDF[x(n)] Parte Imaginaria
k
0 5 10
0
10
20
30
40
50
TDF[x((-n))11] Parte Real
k
0 5 10
-20
-10
0
10
20
TDF[x((-n))11] Parte Imaginaria
k
<< Propiedad de Plegamiento Circular >>
PDF created with pdfFactory trial version www.pdffactory.com

138

4. Propiedades de Simetra 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 simetra es llamada simetra 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
, 0
3 0 , 1


x(n) = {1, 1, 1, 1, 0, 0, 0, 0}


antes vistas, tenemos que satisfacen las anteriores simetras circulares, pero estas simetras son
diferentes de las ya conocidas simetras par e impar. Para visualizarlo, imaginemos que las muestras de la
TDF son colocadas alrededor de un crculo de tal forma que los ndices k=0 y k=N se sobre pongan; entonces
las muestras sern simtricas con respecto a k=0, lo cual justifica el nombre de simetra circular.

(ii) La correspondiente simetra para los coeficientes de la SDF es llamada simetra peridica conjugada.

(iii) Ya que las TDFs tienen simetra, entonces es necesario calcular X(k) solamente para

k = 0, 1, . . . ,
2
N
; N par
o para
k = 0, 1, . . . ,
2
1 N
; N impar

con esto obtenemos un ahorro de alrededor del 50% en clculos, 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 nmero 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 nmero real. Adems, si N es par, entonces N/2 es tambin un entero. Entonces de (5.32)

PDF created with pdfFactory trial version www.pdffactory.com

139

,
_

,
_

,
_

,
_

2 2 2
* *
N
X
N
X
N
X
N


lo cual significa que el componente par k=N/2 es tambin 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 seales reales tambin pueden ser descompuestas en sus componentes par e impar, x
p
(n) y x
i
(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 estn definidos por

x
pc
(n) = [ ]
[ ]

'

+
1 1 , ) ( ) (
2
1
0 ), 0 (
)) (( ) (
2
1
N n n N x n x
n x
n x n x
N


x
ic
(n) = [ ]
[ ]

'


1 1 , ) ( ) (
2
1
0 , 0
)) (( ) (
2
1
N n n N x n x
n
n x n x
N

(5.33)
entonces

TDF[x
pc
(n)] = Re [X(k)] = Re[X((-k))
N
]
(5.34)
TDF[x
ic
(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 tambin real y par-
circular. Por lo tanto solamente los primero 0 n N/2 coeficientes son necesarios para obtener la
representacin completa.

Usando (5.33) es fcil desarrollar una funcin que nos permita descomponer una secuencia con N-puntos en
sus componentes par-circular e impar-circular. As, con la ayuda de la funcin mod desarrollamos nuestra
funcin ParImparCir, la cual fcilmente implementa la operacin n MOD N. El cdigo es el siguiente:















function [xpc, xic] = ParImparCir(x)
% Descomposicion de una seal 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 continuacin haciendo uso de la secuencia x(n) = 10 (0.8)
n
, 0 n 10 procederemos a descomponerla en
sus componentes x
pc
(n) y x
ic
(n) los cuales tambin sern graficados. Posteriormente verificaremos la
propiedad (5.34).


a) El siguiente cdigo descompone a la secuencia x(n) en sus componentes x
pc
(n) y x
ic
(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 grficas resultantes se muestra a continuacin, en las cuales se puede apreciar los componentes
circularmente simtricos de x(n).


























b) Nos valemos del siguiente cdigo 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
x
p
c
(
n
)
0 1 2 3 4 5 6 7 8 9 10
-4
-2
0
2
4
Componente Impar-Circular
n
x
i
c
(
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 Simetra de la TDF >>');

Las grficas resultantes son las siguientes:




























Se puede observar que la TDF de x
pc
(n) es igual a la parte real de X(k), y la TDF de x
ic
(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 direccin, entonces el resultado no es ms grande
que 0 n N-1 . Por lo tanto primero convertimos a x(n) en su respectiva extensin peridica 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
50
TDF[x(n)] Parte Real
k
0 5 10
-20
-10
0
10
20
TDF[x(n)] Parte Imaginaria
k
0 5 10
0
10
20
30
40
50
TDF[xpc(n)]
k
0 5 10
-20
-10
0
10
20
TDF[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 peridico de x
~
(n), desplazamiento que es convertido en una secuencia de
N-puntos, obteniendo as la siguiente secuencia


x
~
(n - m) R
N
(n) = x((n - m))
N
R
N
(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 crculo; si ahora rotamos el crculo por k muestras y desenrrollamos la
secuencia desde 0 n N-1, su TDF queda dada por


TDF[x((n - m))
N
R
N
(n)] = ) (k X W
km
N
(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
R
11
(n) , es decir, realizaremos un
desplazamiento circular de 4 muestras hacia la izquierda. Para lograrlo hacemos uso de un enfoque grfico en
el que se muestra paso a paso esta operacin.

Tal enfoque muestra la extensin peridica 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 cdigo 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('Extensin Peridica')
>> 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 Peridico')
>> 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('<< Interpretacin Grfica del Desplazamiento Circular, N=11 >>');

Las grficas resultantes son :



PDF created with pdfFactory trial version www.pdffactory.com

143























La grfica superior izquierda muestras a x(n), la grfica superior derecha muestra a x
~
(n), la grfica inferior
izquierda muestras a x
~
(n + 4) y finalmente la grfica inferior derecha muestras a x((n + 4))
11
R
11
(n). Aqu
podemos notar como el desplazamiento provoca que las muestras salgan de la ventana [0, N-1] en una
direccin, y reaparezcan en la direccin 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
R
15
(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 grfico. 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 cdigo 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('Extensin Peridica')
>> 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 Peridico')
>> 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
4
6
8
10
Desplazamiento Peri dico
n
-5 0 5 10 15
0
2
4
6
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('<< Interpretacin Grfica del Desplazamiento Circular, N=15 >>');

Las grficas 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 operacin mdulo-N sobre el argumento (n-m) en el dominio del tiempo. Esto se ve reflejado en la
funcin DespCir cuyo cdigo se muestra a continuacin:





















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 = Tamao 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
n
0 10 20
0
2
4
6
8
10
Extensi n Peri dica
n
0 10 20
0
2
4
6
8
10
Desplazamiento Peri dico
n
0 10 20
0
2
4
6
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 implementacin es empleando la propiedad 5.37 en el dominio de la frecuencia; pero
para nuestro fines de estudio nos enfocaremos en la primera implementacin; la cual desarrollaremos
sirvindonos 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 cdigo 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 grficas 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[ ] ) ( )) (( ) ( k R k X n x W
N N
n
N
l
l

(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
o
d

1
5
)
PDF created with pdfFactory trial version www.pdffactory.com

146

7. Convolucin Circular

Ya que una convolucin lineal entre dos secuencias de N-puntos resultar en una secuencia ms grande,
tendrmos que restringir nuestro intervalo a 0 n N-1. Por lo tanto, en lugar de un desplazamiento lineal
deberamos considerar al desplazamiento circular. En base a esto podemos decir que una operacin de
convolucin que contiene un desplazamiento circular es llamada convolucin circular, y esta dada por

x
1
(n) (N) x
2
(n) =

1
0
2 1
)) (( ) (
N
m
N
m n x n x , 0 n N-1 (5.39)

en donde esta convolucin circular es tambin una secuencia con N-puntos, y adems, tiene una estructura
similar a la de una convolucin lineal. Las diferencias que poseen se encuentran en los lmites de la sumatoria
y en el desplazamiento circular de N-puntos. Y puesto que la convolucin circular depende de N, tambin es
llamada convolucin circular de N-puntos, por lo que el uso de la notacin (N) es apropiado. Adems, la
propiedad de la TDF para la convolucin circular es


TDF[ x
1
(n) (N) x
2
(n) ] = X
1
(k) X
2
(k) (5.40)


Una interpretacin alternativa de esta propiedad es que, cuando multiplicamos dos TDFs de N-puntos en el
dominio de la frecuencia, obtenemos la convolucin circular (y no la convolucin lineal usual) en el dominio
del tiempo. Para ejemplificar esto nos valemos de las siguientes secuencias x
1
(n) = {1, 2, 2} y x
2
(n) = {1,
2, 3, 4}, para las cuales calcularemos x
1
(n) (4) x
2
(n) con 4-puntos, donde podemos notar que x
1
(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 convolucin circular. Resolveremos este problema tanto en el domino del
tiempo (en donde emplearemos el mecanismo de convolucin circular) como en el dominio de la frecuencia
(en donde usaremos las TDFs). A continuacin presentamos ambos enfoques:

Solucin en el dominio del tiempo: La convolucin circular con 4-puntos esta dada por


x
1
(n) (4) x
2
(n) =

3
0
4 2 1
)) (( ) (
m
m n x m x


por consiguiente tenemos que crear una secuencia desplazada circularmente para cada valor de n, y
multiplicar cada una de sus muestras con x
1
(m) , finalmente sumar las muestras para obtener el valor de la
convolucin circular en n, este proceso se repite para 0 n 3.


Tomando en cuenta que
x
1
(m) = {1, 2, 2, 0} y x
2
(m) = {1, 2, 3, 4}

mostramos, paso a paso, los clculos para cada valor de n.

Para n = 0
[ ]



3
0
3
0
5 2 1
} 2 , 3 , 4 , 1 { } 0 , 2 , 2 , 1 { )) 0 (( ) (
m m
m x m x


3
0
15 } 0 , 6 , 8 , 1 {
m


PDF created with pdfFactory trial version www.pdffactory.com

147

Para n = 1
[ ]



3
0
3
0
5 2 1
} 3 , 4 , 1 , 2 { } 0 , 2 , 2 , 1 { )) 1 (( ) (
m m
m x m x


3
0
12 } 0 , 8 , 2 , 2 {
m


Para n = 2
[ ]



3
0
3
0
5 2 1
} 4 , 1 , 2 , 3 { } 0 , 2 , 2 , 1 { )) 2 (( ) (
m m
m x m x


3
0
9 } 0 , 2 , 4 , 3 {
m


Para n = 3
[ ]



3
0
3
0
5 2 1
} 1 , 2 , 3 , 4 { } 0 , 2 , 2 , 1 { )) 3 (( ) (
m m
m x m x


3
0
14 } 0 , 4 , 6 , 4 {
m



Finalmente obtenemos el resultado

x
1
(n) (4) x
2
(n) = {15, 12, 9, 14}


Solucin en el dominio de la frecuencia: En primer lugar calculamos las TDFs de x
1
(n) y x
2
(n), enseguida
multiplicamos ambas transformadas muestra con muestra, y finalmente tomamos la TDF inversa del
resultado de la multiplicacin para as obtener la convolucin circular. Tal y como se muestra a
continuacin.


TDF de x
1
(n)

x
1
(n) = {1, 2, 2, 0} X
1
(k) = {5, - 1 - j2, 1, - 1 + j2}

TDF de x
2
(n)

x
2
(n) = {1, 2, 3, 4} X
2
(k) = {10, - 2 + j2, -2, - 2 - j2}

Ahora
X
1
(k) X
2
(k) = {50, 6 + j2, -2, 6 - j2}


Finalmente despus de tomar la TDFI

x
1
(n) (4) x
2
(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 implementacin del desplazamiento circular, podemos implementar la
convolucin circular de diferentes maneras. La forma ms simple sera implementando (5.39) literalmente,
usando la funcin DespCir y dos ciclos for . . . end anidados. Obviamente esto no es eficiente, por lo que
otro enfoque sera 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 multiplicacin de un vector matriz similar a lo que se hizo con la
funcin tdf, provocando que slo se requiera un ciclo for . . . end. A continuacin mostramos la funcin
llamada ConvCir en la cual se incorporan estos pasos.


























Ahora realizaremos la convolucin circular x
1
(n) (4) x
2
(n) en donde x
1
(n) = {1, 2, 2} y x
2
(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 funcin 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

x
1
(n) (4) x
2
(n) = {15, 12, 9, 14}

como se haba obtenido anteriormente.


Con el fin de estudiar los efectos de N sobre la convolucin circular realizaremos un ejercicio en donde
calcularemos la convolucin circular entre dos secuencias para distintos valores de N. Las secuencias que
emplearemos sern las mismas que se han venido empleando para as poder compara resultados. Obviamente
N 4; de lo contrario se presentara un traslapamiento en el dominio del tiempo para x
2
(n).

function y = ConvCir(x1,x2,N)
% Convolucin 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 convolucin circular
% x1 = Secuencia de entrada de longitud N1 <= N
% x2 = Secuencia de entrada de longitud N2 <= N
% N = Tamao del buffer circular
% Mtodo: 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 convolucin circular en 5-puntos, x
1
(n) (5) x
2
(n).

Aunque las secuencias son las mismas que en los ejemplos anteriores deberamos esperar diferentes
resultados para diferentes valores de N, lo cual no es el caso con la convolucin 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

x
1
(n) (5) x
2
(n) = {9, 4, 9, 14, 14}


b) Calcularemos la convolucin circular en 6-punto, x
1
(n) (6) x
2
(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

x
1
(n) (6) x
2
(n) = {1, 4, 9, 14, 14, 8}


Una cuidadosa observacin de las convoluciones circulares con valores de N igual a 4, 5 y 6 puntos, muestra
algunas caractersticas nicas entre ellas, como por ejemplo: una convolucin 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 convolucin de 5-puntos es igual a la suma de la primera y la ltima
muestra de la convolucin con 6-puntos. Por otro lado tenemos que la convolucin lineal entre x
1
(n) y x
2
(n)
esta dada por

x
1
(n) * x
2
(n) = {1, 4, 9, 14, 14, 8}

la cual es equivalente a la convolucin circular con 6-puntos.


8. Multiplicacin

Esta propiedad es el dual de la propiedad de convolucin circular, y esta dada por

TDF[x
1
(n) x
2
(n)] =
N
1
X
1
(k) (N) X
2
(k) (5.41)

en la cual la convolucin circular es realizada en el dominio de la frecuencia. Las funciones desarrolladas en
MATLAB para la convolucin circular tambin pueden ser usadas aqu, ya que X
1
(k) y X
2
(k) tambin son
secuencias con N-puntos.
PDF created with pdfFactory trial version www.pdffactory.com

150

9. Relacin de Parseval

Esta relacin calcula la energa en el dominio de la frecuencia.


E
x
=

1
0
2
1
0
2
) (
1
) (
N
k
N
n
k X
N
n x (5.42)

en donde la cantidad
N
k X
2
) (
es llamada espectro de energa de las secuencias con duracin finita.
Similarmente, para secuencias peridicas, la cantidad
2
) (
~
N
k X
es llamada espectro de potencia.




CONVOLUCIN LINEAL
USANDO LA TDF


Una de las operaciones ms importantes en sistemas lineales es la convolucin lineal; de hecho los filtros
FIR son generalmente implementados en la prctica usando esta convolucin . Por otro lado, la TDF es un
enfoque prctico para la implementacin de operaciones de sistemas lineales en el dominio de la frecuencia, y
como veremos ms adelante, esto tambin es una operacin eficiente en trminos de clculo. Sin embargo hay
un problema, el cual consiste en que las operaciones de la TDF resultan en una convolucin circular (en
donde algunas veces esto no es lo que deseamos) y no en la convolucin lineal que deseamos. Por tal motivo,
veremos como usar la TDF para realizar una convolucin lineal (o equivalentemente, como hacer una
convolucin circular idntica a una convolucin lineal).

Dada la secuencia x
1
(n) con N
1
-puntos y la secuencia x
2
(n) con N
2
-puntos, definimos la convolucin lineal de
x
1
(n) y x
2
(n) como x
3
(n), de la siguiente manera:


x
3
(n) = x
1
(n) * x
2
(n) (5.43)

=




1
0
2 1 2 1
1
) ( ) ( ) ( ) (
N
k
k n x k x k n x k x


entonces x
3
(n) es una secuencia con (N
1
+ N
2
- 1)-puntos. Ahora, si elegimos N=max(N
1
, N
2
) y calculamos la
convolucin circular con N-puntos x
1
(n) (N) x
2
(n) , entonces obtendremos una secuencia con N-puntos, la
cual es obviamente diferente de x
3
(n). De esta observacin nos surge una pregunta: Por qu no escoger
N = N
1
+ N
2
- 1 y realizar as la convolucin circular con (N
1
+ N
2
- 1)-puntos ?. Con este enfoque al menos
ambas convoluciones tendrn un mismo nmero de muestras.

Por lo tanto, dada N = N
1
+ N
2
- 1 y considerando a x
1
(n) y x
2
(n) como secuencias con N-puntos, definimos a
la convolucin circular x
4
(n) con N-puntos como

PDF created with pdfFactory trial version www.pdffactory.com

151

x
4
(n) = x
1
(n) (N) x
2
(n) (5.44)

= ) ( )) (( ) (
1
0
2 1
n m n x k x
N
N
m
N
R
1
]
1



= ) ( ) ( ) (
1
0
2 1
n rN m n x k x
N
N
m r
R
1
]
1




= ) ( ) ( ) (
) (
1
0
2 1
3
1
n rN m n x k x
N
r
rN n x
N
m
R
1
1
1
1
]
1

4 4 4 4 3 4 4 4 4 2 1


= ) ( ) (
3
n rN n x
N
r
R
1
]
1


usando (5.43)


Este anlisis muestra que, en general, la convolucin circular es una versin sobrepuesta de la convolucin
lineal; y ya que x
3
(n) es una secuencia con N = (N
1
+ N
2
- 1)-puntos, tenemos que

x
4
(n) = x
3
(n); 0 n (N - 1)

lo cual significa que no habr aliasing en el dominio del tiempo.

Amanera de conclusin podemos decir que si hacemos a x
1
(n) y x
2
(n) secuencias con N = (N
1
+ N
2
- 1) puntos
por medio del rellenado con un nmero apropiado de ceros, entonces la convolucin circular es idntica a la
convolucin lineal. Y para demostrarlo nos valemos del siguiente ejemplo.

Dadas las secuencias x
1
(n) y x
2
(n) con 4-puntos siguientes:

x
1
(n) = {1, 2, 2, 1}, x
2
(n) = {1, -1, 1, -1}

a) Determinaremos su convolucin lineal x
3
(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 convolucin lineal x
3
(n) es una secuencia con 7-puntos dada por

x
3
(n) = {1, 1, 1, 0, -1, -1, -1}

b) Ahora calcularemos la convolucin circular x
4
(n) de modo que sea igual a x
3
(n); que para lograrlo
tenemos que usar N 7. As que eligiendo N=7 y haciendo uso de nuestra funcin 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
x
4
= {1, 1, 1, 0, -1, -1, -1} = x
3
(n)


Como se pudo observar, una vez empleada al TDF para realizar la convolucin lineal, debemos elegir
apropiadamente el valor de N. Sin embargo, en la prctica esto no es posible de hacer, especialmente cuando
N es muy grande lo cual implicara un lmite sobre la memoria. Este hecho podra introducir un error cuando
se elige un valor de N menor que el requerido para realizar la convolucin circular; adems este error puede
ser calculado ya que en la prctica es de gran utilidad. Obviamente se debe cumplir N max(N
1
, N
2
), y por
lo tanto si tenemos que

max(N
1
, N
2
) N < (N
1
+ N
2
-1)

entonces de nuestro anlisis previo en (5.44)

x
4
(n) = ) ( ) (
3
n rN n x
N
r
R
1
]
1




As el error e(n) esta dado por

e(n) = x
4
(n) - x
3
(n)

= ) ( ) (
0
3
n rN n x
N
r
R
1
]
1



y puesto que N max(N
1
, N
2
), solamente dos trminos correspondientes a r = t 1 permanecen en la
sumatoria anterior. Por lo tanto

e(n) = [x
3
(n - N) + x
3
(n + N)] R
N
(n )

Generalmente, como x
1
(n) y x
2
(n) son secuencias causales entonces x
3
(n) tambin es causal, lo cual significa
que

x
3
(n - N) = 0; 0 n N - 1
por lo tanto
e(n) = x
3
(n + N), 0 n N - 1 (5.45)

la cual es una relacin importante. Esto implica que cuando max(N
1
, N
2
) N < (N
1
+ N
2
-1), el error de la
muestra en la posicin n es la misma cuando se realiza la convolucin lineal con N muestras. Ahora la
convolucin lineal ser cero despus de (N
1
+ N
2
-1) muestras, lo que significa que algunas de las primeras
muestras de la convolucin circular estn en un error, mientras que los unos restantes son los valores
correctos de la convolucin lineal. Para ejemplificar esto haremos uso de las secuencias

x
1
(n) = {1, 2, 2, 1}, x
2
(n) = {1, -1, 1, -1}

con las cuales evaluaremos la convolucin 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 convolucin x
3
(n) es la misma

x
3
(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.

x
4
(n) = x
1
(n) (6) x
2
(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}
= x
3
(n + 6)

como era de esperarse.

Cuando N=5, obtenemos una secuencia con 5-puntos.

x
4
(n) = x
1
(n) (5) x
2
(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}
= x
3
(n + 5)

Finalmente, cuando N=4, obtenemos una secuencia con 4-puntos.

x
4
(n) = x
1
(n) (4) x
2
(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}
= x
3
(n + 4)


Para este ltimo caso (N=4) cuando elegimos N=max(N
1
, N
2
) para realizar la convolucin circular, tenemos
que las primeras (M - 1) muestras son errneas, Vg. difieren de la convolucin lineal, en los lugares donde
M=min(N
1
, N
2
). Este resultado es de gran utilidad en la implementacin de convoluciones largas en forma de
procesamiento por bloque.

Cuando deseamos filtrar una secuencia de entrada que esta siendo recibida continuamente, por ejemplo
una seal de voz desde un micrfono, entonces para propsitos prcticos podemos ver a esta secuencia como
una secuencia de longitud infinita. Si lo que deseamos es implementar una operacin de filtrado con un filtro
FIR en el cual la convolucin lineal es calculada usando la TDF, entonces experimentaremos algunos
problemas prcticos, debido a que tendramos que calcular una larga TDF, lo cual es generalmente
imprctico. Lo que es ms, las muestra de salida no estn 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 pequeas secciones (o bloques), y procesar cada
seccin usando la TDF, y finalmente ensamblar la secuencia de salida a partir de las salidas de cada seccin.
Este procedimiento es llamado operacin de convolucin 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 convolucin 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 sern 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 mtodo superponer-
guardar para convoluciones por bloque. Claramente, cuando N >> M, este mtodo es ms eficiente, y para
ilustrarlo, desarrollaremos el siguiente ejemplo.

Dadas
x(n) = (n + 1), 0 n 9 y

h(n) = {1, 0, -1}


implementaremos el mtodo 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 seccin con la anterior con dos
muestras. Tambin tenemos que x(n) es una secuencia formada por 10-puntos, y adems necesitaremos
(M - 1) = 2 ceros en el inicio. Ya que N=6, necesitaremos 3 secciones, como las que se muestran a
continuacin.

x
1
(n) = {0, 0, 1, 2, 3, 4}
x
2
(n) = {3, 4, 5, 6, 7, 8}
x
3
(n) = {7, 8, 9, 10, 0, 0}


Notamos que se tuvo que rellenar x
3
(n) con dos ceros ya que los valores de x(n) terminan en n=9. Ahora
calcularemos la convolucin circular con 6-puntos de cada seccin con h(n).


y
1
= x
1
(n) (6) h(n) = {-3, -4, 1, 2, 2, 2}
y
2
= x
2
(n) (6) h(n) = {-4, -4, 2, 2, 2, 2}
y
3
= x
3
(n) (6) h(n) = {7, 8, 2, 2, -9, -10}


Tomando en cuenta que las primeras dos muestras de cada secuencia sern 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 convolucin lineal siguiente

x(n) * h(n) = {1, 2, 2, 2, 2, 2, 2, 2, 2, 2, -9, -10}


observamos que concuerda con el mtodo de superponer-guardar.


Usando los ejemplos anteriores como gua, podemos desarrollar una funcin en MATLAB para
implementar el mtodo de superponer-guardar para una secuencia de entrada x(n) muy larga. El paso
principal en esta funcin es el obtener una apropiada indexacin para la segmentacin. 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 (
n x n x
ceros M
43 42 1

, n 0
PDF created with pdfFactory trial version www.pdffactory.com

155

y dada L = N - M + 1, tenemos que el k-simo bloque x
k
(n), en el intervalo 0 n N-1, esta dado por

) ( ) ( m x n x
k
; kL m kL + N - 1, k 0, 0 n N - 1

y el nmero total de bloques es

K = 1
2
+
1
]
1

+
L
M N
x


En donde N
x
es la longitud de x(n) y
]
es la operacin de truncamiento. Ahora cada bloque puede ser
circularmente convolucionado con h(n) usando la funcin ConvCir, para as obtener


y
k
(n) = x
k
(n) (N) h(n)


Finalmente, descartando las primeras (M-1) muestras de cada y
k
(n) y concatenando las muestras restantes,
obtenemos la convolucin lineal y(n). Todo este procedimiento es incorporado en la siguiente funcin
llamada SuperpGuardar.






























Cabe hacer notar que esta funcin no esta desarrollada con el enfoque ms eficiente. Pero retomaremos este
tema cuando discutamos la transformada rpida 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 operacin de esta nueva funcin 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 convolucin lineal correcta, como esperbamos.




TRANSFORMADA RPIDA
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 duracin finita, y aunque es
una transformada calculable, la implementacin 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 clculos requeridos en la TDF, lo que dio pie al auge en las aplicaciones de la
TDF, incluyendo el rea de procesamiento digital de seales. Lo que es ms, tambin dio la iniciativa para el
desarrollo de otros algoritmos eficientes, que en conjunto son conocidos como los algoritmos de la
Transformada Rpida de Fourier (TRF).

Considerando una secuencia x(n) con N-puntos, cuya TDF esta dada por:

X(k) =

1
0
) (
N
n
nk
N
W n x , 0 k N - 1 (5.46)

donde W
N
= 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 N
2
multiplicaciones complejas y N(N-1) N
2
sumas complejas, adems de que se tienen que
almacenar N
2
coeficientes complejos {
nk
N
W } . Claramente se observa que el nmero de clculos de la TDF
para una secuencia con N-puntos depende cuadrticamente de N, lo cual se denota como

C
N
=o( N
2
)

Desde luego, para Ns grandes, o(N
2
) es inaceptable en la prctica. Generalmente el tiempo de procesamiento
para una suma es mucho menor que para una multiplicacin. Por lo tanto desde ahora nos concentraremos en
el nmero de multiplicaciones complejas, las cuales en si mismas requieren de 4 multiplicaciones reales y 2
sumas reales.

En un algoritmo diseado eficientemente el nmero de clculos debera ser constante por cada muestra , y
por lo tanto el nmero total de clculos debera ser lineal con respecto a N. La dependencia cuadrtica sobre
N puede ser reducida haciendo que la mayora de los clculos puedan ser eliminados usando la propiedad de
periodicidad

PDF created with pdfFactory trial version www.pdffactory.com

157

n N k
N
N n k
N
kn
N
W W W
) ( ) ( + +


y la propiedad de simetra

kn
N
N kn
N
W W
+ 2 /


del factor {
nk
N
W }.

A manera de comentario, un algoritmo que considera solamente la propiedad de periodicidad de
nk
N
W es el
algoritmos Goertzel el cual todava requiere C
N
= o( N
2
) 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 simetra y periodicidad en la reduccin del nmero de clculos. Para esto describiremos y
analizaremos dos algoritmos especficos de la TRF que requieren C
N
= o( N log N

) operaciones; estos son:
los algoritmos de Decimacin en Tiempo (TRF - DT) y Decimacin en Frecuencia (TRF - DF).


Consideremos los clculos de una TDF con 4-puntos y desarrollemos un algoritmo eficiente para su clculo.

X(k) =

3
0
4
) (
n
nk
W n x , 0 n 3; W
4
= e
-j2 / 4
= -j

Los clculos pueden ser hechos con una matriz de la forma


1
1
1
1
]
1

1
1
1
1
1
]
1

1
1
1
1
]
1

) 3 (
) 2 (
) 1 (
) 0 (
) 3 (
) 2 (
) 1 (
) 0 (
9
4
6
4
3
4
0
4
6
4
4
4
2
4
0
4
3
4
2
4
1
4
0
4
0
4
0
4
0
4
0
4
x
x
x
x

W W W W
W W W W
W W W W
W W W W
X
X
X
X



la cual requiere 16 multiplicaciones complejas.
Un planteamiento eficiente se logra usando la periodicidad


j W W W
j W W W W


3
4
6
4
2
4
9
4
1
4
4
4
0
4
; 1
; 1



si sustituimos estos valores en la matriz anterior, obtenemos lo siguiente


1
1
1
1
]
1

1
1
1
1
]
1

1
1
1
1
]
1

) 3 (
) 2 (
) 1 (
) 0 (
1 1
1 1 1 1
1 1
1 1 1 1
) 3 (
) 2 (
) 1 (
) 0 (
x
x
x
x

j - - j
-
j j

X
X
X
X


PDF created with pdfFactory trial version www.pdffactory.com

158
ahora, empleando simetra obtenemos

X(0) = x(0) + x(1) + x(2) + x(3) = [ ] [ ]
43 42 1 4 3 4 2 1
2 1
) 3 ( ) 1 ( ) 2 ( ) 0 (
g g
x x x x + + +
X(1) = x(0) - jx(1) - x(2) + jx(3) = [ ] [ ]
43 42 1 4 3 4 2 1
2 1
) 3 ( ) 1 ( ) 2 ( ) 0 (
h h
x x j x x
X(2) = x(0) - x(1) + x(2) - x(3) = [ ] ( ) [ ]
43 42 1 4 3 4 2 1
2 1
3 ) 1 ( ) 2 ( ) 0 (
g g
x x x x + +
X(3) = x(0) + jx(1) - x(2) - jx(3) = [ ] [ ]
43 42 1 4 3 4 2 1
2 1
) 3 ( ) 1 ( ) 2 ( ) 0 (
h h
x x j x x +

Por lo tanto un algoritmo eficiente sera


Paso 1

g
1
= x(0) + x(2)
g
2
= x(1) + x(3)
h
1
= x(0) - x(2)
h
2
= x(1) - x(3)
Paso 2

X(0) = g
1
+ g
2

X(1) = h
1
- jh
2
(5.47)

X(2) = g
1
- g
2
X(3) = h
1
+ jh
2



el cual requiere solamente 2 multiplicaciones complejas, que es un nmero considerablemente pequeo,
incluso para este sencillo ejemplo. Una estructura en forma de diagrama de flujo de la seal 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
continuacin:
1
]
1

1
]
1

1
]
1

1
]
1

) 3 ( ) 2 (
) 1 ( ) 0 (
) 3 (
) 1 (
,
) 2 (
) 0 (
x x
x x
x
x

x
x


Como siguiente paso, se calcula una TDF ms pequea, con 2-puntos, para cada columna


W
2

1
]
1

1
]
1

1
]
1

) 3 ( ) 2 (
) 1 ( ) 0 (
1 1
1 1
) 3 ( ) 2 (
) 1 ( ) 0 (
x x
x x


x x
x x

PDF created with pdfFactory trial version www.pdffactory.com

159

=
1
]
1

1
]
1


+ +
2 1
2 1
) 3 ( ) 1 ( ) 2 ( ) 0 (
) 3 ( ) 1 ( ) 2 ( ) 0 (
h h
g g
x x x x
x x x x


entonces cada elemento de la matriz resultante es multiplicado por { }
pq
W
4
, en donde p es el rengln ndice y q
es la columna ndice. As, el siguiente producto es realizado


1
]
1

1
]
1


1
]
1

2 1
2 1
2 1
2 1
1
1 1
jh - h
g g
h h
g g

j




Finalmente, dos TDFs ms pequeas con 2-puntos son tomadas de los vectores rengln.


1
]
1

+
+

1
]
1

1
]
1

1
]
1

2 1 2 1
2 1 2 1
2 1
2 1
2 1
2 1
1 1
1 1
jh h jh h
g g g g

jh h
g g

jh h
g g
2
W

=
1
]
1

) 3 ( ) 1 (
) 2 ( ) 0 (
X X
X X



Aunque esta interpretacin parece tener ms multiplicaciones que el algoritmo eficiente, esto slo nos sugiere
un enfoque sistemtico para el clculo de una TDF larga, basado en TDFs ms pequeas.


Para reducir la dependencia cuadrtica del clculo de la TDF con N, debemos elegir un nmero compuesto
N = LM, donde

L
2
+ M
2
<< N
2
para N grande


ahora dividimos la secuencia en M secuencias ms pequeas de longitud L, tomamos M TDFs ms pequeas
con L-puntos, y entonces las combinamos en una TDF ms grande usando L TDFs ms pequeas con
M-puntos. Estos pasos son la esencia del mtodo de dividir-combinar, y puesto que N = LM, entonces los
ndices n y k en (5.46) pueden ser escritos como


1 0 , 1 0 ,
1 0 , 1 0 ,
+
+
M q L p Lq p k
M m L m M n l l
(5.48)


por su parte las secuencias x(n) y X(k) pueden ser escritas como arreglos ) , ( m x l y X(p,q), respectivamente.
Entonces (5.46) queda como

X(p, q) =

+ +
1
0
1
0
M
m
L
q) L m)(p (M
N
m)W , x(
l
l
l (5.49)

PDF created with pdfFactory trial version www.pdffactory.com

160

=
Lmq
N
M
m
L
p M
N
mp
N
W W m x W

'

1
]
1

1
0
1
0
) , (
l
l
l

=
4 4 4 4 4 3 4 4 4 4 4 2 1
4 4 3 4 4 2 1
l
l
l
puntos M para TDF
mq
M
M
m
puntos L para TDF
L
p
L
mp
N
W W m x W

'

1
]
1

1
0
1
0
) , (


Por lo tanto la expresin (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
) , (
L
p
L
W m x
l
l
l ; 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) = ), , ( m p F W
pm
N

1 0
1 0


M m
L p
(5.51)

El factor
pm
N
W es llamado factor twiddle.

3. Finalmente, calculamos las TDFs con M-puntos

X(p, q) =

1
0
) , (
M
m
mq
M
W m p G 0 q M - 1 (5.52)

para cada uno de los renglones p = 0, . . . , L-1.


As tenemos que el nmero total de multiplicaciones complejas para este enfoque esta dado por:


C
N
= ML
2
+ N + LM
2
< o(N
2
) (5.53)


Este procedimiento puede ser repetido si M o L son nmeros compuestos. Claramente, el algoritmo ms
eficiente es obtenido cuando N es un nmero compuesto muy grande, esto es, N=R
v
. Tales algoritmos son
conocidos como algoritmos TRF radix-R. Cuando N=
2 1
2 1
v v
R R . . . , entonces tales descomposiciones son
llamadas algoritmos TRF radix-mezclado. Sin embargo el algoritmo ms popular y fcil 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 = 2
v
, 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 continuacin


) 1 2 ( ) (
) 2 ( ) (
2
1
+

n x n g
n x n g
; 1
2
0
N
n


en donde la secuencia g
1
(n) contiene las muestras pares de x(n), y g
2
(n) contiene las muestras impares de
x(n). Ahora, si G
1
(k) y G
2
(k) son las TDFs con N/2-puntos de g
1
(n) y g
2
(n), respectivamente. Entonces (5.49)
se reduce a


X(k) = G
1
(k) +
k
N
W G
2
(k), 0 k N - 1 (5.54)


Este resultado es llamado frmula de fusin, la cual combina dos TDFs con N/2-puntos en una TDF con N-
puntos. Con esto tenemos que el nmero total de multiplicaciones complejas se reduce a

C
N
= ) 2 / (
2
2
2
N o N
N
+


Este procedimiento puede ser repetido una y otra vez, y en cada etapa las secuencias son reducidas
(decimadas), en tanto que las TDFs ms pequeas son combinadas. Esta reduccin termina despus de v
etapas cuando tenemos N secuencias con 1-punto, las cuales tambin son TDFs con 1-punto. Este
procedimiento es llamado algoritmo TRF de decimacin en tiempo (TRF-DT), para el cual el nmero total de
multiplicaciones complejas es


C
N
= Nv = N log
2
N


Se puede observar claramente que si N es grande, entonces C
N
es aproximadamente lineal en N, lo cual era la
meta de nuestro algoritmo eficiente. Lo que es ms, si empleamos simetras adicionales, C
N
puede ser
reducido a N
N
2
log
2
. A continuacin se muestra el diagrama de flujo de una seal para N=8 en base a este
algoritmo.






PDF created with pdfFactory trial version www.pdffactory.com

162



En un enfoque alternativo podramos elegir L=2, M=N/2 y seguir los pasos en (5.49), con lo que
obtendramos 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)
0
2
W
= x(n) + x(n + N/2), 0 n N/2
F(1, m) = x(0, m) + x(1, m)
1
2
W
= x(n) - x(n + N/2), 0 n N/2

y de (5.51)

G(0, m) = F(0, m)
0
N
W
= x(n) + x(n + N/2), 0 n N/2
G(1, m) = F(1, m)
m
N
W (5.55)
= [x(n) - x(n + N/2)]
n
N
W , 0 n N/2


Asumiendo que G(0, m) = d
1
(n) y G(1, m) = d
2
(n) para 0 n N/2 - 1 (ya que son consideradas secuencias
en el dominio del tiempo); entonces de (5.52) tenemos


) ( ) 1 2 ( ) , 1 (
) ( ) 2 ( ) , 0 (
2
1
q D q X q X
q D q X q X
+

(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 decimacin en frecuencia (TRF-DF), cuyo diagrama de flujo es una estructura
transpuesta de la estructura TRF-DT, y su complejidad computacional es tambin igual a N
N
2
log
2
.

Con lo que respecta a la implementacin, MATLAB posee una funcin 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 inters es que si x es una matriz, entones
fft(x,N) calcula la TDF con N-puntos de cada columna de x.

Esta funcin fft esta escrita en lenguaje mquina y no usa comandos de MATLAB (no esta disponible
como archivo .m). Por lo tanto su ejecucin es muy rpida, adems 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 nmero primo, entonces la funcin fft es reducida al
algoritmo de la TDF.

La TDF inversa es calculada usando la funcin ifft , la cual posee las mismas caractersticas de la funcin
fft. Ahora , con el propsito de estudiar el tiempo de ejecucin de la funcin 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 ejecucin, MATLAB posee dos funciones: la funcin clock que proporciona la
lectura del tiempo al instante, y la funcin etime(t1,t2) que calcula el tiempo transcurrido entre dos marcas de
tiempo , t1 y t2. As, para determinar el tiempo de ejecucin generaremos vectores aleatorios cuyas
longitudes irn de 1 a 2048, para los cuales ser calculada su TRF; adems su tiempo de clculo ser
guardado en un arreglo. Finalmente, graficaremos el tiempo de ejecucin 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 Ejecucin 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 grfica de los tiempos de ejecucin se muestra enseguida.



























Los puntos en la grfica no muestran una funcin clara, pero se puede observar que existen grupos de puntos
con cierta tendencia, en donde los grupos ms altos representan a o(N
2
), lo que significa que estos valores
deben ser nmeros 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(N
2
/2), o(N
2
/3), o(N
2
/4), y as
por el estilo, para los cuales el nmero N tiene menos descomposiciones. El ltimo grupo muestra la
dependencia o(N log N) (casi lineal) la cual corresponde a los valores de N=2
v
, 0 v 11. Por lo que, para
estos valores de N, el algoritmo empleado es el TRF radix-2. Para todos los dems 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
ejecucin 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 seccin podran
ser modificadas sustituyendo la funcin fft en lugar de la funcin tdf, y as del mismo modo en los ejemplos
podramos hacer uso de una N altamente compuesta. Una buena prctica sera escoger N=2
v
a menos que una
situacin es especfico demande lo contrario.


Convoluciones Rpidas

La funcin conv de MATLAB es implementada usando la funcin filter (que est escrita en C) la cual es
muy eficiente para valores pequeos de N ( < 50 ), pero cuando los valores de N son grandes es posible
aumentar la velocidad de la convolucin usando el algoritmo de la TRF. Este enfoque usa la convolucin
circular para implementar la convolucin lineal, y la TRF para implementar la convolucin circular es
llamado algoritmo de la convolucin rpida, en el cual si elegimos N=2
v
e implementamos la TRF radix-2,
entonces, el algoritmo es llamado convolucin de alta velocidad. Si x
1
(n) es una secuencia con N
1
-puntos y
PDF created with pdfFactory trial version www.pdffactory.com

165
x
2
(n) es una secuencia con N
2
-puntos, entonces para la convolucin de alta velocidad N es elegida de modo
que

1
) 1 ( log
2 1 2
2
+

N N
N (5.57)

en donde
1
x es el entero ms pequeo que a la vez es ms grande que x (tambin llamada funcin techo).
Con esto , ahora la convolucin lineal x
1
(n)*x
2
(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


x
1
(n) * x
2
(n) = TRFI[ TRF[x
1
(n)] TRF[x
2
(n)] ] (5.58)


Para valores grandes de N, (5.58) es ms rpida que la convolucin en el dominio del tiempo, como veremos
en el siguiente ejemplo.

Para demostrar la efectividad de la convolucin de alta velocidad nos valemos de las secuencias x
1
(n) y x
2
(n),
en donde x
1
(n) es una secuencia aleatoria con L-puntos uniformemente distribuida entre [0,1], y x
2
(n) es una
secuencia aleatoria Gaussiana con media 0 y varianza 1 formada por L-puntos. Determinaremos los tiempos
de ejecucin promedio para 1 L 150, en donde el promedio es calculado sobre 100 realizaciones de las
secuencias aleatorias. El cdigo 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,'Convolucin')
>> text(110,0.02,'Convolucin de')
>> text(111,0.018,'alta velocidad')
>> xlabel('Longitud de la secuencia, N'); ylabel('Tiempo (segundos)');
>> title('Comparacin de los tiempos de convolucin');

PDF created with pdfFactory trial version www.pdffactory.com

166

La grfica siguiente muestra los tiempos de la convolucin lineal y la convolucin de alta velocidad para
1 L 150, en donde cabe notar que estos tiempos dependen de la plataforma en la cual se ejecute el cdigo
anterior (esta grfica fue obtenida empleando una computadora 486 a 66 MHz). La grfica muestra que para
valores pequeos de L la convolucin lineal es ms rpida, mientras que para los puntos ms all del cruce
donde aparece L=90 el tiempo de la convolucin lineal se incrementa exponencialmente, y la convolucin de
alta velocidad se incrementa linealmente. Notar que, cuando N=2
v
, el tiempo de la convolucin de alta
velocidad es constante sobre un rango de L.


































Convoluciones de Alta Velocidad por Bloque

Anteriormente discutimos el algoritmo de la convolucin por bloque llamado mtodo de superponer-guardar
(y su mtodo compaero de superponer-sumar), el cual es usado para convolucionar una secuencia muy larga
con una secuencia ms pequea. Tambin vimos que la funcin SuperpGuardar desarrollada anteriormente,
utiliza la TDF para implementar la convolucin 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 funcin
llamada SuperpGuardarAV muestra este algoritmo.




20 40 60 80 100 120 140 160
0.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 de
alta velocidad
Longitud de la secuencia, N
T
i
e
m
p
o

(
s
e
g
u
n
d
o
s
)
Comparaci n de los tiempos de convoluci n
PDF created with pdfFactory trial version www.pdffactory.com

167


































Una modificacin similar puede ser hecha al algoritmo superponer-sumar.

function [y] = SuperpGuardarAV(x,h,N)
% Mtodo superponer-guardar de alta velocidad
% para convoluciones por bloque usando la funcin 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



DISEO DE FILTROS FIR






En este captulo ponemos nuestra atencin al problema de disear sistemas a partir de especificaciones
dadas, ya que es un problema importante adems de difcil. Tenemos que en el procesamiento digital de
seales hay dos tipos importantes de sistemas: el primero de ellos lleva acabo el filtrado de seales en el
dominio del tiempo y por lo tanto son llamados filtros digitales. El segundo tipo de sistemas lleva a cabo la
representacin de seales en el dominio de la frecuencia, y son llamados analizadores espectrales; tal
representacin fue descrita en la seccin 5 con el uso de la TDF.

En esta seccin y en las prximas estudiaremos varios algoritmos bsicos de diseo para filtros FIR e IIR, los
cuales son principalmente del tipo selectivos de frecuencias; es decir, disearemos principalmente filtros
multibanda como son: pasa bajas, pasa altas, pasa banda y supresor de banda. En el diseo de filtros FIR
tambin consideraremos sistemas como diferenciadores o transformadores de Hilbert, los cuales, aunque no
son filtros selectivos de frecuencias siguen las tcnicas de diseo que consideraremos.

Primero comenzaremos con algunas cuestiones preliminares relacionadas con la filosofa y especificaciones
del diseo, las cuales son aplicables tanto al diseo de filtros FIR como a los filtros IIR. En esta seccin
estudiaremos los algoritmos de diseo para filtros FIR y en la siguiente seccin continuaremos con los filtros
IIR.


En general, el diseo de cualquier filtro digital es llevado a cabo en 3 pasos:


1. Especificaciones: Antes de poder disear un filtro debemos tener algunas especificaciones, las cuales son
determinadas por la aplicacin.

2. Aproximaciones: Una vez que las especificaciones son definidas, se hace uso de los conceptos y
herramientas matemticas ya descritos para establecer la descripcin del filtro que aproxime las
especificaciones dadas.

3. Implementacin: El resultado del paso anterior es una descripcin del filtro en forma de ecuaciones de
diferencia, una funcin 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 conversin de las
especificaciones en la descripcin del filtro.


En muchas aplicaciones como en el procesamiento de seales 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 trminos 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.

SECCIN
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 funcin de respuesta en
magnitud |H(e
j
)|. 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 seccin. El segundo enfoque es
llamado especificaciones relativas, el cual proporciona los requerimientos en decibeles (dB), los cuales estn
definidos por

dB = 0
| ) ( |
| ) ( |
log 20
10

j
max
j
e H
e H



Este enfoque es uno de las ms populares en la prctica y es usado por ambos tipos de filtros FIR e IIR. Para
ilustrar estos dos tipos de especificaciones consideraremos el diseo de un filtro pasa bajas en el siguiente
ejemplo, pero antes expondremos algunas definiciones.



Especificaciones Absolutas

Una tpica especificacin 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 transicin, donde no hay restricciones de la respuesta en
magnitud.






Especificaciones relativas (dB)

Una tpica especificacin relativa de un filtro pasa bajas es la que se muestra en la figura siguiente, en la cual

R
p
es el rizo en la banda de paso en dB, y
A
s
es la atenuacin en la banda de rechazo en dB.

PDF created with pdfFactory trial version www.pdffactory.com

171



Los parmetros dados en los dos tipos de especificaciones anteriores estn obviamente relacionados, ya que
| H(e
j
) |
max
en las especificaciones absolutas es igual a (1 +
1
), tenemos que


R
p
= ) 0 ( 0
1
1
log 20
1
1
10
>
+

(6.1)
y
A
s
= ) 1 ( 0
1
log 20
1
2
10
>> >
+

(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 atenuacin en la banda de rechazo.
Determinaremos
1
y

2
.

Usando (6.1), obtenemos que

R
p
= 0.25 =
1
1
1
10
1
1
log 20
+

= 0.0144

y usando (6.2), obtenemos

A
s
= 50 =
2
2
10
1
2
10
0144 . 0 1
log 20
1
log 20
+

= 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 R
p
en la banda de paso y la
atenuacin A
s
en la banda de rechazo.


De (6.1) el rizo en la banda de paso es

R
p
=
1
1
10
1
1
log 20
+

= 0.1737 dB
PDF created with pdfFactory trial version www.pdffactory.com

172

y de (6.2) la atenuacin en la banda de rechazo es

A
s
=
1
2
10
1
log 20
+

= 60 dB

De forma similar a como se hizo con las especificaciones para un filtro pasa bajas, estas tambin pueden ser
dadas para otros tipos de filtros , como son los filtros pasa altas o pasa banda. Sin embargo, los parmetros
ms importantes de diseo son las tolerancias (o rizos) en la banda de frecuencia y las frecuencias en los
bordes de banda. Por lo tanto, en la descripcin de las tcnicas de diseo nos concentraremos en el filtro pasa
bajas, para posteriormente servirnos de las relaciones de transformacin para convertir un filtro pasa bajas en
cualesquiera otro tipo de filtro. Para esclarecer estas ideas, establecemos el propsito del diseo en los
siguientes trminos:

Planteamiento del problema Disear un filtro pasa bajas, Vg., obtener su funcin del sistema
H(z) o su ecuacin de diferencia, que tiene una banda de paso [0,
p
] con tolerancia
1
(o R
p
en
dB) y una banda de rechazo [
s
, ] con tolerancia
2
(o A
s
en dB).


En esta seccin enfocaremos nuestra atencin a el diseo y aproximacin de filtros digitales FIR, ya que estos
observan varias ventajas en su diseos e implementacin:


La respuesta en fase puede ser exactamente lineal.
Son relativamente fciles de disear, ya que no hay problemas de estabilidad.
Son eficientes en su implementacin.
La TDF puede ser usada en su implementacin.
El diseo del problema contiene solamente aritmtica real y no aritmtica compleja;
los filtros con fase lineal no proporcionan distorsin 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 nmero de operaciones es del orden de M/2 como se
discuti en la implementacin 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 localizacin de los
ceros de la funcin del sistema para los filtros FIR con fase lineal. Consideremos que h(n) es la respuesta al
impulso, de longitud (o duracin) M en el intervalo 0 n M-1 , entonces la funcin del sistema es


H(z) =

1
0
1 ) 1 (
1
0
) ( ) (
M
n
n M M
M
n
n
z n h z z n h


la cual tiene (M-1) polos en el origen z = 0 y (M-1) ceros localizados en algn sitio del plano-z. La funcin
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(e
j
) =


1
0
) (
M
n
n j
e n h , <


Respuesta al Impulso h(n)

Si imponemos una limitacin de fase lineal, como

H(e
j
) = -, - <

donde es una constante de retraso de fase. Sabemos que h(n) debe ser simtrica, esto es,

h(n) = h(M - 1 - n), 0 n (M-1) con =
2
1 M
(6.3)

Por lo tanto h(n) es simtrica alrededor de que es el ndice de simetra. Con esto tenemos que hay dos tipos
de simetra:

M impar: En este caso = (M-1)/2 es un entero y la respuesta al impulso es como se muestra abajo.














El cdigo 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 Simtrico: 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 cdigo solo sirve para dibujar una lnea
>> 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 cdigo 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 Simtrico: 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 cdigo solo sirve para dibujar una lnea
>> 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(e
j
)
satisfaga la condicin

H(e
j
) = -

la cual corresponde a una lnea recta que no pasa por el origen. En este caso no es una constante de retraso
de fase, pero


d
e H d
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 podran retrasarse ms 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
, =
2

t (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 antisimtrica, y que el ndice de simetra es
todava =(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 cdigo 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 Antisimtrica: 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 cdigo solo sirve para dibujar una lnea
>> 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 cdigo 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 Antisimtrica: 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 cdigo solo sirve para dibujar una lnea
>> xaux = [0:M-1]; yaux = zeros(size(xaux));
>> line('XData',xaux,'YData',yaux,'LineWidth',0.25);



Respuesta en Frecuencia H(e
j
)

Cuando los casos de simetra y antisimetra 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(e
j
) como

H(e
j
) = ; ) (
) (

j
r
e H =
2

t , =
2
1 M
(6.5)

en donde H
r
() es una funcin de respuesta en amplitud y no una funcin de respuesta en magnitud. La
respuesta en amplitud es una funcin 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 funcin discontinua, mientras que la asociada con la respuesta en amplitud es
una funcin 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 funcin de respuesta en frecuencia es

H(e
j
) =


2
0
) (
n j
e n h = 1 + 1e
-j
+ e
-j2
= { e
j
+ 1 + e
-j
} e
-j

= { 1 + 2cos }e
-j


a partir de esta ltima expresin tenemos que las respuestas en magnitud y fase son:

| H(e
j
) | = |1 + 2cos |, 0 <

H(e
j
) =

'

< <
< <
3 / 2 ,
3 / 2 0




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:

, ) (
, cos 2 1 ) (

+
j
r
e H
H
- <

En este caso la respuesta en fase es verdaderamente lineal. El cdigo que nos permite obtener las
correspondientes formas grficas de estas respuestas se muestra a continuacin.

>> 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 grficas 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 Simtrica, 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(e
j
) =
2 / ) 1 (
2 / ) 1 (
0
cos ) (

1
]
1

M j
M
n
e n n a (6.6)


en donde la secuencia a(n) es obtenida a partir de h(n) como

a(0) =
,
_


2
1 M
h : muestra central
(6.7)
a(n) = ,
2
1
2
,
_

n
M
h
2
3
1


M
n

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
A
n
g
u
l
o

e
n

u
n
i
d
a
d
e
s

d
e

0 2/3 1
0
Respuesta en Amplitud
H
r
0 2/3 1
-2/3
0
Respuesta en Fase Lineal
Frecuencia en unidades de
A
n
g
u
l
o

e
n

u
n
i
d
a
d
e
s

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 (
0
cos ) ( ) (
M
n
r
n n a H (6.8)

Filtro FIR con fase lineal Tipo-2:
Respuesta al impulso simtrica, 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(e
j
) =
2 / ) 1 (
2 /
1
2
1
cos ) (

1
]
1

'

,
_

M j
M
n
e n n b (6.9)

donde
b(n) = ,
2
2
,
_

n
M
h n = 1, 2, . . . ,
2
M
(6.10)

Por lo tanto

'

,
_


2 /
1
2
1
cos ) ( ) (
M
n
r
n n b H (6.11)

A manera de observacin tenemos que en = , obtenemos

'

,
_


2 /
1
2
1
cos ) ( ) (
M
n
r
n n b H = 0

sin tener en cuenta a b(n) o h(n). Por lo tanto no podemos hacer uso de este caso, Vg., h(n) simtrica con M
par, para filtros pasa altas o rechaza banda.


Filtro FIR con fase lineal Tipo-3:
Respuesta al impulso antisimtrica, 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(e
j
) =
1
]
1


,
_

1
]
1

2
1
2
2 / ) 1 (
1
) (
M
j
M
n
e n sin n c (6.12)

donde
c(n) = ,
2
1
2
,
_

n
M
h n = 1, 2, . . . ,
2
1 M
(6.13)
y


2 / ) 1 (
1
) ( ) (
M
n
r
n sin n c H (6.14)
PDF created with pdfFactory trial version www.pdffactory.com

180

Si nos fijamos en =0 y = tenemos que H
r
()=0 independientemente de c(n) o h(n). Adems, e
j/2
= j, lo
que significa que jH
r
() es puramente imaginario. Por lo tanto, este tipo de filtro no es adecuado para el
diseo de un filtro pasa bajas o un filtro pasa altas. Sin embargo, este comportamiento es adecuado para la
aproximacin 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 seal de
entrada, y este es frecuentemente usado en los sistemas de comunicaciones para propsitos de modulacin.
Por su parte los diferenciadores son usados en muchos sistemas analgicos y digitales para lograr la derivada
de una seal.


Filtro FIR con fase lineal Tipo-4:
Respuesta al impulso antisimtrica, M par

Este caso es similar al Tipo-2, as tenemos que

H(e
j
) =
2 / ) 1 (
2 /
1
2
1
) (

1
]
1

'

,
_

M j
M
n
e n sin n d (6.15)

donde
d(n) = ,
2
2
,
_

n
M
h n = 1, 2, . . . ,
2
M
(6.16)
y

'

,
_


2 /
1
2
1
) ( ) (
M
n
r
n sin n d H (6.17)

Si nos fijamos en =0 tenemos que, H
r
(0)=0 y e
j/2
= j. Por lo tanto este tipo de filtro tambin es adecuado
para el diseo de los transformadores digitales de Hilbert y los diferenciadores.

Con respecto a la implementacin 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 funcin en MATLAB comparable a la funcin abs que pueda encontrar la amplitud. Sin embargo,
resulta fcil escribir una rutina que nos permita calcular la respuesta en amplitud para cada uno de los cuatro
tipos. Estas cuatro funciones se muestran a continuacin.

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 funcin, la cual puede ser escrita para determinar
el tipo de filtro con fase lineal, e implementar la expresin de la respuesta en amplitud apropiada.


Localizacin 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 simetras debido a las restricciones
de simetra en h(n). Esto puede ser mostrado si H(z) tiene un cero en

z = z
1
= re
j


entonces para la fase lineal debe haber un cero en

z =

j
e
r z
1 1
1


Para un filtro con valores reales tambin sabemos que si z
1
es compleja, entonces debe haber un cero
conjugado en

j
re z
*
1
, lo cual implica que debe haber un cero en

j
e r z ) / 1 ( / 1
*
1
. De esta manera
tenemos que, en general, una constelacin de ceros es una cudrupla

j j j j
e
r
y re e
r
re
1
, ,
1
,

como se muestra en la siguiente figura.


























A continuacin se muestra el cdigo 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
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
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); % localizacin de un cero arbitrario
>> z2 = 1/z1; % localizacin de un cero con fase lineal
>> z3 = conj(z1); % localizacin de un cero conjugado
>> z4 = 1/z3; % localizacin 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 estn sobre el crculo unitario y se
presentan en pares

e
j
y e
-j


Si =0 = , entonces los ceros estn sobre la lnea real y tambin se presentan en pares

r y
r
1


Finalmente, si r=1 y =0 =, los ceros estn en z=1 z=-1. Estas simetras 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 H
r
() 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 nmero impar, y por lo tanto
h(n) es simtrica 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

H
r
()= 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 grficas 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 Localizacin de Ceros');

Las grficas son:



























De estas grficas observamos que no hay restricciones sobre H
r
() en =0 o en =, adems se observa que
hay una constelacin cudruple 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
H
r
Respuesta en Amplitud Tipo-1
-1 0 1 2
-1
-0.5
0
0.5
1
Parte real
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
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 H
r
() 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 simtrica con
respecto a =(12-1)/2 = 5.5. De (6.10) tenemos

b(1) = 2h
,
_

1
2
12
= 12, b(2) = 2h
,
_

2
2
12
= 10, b(3) = 2h
,
_

3
2
12
= - 4
b(4) = 2h
,
_

4
2
12
= - 2, b(5) = 2h
,
_

5
2
12
= 2, b(6) = 2h
,
_

6
2
12
= - 8

Por lo tanto de (6.11) obtenemos que

,
_


,
_

,
_


,
_


,
_

+
,
_

1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_






2
11
2
9
2
7
2
5
2
3
2
2
1
6
2
1
5
2
1
4
2
1
3
2
1
2
2
1
1
cos 8 cos 2
cos 2 cos 4 cos 10 cos 12
cos ) 6 ( cos ) 5 ( cos ) 4 (
cos ) 3 ( cos ) 2 ( cos ) 1 ( ) (


b b b
b b b H
r


El siguiente script nos permite generar las grficas 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 Localizacin de Ceros');

PDF created with pdfFactory trial version www.pdffactory.com

186

Las grficas son:

























De las grficas podemos observar que H
r
() es cero en =, y tambin observamos que hay una constelacin
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 H
r
() y las ubicaciones de los ceros de H(z).

Ya que M=11, nos indica que es impar y puesto que h(n) es antisimtrica 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

) (
r
H = 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 grficas 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
H
r
Respuesta en Amplitud Tipo-2
-1 0 1 2
-1
-0.5
0
0.5
1
Parte real
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
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 Localizacin de Ceros');

Las grficas son:



























Podemos observar que H
r
()=0 en =0 y en = , adems se observa que hay una constelacin 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 H
r
() y la ubicacin 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 antisimtrica 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
H
r
Respuesta en Amplitud Tipo-3
-1 0 1
-1
-0.5
0
0.5
1
Parte real
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
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
,
_

1
2
12
= 12, d(2) = 2h
,
_

2
2
12
= 10, d(3) = 2h
,
_

3
2
12
= - 4
d(4) = 2h
,
_

4
2
12
= - 2, d(5) = 2h
,
_

5
2
12
= 2, d(6) = 2h
,
_

6
2
12
= - 8


Por lo tanto de (6.17) obtenemos

,
_


,
_

,
_


,
_


,
_

+
,
_

1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_

+
1
]
1

,
_






2
11
2
9
2
7
2
5
2
3
2
2
1
6
2
1
5
2
1
4
2
1
3
2
1
2
2
1
1
8 2
2 4 10 12
) 6 ( ) 5 ( ) 4 (
) 3 ( ) 2 ( ) 1 ( ) (
sin sin
sin sin sin sin
sin d sin d sin d
sin d sin d sin d H
r



El siguiente script nos permite generar las grficas 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 Localizacin de Ceros');

Las grficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

189


























De estas grficas observamos que H
r
() es cero en =0, y adems, existe una constelacin de cuatro ceros,
tres pares de ceros, y un cero en =0 como era de esperarse.




TCNICAS DE DISEO
CON VENTANAS


La idea bsica detrs del diseo con ventana es elegir un filtro ideal adecuado (el cual supone una
respuesta al impulso no causal y de duracin 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 mtodo es la
eleccin de una apropiada funcin de ventaneo y un filtro ideal apropiado. Denotaremos a un filtro ideal por
H
d
(e
j
), el cual posee una ganancia de magnitud unitaria y fase lineal caractersticas 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


H
d
(e
j
) =

'

<



e
c
c
j
| | , 0
| | , 1
(6.18)


donde
c
tambin es llamada frecuencia de corte, y es llamada retraso de la muestra. La respuesta al
impulso de este filtro es de duracin 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
H
r
Respuesta en Amplitud Tipo-4
-2 -1 0 1 2
-1
-0.5
0
0.5
1
Parte real
P
a
r
t
e

I
m
a
g
i
n
a
r
i
a
Diagrama de Polos y Ceros
Respuesta en Amplitud y Localizaci n de Ceros
PDF created with pdfFactory trial version www.pdffactory.com

190

h
d
(n) = F
-1
[H
d
(e
j
)] =

d e e H
n j j
d
) (
2
1
(6.19)

=

c
c
d e e
n j j
1
2
1


=
[ ]
) (
) (


n
n sin
c


Aqu, podemos notar que h
d
(n) es simtrica 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 h
d
(n), tenemos que truncar a
h
d
(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
M n n h
d
, 0
1 0 ), (
y
2
1

M
(6.20)


Esta operacin es llamada "ventaneo", y en general, h(n) puede ser vista como el producto de h
d
(n) y una
funcin ventana (n) como se muestra enseguida:

h(n) = h
d
(n) (n) (6.21)

donde

(n) =
forma otra de
M n sobre
a respecto con simtrica funcin una a

'


, 0
1 0
lg



Dependiendo de cmo definamos a (n), obtenemos diferentes diseos por ventana. Por ejemplo, en (6.20)

(n) =

'

forma otra de
M n
, 0
1 0 , 1
= R
M
(n)

lo cual corresponde a la ventana rectangular definida anteriormente.


En el dominio de la frecuencia la respuesta causal H(e
j
) para los filtros FIR esta dada por la convolucin
peridica de H
d
(e
j
) y la ventana W(e
j
), esto es,

H(e
j
) = H
d
(e
j
) ) ( W(e
j
) = ( )

d e H e W
j
d
j ) (
) (
2
1
(6.22)

Esto se muestras esquemticamente en la siguiente figura

PDF created with pdfFactory trial version www.pdffactory.com

191



la cual es una representacin tpica 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, tambin tiene un lbulo principal cuyo ancho es proporcional a 1/M, adems posee
lbulos laterales con alturas ms pequeas.
2. La convolucin peridica (6.22) produce una versin distorsionada de la respuesta ideal H
d
(e
j
).
3. El lbulo principal produce una banda de transicin en H(e
j
) cuyo ancho se debe al ancho de la
transicin, que es proporcional a 1/M. Tenemos que la abertura del lbulo principal corresponde al ancho
de la transicin.
4. Los lbulos laterales producen rizos que tiene formas similares tanto en la banda de paso como en la
banda de rechazo.


Idea Bsica del Diseo por Ventana Para las especificaciones requeridas del filtro, elegimos un
filtro de longitud M y una funcin de ventana (n) para lograr la reduccin del ancho del lbulo
principal, as como una atenuacin de los lbulos laterales, de modo que queden lo ms pequeos
posibles.


A partir de la observacin 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 desempeos en el dominio de la frecuencia.



Ventana Rectangular

Esta es la funcin de ventana ms simple, pero es la que proporciona la peor representacin desde el punto de
vista de la atenuacin en la banda de rechazo, y fue definida anteriormente por


(n) =

'

forma otra de
M n
, 0
1 0 , 1
(6.23)
PDF created with pdfFactory trial version www.pdffactory.com

192

Su funcin de respuesta en frecuencia es

W(e
j
) =

,
_

,
_


1
1
1
1
]
1

,
_

,
_


2
2
2
2
) (
2
1
sin
sin
W e
sin
sin
M M
r
M
j


que corresponde a la respuesta en amplitud. De (6.22) la actual respuesta en amplitud H
r
() esta dada por

H
r
()

+

+

c c
d
sin
sin
d W
M
r
) (
) (
2
1
) (
2
1
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
anlisis del ancho de banda de transicin y la atenuacin en la banda de rechazo. Las figuras siguientes
muestran la funcin 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 cdigo que no permiti obtener las grficas 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
W
r
-1 0 1
40
13
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
50
21
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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;
%
% Grficas
>> 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)

Despus de una serie de observaciones de las grficas anteriores, podemos hacer varias anotaciones:

1. La respuesta en amplitud W
r
() tiene su primer cero en =
1
, donde

M

M

2
2
1
1


por lo tanto el ancho del lbulo principal es 2
1
=4/M, as tenemos que el ancho aproximado de la
banda de transicin es 4/M.

2. La magnitud del primer lbulo lateral se encuentra aproximadamente en =3/M y esta dada por

,
_

,
_


,
_

3
2 3
2
3
2
3
M
sin
sin
M
W
M
r
para M >> 1
PDF created with pdfFactory trial version www.pdffactory.com

194
que comparndola con la amplitud del lbulo principal, la cual es igual a M, tenemos que la mxima
magnitud del lbulo lateral es
3
2
= 21.22% 13 dB

de la amplitud del lbulo principal.

3. La respuesta en amplitud acumulada tiene su primer lbulo lateral con una magnitud en 21 dB, lo que
significa que hay una atenuacin mnima de 21 dB en la banda de rechazo independiente de la longitud
M de la ventana.

4. Usando la atenuacin mnima en la banda de rechazo, tenemos que el ancho de la banda de transicin
puede ser calculado con precisin. 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 transicin es

s
-
p
=
M
8 . 1


que es ms o menos la mitad del ancho aproximado 4/M que se obtuvo en el punto 1.

Claramente se observa que esta es una operacin de ventana muy simple en el dominio del tiempo, y adems
es una funcin fcil de analizar en el dominio de la frecuencia. Sin embargo, hay dos problemas principales:
el primero de ellos es que la atenuacin mnima de 21 dB en la banda de rechazo es insuficiente en
aplicaciones prcticas, y segundo, el ventaneo rectangular realiza un truncamiento de la longitud infinita de
h
d
(n), lo que da lugar al fenmeno de Gibbs. Si incrementamos M, el ancho de cada lbulo lateral decrecer,
pero el rea debajo de cada lbulo permanecer constante, por lo tanto las amplitudes relativas de los lbulos
laterales permanecern constantes, y la atenuacin mnima en la banda de rechazo permanecer en 21 dB.
Esto implica que todos los rizos se agruparn cerca de los bordes de la banda, tal y como se muestra en las
siguientes grficas.

























-1 0 1
0
1
M = 7
Frecuencia en unidades de
R
e
s
p
u
e
s
t
a

e
n

A
m
p
l
i
t
u
d

I
n
t
e
g
r
a
d
a
-1 0 1
0
1
M = 21
Frecuencia en unidades de
R
e
s
p
u
e
s
t
a

e
n

A
m
p
l
i
t
u
d

I
n
t
e
g
r
a
d
a
-1 0 1
0
1
M = 51
Frecuencia en unidades de
R
e
s
p
u
e
s
t
a

e
n

A
m
p
l
i
t
u
d

I
n
t
e
g
r
a
d
a
-1 0 1
0
1
M = 101
Frecuencia en unidades de
R
e
s
p
u
e
s
t
a

e
n

A
m
p
l
i
t
u
d

I
n
t
e
g
r
a
d
a
Fen meno de Gibbs
PDF created with pdfFactory trial version www.pdffactory.com

195

A continuacin se muestra el cdigo que nos permiti obtener las grficas.


>> 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;
% grficas
>> 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;
% grficas
>> 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;
% grficas
>> 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;
% grficas
>> 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('Fenmeno de Gibbs');




Puesto que la ventana rectangular es imprctica 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 tambin pueden ser analizadas de forma similar a la ventana rectangular, slo presentaremos los
resultados finales.




Ventana Bartlett

Puesto que el fenmeno de Gibbs resulta del hecho que la ventana rectangular tiene una transicin repentina
de 0 a 1 ( 1 a 0), Bartlett propone una transicin ms gradual en forma de una ventana triangular, la cual esta
dada por


(n) =

'

forma otra de
M n
M

M
n
M
n
M
n
, 0
1
2
1
,
1
2
2
2
1
0 ,
1
2
(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 cdigo que nos permiti obtener las grficas 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;
% grficas
>> 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
W
r
-1 0 1
60
27
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
60
26
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 funcin ventana que tambin recibe el nombre de coseno elevado, y esta dada por

(n) =

'


1
]
1

,
_

forma otra de
M n
M
n
, 0
1 0 , cos 1 5 . 0
1
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 1
0
23
Respuesta en Amplitud
Frecuencia en unidades de
W
r
-1 0 1
60
32
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
60
44
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
Ancho=(6.2)*pi/M
Ventana Hanning
PDF created with pdfFactory trial version www.pdffactory.com

199

El cdigo que nos permiti obtener las grficas 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;
% grficas
>> 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 pequea cantidad de discontinuidad, y
esta dada por

PDF created with pdfFactory trial version www.pdffactory.com

200

(n) =

'


,
_

forma otra de
M n
M
n
, 0
1 0 , cos 46 . 0 54 . 0
1
2
(6.27)


Esta ventana y sus respuestas en el dominio de la frecuencia se muestran en la siguiente figura.





























El cdigo que nos permiti obtener las grficas 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;
% grficas
>> 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 45
0
23.84
Respuesta en Amplitud
Frecuencia en unidades de
W
r
-1 0 1
60
43
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
70
54
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 trmino armnico, y esta dada
por


(n) =

'


,
_

+
,
_

forma otra de
M n
M
n
M
n
, 0
1 0 , cos 08 . 0 cos 5 . 0 42 . 0
1
4
1
2
(6.28)



Esta ventana y sus respuestas en el dominio de la frecuencia se muestran a continuacin.



PDF created with pdfFactory trial version www.pdffactory.com

202


























El cdigo que nos permiti obtener las grficas 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;
% grficas
>> 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 45
0
18.48
Respuesta en Amplitud
Frecuencia en unidades de
W
r
-1 0 1
58
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
74
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 caractersticas de las funciones de ventana, en trminos
de sus anchos de transicin (como una funcin de M) y sus atenuaciones mnimas (en dB) en su banda de
rechazo. Tambin se proporciona la aproximacin y el ancho de la banda de transicin de cada ventana.


Ancho de la transicin
Ventana
Aproximacin Valores Exactos
Atenuacin

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 transicin 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 opcin para
muchas aplicaciones.



Ventana Kaiser

Esta es una de las ventanas ms tiles y ptimas; se dice que es optima en el sentido de que proporciona una
gran amplitud en el lbulo principal dada la atenuacin en la banda de rechazo, lo cual implica un ancho de
transicin muy agudo. Esta funcin de ventana se debe a J.F. Kaiser y esta dada por

PDF created with pdfFactory trial version www.pdffactory.com

204

(n) =
[ ]
1 0 ,
1
2
1 1
0
2
0

1
1
]
1

,
_


M n
I
M
n
I
(6.29)

donde I
o
[] es la funcin Bessel modificada de orden-cero , y es un parmetro que depende de M, que puede
ser elegido para producir varios anchos de transicin y una atenuacin ptima en la banda de rechazo. Esta
ventana puede producir diferentes anchos de transicin para la misma M, lo cual es algo de lo que las otras
ventanas carecen. Por ejemplo,

Si =5.658, entonces el ancho de transicin es igual a 7.8 /M, y la atenuacin mnima en la banda de
rechazo es igual a 60 dB. Esto se muestra en la siguiente figura.



























El cdigo que nos permiti obtener las grficas 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 transicin 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 45
0
22.6383
Respuesta en Amplitud
Frecuencia en unidades de
W
r
-1 0 1
42
0
Respuesta en Amplitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
-1 1
60
0
Respuesta en Amplitud Acumulada
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
Ancho=(7.8)*pi/M
Ventana Kaiser
PDF created with pdfFactory trial version www.pdffactory.com

205
% grficas
>> 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 transicin es igual a 5.8 /M, y la atenuacin mnima 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 transicin, y
debido a la complejidad involucrada en las funciones Bessel las ecuaciones de diseo para esta ventana no son
fciles de derivar. Afortunadamente Kaiser ha desarrollado ecuaciones de diseo empricas, las cuales se
muestran a continuacin.

Dados
p
,
s
, R
p
, y A
s
Ancho de Transicin = f =


2
p s


Orden del Filtro = M 1
36 . 14
95 . 7
+

f
A
s
(6.30)

Parmetro

'

< < +



50 21 ), 21 ( 07886 . 0
) 21 ( 5842 . 0
50 ), 7 . 8 ( 1102 . 0
4 . 0
s s
s
s s
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 seccin, para
las cuales a continuacin presentamos una breve descripcin.

w=boxcar(M) Regresa la funcin de ventana rectangular con M-puntos en el arreglo w.
w=triang(M) Regresa la funcin de ventana Bartlett (triangular) con M-puntos en el arreglo w.
w=hanning(M) Regresa la funcin de ventana Hanning con M-puntos en el arreglo w.
w=hamming(M) Regresa la funcin de ventana Hamming con M-puntos en el arreglo w.
w=blackman(M) Regresa la funcin de ventana Blackman con M-puntos en el arreglo w.
w=kaiser(M,beta) Regresa la funcin de ventana rectangular con M-puntos y un valor determinado de
beta.


Usando estas rutinas, podemos usar MATLAB para disear filtros FIR basados en las tcnicas de ventana, lo
cual requiere una respuesta al impulso pasa bajas ideal, h
d
(n). Por lo tanto es conveniente tener una rutina que
implemente h
d
(n), como la que se muestra a continuacin.

















En el toolbox de procesamiento de seales esta disponible una rutina llamada fir1, la cual sirve para disear
filtros FIR. Sin embargo, esta rutina no esta disponible en la versin estudiantil de MATLAB. Para desplegar
las grficas de los filtros digitales en el dominio de la frecuencia, MATLAB posee la rutina freqz, que con su
uso hemos desarrollado una versin modificada llamada freqz_m, la cual devuelve el valor absoluto de la
respuesta en magnitud as como tambin en escala relativa en dB, la respuesta en fase, y la respuesta de
retardo de grupo. El cdigo de esta nueva rutina se muestra a continuacin.



















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 pequeo 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 continuacin desarrollamos una serie de ejemplos para el diseo de filtros FIR, usando las tcnicas con
ventana y rutinas de MATLAB.


En este primer ejemplo diseamos un filtro FIR pasa bajas con las siguientes especificaciones:

p
= 0.2, R
p
= 0.25 dB

s
= 0.3, A
s
= 50 dB

Elegimos una funcin 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 diseado.

Aunque ambas ventanas Hamming y Blackman pueden proporcionar una atenuacin de ms de 50 dB, nos
decidimos por la ventana Hamming, la cual proporciona una banda de transicin ms pequea y por lo tanto
es de orden menor; y aunque no usemos en el diseo el valor del rizo de R
p
=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 diseo se ven plasmados en el siguiente cdigo.

>> 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))) % Atenuacin minina en la banda
% de rechazo
As = 52
% Grficas
>> 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 atenuacin 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 diseo. Adems cabe hacer notar que en la prctica, la verificacin del rizo en la banda de
paso es extremadamente recomendada. As tenemos que las grficas 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, R
p
= 0.25 dB

s
= 0.3, A
s
= 50 dB

elegimos la ventana Kaiser para disear el filtro pasa bajas correspondiente. Los pasos del diseo se muestran
en el siguiente cdigo.

>> 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))) % Atenuacin minina en la banda
% de rechazo
As = 52
% Grficas
>> 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.3
Respesta al Impulso Ideal
n
h
d
(
n
)
0 20 40 60
0
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.3
Respuesta al Impulso Actual
n
h
(
n
)
0 0.20.3 1
50
0
Respuesta en Magnitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 parmetros de la ventana Kaiser son M=61 y =4.5513, y que la atenuacin en la
banda de rechazo es de 52 dB. Las grficas en el dominio del tiempo y la frecuencia se muestran a
continuacin.





























Ahora disearemos el siguiente filtro digital pasa banda


Borde inferior en la banda de rechazo :
1s
= 0.2, A
s
= 60 dB
Borde inferior en la banda de paso :
1p
= 0.35, R
p
= 1 dB
Borde superior en la banda de paso :
2p
= 0.65, R
p
= 1 dB
Borde superior en la banda de rechazo:
2s
= 0.8, A
s
= 60 dB


Estas cantidades se muestran en la siguiente figura:

0 20 40 60
-0.1
0
0.1
0.2
0.3
Respuesta al Impulso Ideal
n
h
d
(
n
)
0 20 40 60
0
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.3
Respuesta al Impulso Actual
n
h
(
n
)
0 0.20.3 1
50
0
Respuesta en Magnitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
Filtro Pasa Bajas
PDF created with pdfFactory trial version www.pdffactory.com

210




En este caso tenemos que hay dos bandas de transicin, a saber,
1
=
1p
-
1s
y

2
=
2s
-
2p
, cuyos
anchos de banda debe ser los mismos en el diseo de la ventana; es decir, que no hay independencia sobre el
control de
1
y
2
. Por lo tanto
1
=
2
=. Para este diseo podemos usar cualquiera de las ventanas
Kaiser o Blackman; que para este ejercicio nos inclinamos por la ventana Blackman. Adems de la ventana,
tambin necesitamos un filtro pasa banda con respuesta al impulso h
d
(n) ideal, el cual puede ser obtenido a
partir de dos filtros pasa bajas con respuesta en amplitud ideal, con la condicin de que tengan la misma
respuesta en fase. Esto puede ser apreciado con ms 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 diseo se muestran en el siguiente cdigo.

>> 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))) % Atenuacin mnima en la
% banda de rechazo
As = 75
% Grficas
>> 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 atenuacin en la banda de rechazo es de 75
dB. Las grficas en el dominio del tiempo y la frecuencia se muestran a continuacin.




























0 20 40 60
-0.4
-0.2
0
0.2
0.4
Respuesta al Impulso Ideal
n
h
d
(
n
)
0 20 40 60
0
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
D
e
c
i
b
e
l
e
s
Filtro Pasa Banda
PDF created with pdfFactory trial version www.pdffactory.com

212

Nuestro siguiente ejemplo de diseo consiste en que dada la respuesta en frecuencia de un filtro rechaza
banda ideal

H
e
(e
j
) =

'

<

<



| | 3 / 2 , 1
3 / 2 | | 3 / , 0
3 / | | 0 , 1



emplearemos una ventana Kaiser para disear un filtro rechaza banda de longitud M=45 con una atenuacin
en la banda de rechazo de 60 dB.


Notar que en las especificaciones de diseo, el ancho de la banda de transicin no esta definido, ya que ser
determinado en base a la longitud M=45 y el parmetro de la ventana Kaiser. Por lo tanto, de las ecuaciones
de diseo (6.30) podemos determinar a partir de A
s
; esto es,


= 0.1102 x (A
s
- 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 mtodo similar al de la figura anterior, donde se describe la obtencin
de un pasa banda a partir de dos pasa bajas. Ahora podemos implementar el diseo empleando la ventana
Kaiser y checar la atenuacin mnima en la banda de rechazo. El cdigo 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 parmetro es igual a 5.6533, y de la grfica siguiente se observa que la mnima atenuacin
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
D
e
c
i
b
e
l
e
s

















Claramente se observa que tenemos que incrementar para incrementar la atenuacin a 60 dB. As que el
valor requerido para resulta en =5.9533, como se muestra en el siguiente cdigo.


>> 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]);
%
% Grficas
>> 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 grficas en el dominio del tiempo y la frecuencia se muestran a continuacin, en las cuales el filtro
diseado 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

H
d
(e
j
) =

'

< <
<
0 ,
0 ,
- j
j
(6.31)

Empleando una ventana Hamming de longitud 21, disearemos 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

h
d
(n) = F[ H
d
(e
j
) e
-j
] =



d e e e H
n j j j
d
) (
2
1


=




d e e j d e e j
n j j n j j
0
0
) (
2
1
) (
2
1


=

'





n
n
n
n
, 0
,
) (
) ( cos


La respuesta al impulso anterior puede ser implementada en MATLAB junto con la ventana Hamming para
disear el diferenciador requerido. Cabe hacer notar que si M es un nmero par, entonces =(M-1)/2 no es un
entero, y h
d
(n) ser igual a cero para toda n. Por lo tanto M debe ser un nmero impar, lo que da como
0 10 20 30 40
-0.2
0
0.2
0.4
0.6
0.8
Respuesta al Impulso Ideal
n
h
d
(
n
)
0 10 20 30 40
0
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.8
Respuesta al Impulso Actual
n
h
(
n
)
0 1/3 2/3 1
60
0
Respuesta en Magnitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 H
r
()=0 para los filtros Tipo-3. El siguiente cdigo muestra los pasos del diseo.

>> 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);
% Grficas
>> 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 grficas resultantes son las siguientes:

























0 5 10 15 20
-1
-0.5
0
0.5
1
Respuesta al Impulso Ideal
n
h
d
(
n
)
0 5 10 15 20
0
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 1
0
0.2
0.4
0.6
0.8
1
Respuesta en Amplitud
Frecuencia en unidades de
P
e
n
d
i
e
n
t
e

e
n

u
n
i
d
a
d
e
s

d
e

Diferenciador FIR
PDF created with pdfFactory trial version www.pdffactory.com

216

Empleando una ventana Hamming diseamos 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,

H
d
(e
j
) =

'

< < +
<


0 ,
0 ,
- je
je -
j
j
(6.32)


que despus de obtener la transformada inversa, tenemos que la respuesta al impulso ideal esta dada por


h
d
(n) =

'

n
n
n
n sin
, 0
,
) (
2 / ) ( 2
2



la cual puede ser fcilmente implementada en MATLAB; y puesto que M=25, tenemos que el filtro a disear
es de Tipo-3. El siguiente cdigo muestra los pasos del diseo.


>> 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);
% Grficas
>> 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 grficas 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





























TCNICAS DE DISEO CON
MUESTREO EN FRECUENCIA


En este enfoque de diseo nos valemos del hecho que la funcin del sistema H(z) puede ser obtenida a partir
de las muestras H(k) de la respuesta en frecuencia H(e
j
). Si tenemos la respuesta al impulso h(n) de un filtro
FIR con M-puntos, su TDF H(k) con M-puntos, y su funcin del sistema H(z), entonces tenemos que:


H(z) =

1
0
/ 2 1
1
0
1
) ( 1
) (
M
K
M k j
M
n
M
n
e z
k H
M
z
z n h (6.33)

y
H(e
j
) =

1
0
/ 2
1
) ( 1
M
K
M k j j
M j
e e
k H
M
e
(6.34)


con
H(k) = H(e
j2k/ M
) =

'

1 ,..., 1 ), (
0 ), 0 (
*
M k k M H
k H


0 5 10 15 20 25
-1
-0.5
0
0.5
1
Respuesta al Impulso Ideal
n
h
d
(
n
)
0 5 10 15 20 25
0
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
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
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) = t 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
k H j
r
e
M
k
H

,
_


(6.35)

donde

'


,
_


,
_


1 ,..., 1 ,
) ( 2
0 ), 0 (
2
M k
M
k M
H
k H

M
k
H
r
r
r
(6.36)

y

H(k) =

'

+
1
]
1

,
_


+
1
]
1



,
_

,
_

1 ,..., 1
2
1
), (
2
2
1
2
1
,..., 0 ,
2
2
1
M
M
k k M
M
M
M
k
M
k

M
, (Tipo-1 y 2) (6.37)



H(k) =

'

+
1
]
1

,
_

,
_


t
1
]
1



,
_

,
_



,
_


t
1 ,..., 1
2
1
), (
2
2
1
2
2
1
,..., 0 ,
2
2
1
2
M
M
k k M
M
M
M
k
M
k

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 frmulas explcitas para calcular h(n)a
partir de H(k). Pero nosotros usaremos la rutina ifft de MATLAB para calcular h(n).

Idea Bsica Dado el filtro pasa bajas ideal H
d
(e
j
), elegimos M como la longitud del filtro, y entonces
muestreamos a H
d
(e
j
) en M frecuencias equidistantes entre 0 y 2. As tenemos que la respuesta actual H(e
j
)
es la interpolacin 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 ms, esta idea tambin puede ser extendida para la
aproximacin de especificaciones arbitrarias en el dominio de la frecuencia.

De la figura de arriba observamos lo siguiente:

1. El error de aproximacin, esto es, la diferencia entre la respuesta ideal y la actual, es cero en las
frecuencias muestreadas.
2. El error de aproximacin en todas las otras frecuencias depende del tamao del error de aproximacin, y
la forma de la respuesta ideal; es decir, entre ms aguda se la respuesta ideal, el error de aproximacin
ser mayor.
3. El error es ms grande cerca de los bordes de la banda y ms pequeo en el interior de la banda.

En esta tcnica hay dos enfoques de diseo: en el primer enfoque se usa la idea bsica tal cual, y no se
proporcionan restricciones sobre el error de aproximacin; esto es que, aceptamos cualquier error que
provenga del diseo, debido a esto el enfoque es llamado mtodo de diseo 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 transicin. Esto da como resultado un mejor diseo llamado mtodo de diseo optimo.


Mtodo de Diseo Ingenuo

En este mtodo establecemos H(k) = H
d
(e
j2k/ 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 prctica este mtodo nos valemos del siguiente
ejemplo.

Considerando las siguientes especificaciones para un filtro pasa bajas


p
= 0.2, R
p
= 0.25 dB

s
= 0.3, A
s
= 50 dB

disearemos un filtro FIR usando el enfoque de muestreo en frecuencia.

Para comenzar con nuestro diseo elegimos M=20 para as tener una muestra en la frecuencia
p
, es decir, en
k=2:

p
= 0.2 = 2
20
2


y la prxima muestra en
s
, es decir, en k=3:

s
= 0.3 = 3
20
2

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

1 , 1 , 0 ., . . , 0 , 1 , 1 , 1 ) (
15
k H
ceros
r
3 2 1


Puesto que M = 20, =
2
1 20
= 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) =

'

19 10 ), 20 ( 95 . 0
9 0 , 95 . 0
20
2
5 . 9
k k
k k k


Ahora a partir de (6.35) ensamblamos H(k), y de (6.39) determinamos la respuesta al impulso h(n). El cdigo
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('Mtodo de Diseo Ingenuo');

Las grficas 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 atenuacin mnima 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 transicin, para las que no
conocemos con exactitud la respuesta en frecuencia. Por lo tanto el mtodo de diseo ingenuo es raramente
usado en la prctica.



Mtodo de Diseo Optimo

Para obtener ms atenuacin, tenemos que incrementar M y hacer que la banda de transicin este libre de
muestras, es decir , tenemos que variar sus valores para obtener una atenuacin ms grande. Este problema es
conocido como el problema de optimizacin, y se resuelve usando tcnicas de programacin lineal. Ahora
demostraremos los efectos que provoca la variacin de las muestras en la banda de transicin, haciendo uso
del siguiente ejemplo.

Disearemos 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 transicin 0.2 < < 0.3, y puesto que
1
=
2/40 tenemos que las muestras en la banda de transicin se encuentran en k=5 y en k=40-5=35. Ahora
denotaremos el valor de estas muestras como T
1
, donde 0 < T
1
< 1. As tenemos que la respuesta en amplitud
muestreada es

1
1
]
1

1 , 1 , 1 , 1 , , 0 , . . . , 0 , , 1 , 1 , 1 , 1 , 1 ) (
1
29
1
T T k H
ceros
r
3 2 1


Ya que =
2
1 40
= 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
H
r
(
k
)
0 5 10 15 20
-0.1
0
0.1
0.2
0.3
Respuesta al Impulso
n
h
(
n
)
0 0.20.3 1
0
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.20.3 1
16
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
M todo de Dise o Ingenuo
PDF created with pdfFactory trial version www.pdffactory.com

222


H(k) =

'

39 20 ), 40 ( 975 . 0
19 0 , 975 . 0
40
2
5 . 19
k k
k k k



Ahora podemos variar T
1
para obtener una mejor atenuacin mnima en la banda de rechazo, lo cual resultara
en un incremento en el ancho de transicin. Por ejemplo, veamos que sucede cuando T
1
=0.5 en el siguiente
cdigo:



% (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('Mtodo de Diseo Optimo: T1=0.5');



Las grficas resultantes se muestran a continuacin.





PDF created with pdfFactory trial version www.pdffactory.com

223


























Se puede observar que la atenuacin mnima en la banda de rechazo es ahora de 30 dB, lo cual representa una
mejora de lo que se obtuvo empleando el mtodo de diseo ingenuo, sin embargo este resultado todava no
esta en el nivel aceptable de 50 dB. As, tenemos que el mejor valor de T
1
fue obtenido varindolo
manualmente , por lo que la solucin optima ms cercana fue encontrada para T
1
=0.39, como se muestra en el
siguiente cdigo.

% (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
H
r
(
k
)
0 10 20 30 40
-0.1
0
0.1
0.2
0.3
Respuesta al Impulso
n
h
(
n
)
0 0.20.3 1
0
0.5
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.20.3 1
30
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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('Mtodo de Diseo Optimo: T1=0.39');

Las grficas resultantes son las siguientes.



























Se puede observar que la atenuacin optima en la banda de rechazo es de 43 dB. Ahora resulta obvio que para
incrementar la atenuacin tenemos que variar ms de una muestras en la banda de transicin.

Claramente, este mtodo es superior en el sentido que variando una muestra podemos obtener un diseo
mucho mejor. Y puesto que en la prctica el ancho de banda de transicin es generalmente pequeo,
conteniendo una o dos muestras, entonces necesitamos optimizar en ms de dos muestras para obtener la
mayor atenuacin mnima en la banda de rechazo. Esto tambin es equivalente a minimizar la magnitudes
mximas (el valor absoluto) de los lbulos laterales. Por lo tanto, este problema de optimizacin tambin 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 mtodo de diseo ingenuo. Realizamos nuestras solucin empleando dos muestras en la banda
de transicin para as conseguir una mejor atenuacin en la banda de rechazo.


Comenzamos eligiendo M=60 para que de este modo existan dos muestras en la banda de transicin. Dados
los valores T
1
y T
2
de estas muestras en la banda de transicin, entonces H
r
() esta dada por
0 0.20.3 1
0
0.39
1
Muestras en Frecuencia: M=40, T1=0.39
Frecuencia en unidades de
H
r
(
k
)
0 10 20 30 40
-0.1
0
0.1
0.2
0.3
Respuesta al Impulso
n
h
(
n
)
0 0.20.3 1
0
0.39
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.20.3 1
43
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
M todo de Dise o Optimo: T1=0.39
PDF created with pdfFactory trial version www.pdffactory.com

225


H
r
() =
1
1
]
1

3 2 1 3 2 1 3 2 1
unos 6 ceros 43 unos
T T T T 1 , . . . , 1 , , , 0 , . . . , 0 , , , 1 , . . . , 1
1 2 2 1
7




De las tablas presentes en el libro de Proakis tenemos que T
1
= 0.5925 y T
2
= 0.1099. Usando estos valores
empleamos MATLAB para calcular h(n), tal y como se muestra en el siguiente cdigo.



>> 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: Mtodo Optimo T1 & T2');



Las grficas resultantes son las siguientes.





PDF created with pdfFactory trial version www.pdffactory.com

226


























Se puede observar que la atenuacin mnima en la banda de rechazo es ahora de 63 dB, lo cual es aceptable.

Como un segundo ejemplo diseamos el filtro pasa banda que ya fue examinado empleando la tcnica de
muestreo en frecuencia, cuyas especificaciones de diseo son:

Borde inferior en la banda de rechazo :
1s
= 0.2, A
s
= 60 dB
Borde inferior en la banda de paso :
1p
= 0.35, R
p
= 1 dB
Borde superior en la banda de paso :
2p
= 0.65, R
p
= 1 dB
Borde superior en la banda de rechazo:
2s
= 0.8, A
s
= 60 dB

En este caso elegimos M=40, para as tener dos muestras en la banda de transicin. Dadas las muestras en
frecuencia T
1
y T
2
en la banda de transicin inferior, tenemos que las muestras de la respuesta en amplitud
son

1
1
]
1


3 2 1 3 2 1 3 2 1 3 2 1 3 2 1
4
1 2
7
2 1
9
1 2
7
2 1
5
0 , . . . , 0 , , , 1 , . . . , 1 , , , 0 , . . . , 0 , , , 1 , . . . , 1 , , , 0 , . . . , 0 ) ( T T T T T T T T H
r



Los valores ptimos de T
1
y T
2
para M=40 y siete muestras en la banda de paso son

T
1
= 0.109021, T
2
=0.59417456

El cdigo 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
0
0.109
0.59
1
Pasa Bajas: M=60,T1=0.59, T2=0.109
Frecuencia en unidades de
H
r
(
k
)
0 20 40 60
-0.1
0
0.1
0.2
0.3
Respuesta al Impulso
n
h
(
n
)
0 0.20.3 1
0
0.109
0.59
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.20.3 1
63
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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: Mtodo Optimo T1 & T2');

Las grficas resultantes que muestran un aceptable diseo del filtro pasa banda son las siguientes:


























0 0.2 0.35 0.65 0.8 1
0
0.109
0.59
1
Pasa Banda: M=40,T2=0.5941, T1=0.109
Frecuencia en unidades de
H
r
(
k
)
0 10 20 30 40
-0.4
-0.2
0
0.2
0.4
Respuesta al Impulso
n
h
(
n
)
0 0.2 0.35 0.65 0.8 1
0
0.109
0.59
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.2 0.35 0.65 0.8 1
60
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
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 diseamos el siguiente filtro pasa altas:

Borde en la banda de rechazo:
s
= 0.6, A
s
= 50 dB
Borde en la banda de paso :
p
= 0.8, R
p
= 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 transicin. Con estas eleccin de M no es
posible tener muestras de frecuencias en
s
y
p
. As tenemos que las muestras de la respuesta en amplitud
son

1
1
]
1

3 2 1 3 2 1 3 2 1
10
1 2
8
2 1
11
0 ., . . , 0 , , , 1 , . . . , 1 , , , 0 , . . . , 0 ) ( T T T T k H
r


mientras que las muestras de la respuesta en fase son

H(k) =

'

32 17 ), 33 (
33
32
16 0 ,
33
32
33
2
2
1 33
k k
k k k


Los valores ptimos para las muestras de transicin son T
1
= 0.1095 y T
2
= 0.598. Con el uso de estos valores
obtenemos el siguiente cdigo:

>> 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: Mtodo Optimo T1 & T2');

Las grficas resultantes son las siguientes:



























Ahora diseamos un diferenciador digital con 33-puntos, basado en el diferenciador ideal (6.31), donde
las muestras de la respuesta en amplitud (parte imaginaria) estn dadas por


jH
r
(k) =

'

+
1
]
1

1
]
1

+
1 , . . . , 1
2
1
), (
2
2
1
, . . . , 0 ,
2
M
M
k k M
M
j
M
k k
M
j



y para la fase lineal, las muestras son:


H(k) =

'

+
1
]
1

+
1
]
1

1 ., . . , 1
2
1
), (
1
2
1
., . . , 0 ,
1 2
2
1
M
M
k k M
M
M
M
k k
M
M
k
M
M


0 .6 .8 1
0
0.109
0.59
1
Pasa Altas: M=33,T1=0.1095,T2=0.598
Frecuencia en unidades de
H
r
(
k
)
0 10 20 30
-0.4
-0.2
0
0.2
0.4
Respuesta al Impulso
n
h
(
n
)
0 .6 .8 1
0
0.109
0.59
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 .6 .8 1
50
0
Respuesta en Magnitud
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
Filtro Pasa Altas: M todo Optimo T1 & T2
PDF created with pdfFactory trial version www.pdffactory.com

230
Por lo tanto

H(k) = jH
r
(k) e
jH(k)
, 0 k M-1 y h(n) = TDFI[H(k)]

El cdigo que muestra los pasos del diseo 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);
%
% Grficas
>> 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, Diseo 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 grficas 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.5
Diferenciador, Dise o por Muestreo en Frecuencia: M = 33
Frecuencia en unidadesde
H
r

e
n

u
n
i
d
a
d
e
s

d
e

0 16 32
-1
-0.5
0
0.5
1
Respuesta al Impulso
n
h
(
n
)
PDF created with pdfFactory trial version www.pdffactory.com

231


Por ltimo diseamos 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) estn dadas por



jH
r
(k) =

'

+
1
]
1

1
]
1



1 ., . . , 1
2
1
,
0 , 0
2
1
., . . , 1 ,
M
M
k 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 transicin) ms 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 cdigo
muestra los pasos del diseo.



>> 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);
%
% Grficas
>> 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, Diseo 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 grficas resultantes muestran el efecto de las muestras en la banda de transicin.


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
= k
M
2
, 0 k M-1


Existe una segunda serie de muestras distribuidas uniformemente, dadas por

k
=
M
k ) ( 2
2
1
+
, 0 k M-1


A esto se le conoce como filtro Tipo-B, para el cual tambin esta disponible una estructura por muestreo en
frecuencia, donde sus expresiones para la respuesta en magnitud H(e
j
) y la respuesta al impulso h(n) son algo
ms complicadas.




TCNICA DE DISEO POR
EQUIRIZO OPTIMO

Las ltimas dos tcnicas, a saber, el diseo por ventana y el diseo por muestreo en frecuencia, fueron
fciles 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 diseo, es decir, tenemos que
aceptar cualquier valor que obtengamos despus del diseo. La segunda desventaja consiste en que no
podemos especificar los factores de rizo
1
y
2
simultneamente, ya que para cualquiera de los dos tenemos
0 0.2 0.4 0.6 0.8 1
0
0.39
1
Transformador de Hilbert, Dise o por Muestreo en Frecuencia: M = 51
Frecuencia en unidades de
R
e
s
p
u
e
s
t
a

e
n

A
m
p
l
i
t
u
d
0 25 50
-1
-0.5
0
0.5
1
Respuesta al Impulso
n
h
(
n
)
PDF created with pdfFactory trial version www.pdffactory.com

233

que
1
=
2
en el mtodo de diseo por ventana, o podemos optimizar solamente
2
en el mtodo por muestreo
en frecuencia. Finalmente, el error de aproximacin ; 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 ms pequeo 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 tcnicas capaces de eliminar los tres problemas anteriores, pero son algo difciles
de entender, y requieren una computadora para su implementacin.

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 solucin del diseo es optimo, en el sentido de minimizar el mximo error de
aproximacin. Los filtros que tienen esta propiedad son llamados filtros equirizo, debido a que el error de
aproximacin esta distribuido uniformemente tanto en la banda de paso como en la banda de rechazo, lo que
da como resultado filtros de orden ms bajo.

En lo que sigue de este apartado, formularemos un problema de diseo para un filtro FIR minimax optimo,
y discutiremos el nmero total de mximos y mnimos 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 diseo para filtros FIR
equirizo, el cual usa interpolacin polinomial para su solucin, y es conocido como el algoritmo Parks-
McClellan, que incorpora la rutina de intercambio Remez para la solucin polinomial. Este algoritmo esta
disponible como una subrutina en muchas plataformas de clculo. A continuacin vemos como usando
MATLAB podemos disear 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(e
j
) = ) (
2
1

r
M
j
j
H e e


donde los valores para y las expresiones para H
r
() se muestran en la siguiente tabla



Tipo de Filtro FIR con fase lineal H
r
(e
j
)

Tipo 1: M impar, h(n) simtrica 0

2 / ) 1 (
0
cos ) (
M
n n a

Tipo 2: M para, h(n) simtrica 0 [ ]


2 /
1
) 2 / 1 ( cos ) (
M
n n b

Tipo 3: M impar, h(n) antisimtrica
2

2 / ) 1 (
1
) (
M
n sin n c

Tipo 4: M para, h(n) antisimtrica
2

[ ]


2 /
1
) 2 / 1 ( ) (
M
n sin n d


PDF created with pdfFactory trial version www.pdffactory.com

234

Usando entidades trigonomtricas simples, cada expresin de H
r
() en la tabla anterior, puede ser escrita
como el producto de una funcin de (llamada Q()) y una funcin que es una suma de cosenos (llamada
P()). As obtenemos

H
r
() = Q()P() (6.40)

donde P() es de la forma

P() =


L
n
n n
0
cos ) ( (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
2
1 M


L
n n a
0
cos ) (

Tipo 2:
2
cos

1
2

M


L
n n b
0
cos ) (
~


Tipo 3: sin
2
3 M


L
n n c
0
cos ) (
~


Tipo 4:
2

sin 1
2

M


L
n n d
0
cos ) (
~





El propsito de este anlisis es tener una forma comn de H
r
() para los cuatro casos, haciendo que la
formulacin del problema sea ms fcil. As que, para formular nuestro problema como un problema de
aproximacin Chebyshev, tenemos que definir la respuesta en amplitud H
dr
() deseada, as como tambin una
funcin de peso W(), ambas definidas sobre las bandas de paso y las bandas de rechazo. La funcin de peso
es necesaria para poder tener un control independiente sobre
1
y
2
. Tambin tenemos que el error de peso
esta definido como


E() = W()[ H
dr
() - H
r
()] , S = [0,
p
] [
s
, ] (6.42)



Estos conceptos se hacen ms claros en la siguiente figura, donde se muestra una tpica respuesta de un filtro
equirizo, junto con su respuesta ideal.

PDF created with pdfFactory trial version www.pdffactory.com

235



























El cdigo 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 [ H
dr
() - H
r
() ] se muestra enseguida


















El cdigo 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('Funcin 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 cdigo que nos permiti obtener la figura es el siguiente:

% ------ Funcin 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('Funcin 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 mximo tanto en la banda de paso como en la banda de rechazo es
2
. Por lo tanto,
si conseguimos minimizar el error de peso mximo a
2
, automticamente satisfacemos la especificacin en la
banda de paso para
1
. Si sustituimos H
r
() de (6.40) en (6.42), obtenemos


E() = W() [ H
dr
() - Q()P() ]

= W()Q()
1
]
1

) (
) (
) (
P
Q
H
dr
, S

si definimos

) (
) (
) (

) ( ) ( ) (


Q
H
H y Q W W
dr
dr

PDF created with pdfFactory trial version www.pdffactory.com

238

entonces obtenemos

E() = [ ] ) ( ) (

) (

P H W
dr
, S (6.44)


Por consiguiente tenemos una forma comn de E() para los cuatro casos.


El problema de aproximacin Chebyshev ahora puede ser definido como:


Determinar la serie de coeficientes a(n) o ) (
~
n b o ) (
~
n c o ) (
~
n d [ o equivalentemente a(n) o b(n) o
c(n) o d(n)] para minimizar el mximo valor absoluto de E() sobre la banda de paso y la banda
de rechazo, Vg.,

[ ] E max min
S sobre 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 solucin al problema anterior, discutiremos la cuestin; Cuntos mximos y mnimos locales
existen en la funcin de error E() dado un filtro con M-puntos?, ya que esta informacin es usada por el
algoritmo Parks-McClellan para obtener la interpolacin polinomial. La respuesta la encontramos en la
expresin P() de (6.41), la cual es una funcin trigonomtrica en . Usando identidades trigonomtricas de
la forma

cos(2) = 2cos
2
() - 1
cos(3) = 4cos
3
() - 3cos()

M M

P() puede ser convertida en un polinomio trigonomtrico en funcin del cos(), por lo que podemos escribir
(6.41) como

P() =


L
n
n
n
0
cos ) ( (6.46)


A continuacin 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 adems h(n) es simtrica; 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() = ) 3 cos 2 2 cos 4 cos 6 4 ( cos ) (
3
0
15
1
+ + +

n n
= )} cos 3 cos 4 ( 2 ) 1 cos 2 ( 4 cos 6 4 {
3 2
15
1
+ + +
=

+ + +
3
0
3 2
cos ) ( cos cos 0 0
15
8
15
8 n
n

(n) =
1
]
1

15
8
,
15
8
, 0 , 0 .


De (6.46) notamos que P() es un polinomio en funcin del cos() de orden L, y puesto que cos() es una
funcin montona 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 funcin de x. Por lo tanto P() tiene a lo mucho (no
ms de ) L -1 extremos locales en el intervalo abierto 0 < < . Por ejemplo,


2
2 cos 1
) ( cos
2 +



tiene solamente un mnimo en = /2. Sin embargo, tiene tres extremos en el intervalo cerrado 0 , que
corresponde a : un mximo en =0, un mnimo en = /2 y un mximo en =. Ahora, si incluimos los
puntos finales =0 y =, entonces P() tiene a lo mucho L+1 extremos en el intervalo cerrado 0 .
Finalmente, desearamos 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 ms de L+3 frecuencias extremas en
el intervalo 0 .


A manera de conclusin podemos decir que la funcin de error E() tiene a lo mucho L+3 extremos en S.
Esto se comprueba en el siguiente ejemplo, basado en las grficas de la respuesta en amplitud del filtro en el
ejemplo anterior, y el nmero total de extremos en la correspondiente funcin 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) =
1
]
1

15
8
15
8
, , 0 , 0 del ejemplo anterior. Por lo tanto


P() = +
3 2
cos
15
8
cos
15
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 < < . Tambin se
muestra la funcin de error, la cual tiene (L+3)=6 extremos.


Poniendo nuestra atencin en la declaracin del problema, y a la ecuacin (6.45), observamos que ste
problema es bien conocido en la teora de aproximacin, cuya solucin 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 aproximacin minimax para H
dr
() sobre S, es necesario y suficiente que la
funcin 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
= =

E max E E
S
i i
(6.47)
= S < < <
+1 1 0
,
L
L


Combinando este teorema con nuestra conclusin anterior, inferimos que el filtro equirizo optimo tiene L+2
L+3 alternancias en su funcin 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 solucin a nuestro problema de aproximacin minimax existe y
adems en nica, pero ste no dice como obtener la solucin. Ya que no conocemos el orden M (o
equivalentemente L), ni las frecuencias extremas
i
, ni los parmetros {(n)}, ni el error mximo , Parks y
McClellan proporcionan una solucin iterativa usando el algoritmo de intercambio Remez, el cual asume que
la longitud M del filtro ( L), y la relacin
2
/
1
son conocidas. Si elegimos la funcin de peso como en
(6.43), y si elegimos el orden M correctamente, entonces =
2
cuando la solucin es obtenida. Claramente se
tiene que y M estn relacionados, siendo M ms grande que . Tambin 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 frmula que permite obtener una aproximacin de M, y esta dada por


= +


=
2
1
6 . 14
13 log 20

2 1 10 p s
f ;
f
M (6.48)


El algoritmo Parks-McClellan comienza suponiendo L+2 frecuencias extremas {
i
} y estimando el error
mximo en estas frecuencias, lo que corresponde a un polinomio de orden L (6.46) a travs de los puntos
dados en (6.47). Los errores mximos 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 iteracin continua hasta que el
conjunto optimo {
i
} y el error mximo 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 funcin llamada remez, que se describe ms
adelante.

Puesto que aproximamos M, el error mximo 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 funcin llamada remez, cuya sintaxis
ms 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 continuacin:


[h] = remez(N, f, m) Disea 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 estn en unidades de ; esto es, 0.0 f 1.0; adems 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
nmero par. Por ltimo tenemos que la funcin 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
funcin 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 disea diferenciadores digitales o transformadores digitales de Hilbert, respectivamente. Para
el transformador digital de Hilbert la frecuencia ms baja en el arreglo f no debe ser 0, y la frecuencia ms
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
funcin de peso en cada banda.


Como se explico durante la descripcin del algoritmo Parks-McClellan , primero tenemos que obtener el
orden del filtro usando (6.48) para poder usar la rutina remez. Despus de obtener los coeficientes del filtro,
los cuales se colocan en el arreglo h, tenemos que checar la atenuacin mnima en la banda de rechazo y
compararla con la A
s
establecida; y entonces incrementar (o decrementar) el orden del filtro. Tenemos que
repetir este proceso hasta obtener la A
s
deseada. Para ilustrar este procedimiento desarrollamos a continuacin
una serie de ejemplos.


Para este ejemplo diseamos un filtro pasa bajas, el cual ya fue analizado anteriormente usando la tcnica
de diseo por ventana. Los parmetros de diseo son

p
= 0.2 , R
p
= 0.25 dB

s
= 0.3 , A
s
= 50 dB

El siguiente cdigo describe los pasos del diseo:

>> 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);
%
% Grficas
>> 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 atenuacin calculada en la banda de
rechazo excede la atenuacin A
s
establecida, obtenindose as, que el valor optimo de M fue de 47. Este valor
de M es considerablemente ms pequeo, en comparacin al que se obtuvo con la tcnica de diseo por
ventana (M= 61, para una ventana Kaiser) o la tcnica por muestreo en frecuencia (M= 60).


A continuacin se muestran las grficas en el dominio del tiempo y la frecuencia para el filtro diseado, junto
con la funcin 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 diseamos un filtro pasa banda, que anteriormente fue descrito usando tambin la tcnica de
diseo por ventana. Los parmetros de diseo son:

1s
= 0.2
; R
p
= 1 dB

1p
= 0.35

2p
= 0.65
; A
s
= 60 dB

2s
= 0.8

El siguiente cdigo muestra como disear 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.3
Respuesta al Impulso Actual
n
h
(
n
)
0 0.20.3 1
50
0
Respuesta en Magnitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
0 0.20.3 1
0
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.20.3 1
-0.0144
-0.0032
0
0.0032
0.0144
Respuesta del Error
Frecuencia en unidades de
H
r
(
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);
%
% Grficas
>> 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 grficas resultantes son las siguientes.































Ahora diseamos un filtro pasa altas con las siguientes especificaciones:

s
= 0.6 , A
s
= 50 dB

p
= 0.75 , R
p
= 0.5 dB


Puesto que este es un filtro pasa altas, debemos asegurarnos que la longitud M sea un nmero impar, como se
muestra en el siguiente cdigo.


>> 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
D
e
c
i
b
e
l
e
s
0 0.2 0.35 0.65 0.8 1
0
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.2 0.35 0.65 0.8 1
-1.0575
0
1.0575
x 10
-3
Error de Peso
Frecuencia en unidades de
H
r
(
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);
%
% Grficas
>> 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 grficas correspondientes se muestran enseguida.





PDF created with pdfFactory trial version www.pdffactory.com

248



























En este ejemplo diseamos un filtro "escalera", el cual tiene tres bandas, con diferentes respuestas ideales
y diferentes tolerancias en cada banda. Las especificaciones de diseo 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 cdigo describe el procedimiento del diseo:


>> 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.4
Respuesta al Impulso Actual
n
h
(
n
)
0 0.6 0.75 1
50
0
Respuesta en Magnitud en dB
Frecuencia en unidades de
D
e
c
i
b
e
l
e
s
0 0.6 0.75 1
0
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.6 0.75 1
-0.0288
-0.0033
0
0.0033
0.0288
Respuesta del Error
Frecuencia en unidades de
H
r
(
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);
%
% Grficas
>> 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 grficas resultantes son las siguientes:





PDF created with pdfFactory trial version www.pdffactory.com

250




























Ahora diseamos un diferenciador digital con diferentes pendientes en cada banda. Las especificaciones
de diseo 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 cdigo 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
0
0.1
0.2
0.3
0.4
0.5
0.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
D
e
c
i
b
e
l
e
s
0 0.30.4 0.70.8 1
0
0.5
1
Respuesta en Amplitud
Frecuencia en unidades de
H
r
(
w
)
0 0.30.4 0.70.8 1
-1
0
1
x 10
-3
Error de Peso
Frecuencia en unidades de
H
r
(
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 grficas correspondientes son las siguientes:





























Por ltimo, diseamos 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 cdigo 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.6
Respuesta al Impulso
n
h
(
n
)
0 0.1 0.2 0.3 0.4 0.5
0
0.1
0.4
0.6
1.2
1.5
Respuesta 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 grficas de este transformador de Hilbert se muestran a continuacin.


































0 50
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
Respuesta al Impulso
n
h
(
n
)
0 0.05 0.95 1
0
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 elpticos 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 diseos, la fase es una
cuestin importante que se debe considerar en una visin de conjunto del sistema. En el otro extremo de la
escala de rendimiento estn los filtros Butterworth, los cuales exhiben una respuesta en magnitud totalmente
plana y requieren un orden N superior (ms polos) para alcanzar la misma especificacin 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 caractersticas de fase intermedias. As, en aplicaciones prcticas donde
consideramos a los filtros Butterworth, Chebyshev, y tambin a los filtros Elpticos, la eleccin que hagamos
depender tanto del orden del filtro (el cual influye en la velocidad de procesamiento y en la complejidad de
la implementacin) como de las caractersticas de fase.




TRANSFORMACIONES ANALGICO A DIGITAL


Una vez que hemos presentado los diferentes enfoques para el diseo de filtros analgicos, estamos listos
para transformarlos en filtros digitales. Las transformaciones son mapeos complejos, que son derivadas a
partir de la conservacin de diferentes aspectos de los filtros analgicos y digitales. Si queremos conservar la
forma de la respuesta impulsiva de un filtro analgico hacia uno digital, podemos usar una tcnica llamada
transformacin de invarianza impulsiva; si lo que queremos es convertir una representacin de una ecuacin
diferencial en su correspondiente representacin ecuacin de diferencias, entonces podemos aplicar una
tcnica de aproximacin por diferencias finitas. Cabe mencionar que, tambin, son posibles otras tcnicas,
entre ellas la llamada invarianza al escaln, que conserva la forma de la respuesta al escaln; sin embargo, la
tcnica ms popular es la conocida como transformacin Bilineal, la cual conserva la representacin de la
funcin del sistema al pasar del dominio analgico al digital. En este apartado estudiaremos en detalle las
transformaciones de invarianza impulsiva y bilineal, las cuales implementamos en MATLAB.


Transformacin de Invarianza Impulsiva

En este mtodo de diseo queremos que la respuesta al impulso del filtro digital luzca "similar" a la de un
filtro analgico. En consecuencia, muestreamos h
a
(t) en cierto intervalo de muestreo T para obtener h(n); esto
es,

h(n) = h
a
(nT)

El parmetro T es elegido de modo que la forma de h
a
(t) sea "captada" por las muestras. Puesto que esto es
una operacin de muestreo, las frecuencias analgicas y digitales quedan relacionadas por

= T e
j
= e
jT


Puesto que z = e
j
sobre el crculo unitario y s = j sobre los ejes imaginarios, tenemos la siguiente
transformacin del plano-s al plano-z:

z = e
sT
(7.24)


Las funciones del sistema H(z) y H
a
(s) estn relacionadas a travs de la frmula de aliasing (3.27) en el
dominio de la frecuencia:
PDF created with pdfFactory trial version www.pdffactory.com

281

H(z) =

k
a
k
T
j s H
T
2 1


La transformacin 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 crculo unitario)
= 0 se mapea sobre |z| = 1 (sobre el crculo unitario)
> 0 se mapea en |z| > 1 (fuera del crculo 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 crculo unitario, un filtro analgico causal y
estable se mapea en un filtro digital causal y estable.

4. Si H
a
(j) = H
a
(j/T) = 0 para || /T, entonces

H(e
j
) = ), / (
1
T j H
T
a
||

en donde no habr aliasing. Sin embargo, un filtro no analgico de orden finito puede estar exactamente
limitado en banda. Por lo tanto ocurrir algn error de aliasing en este procedimiento de diseo, por lo que el
intervalo de muestreo T juega un rol menor es ste mtodo de diseo.


Procedimiento de Diseo

Dadas las especificaciones de un filtro digital pasa bajas:
p
,
s
, R
p
, y A
s
queremos determinar H(z)
diseando en primer lugar un filtro analgico 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 analgicas

p
=
p
p
T

y
s
=
T
s



2. Disear un filtro analgico H
a
(s) usando las especificaciones
p
,
s
, R
p
, y A
s
. Esto puede ser
hecho usando uno de los tres prototipos del apartado anterior (Butterworth, Chebyshev, o
Elliptic).

3. Usando una expansin en fracciones parciales, expandemos H
a
(s) en

H
a
(s) =

=

N
k k
k
p s
R
1


4. Ahora transformamos los polos analgicos {p
k
} en polos digitales } {
T
k
p
e para obtener el filtro
digital:

H(z) =

N
k
T p
k
z e
R
k
1
1
1
(7.25)


A continuacin nos valemos de un ejemplo para mostrar este procedimiento. El ejemplo consiste en
transformar

H
a
(s) =
6 5
1
2
+ +
+
s s
s


en un filtro H(z) usando la tcnica de invarianza impulsiva, en donde T = 0.1.

Primero expandemos H
a
(s) usando expansin en fracciones parciales:

H
a
(s) =
6 5
1
2
+ +
+
s s
s
=
2
1
3
2
+

+ s s



Se puede observar que los polos se encuentran en p
1
= -3 y p
2
= -2 . Entonces de (7.25) y usando T = 0.1,
obtenemos


H(z) =
2 1
1
1 2 1 3
6065 . 0 5595 . 1 1
8966 . 0 1
1
1
1
2

z z
z
z e z e
T T




Es fcil desarrollar una funcin en MATLAB que implemente el mapeo de la invarianza impulsiva. As
que, dada una descripcin de la funcin racional de H
a
(s), podemos usar la funcin residue para obtener la
descripcin de los polos y ceros. Entonces cada polo analgico es mapeado en un polo digital usando (7.24).
Finalmente, puede ser usada la funcin residuez para convertir H(z) en una funcin en forma racional. Este
procedimiento es implementado en la siguiente funcin llamada invar_impul.

PDF created with pdfFactory trial version www.pdffactory.com

283



















Valindonos de la funcin del sistema del ejemplo anterior, demostramos el uso de esta funcin. 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) =
2 1
1
6065 . 0 5595 . 1 1
8966 . 0 1

z z
z
,

como era de esperarse. El siguiente cdigo nos permite generar las grficas donde se muestran las respuestas
impulsivas y las respuestas en magnitud (graficadas por encima de la frecuencia de muestreo 1/T) de los
filtros analgico y digital resultantes.

% Respuesta al Impulso del Filtro Analgico
>> 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 Analgico
>> [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 Analgico','FontSize',8); text(1.5,1.5,'Filtro Digital','FontSize',8)

function [b,a] = invar_impul(c,d,T)
% Transformacin de Invarianza Impulsiva
% de un Filtro Analgico 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 analgico
% d = Polinomio del Denominador en s del filtro analgico
% T = Parmetro de muestreo (transformacin)
%
[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 grficas son:
























Claramente se observa que el aliasing es evidente en el dominio de la frecuencia.

A continuacin desarrollaremos una serie de ejemplos para ilustrar el procedimiento de diseo con el mtodo
de invarianza impulsiva para los tres prototipos.


En este primer ejemplo disearemos un filtro digital usando un prototipo Butterworth, cuyas
especificaciones son:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

El procedimiento de diseo 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Prototipo Butterworth:
>> [cs,ds] = dfa_butt(OmegaP,OmegaS,Rp,As);
Time (sec.)
A
m
p
l
i
t
u
d
e
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 10
0
1
2
3
Frecuencia en Hz
Respuestas en Magnitud
M
a
g
n
i
t
u
d
Filtro Anal gico
Filtro Digital
PDF created with pdfFactory trial version www.pdffactory.com

285

%%*** Orden del Filtro Butterworth = 6
%
% Transformacin 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 funcin sistema H(z) esta dada en forma paralela.

2 1
1
2 1
1
2 1
1
6449 . 0 2972 . 1 1
4463 . 0 2871 . 0
3699 . 0 0691 . 1 1
1454 . 1 1428 . 2
257 . 0 9973 . 0 1
6304 . 0 8587 . 1
) (

+
+
+
+
+

=
z z
z

z z
z
z z
z
z H


El siguiente cdigo nos permite obtener las grficas de las respuestas en frecuencia.


% **** Grficas ****
>> 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 grficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

286




























Ahora disearemos un filtro digital pasa bajas usando un prototipo Chebyshev-I, cuyas especificaciones
son:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

El procedimiento del diseo 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Chebyshev-I Prototipo:
>> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Chebyshev-I = 4
%

0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
2
4
6
8
10
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Butterworth Pasa Bajas: Orden 6
PDF created with pdfFactory trial version www.pdffactory.com

287


% Transformacin 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 funcin sistema H(z) es:


H(z) =
2 1
1
2 1
1
6549 . 0 5658 . 1 1
0239 . 0 0833 . 0
8392 . 0 4934 . 1 1
0246 . 0 0833 . 0

+
+
+
+

z z
z
z z
z




El siguiente cdigo nos permite obtener las grficas de las respuestas en frecuencia.


% Grficas
>> 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 grficas son las siguientes:


PDF created with pdfFactory trial version www.pdffactory.com

288

























Ahora disearemos un filtro digital pasa bajas usando un prototipo Chebyshev-II, cuyas especificaciones
son las siguientes:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

Cabe recordar que el filtro Chebyshev-II es equirizo en la banda de rechazo. Esto significa que la respuesta
de este filtro analgico no tiende a cero en las frecuencias altas en la banda de rechazo. Por lo tanto, despus
de la transformacin 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Prototipo Chebyshev-II:
>> [cs,ds] = dfa_chb2(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Chebyshev-II = 4
%
% Transformacin de Invarianza Impulsiva:
>> [b,a] = invar_impul(cs,ds,T);
>> [C,B,A] = sdir2cas(b,a);
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Chebyshev-I Pasa Bajas: Orden 4
PDF created with pdfFactory trial version www.pdffactory.com

289

El cdigo que nos permite obtener las grficas de las respuestas en frecuencia es el siguiente:

% Grficas
>> 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 grficas son:


























0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Chebyshev-II Pasa Bajas: Orden 4
PDF created with pdfFactory trial version www.pdffactory.com

290

De las grficas claramente observamos la banda de paso, as como tambin la degradacin en la banda de
rechazo. Por lo tanto, concluimos que la tcnica de diseo de invarianza impulsiva ha fracasado en la
produccin del filtro digital deseado.


En este ltimo ejemplo disearemos un filtro digital pasa bajas usando un prototipo Elptico, con
especificaciones:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

El filtro Elptico es equirizo en ambas bandas. Por lo tanto, esta situacin es similar a la del filtro Chebyshev-
II, por lo que no deberamos 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Elptico Prototipo:
>> [cs,ds] = dfa_elip(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Elptico = 3
%
% Transformacin de Invarianza Impulsiva:
>> [b,a] = invar_impul(cs,ds,T);
>> [C,B,A] = sdir2cas(b,a);

El cdigo que nos permite obtener las grficas de las respuestas en frecuencia es el siguiente:

% Grficas
>> 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 Elptico Pasa Bajas: Orden 3');

Las grficas son:


























Claramente, observamos de las grficas que una vez ms la tcnica de diseo de invarianza impulsiva ha
fracasado.

Las ventajas del mapeo con invarianza impulsiva son que: se trata de un diseo estable, y las frecuencias
y estn relacionadas linealmente. Pero la desventaja es que deberamos esperar algn aliasing por parte de
la respuesta en frecuencia analgica, aunque en algunos casos este aliasing es intolerable. Consecuentemente,
este mtodo de diseo es til solamente cuando el filtro analgico esta fuertemente limitado en banda, para
los filtros pasa bajas o pasa banda, en los cuales no hay oscilaciones en la banda de rechazo.



Transformacin Bilineal

Este mapeo es el mejor mtodo de transformacin; el cual involucra a una funcin ya conocida, dada por

s =
2 / 1
2 / 1
1
1 2
1
1
sT
sT

z
z
T
z

+
=
+

(7.26)
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital El ptico Pasa Bajas: Orden 3
PDF created with pdfFactory trial version www.pdffactory.com

292

donde T es un parmetro. Otro nombre para esta transformacin es transformacin lineal fraccional debido a
que cuando despejamos las fracciones, obtenemos la expresin

0 1
2 2
= + + z s
T
sz
T


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 =

+
2 2
1
2 2
1 /
T
j
T T
j
T
(7.27)

Por lo tanto

< 0 |z| =
2 2
2 2
1
1
T T
T T
j
j

+ +
< 1

= 0 |z| =
2
2
1
1
T
T
j
j

+
= 1

> 0 |z| =
2 2
2 2
1
1
T T
T T
j
j

+ +
> 1

PDF created with pdfFactory trial version www.pdffactory.com

293

2. sta es una transformacin estable, debido a que el total de la mitad izquierda del plano se mapea en el
interior del crculo unitario.

3. No hay aliasing en el dominio de la frecuencia, debido a que el eje imaginario se mapea sobre el crculo
unitario en una relacin uno a uno.


Sustituyendo = 0 en (7.27), obtenemos

z =
2
2
1
1
T
T
j
j

+
= e
j

ya que la magnitud es 1. Resolviendo para como una funcin de , obtenemos

= 2 tan
-1


2
T
=
T
2
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 continuacin desarrollaremos un ejemplo en el cual transformaremos

H
a
(s) =
6 5
1
2
+ +
+
s s
s



en un filtro digital usando la transformacin bilineal. En este caso elegimos T=1.

Usando (7.26), obtenemos

6
1
1
2 5
1
1
2
1
1
1
2
1
1
2
1
1 2
1
1
2
1
1
1
1
1
1
1
1
1
) (
+

+
+

z
z
z
z
z
z

z
z
H
z
z
T
H
a
T
a
z H

Simplificando,

H(z) =
1
2 1
1
2 1
2 . 0 1
05 . 0 1 . 0 15 . 0
4 20
2 3


+
+
=
+
+
z
z z
z
z z



MATLAB posee una funcin llamada bilinear que implementa este mapeo, cuya invocacin, adems de ser
similar a la de la funcin invar_impul tambin toma varias formas para diferentes cantidades de entrada-
salida. Ahora mostraremos el uso de esta funcin en el siguiente ejemplo.

PDF created with pdfFactory trial version www.pdffactory.com

294

Transformaremos la funcin del sistema H
a
(s) del ejemplo anterior usando la funcin 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
2 1
2 . 0 1
05 . 0 1 . 0 15 . 0


+
+
z
z z

como antes.


Procedimiento de Diseo

Dadas las especificaciones de un filtro digital:
p
,
s
, R
p
, y A
s
, queremos determinar H(z). As que los pasos
del diseo 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
=
T
2
tan


2
p
,
s
=
T
2
tan


2
s
(7.29)

3. Diseamos un filtro analgico H
a
(s) que satisfaga las especificaciones
p
,
s
, R
p
, y A
s
. Tal y como se
hizo en el apartado anterior.

4. Finalmente, establecemos

H(z) = H
a

1
1
1
1 2
z
z
T


y simplificamos para obtener H(z) como una funcin racional en z
-1
.


A continuacin, valindonos de algunos ejemplos demostraremos este procedimiento de diseo sobre nuestros
filtros analgicos prototipo.


En primer lugar disearemos el filtro digital Butterworth, que fue analizado seis ejemplos atrs
empleando el mtodo de invarianza impulsiva. Las especificaciones son:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Butterworth Prototipo:
>> [cs,ds] = dfa_butt(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Butterworth = 6
%
% Transformacin 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 ms, de 6 orden con 6 ceros. Y puesto que el cero de sexto orden de H
a
(s) en
s =- es mapeado a z =-1; estos ceros deberan estar en z = -1. Pero debido a la precisin finita de MATLAB
estos ceros no estarn exactamente en z = -1. Por lo tanto la funcin del sistema debera ser

H(z) =
) 7149 . 0 3143 . 1 1 )( 3753 . 0 0541 . 1 1 )( 2342 . 0 9459 . 0 1 (
) 1 ( 00057969 . 0
2 1 2 1 2 1
6 1

+ + +
+
z z z z z z
z


El siguiente cdigo nos permite obtener las grficas de la respuesta en frecuencia.

% Grficas:
>> 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 grficas son:


























Comparando estas grficas con las que se obtuvieron con el mtodo de invarianza impulsiva, observamos que
estos dos diseos son muy similares.


Ahora disearemos el filtro digital Chebyshev-I planteado anteriormente con el mtodo de invarianza
impulsiva. Las especificaciones son

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

El script del diseo 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; % Atenuacin en la Banda de Rechazo en dB
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
2
4
6
8
10
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Butterworth Pasa Bajas: Orden 6
PDF created with pdfFactory trial version www.pdffactory.com

297

% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Chebyshev-I Prototipo:
>> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Chebyshev-I = 4
%
% Transformacin 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 funcin del sistema es

H(z) =
) 6493 . 0 5548 . 1 1 )( 8482 . 0 4996 . 1 1 (
) 1 ( 0018 . 0
2 1 2 1
4 1

+ +
+
z z z z
z


El siguiente cdigo nos permite obtener las grficas de la respuesta en frecuencia.

% Grficas:
>> 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 grficas son:



























Ahora redisearemos el filtro digital Chebyshev-II, planteado anteriormente con el mtodo de invarianza
impulsiva. Las especificaciones son

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

El script del diseo 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Chebyshev-II Prototipo:
>> [cs,ds] = dfa_chb2(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Chebyshev-II = 4
%
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Chebyshev-I Pasa Bajas: Orden 4
PDF created with pdfFactory trial version www.pdffactory.com

299


% Transformacin 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 funcin del sistema


H(z) =
) 7183 . 0 1325 . 1 1 )( 1503 . 0 4183 . 0 1 (
) 0671 . 1 1 )( 5574 . 0 1 ( 1797 . 0
2 1 2 1
2 1 2 1


+ +
+ + +
z z z z
z z z z



El siguiente cdigo nos permite obtener las grficas de la respuesta en frecuencia:


% Grficas:
>> 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 grficas son las siguientes:

PDF created with pdfFactory trial version www.pdffactory.com

300


























En este caso, podemos notar que la transformacin bilineal ha implementado correctamente el filtro digital
Chebyshev-II.


Por ltimo disearemos el filtro digital Elptico, que fue analizado anteriormente usando el mtodo de
invarianza impulsiva. Las especificaciones son

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Elptico Prototipo:
>> [cs,ds] = dfa_elip(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Elptico = 3
%
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Chebyshev-II Pasa Bajas: Orden 4
PDF created with pdfFactory trial version www.pdffactory.com

301



% Transformacin 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 3
er
orden, con funcin del sistema


H(z) =
) 6183 . 0 1 )( 8612 . 0 4928 . 1 1 (
) 1 )( 4211 . 1 1 ( 1214 . 0
1 2 1
1 2 1


+
+ +
z z z
z z z



El siguiente cdigo nos permite obtener las grficas de la respuesta en frecuencia:

% Grficas:
>> 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 Elptico Pasa Bajas: Orden 3');


Las grficas son las siguientes:


PDF created with pdfFactory trial version www.pdffactory.com

302

























Notamos que, una vez ms, la transformacin bilineal ha implementado correctamente el filtro digital
Elptico.

Las ventajas de este mapeo son que:

a) Es un diseo estable,
b) no se presenta aliasing, y
c) no hay restricciones sobre el tipo de filtro que puede ser transformado.



DISEO DE FILTROS PASA BAJAS
USANDO MATLAB


Mostraremos ahora el uso de las rutinas que posee MATLAB para disear filtros digitales pasa bajas, mismas
que emplean la transformacin bilineal, debido a las atractivas ventajas que presenta. Estas funciones son las
siguientes.

1. [b, a] = butter(N, wn)

Esta funcin disea 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 frmula (7.29). Sin embargo, en MATLB todas las frecuencias digitales estn dadas en
unidades de . Por lo tanto wn es calculada usando la siguiente relacin.

n
=

2
tan
-1


2
T
c

0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital El ptico Pasa Bajas: Orden 3
PDF created with pdfFactory trial version www.pdffactory.com

303

Demostramos el uso de esta funcin por medio de un ejemplo, en el que diseamos un filtro Butterworth
digital pasa bajas, cuyas especificaciones son:

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico:
>> 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo de Orden del Prototipo Analgico:
>> 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 analgica
>> wn = 2*atan((OmegaC*T)/2); %frecuencia de corte Digital
%
% Diseo 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 funcin del sistema es


H(z) =
) 7149 . 0 3143 . 1 1 )( 3753 . 0 0541 . 1 1 )( 2342 . 0 9459 . 0 1 (
) 1 ( 00057969 . 0
2 1 2 1 2 1
6 1

+ + +
+
z z z z z z
z



que es la misma que se obtuvo en un ejemplo anterior, en el cual se usaron las funciones dfa_butt y bilinear
para el diseo del filtro. Por lo tanto, las grficas de la respuesta en frecuencia son las mismas, las cuales
mostramos a continuacin:

PDF created with pdfFactory trial version www.pdffactory.com

304


























2. [b, a] = cheby1(N, Rp, wn)

Esta funcin implementa un filtro digital Chebyshev-I pasa bajas de orden N, con un rizo de Rp decibeles en
la banda de paso. La funcin 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 funcin nos valemos de un ejemplo, el cual consiste en disear 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico:
>> 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Orden del Prototipo Analgico:
>> ep = sqrt(10^(Rp/10)-1); %factor de Rizo en la Banda de Paso
>> A = 10^(As/20); %factor de atenuacin en la Banda de Rechazo
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
2
4
6
8
10
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Butterworth Pasa Bajas: Orden 6
PDF created with pdfFactory trial version www.pdffactory.com

305

>> OmegaC = OmegaP; %frecuencia de corte analgica
>> OmegaR = OmegaS/OmegaP; %Relacin de Transicin analgica
>> 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
%
% Diseo 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 funcin del sistema es

H(z) =
) 6493 . 0 5548 . 1 1 )( 8482 . 0 4996 . 1 1 (
) 1 ( 0018 . 0
2 1 2 1
4 1

+ +
+
z z z z
z


que es la misma que se obtuvo en un ejemplo anterior, en el que se usaron las funciones dfa_chb1 y bilinear
para el diseo. Por lo tanto las grficas de la respuesta en frecuencia son las mismas, y son las siguientes:


























0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
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 funcin disea un filtro digital chebyshev-II pasa bajas de orden N, con una atenuacin de As decibeles
en la banda de rechazo. La funcin 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 funcin nos valemos de un ejemplo, que consiste en disear 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico:
>> 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Orden del Prototipo Analgico:
>> ep = sqrt(10^(Rp/10)-1); %factor de Rizo en la Banda de Paso
>> A = 10^(As/20); %factor de atenuacin en la Banda de Rechazo
>> OmegaC = OmegaP; %frecuencia de corte analgica
>> OmegaR = OmegaS/OmegaP; %Relacin de Transicin analgica
>> 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
%
% Diseo 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 funcin del sistema es

H(z) =
) 7183 . 0 1325 . 1 1 )( 1503 . 0 4183 . 0 1 (
) 0671 . 1 1 )( 5574 . 0 1 ( 1797 . 0
2 1 2 1
2 1 2 1


+ +
+ + +
z z z z
z z z z


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 diseo del filtro. A continuacin presentamos las mismas grficas de la respuesta en
frecuencia.

























4. [b, a] = ellip(N, Rp, As, wn)

Esta funcin disea un filtro elptico digital pasa bajas de orden N, con un rizo en la banda de paso de Rp
decibeles, y una atenuacin de As decibeles en la banda de rechazo. La funcin 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 funcin, el cual consiste en disear un filtro elptico digital
pasa bajas. Tambin en este ejemplo las especificaciones son las mismas. Por lo tanto, el script del diseo 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico:
>> 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
s
Filtro Digital Chebyshev-II Pasa Bajas: Orden 4
PDF created with pdfFactory trial version www.pdffactory.com

308
% Clculo del Orden del Filtro Elptico Analgico:
>> ep = sqrt(10^(Rp/10)-1); % factor de Rizo en la Banda de Paso
>> A = 10^(As/20); % factor de Atenuacin en la Banda de Rechazo
>> OmegaC = OmegaP; % frecuencia de corte analgica
>> k = OmegaP/OmegaS; % relacin de Transicin Analgica
>> 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 Elptico = %2.0f \n',N)
%%*** Orden del Filtro Elptico = 3
%
% Diseo del Filtro Digital Elptico:
>> 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 funcin del sistema es

H(z) =
) 6183 . 0 1 )( 8612 . 0 4928 . 1 1 (
) 1 )( 4211 . 1 1 ( 1214 . 0
1 2 1
1 2 1


+
+ +
z z z
z z z


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 diseo. Una vez ms las grficas de la respuesta en frecuencia son las mismas.

























0 0.20.3 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
|
H
|
0 0.20.3 1
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.20.3 1
-1
0
1
Respuesta en Fase
Frecuencia en unidades de
u
n
i
d
a
d
e
s

d
e

0 0.20.3 1
0
5
10
15
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
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 disear otros tipos de filtros, como los pasa altas y pasa
banda. Tambin 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
estn disponibles en el toolbox de procesamiento de seales de MATLAB. Como se pudo observar en el
desarrollo de los ejemplos anteriores, los parmetros fueron determinados usando las frmulas dadas
anteriormente.

En los ejemplos anteriores diseamos el mismo filtro digital usando cuatro diferentes filtros analgicos
prototipo, por lo que resulta interesante comparar sus desempeos. Las especificaciones empleadas fueron:
p

= 0.2, R
p
= 1 dB,
s
= 0.3, y A
s
= 15 dB. Esta comparacin en trminos del orden N y la atenuacin
mnima 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 elptico proporciona el mejor diseo. Sin embargo, si comparamos sus
respuestas en fase, entonces el diseo elptico 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 diseamos filtros digitales pasa bajas a partir de sus correspondientes
filtros analgicos. Ciertamente, nos gustara disear otros tipos de filtros, pasa altas, pasa banda, y rechaza
banda. Esto es posible realizarlo mediante una transformacin 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, adems, las ecuaciones de diseo son algebraicas. El
procedimiento para disear un filtro general consiste en disear, 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 filosofa bsica que hay detrs de estos mapeos,
e ilustramos sus mecanismos a travs de ejemplos. Por su parte MATLAB posee funciones que incorporan la
transformacin 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 tpicas para
los tipos ms comnmente 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 H
PB
(Z), y el filtro digital H(z) deseado, notamos que estamos
usando dos variables de frecuencia diferentes, z y Z, en H
PB
y H, respectivamente, definimos un mapeo de la
forma


Z
-1
= G(z
-1
)
tal que

H(z) =
) (
1 1
) (

= z G Z
PB
Z H

Para hacer esto, simplemente reemplazamos Z
-1
en H
PB
por la funcin G(z
-1
). Dado que H
PB
(Z) es un filtro
estable y causal, tambin queremos que H(z) sea estable y causal, lo que impone los siguientes
requerimientos:

1. G() debe ser una funcin racional en z
-1
para que H(z) se implemente.

2. El crculo unitario del plano-Z debe mapearse sobre el crculo unitario del plano-z.

3. Para los filtro estables, el interior del crculo unitario en el plano-Z tambin debe mapearse sobre el
interior del crculo unitario en el plano-z.

Dadas las variables de frecuencia ' y de Z y z, respectivamente; esto es, Z = e
j'
y z = e
j
sobre sus
respectivos crculos unitarios. Entonces el segundo requerimiento implica que

PDF created with pdfFactory trial version www.pdffactory.com

311


1 ) ( ) (
1 1
= = =
j
e G z G Z
y

) (
) (


=
j
e G j j j
e e G e

) (

=
j
e G

Por lo tanto la forma general de la funcin G() que satisface los requerimientos anteriores es una funcin
racional del tipo pasa todo dada por

Z
-1
= G(z
-1
) =

n
k k
k
z
z
1
1
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 ms ampliamente usadas se muestran en la siguiente tabla.



Tipo de Transformacin Parmetros
Transformacin

Pasa Bajas
1
1
1
1

z
z
z
c
= frecuencia de corte del nuevo filtro

[ ]
[ ] 2 / ) (
2 / ) (
c c
sin
c c
sin
+

=

Pasa Altas
1
1
1
1

+
+

z
z
z
c
= frecuencia de corte del nuevo filtro

[ ]
[ ] 2 / ) ( cos
2 / ) ( cos
c c
c c

+
=

Pasa Banda
1
1
1
2
2
2
1
1
2
1
+

z z
z z
z
l
= frecuencia de corte inferior

u
= frecuencia de corte superior

1
= -2K /(K+1)

2
= (K-1)/(K+1)
=
[ ]
[ ] 2 / ) ( cos
2 / ) ( cos
l
l

+
u
u

K = cot
2
l

u
tan
2
c



PDF created with pdfFactory trial version www.pdffactory.com

312

Rechaza Banda
1
1
1
2
2
2
1
1
2
1
+

z z
z z
z
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
2
c





Ahora disearemos un filtro digital pasa altas con el objetivo de ilustrar el uso de esta tabla. Para esto nos
basamos en el diseo que se hizo de un filtro Chebyshev-I pasa bajas con especificaciones

p
= 0.2, R
p
= 1 dB

s
= 0.3, A
s
= 15 dB

y cuya funcin sistema obtenida fue


H
PB
(Z) =
) 6493 . 0 5548 . 1 1 )( 8482 . 0 4996 . 1 1 (
) 1 ( 001836 . 0
2 1 2 1
4 1

+ +
+
Z Z Z Z
Z



Disearemos 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 . 0 2 . 0 ( cos
2 / ) 6 . 0 2 . 0 ( cos

+


= -0.38197 (7.30)

Por lo tanto

H
PB
(z) =
1
1
38197 . 0 1
38197 . 0
) (

=
z
z
Z
Z H

=
) 4019 . 0 0416 . 1 1 )( 7657 . 0 5661 . 0 1 (
) 1 ( 02426 . 0
2 1 2 1
4 1

+ + + +

z z z z
z



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 funcin racional de un nuevo filtro digital, a partir de un
filtro digital pasa bajas prototipo, deberamos ser capaces de implementar una funcin racional sustituyendo
de la tabla anterior. Esto parece ser una tarea difcil, pero ya que estas son funciones algebraicas, podemos
usar la funcin conv repetidamente para este propsito. La siguiente funcin llamada zmapeo ilustra este
enfoque.















































Ahora usamos la funcin zmapeo para llevar a cabo la transformacin pasa bajas a pasa altas en el ejemplo
anterior.
function [bz,az] = zmapeo(bZ,aZ,Nz,Dz)
% Transformacin de Banda de Frecuencia:
% Dominio-Z a Dominio-z
% -------------------------------------------------------
% [bz,az] = zmapeo(bZ,aZ,Nz,Dz)
% Representacin:
%
% 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 disearemos el filtro digital pasa bajas usando el procedimiento de transformacin bilineal, y
posteriormente usaremos la funcin 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; % Atenuacin en la Banda de Rechazo en dB
%
% Especificaciones del Prototipo Analgico: 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); % parmetro de Rizo en la Banda de Paso
>> Rizo = sqrt(1/(1+ep*ep)); % Rizo en la Banda de Paso
>> Aten = 1/(10^(As/20)); % Atenuacin en la Banda de Rechazo
%
% Clculo del Filtro Analgico Chebyshev-I Prototipo:
>> [cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As);
%%*** Orden del Filtro Chebyshev-I = 4
%
% Transformacin 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
%
% Transformacin 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 funcin del sistema para el filtro pasa altas es


H(z) =
) 4019 . 0 0416 . 1 1 )( 7647 . 0 5661 . 0 1 (
) 1 ( 0243 . 0
2 1 2 1
4 1

+ + + +

z z z z
z



que es esencialmente idntica a la del ejemplo anterior. El siguiente cdigo nos permite obtener las grficas
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

% Grficas:
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('Transformacin Pasa Bajas a Pasa Altas');

Las grficas son:


























0 0.2 1
0
0.8913
1
Respuesta en Magnitud del Filtro Pasa Bajas
Frecuencia en unidades de
|
H
|
0 0.2 1
30
1
0
Magnitud del Filtro Pasa Bajas en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.6 1
0
0.8913
1
Respuesta en Magnitud del Filtro Pasa Altas
Frecuencia en unidades de
|
H
|
0 0.6 1
30
1
0
Magnitud del Filtro Pasa Altas en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
Transformacion Pasa Bajas a Pasa Altas
PDF created with pdfFactory trial version www.pdffactory.com

316

Procedimiento de Diseo

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 prctica, primero tenemos que disear un filtro digital prototipo pasa bajas, cuyas especificaciones deberan
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 frmulas de transformacin dadas en la
tabla anterior.

Nos basamos en un ejemplo previo, en el cual se diseo un filtro Chebyshev-I pasa bajas; donde las
frecuencias en el borde de la banda de paso fueron transformadas usando el parmetro = -0.38197 en (7.30).
Ahora la cuestin es: Cul 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 cuestin
puede ser respondida por (7.30). Ahora, puesto que esta fijada por la transformacin, establecemos la
ecuacin

=
[ ]
[ ] 2 / ) 3 . 0 ( cos
2 / ) 3 . 0 ( cos
s
s

+
= -0.38197

Esta es una ecuacin trascendental cuya solucin puede ser obtenida iterativamente a partir de una condicin
inicial. Esto puede ser alcanzado usando MATLAB, y la solucin es:

s
= 0.4586

En la prctica conoceremos las frecuencias
s
y
p
del pasa altas deseado, y slo necesitaramos 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 =
s
j
e

y z =
s
j
e

,

+
+
=


s
s
j
j
s
e
e
1
(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 . 0 1
38197 . 0
j
j
s
e
e
= 0.3


como esperbamos. Ahora podemos disear un filtro digital pasa bajas, y posteriormente transformarlo en un
filtro pasa altas usando la funcin zmapeo para completar nuestro procedimiento de diseo. El procedimiento
anterior puede ser incorporado en una funcin llamada fpacheb1 para disear un filtro digital Chebyshev-I
pasa altas. El cdigo es el siguiente:

PDF created with pdfFactory trial version www.pdffactory.com

317


































Mostraremos este procedimiento valindonos de un ejemplo, que consiste en disear un filtro digital pasa
altas usando un prototipo Chebyshev-I, cuyas especificaciones son:


p
= 0.6, R
p
= 1 dB

s
= 0.4586, A
s
= 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; % Atenuacin 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)
% Diseo 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 = Atenuacin 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 analgico Pasa Bajas:
T = 1; Fs = 1/T;
OmegaP = (2/T)*tan(wplp/2);
OmegaS = (2/T)*tan(wslp/2);
%
% Diseo del Filtro Analgico Prototipo Chebyshev-I Pasa Bajas:
[cs,ds] = dfa_chb1(OmegaP,OmegaS,Rp,As);
%
% Transformacin Bilineal para obtener el Pasa Bajas Digital:
[blp,alp] = bilinear(cs,ds,Fs);
%
% Transformacin 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 funcin del sistema es

H(z) =
) 4019 . 0 0416 . 1 1 )( 7647 . 0 5661 . 0 1 (
) 1 ( 0243 . 0
2 1 2 1
4 1

+ + + +

z z z z
z


que es idntica a la del ejemplo anterior.

El procedimiento de diseo del filtro pasa altas anterior puede ser fcilmente extendido a otros filtros,
usando las funciones de transformacin de la tabla. Ahora describiremos las funciones que posee MATLAB
para disear filtros arbitrarios.

En el apartado anterior discutimos cuatro funciones de MATLAB que permiten disear filtros digitales pasa
bajas. Estas mismas funciones tambin pueden ser usadas para disear filtros pasa altas, pasa banda y rechaza
banda; donde las transformaciones de la banda de frecuencia son hechas en el plano-s. Con el propsito de
ilustracin, usaremos la funcin butter, la cual puede ser usada con las siguientes variaciones en sus
argumentos de entrada.

[b, a] = BUTTER(N, wn, 'high') disea 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) disea 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 disear 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 parmetros para filtros pasa bajas; sin
embargo, estos clculos son ms complicados para los filtros pasa banda y rechaza banda. MATLAB posee en
su toolbox de procesamiento de seales una funcin llamada buttord que permite calcular estos parmetros,
dadas las especificaciones:
p
,
s
, R
p
, y A
s
. Su sintaxis es:

[N, wn] = buttord(wp, ws, Rp, As)

Los parmetros 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 funcin buttord en conjunto con la funcin butter, podemos disear cualquier filtro
Butterworth IIR. Planteamientos similares son aplicables a las funciones: cheby1, cheby2, y ellip, con las
modificaciones apropiadas. A continuacin ilustramos el uso de estas funciones a travs de los siguientes
ejemplos.

En este ejemplo disearemos un filtro Chebyshev-I pasa altas, cuyas especificaciones son:


p
= 0.6, R
p
= 1 dB

s
= 0.4586, A
s
= 15 dB

El script del diseo 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; % Atenuacin en la Banda de Rechazo en dB
>> Rizo = 10 ^ (-Rp/20); % Rizo en la Banda de Paso
>> Aten = 10 ^ (-As/20); % Atenuacin en la Banda de Rechazo
%
% Clculo de los parmetros de Filtro Chebyshev-I:
>> [N,wn] = cheb1ord(wp/pi,ws/pi,Rp,As);
%
% Diseo del Filtro Digital Chebyshev-I Pasa Altas:
>> [b,a] = cheby1(N,Rp,wn,'high');
%
% Realizacin 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 funcin del sistema en forma de cascada

H(z) =
) 4019 . 0 0416 . 1 1 )( 7647 . 0 5661 . 0 1 (
) 1 ( 0243 . 0
2 1 2 1
4 1

+ + + +

z z z z
z


es idntica a la del filtro diseado anteriormente, lo que demuestra que los dos enfoques son idnticos. El
siguiente cdigo nos permite obtener las grficas en el dominio de la frecuencia.

% Grficas:
>> 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 grficas son:




























Ahora disearemos un filtro elptico pasa banda, cuyas especificaciones estn dadas en el siguiente script:

% Especificaciones del Filtro Digital:
% Tipo: Elptico 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; % Atenuacin en la banda de rechazo en dB
>> Rizo = 10 ^ (-Rp/20); % Rizo en la banda de paso
>> Aten = 10 ^ (-As/20); % Atenuacin en la banda de rechazo
%
% Clculo de los parmetros del Filtro Elptico:
>> [N,wn] = ellipord(wp/pi,ws/pi,Rp,As);
%
% Diseo del Filtro Digital Elptico Pasa Banda:
>> [b,a] = ellip(N,Rp,As,wn);
%
% Realizacin en forma de Cascada:
>> [b0,B,A] = dir2cas(b,a)

0 0.46 0.6 1
0
0.1778
0.8913
1
Respuesta en Magnitud
Frecuencia Digital en unidades de
0 0.46 0.6 1
30
15
1
0
Magnitud en dB
Frecuencia en unidades de
d
e
c
i
b
e
l
e
s
0 0.46 0.6 1
-1
-0.5
0
0.5
1
Respuesta en Fase
Frecuencia en unidades de
F
a
s
e

e
n

u
n
i
d
a
d
e
s

d
e

0 0.46 0.6 1
0
2
4
6
8
10
Retardo de Grupo
Frecuencia en unidades de
R
e
t
a
r
d
o

e
n

M
u
e
s
t
r
a
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 diseado es un filtro de dcimo orden, cuyas grficas en el dominio de la frecuencia se
muestran a continuacin:


























El cdigo que nos permiti obtener las grficas es el siguiente:

% Grficas:
>> 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 1
0
0.8913
1
Respuesta en Magnitud
Frecuencia en unidades de
0 0.30.4 0.6 0.75 1
40
0
Magnitud en dB
Frecuencia en unidades de
0 0.30.4 0.6 0.75 1
-1
-0.5
0
0.5
1
Respuesta en Fase
Frecuencia en unidades de
F
a
s
e

e
n

u
n
i
d
a
d
e
s

d
e

0 0.30.4 0.6 0.75 1


0
10
20
30
40
Retardo de Grupo
Frecuencia en unidades de
M
u
e
s
t
r
a
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 Elptico Pasa Banda');


Finalmente, disearemos un filtro Chebyshev-II rechaza banda, cuyas especificaciones estn 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; % Atenuacin en la Banda de Rechazo en dB
>> Rizo = 10 ^ (-Rp/20); % Rizo en la banda de paso
>> Aten = 10 ^ (-As/20); % Atenuacin en la banda de rechazo
%
% Clculo de los parmetros del Filtro Chebyshev-II:
>> [N,wn] = cheb2ord(wp/pi,ws/pi,Rp,As);
%
% Diseo del Filtro Digital Chebyshev-II Rechaza Banda:
>> [b,a] = cheby2(N,As,ws/pi,'stop');
%
% Realizacin 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 tambin es un filtro de dcimo orden. El siguiente cdigo nos permite obtener las grficas
en el dominio de la frecuencia.

% Grficas:
>> [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 grficas son:




























FILTROS FIR vs IIR


Hemos visto muchas tcnicas para disear filtros FIR e IIR; en la prctica podramos elegir cualquiera de
estos filtros para una aplicacin dada, y usar algn mtodo para disearlo. Debido a que estas tcnicas de
diseo involucran diferentes metodologas, es difcil 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 diseados va el algoritmo Parks-McClellan (
algoritmo de intercambio Remez), mientras que en el caso de los filtros IIR son los filtros elpticos.

Una base de comparacin es el nmero de multiplicaciones requeridas para calcular una muestra de salida en
la realizacin estndar de estos filtros. Para los filtros FIR la realizacin estndar es la forma directa de la fase
lineal, mientras que para los filtros elpticos 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 1
0
0.8913
1
Respuesta en Magnitud
Frecuencia Digital en unidades de
0 0.25 0.4 0.70.8 1
-40
0
Magnitud en dB
Frecuencia Digital en unidades de
0 0.25 0.4 0.70.8 1
-1
-0.5
0
0.5
1
Respuesta en Fase
Frecuencia Digital en unidades de
F
a
s
e

e
n

u
n
i
d
a
d
e
s

d
e

0 0.25 0.4 0.70.8 1


0
5
10
15
Retardo de Grupo
Frecuencia Digital en unidades de
Filtro Digital Chebyshev-II Rechaza Banda
PDF created with pdfFactory trial version www.pdffactory.com

324

2 2
1 M M

+
para M grande

multiplicaciones por muestra de salida. Sea N (asumiendo N par) el orden de un filtro elptico con la
realizacin en forma de cascada, entonces hay N/2 secciones de segundo orden, requiriendo cada una de 3
multiplicaciones (en la implementacin ms eficiente). Por lo tanto, en suma, hay tres multiplicaciones en la
estructura general, para un total de

2
3
3
2
3
N N
+ (para N grande)

multiplicaciones por muestra de salida.


Si ahora asumimos que cada filtro cuenta exactamente con las mismas especificaciones:
p
,
s
,
1
( rizo
R
p
en la banda de paso), y
2
( atenuacin A
s
en la banda de rechazo ) para un filtro pasa bajas, entonces
estos dos filtros son equivalentes si

3
1
3
2
3 3
2
1
+ =
+
=
+
N N
M

N M
para N grande

Esto significa que si la relacin M/N = 3, entonces los dos filtros son ms o menos eficientes. Sin embargo, un
filtro FIR equirizo es ms eficiente si M/N < 3, un filtro IIR elptico es ms 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 centsimas.

Esto muestra que los filtros IIR elpticos son ms convenientes en ms aplicaciones, desde el punto de vista
computacional. Por su parte las condiciones ms favorables para los filtros FIR son:

valores grandes de
1
,
valores pequeos de
2
, y
un ancho de transicin grande.

PDF created with pdfFactory trial version www.pdffactory.com

También podría gustarte