Está en la página 1de 55

UNIVERSIDAD PRIVADA BOLIVIANA

PROGRAMA MIEC







MDULO: INTRODUCCIN A FILTROS DIGITALES


PROYECTO II





TTULO: DISEO DE FILTROS DIGITALES EMPLEANDO MATLAB



ESTUDIANTE: HCTOR PITA PREZ
NERY RODRIGO GUTIERREZ AYALA



PROFESOR: Dr. GROVER ZURITA








SEPTIEMBRE, 2013











RESUMEN




El filtrado es una de las operaciones ms importantes del tratamiento de seales de
tiempo discreto. Como el propio nombre lo indica, un filtro intenta separar componentes
de una seal de acuerdo con algn criterio (por ejemplo, eliminar un ruido de una seal
o separar dos emisoras de radio), esto corresponde a cambiar las amplitudes relativas de
las componentes en frecuencia en una seal.

El presente proyecto pretende mostrar la gran utilidad que brindan las herramientas de
clculo numrico, en especifico MATLAB para el caso particular del diseo de filtros
discretos, se pueden obtener dos clases importantes de estos descritos por ecuaciones en
diferencias: los filtros recursivos o de respuesta al impulso infinita (IIR) y los filtros no
recursivos o de respuesta al impulso finita. (FIR).

Matlab tiene una completa gama de herramientas para diseo de filtros mediante
diferentes mtodos. La herramienta Filter Desing Toolbox ha ido desarrollndose a
lo largo de los aos pues esas funciones especiales no son ms que scripts
totalmente desarrollados y comprobados en base a los comandos matemticos bsicos
de Matlab. Sin embargo es posible enriquecer la gama de herramientas que contiene
MATLAB mediante el desarrollo de Scripts personalizados para realizar tareas
determinadas.

En el desarrollo del proyecto se encontr que la seleccin del tipo de filtro depende en
gran manera de la aplicacin, y de las especificaciones del mismo. Sin embargo es
posible determinar algunas conclusiones generales.

El diseo de filtros FIR garantiza la estabilidad, adems de ser posible disearlos con
fase lineal no distorsionando las caractersticas de fase y de grupo. Sin embargo
requieren de un orden mayor para los valores de atenuacin, lo que supone un mayor
retardo en la respuesta.

El diseo de filtro IIR son ms apropiados cuando se desea tener una zona de transicin
estrecha, lo que supone un orden mucho menor que los filtros FIR. Sin embargo podran
presentar inestabilidades, y por ende un mayor error de cuantizacin.

















INDICE GENERAL


RESUMEN

1.- INTRODUCCIN

1.1.- Objetivos
1.1.1.- Objetivo principal
1.1.2.- Objetivos especficos
1.2.- Justificacin
1.3.- Alcance
1.4.- Limitaciones

2.- MARCO TERICO

2.1.- Respuesta impulsional, frecuencial, y de fase de un filtro
2.2.- La transformada Z
2.3.- Tipos de filtros
2.4.- Ancho de banda y Factor de calidad
2.5.- Diseo de filtros digitales
2.5.1.- Diseo de Filtros FIR (Respuesta finita al impulso)
2.5.1.1.- Mtodos de las Ventanas
2.5.1.2.- Mtodo del Muestreo en Frecuencia
2.5.1.3.- Mtodo del Rizado Constante
2.5.2.- Diseo de Filtros IIR (Respuesta infinita al impulso)
2.5.2.1.- Diseo de Filtros Basados en la forma Indirecta
2.5.2.1.1.- Aproximacin del Impulso Invariante
2.5.2.1.2.- Aproximacin de Derivadas (Analoga)
2.5.2.1.3.- Transformacin Bilineal
2.5.2.2.- Diseo de Filtros Basados en la forma Directa
2.5.2.2.1.- Aproximacin de Pade
2.5.2.2.2.- Aproximacin por Mnimos Cuadrados

3.- METODOLOGA

4. ANLISIS Y RESULTADOS

4.1.- Seal de Prueba
4.2.- Anlisis con el Diseo de Filtros FIR
4.2.1.- Instruccin KAISERORD
4.2.2.- Instruccin FIRPMORD
4.2.3.- Instruccin FIR1
4.2.4.- Instruccin FIR2
4.2.5.- Instruccin FIRCLS
4.2.6.- Instruccin REMEZ
4.3.- Anlisis con el Diseo de Filtros IIR


4.3.1.- Instrucciones BUTTORD,CHEB1ORD,CHEB2ORD,ELLIPORD
4.3.2.- Instruccin BUTTER
4.3.3.- Instruccin CHEBY1
4.3.4.- Instruccin CHEBY2
4.3.5.- Instruccin ELLIP
4.3.6.- Instruccin YULEWALK


5.- CONCLUSIONES

6.- BIBLIOGRAFIA

ANEXO








































1.- INTRODUCCIN

Uno de los problemas ms frecuentes en el rea de la ingeniera es la necesidad de
separar diferentes componentes frecuenciales de una seal en particular. A este proceso
se le denomina filtrado, y se denomina filtro al subsistema encargado de realizar dicha
tarea.

Son innumerables las diferentes aplicaciones de los filtros. Habitualmente se emplean
para las tareas tales como la eliminacin de ruido interferencias, eliminacin de
harmnicos en sistemas elctricos, procesos de modulacin / demodulacin, limitacin
de ancho de banda de seales, etc.

Independientemente de su funcin, a la hora de introducir un filtro en un sistema de
cualquier tipo, es necesario conocer de antemano las especificaciones que dicho filtro
debe verificar. Una vez conocidas estas, se procede a disear el filtro apropiado.

Por ltimo, dicho filtro es construido o programado (dependiendo de si se trata de un
filtro analgico digital) e insertado en el punto apropiado del sistema. Existen varios
mtodos de aproximacin para el diseo de filtros y en ocasiones el clculo matemtico
a veces muy complicado. En este proyecto se pretende abordar el problema de diseo de
filtros de una forma prctica, por lo que se empleara la herramienta MATLAB


1.1 .-Objetivos

1.1.1.-Objetivo Principal

El objetivo principal del presente trabajo, es el de analizar los diferentes diseos de
filtros digitales empleando MATLAB, realizar una comparacin entre ellos, y
determinar las ventajas y desventajas de las diferentes instrucciones empleadas para el
diseo de filtros.

1.1.2.- Objetivos Especficos

Aplicar el fundamento terico aprendido para determinar las ventajas y
desventajas del diseo de filtros basado en funciones de transferencia del tipo
FIR.

Aplicar el fundamento terico aprendido para determinar las ventajas y
desventajas del diseo de filtros basado en funciones de transferencia del tipo
IIR.

Emplear las diferentes herramientas que MATLAB ofrece (FDATool,
FilterBuilder) para el diseo de filtros.

Realizar una aplicacin en MATLAB que permita realizar el diseo de filtros
digitales basada en las instrucciones incorporadas.





1.2.- Justificacin

La necesidad de llevar la teora de la mano con la prctica hace que sea necesario
aplicar herramientas computacionales que permitan simplificar los clculos, iteraciones,
etc., que permitan en cierta manera la simulacin de sistemas subsistemas diseados
analticamente.

1.3.- Alcance

El proyecto se basa en el diseo computacional de filtros, por lo tanto los resultados no
sern los reales, sino ms bien aproximados. Es necesario recalcar que el proyecto es la
base fundamental para el diseo implementacin de filtros.

1.4.- Limitaciones

El proyecto tiene sus limitaciones, ya que el mismo se basa en el diseo y la simulacin,
ms no as la implementacin fsica. Sin embargo la implementacin fsica no debera
presentar mayores inconvenientes una vez diseado y simulado el sistema.


2.- MARCO TERICO

Un ltro digital se puede denir como todo procesado que altera la naturaleza de una
seal sonora de una forma o de otra. Un ltro discreto es un proceso computacional o
algoritmo mediante el cual una seal digital (secuencia de muestras) es transformada en
una segunda secuencia de muestras o seal digital de salida.


2.1.- Respuesta impulsional, frecuencial, y de fase de un filtro

La respuesta impulsional es la reaccin de un ltro a un impulso que se enva a su
entrada. La respuesta impulsional caracteriza a un ltro en el dominio temporal. Sea por
ejemplo, la respuesta impulsional de una sala de conciertos que es posible generar si se
aplica un golpe seco en la sala. Al trabajar en el dominio digital, dicha respuesta
impulsional estar discretizada en el tiempo, y por tanto denida por una serie de
muestras: [2]

h[n] 2.1

La transformada de Fourier de una respuesta impulsional aplicada a un ltro
corresponde a su funcin de transferencia o representacin frecuencial, que caracteriza
al ltro en el dominio frecuencial. Dicha caracterizacin se realiza a travs de su
espectro de amplitud y de su espectro de fase. [2]
H(f)
Amplitud : |H(f)|
Fase : < H(f)




Por naturaleza, un ltro no puede ser a la vez preciso en el dominio temporal y
frecuencial. De hecho, un ltro con una transicin rpida (por ejemplo, con una banda
pasante estrecha) presenta una respuesta impulsional larga (el impulso presenta
resonancia por mucho tiempo). Por el contrario, una banda pasante ancha corresponde a
una respuesta impulsional corta. [2]

Sea una seal digital de entrada x[n] que se procesa con un ltro para generar una seal
de salida y[n]. El espectro de la seal de salida Y(f) se obtiene multiplicando el espectro
de entrada X(f) por la respuesta frecuencial del ltro H(f), es decir:

Y (f) = X(f) H(f) 2.2

sto equivale a la operacin de convolucin (representada con un "*") entre las seales
en el dominio temporal:
y[n] = x[n] h[n] 2.3

Los ltros tienen tambin un efecto importante en la fase de las seales. El ltrado en s
mismo es una aplicacin de los retardos (modicando la fase de la seal), lo que explica
su comportamiento en el dominio temporal y su implantacin digital.[4]

2.2.- La transformada Z

La teora de ltros tiene una componente matemtica compleja que hace que se aleje de
la experiencia humana. La ecuacin de un ltro, por ejemplo, no est relacionada
necesariamente con sus cualidades sonoras. En los textos tcnicos, los ltros se
describen mediante una herramienta matemtica denominada transformada z. La
transformada z relaciona los efectos de retardos de muestras en una imagen de dos
dimensiones de la representacin frecuencial (H(f)) que se denomina el plano complejo
z. Los polos en dicho plano representan los picos de resonancia o puntos que hacen que
la respuesta frecuencial se haga innita. Los ceros representan los puntos de amplitud
nula de la respuesta frecuencial. Por ejemplo, un ltro de 2 polos tiene 2 picos de
resonancia. La transformada z es un concepto esencial para el diseo de ltros, ya que
proporciona una relacin matemtica entre las caractersticas del ltro que se pretende
disear y los parmetros de implementacin del mismo. Sin embargo, la complejidad
matemtica de la transformada z slo est indirectamente relacionada con los
parmetros que tienen signicacin perceptual. [2]

2.3.- Tipos de filtros

Los ltros ms corrientes son los ltros paso bajo (Low Pass, LP), paso alto (High Pass,
HP), paso de banda (Band Pass, BP) y los ltros rechazo de banda (o paso no banda)
(Band Reject, Band stop o Notch).

Cada punto de la respuesta en frecuencia nos indica la atenuacin a la que se someter
una seal a una frecuencia determinada.

Los ltros paso bajo (LP) dejan pasar las frecuencias que estn por debajo de
una determinada frecuencia.



Los ltros paso alto (HP) dejan pasar las frecuencias que estn por encima de
una determinada frecuencia.


Estos dos tipos de ltros estn denidos por su frecuencia de corte, que es la frecuencia
a la cual la amplitud de la seal se reduce a 0.707 (1/2 ) de su valor mximo, es decir,
sufre 3 dB de atenuacin.

Los ltros paso banda (BP) dejan pasar las frecuencias que estn situadas en una
determinada banda de frecuencia, es decir, entre dos determinadas frecuencias.

Los ltros rechazo de banda (BR) dejan pasar todas las frecuencias excepto las
que estn situadas en una determinada banda de frecuencia, es decir, entre dos
determinadas frecuencias f1 y f2. Estas frecuencias son las frecuencias a las que
la amplitud de la seal se reduce a 0.707 ( 1/2) de su valor mximo, es decir,
sufre 3 dB de atenuacin.

Estos dos tipos de ltros estn denidos por su frecuencia central y su ancho de banda,
que sera la diferencia entre las frecuencias de corte inferior y superior. Como se ilustra
en la gura 1, las transiciones entre la banda pasante y la banda de corte no son
generalmente limpias en los ltros reales. Existe, por tanto, una banda de transicin
entre la zona donde tericamente todo pasa y la zona donde tericamente nada pasa. Los
ltros pueden combinarse en serie o en paralelo para obtener respuestas frecuenciales
ms complejas. [2]

Figura 1. Caractersticas de transicin, rizado, y atenuacin de un Filtro

2.4.- Ancho de banda y Factor de calidad


En un ltro ideal, todo componente espectral que se site ms all de la frecuencia de
corte debera, en principio ser eliminada completamente. En realidad, no podemos
implementar este tipo de ltros con los mtodos que veremos.
Por lo tanto, tenemos que establecer la rigidez o rapidez del corte, expresado en dB por
octava.
El factor de calidad Q de un ltro BP o BR permite regular la rapidez o la pendiente de
la campana que se representa en la gura 2.

Figura 2. Representacin del factor de calidad por medio de la pendiente en la
campana
El factor de calidad Q corresponde a un cociente entre la frecuencia central del ltro y el
ancho de banda a los puntos con 3 dB de atenuacin:
=
]
ccntrcl
]
c1
-]
c2
2.4
La gura 2 representa un ltro BP en el que hacemos variar el factor de calidad
manteniendo ja la frecuencia central.
La amplitud mxima o ganancia de un ltro BP o BR tambin es importante. El control
de bandas mltiples, por ejemplo, y la ganancia de cada una de ellas, permitir fabricar
mdulos ecualizadores o ltros grcos.

2.5.- Diseo de filtros digitales
Como regla general, cualquier algoritmo o sistema de tratamiento puede interpretarse
como un filtro. Aqu se entiende por filtro aquel sistema lineal e invariante que permite
el paso de las componentes de la seal existentes en un determinado intervalo
frecuencial, y elimina las dems. De forma ideal, el mdulo de la respuesta frecuencial
de un filtro toma un valor constante en el margen de frecuencias que se quieren
conservar, que se denomina banda de paso. El intervalo de frecuencias complementario
al anterior en que la respuesta en magnitud es nula se denomina banda de rechazo o
atenuada. La banda de transicin es aquella que se sita entre dos bandas cuyas
atenuaciones estn especficadas, por tanto, se caracteriza porque no se impone al filtro
ningn requisito en dicho intervalo frecuencial, dando libertad de esa forma al diseo
del filtro siempre y cuando se cumplan los requisitos impuestos en la banda de paso y
de rechazo. [2]


En general la bibliografa presenta cmo se puede obtener diseos de filtros que
aproximen la respuesta ideal del filtro en el dominio digital (Z). Para ello se obtiene la
respuesta ideal del filtro en el dominio digital (Z). Esto va acompaado de la respuesta
impulsional h[n] correspondiente y su correspondiente transformada en Z H(z). El
estudio se limita al diseo de filtros lineales, invariantes, causales, estables y que
puedan describirse por una ecuacin en diferencias finitas de coeficientes reales y
constantes.
En el diseo de filtros digitales se pueden distinguir dos tipos bsicos. Por un lado,
aquellos en la que la respuesta impulsional del filtro tiene un nmero finito L de
muestras distintas de cero, lo que da lugar a la denominacin abreviada de filtros FIR
(Finite Impulse Response). La funcin de transferencia de un filtro FIR es polinmica
en z-1, y su orden es L-1. Esto implica que el filtro tiene L-1 ceros distribuidos en el
plano complejo z y todos los polos en el origen. Por ello suele hablarse de los filtros
FIR como filtros slo ceros. Por otro lado, existen los llamados filtros recurrentes cuya
respuesta impulsional tiene longitud infinita, son tambin llamados filtros IIR (Infinite
Impulse Response). Un filtro IIR tiene Q ceros y P polos distribuidos en el plano
complejo. [2]
Para que un sistema sea realizable debe ser causal y estable. En ningn caso el filtro
diseado puede tener una respuesta frecuencial ideal. Por tanto, el filtro se disea de
modo que su funcin de transferencia presente una respuesta frecuencial cuyo mdulo
se aproxime al ideal. En esta aproximacin se permite una tolerancia alrededor del valor
unidad del mdulo de la respuesta frecuencial en la banda de paso y sobre el valor nulo
en la banda atenuada. Esas tolerancias suelen recibir el nombre de rizado. Adems, se
acepta una banda de transicin entre la banda de paso y la atenuada.
2.5.1.- Diseo de filtros FIR (Respuesta finita al impulso)
Se trata de un tipo de filtros digitales en el que, como su nombre indica, si la entrada es
una seal impulso, la salida tendr un nmero finito de trminos no nulos. Para obtener
la salida slo se basan en entradas actuales y anteriores. Su expresin en el dominio n
es:
y
n
= b
k
x(n k)
N-1
k=0
2.5
En la expresin anterior N es el orden del filtro, que tambin coincide con el
nmero de trminos no nulos y con el nmero de coeficientes del filtro. Los
coeficientes son bk.
La salida tambin puede expresarse como la convolucin de la seal de entrada
x(n) con la respuesta impulsional h(n) :
y
n
=
k
x
n-k
N-1
k=0
2.6
Aplicando la transformada Z a la expresin anterior:
E(z) =
k
z
-k N-1
k=0
=
0
+
1
z
-1
++
N-1
z
-(N-1)
2.7


La funcin de transferencia tiene un denominador constante y solo tiene ceros. La
respuesta es de duracin finita ya que si la entrada se mantiene en cero durante M
periodos consecutivos, la salida ser tambin cero.[4]

Existen tres grandes mtodos de diseo de filtros FIR con fase lineal:

Mtodo de las ventanas
Muestreo en frecuencia
Rizado constante (equiripple).

2.5.1.1 Mtodo de las Ventanas
El truncamiento de la series de Fourier produce los filtros FIR con oscilaciones
indeseables en la banda de paso y en la banda de rechazo, las cuales resultan de la lenta
convergencia de las series de Fourier.
Para reducir estas oscilaciones, una clase particular de funciones son empleadas para
modificar los coeficientes de Fourier (respuesta al impulso), estas son llamadas
ventanas. El truncamiento de las series infinitas de Fourier es equivalente a la
multiplicacin de los coeficientes con la funcin ventana.
El mtodo de las ventanas se basa en acotar la respuesta impulsional infinita de un
filtro ideal, el mtodo del muestreo en frecuencia propone que se fijen una serie de
puntos de la respuesta en frecuencia del sistema, y a partir de la DFT inversa, obtener
los coeficientes del filtro. Por ltimo existe una familia de mtodos que se basan en
definir la respuesta en frecuencia ideal del filtro, y fijado un orden obtener los
coeficientes que generen la respuesta ms aproximada. Esas ventanas no son ms que
secuencias de longitud finita que tienen una respuesta frecuencial que permite que al
ser multiplicadas por la funcin de transferencia utilizada el error no sea muy grande.
Esto es una descripcin intuitiva y nada rigurosa del sentido del enventanado.

Bsicamente se utilizan tres tipos de ventanas, la de Kaiser, la de Hamming y la de
Blackman. En la tabla 1 se muestran los diferentes tipos de ventana y sus principales
caractersticas.





Tabla 1. Tipos de venta y sus caractersticas
En las ventanas consideradas, la anchura del lbulo principal es inversa al valor de N y
la atenuacin del lbulo secundario no depende del orden sino del tipo de ventana. El
orden determina la anchura de la banda de transicin. Estas ventanas no son muy
verstiles para el diseo de filtros ya que no podemos controlar la anchura de la banda
de transicin y la atenuacin independientemente. Existen otro tipo de ventanas como la
de Kaiser, definida con 2 parmetros N y , que nos permiten controlar ambos
parmetros independientemente.

Su definicin es ms compleja, a partir de funciones de Bessel. La gran utilidad de esta
ventana es que existen expresiones aproximadas para la eleccin de parmetros de
diseo, adems modificando los valores de podemos tener formas de la ventana
similares a las anteriores. [4]

2.5.1.2.-Metodo del muestreo en frecuencia

Para este mtodo se define la respuesta en frecuencia de un filtro a partir de fijar N
puntos de |H()|. Para mayor simplicidad, supongamos que los puntos escogidos estn
uniformemente distribuidos por todo el espectro digital. Podemos obtener h(n) a partir
de la Transformada de Fourier inversa de {H(k)}, versin muestreada de la H().

Se conoce que en funcin de que la longitud del filtro sea par o impar y la simetra de
los coeficientes sea par o impar, se distinguen cuatro tipos de filtros, con 4 expresiones
de la relacin entre h(n) y A() [A() es la amplitud, que puede ser positiva o negativa
pero siempre es una magnitud real] que presentan unas relaciones de simetra
interesantes. En la tabla 2 se observan los cuatro tipos de filtros, seguidos de sus
respuestas en frecuencia (Figura3).





Tabla 2. Tipos de filtros con el mtodo de muestreo en frecuencia


Figura 3. Respuesta en frecuencia por el mtodo de muestreo en frecuencia

El procedimiento asegura un error nulo para la aproximacin en un conjunto finito de
frecuencias equi-espaciadas, aqullas en las que se muestrea la respuesta frecuencial
ideal.

El diseo por muestreo en frecuencia es muy popular dada su sencillez. Presenta, sin
embargo, importantes deficiencias. No es posible controlar directamente la amplitud del
error. Tampoco se conoce un criterio estimativo del orden del filtro. Para conseguir un
comportamiento ajustado a una plantilla debe acudirse a una estrategia de ensayo y error
tediosa, que en la mayora de los casos proporciona un filtro de orden excesivo y que,
incluso, no garantiza la existencia de solucin. [4]

2.5.1.3.- Mtodo del rizado constante

Los mtodos anteriores son sencillos de implementar pero tienen desventajas, ya que no
se pueden especificar p y s de forma precisa. Los valores de 1 y 2 no se pueden
elegir independientemente (En el mtodo de las ventanas 1=2, y en el mtodo del
muestreo en frecuencia en el mejor de los casos existen mtodos para optimizar respecto
de 2), adems el rizado no se distribuye uniformemente en las bandas. Si el error se
distribuye uniformemente podemos disear filtros que verifican las especificaciones con
menor orden.

El mtodo que lleva a cabo esta distribucin del error se denomina Mtodo de diseo de
filtros ptimos de rizado constante.

Se plantea el diseo del filtro como un problema de aproximacin de Tchebyshev, para
ello se propone un criterio de diseo ptimo, en el sentido de que el error de


aproximacin entre la respuesta en frecuencia ideal y la real se reparten uniformemente
en cada banda, pasante y atenuada (de ah el apelativo de equiripple), minimizando el
error mximo en cada una de ellas. El filtro resultante presenta, pues, rizado en ambas
bandas.

Para su diseo se considera 5 caractersticas:

N el orden del filtro
p lmite superior de la banda pasante
s lmite inferior de la banda atenuada
1 mximo rizado de la banda pasante
2 mnima atenuacin de la banda atenuada.

El problema se plantea como la minimizacin de una funcin de error definida como:

E() = W()[HD() - H()] 2.8
HD() : respuesta del filtro ideal
W() : funcin de pesos para especificar el error permitido en cada banda

Dada esta funcin de error, el objetivo es hallar los coeficientes h(n) que minimizan el
valor de E() en toda la banda, permitiendo un valor mximo del error especfico dado
por 1 y 2.
min
coc]ccntcs
= |mox
w
|E()|' 2.9

La respuesta frecuencial que ofrecen los filtros diseados mediante la manipulacin
directa del comportamiento ideal, (el enventanado de la respuesta impulsional o el
muestreo de la respuesta frecuencial) presenta un error en las bandas de paso y
atenuadas cuya amplitud crece en las proximidades de las bandas de transicin. La
solucin a ese problema que aporta esta metodologa es la de repartir el error por las
diversas bandas usando una funcin que lo permita. En nuestro caso, para ejemplificar,
usaremos el mtodo de Parks-McClellan o tambin denominado mtodo de Remez.


2.5.2.- Diseo de filtros IIR (Respuesta infinita al impulso)

Son sistemas cuya salida depende adems de salidas anteriores, y que estando en
reposo, al ser estimulados con una entrada impulsional su salida no vuelve al reposo, de
ah el calificativo de filtros de respuesta impulsional infinita (IIR). La ecuacin en
diferencias general es de la forma:

y(n) = b
k

M
k=0
x(n k) o
k
y(n k)
N
k=1
2.10

donde el orden es igual al mximo de M y N.

La funcin de transferencia en Z del filtro es:

E(z) =
b
k
z
-k M
k=0
u
k
z
-k N
k=0
2.11



Existen dos filosofas de diseo de filtros IIR, las cuales se clasifican en la indirecta y la
directa.

La indirecta se basa en aplicar a filtros analgicos diseados previamente,
transformaciones que los conviertan en digitales con las mismas caractersticas, dentro
de estos existen tres mtodos fundamentales:

Diseo por impulso invariante
Diseo por analoga aproximacin de derivadas
Diseo por transformacin bilineal

La directa se propone el diseo de filtros digitales imponiendo una seria de condiciones
a la respuesta para determinar los coeficientes. En particular resaltan dos mtodos
simples como son:

Diseo por aproximacin de Pde
Diseo por aproximacin de mnimos cuadrados


2.5.2.1 Dise de filtros basados en la forma indirecta

2.5.2.1.1.- Aproximacin del impulso invariante

Se disea un filtro digital IIR cuya respuesta impulsional h(n), sea la versin
muestreada de la respuesta impulsional del filtro analgico equivalente: hd=ha(nT), con
n = 0,1,2,k.

Si se parte de un filtro analgico con N polos simples:

E(s) =
A
k
s-s
k
N
k=1
2.12

La respuesta impulsional en forma de una ecuacin en diferencias es:


d
(n) = A
k
N
k=1
. c
s
k
.n.1
2.13

Por lo que su transformada Z queda en:

E(z) = A
k
.
1
1-c
s
k
.T
.z
-1
N
k=1
2.14

Por tanto, el procedimiento es claro, se detectan los polos del filtro analgico {sk}, se
descompone H(s) como suma de monomios y se obtiene H(z).

Comparando H(s) y H(z) observamos que por cada polo en sk tenemos un polo en
z
k
= c
s
k
1


Se mantiene la respuesta impulsional de ambos filtros, al igual que la estabilidad, ya que
filtros analgicos estables dan lugar a filtros digitales estables. Sin embargo se tiene que
recalcar que existe el inconveniente del solapamiento, y es debido a eso que el
mtodo no es adecuado para filtros pasa alta elimana banda.



2.5.2.1.2.- Aproximacin de derivadas (Analoga)

Se basa en establecer una analoga entre el operador diferencial en el dominio de
Laplace y el dominio Z. En sistemas analgicos el diferencial es: H(s) = s.

En sistemas discretos podemos realizar una primera aproximacin de la derivada que es
la llamada backward difference y que se define como:

2.15

La transformada Z de la expresin anterior es:
E(z) =
1-z
-1
1
2.16

El mtodo tiene una limitante, ya que si se parte de un filtro analgico estable, no
siempre es posible crear un filtro digital estable

2.5.2.1.3.-Transformacin bilineal

Ninguno de los mtodos anteriores parece resolver de forma adecuada la transformacin
del dominio analgico al digital. Las condiciones que debera cumplir una
transformacin para ser ptima son:

1. Dada una funcin real y racional en S, la funcin resultante en Z, ser tambin
racional y con coeficientes reales.

2. Dado un filtro analgico estable, el filtro digital resultante tambin lo ser (el
semiplano izquierdo del dominio de Laplace debe transformarse dentro del
crculo de radio unidad en el dominio Z).

3. En particular, interesa una funcin reactancia que haga corresponder al eje
imaginario del plano de Laplace, la circunferencia de radio unidad.

4. Dado un orden del filtro analgico, el filtro digital resultante ser del mismo
orden. [2]

Existe una relacin que cumple todas estas condiciones, la llamada transformacin
bilineal:

s =
2 (z-1)
1 (z+1)
; z =
2
T
+s
2
T
-s
2.17

El mtodo permite realizar todas las transformaciones de filtros analgicos a digitales,
sin embargo debido a que la relacin entre la frecuencia analgica y digital es no lineal,
se produce una compresin de frecuencias conocido como warping.



Como consecuencia de esta relacin no lineal entre frecuencias, los filtros diseados por
la Transformacin bilineal vern modificada su respuesta en fase; es decir, si el filtro
analgico presenta fase lineal el filtro digital no la presentar.

La transformacin bilineal realiza un mapeado, entre los dominios de Laplace y Z con
una correspondencia 1 a 1 debido a la compresin de frecuencias (prewarping), por esta
razn no se produce solapamiento como ocurre con el mtodo del impulso invariante.[2]


2.5.2.2.-Diseo de Filtros Basados en la forma Directa

Estos mtodos se basan en la teora de la aproximacin, imponiendo restricciones en
cuanto a la desviacin de la respuesta en frecuencia del filtro respecto del filtro ideal, y
son especialmente tiles cuando el filtro se debe obtener a partir de datos
experimentales.

El objetivo es determinar los coeficientes del filtro digital en base a minimizar algn
parmetro de diseo. El nmero de procedimientos existentes es muy numeroso por lo
que nicamente analizaremos los ms sencillos.


2.5.2.2.1.- Aproximacin de Pad

Dado un sistema con funcin de transferencia:

E(z) =
b
k
.z
-k M
k=0
1+ u
k
.z
-k N
k=1
= (k). z
-k +
k=0
2.18

Es necesario obtener los L=M+N+1 coeficientes, {ak} y {bk}, a partir de la
minimizacin de algn criterio de error. ste mtodo se plantea minimizar la suma de
los errores cuadrticos entre la respuesta impulsional ideal (deseada) y la real:

e = |
d
(n) (n)]
0
n=0
` 2.19

Donde hd(n) es la respuesta deseada del filtro y h(n) la real; U es un lmite superior
seleccionado por el diseador.

El mtodo de la aproximacin de Pad consigue un ajuste perfecto entre la respuesta
impulsional del filtro obtenido y la del filtro real en los L=M+N+1 puntos utilizados.
Slo funciona adecuadamente para filtros con muchos ceros y polos


2.5.2.2.2 Aproximacin por mnimos cuadrados

Un mtodo alternativo para disear filtros IIR es afrontar el problema de la
minimizacin de la diferencia al cuadrado entre la respuesta del filtro ideal y la real, es
decir, plantear el problema de la identificacin de sistemas. La idea es determinar los
coeficientes del sistema H(z) de manera que colocado en cascada con el sistema que se
quiere modelar se obtenga como resultado una seal (y(n)) que en el dominio temporal
debera ser un impulso cuando la modelizacin es exacta (Ver figura 4). Si definimos


como criterio de error la suma de y(n), es posible obtener los coeficientes imponiendo
que dicho error sea mnimo. Dentro de este mtodo se incluyen las aproximaciones de
Prony y el mtodo de Shanks.



Figura 4. Aproximacin por mnimos cuadrados




3.- METODOLOGA

La metodologa empleada en el proyecto es la cientfica basada en diseo y simulacin.
La misma ir acompaada del mtodo de prueba y error para validar los resultados. El
mtodo est orientado a soluciones de un problema especfico, no es posible encontrar
todas las soluciones, ni la mejor, pero si una aproximacin.
Teniendo en cuenta la estructura general desarrollado en el apartado del marco terico,
se identifica dos tipos de filtros digitales, los basados en funciones de transferencia FIR,
y los basados en funciones de transferencia IIR.

A continuacin se detallan los pasos a seguir durante la ejecucin del proyecto:

a) Crear una seal que servir de ejemplo para todos los casos a analizar.

b) Especificar las condiciones para el diseo del filtro.

c) Determinar el orden del filtro mediante instrucciones especficas en MATLAB,
para las clases de filtro FIR (KAISERORD, REMEZORD), y las clases de filtro
IIR (BUTTORD, CHEB1ORD, CHEB2ORD, ELLIPORD)

d) Aplicar un filtro pasabanda a la seal de prueba mediante instrucciones
especficas de MATLAB para filtros clase FIR (FIR1, FIR2, FILRS, REMEZ,
FIRLCLS, FIRCLS1, CREMEZ, FIRRCOS, BESSEL), y filtros clase IIR
(BUTTER, CHEBY1, CHEBY2, ELLIP, YULEWALK).

e) Graficar la respuesta del filtro y la seal filtrada, para posteriormente analizar el
comportamiento, y compararlo con los distintos mtodos.


4.- ANLISIS Y RESULTADOS

Para el anlisis de los diferentes filtros existentes, se empleo una sola seal, que es la
suma de diferentes seales con diferentes frecuencias.



4.1.- Seal de prueba:

S = sin(2**t*20) + sin(2**t*1500)+sin(2**t*4000)

Figura 5. Respuesta en el tiempo de la seal de prueba

A la seal de prueba se aplica un filtro pasa-banda, diseado con los diferentes mtodos
existentes en MATLAB, bajo las siguientes especificaciones:
Banda de paso: 30 3500 Hz
Atenuacin en la banda de parada: 40 dB
Rizado en la banda de paso: 3 dB

4.2.- Anlisis con el diseo de filtros FIR

Para el diseo de filtros FIR en MATLAB, inicialmente se procedi a calcular el orden
del filtro mediante las instrucciones: KAISERORD Y REMEZORD (reemplazado
actualmente con firpmord). La frecuencia de muestreo en todos los casos fue de 10500
Hz.

4.2.1.- Instruccin KAISERORD

La sintaxis y los resultados obtenidos con la instruccin KAISERORD son:

n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)

Wn = [0,0029 0,8190]
Beta = 3.3953
Ftype = DC-0
N = 782

4.2.2.- Instruccin FIRPMORD

La sintaxis y los resultados obtenidos con la instruccin FIRPMORD son:

[n,fo,ao,w] = firpmord(f,a,dev,fs)
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
Seal de Prueba
Tiempo [s]
A
p
litu
d



N= 512
Fo = [0 0 0.0057 0.6667 0.9714 1]
Ao= [0 0 1 1 0 0]
W= [5 1 5]

Como se puede apreciar el orden del filtro en ambos casos es muy elevado, hecho que
da lugar a desestimar el orden debido a su difcil implementacin. Para propsitos de
anlisis de aqu en adelante se emplear un orden de filtro general que ser N = 44.

4.2.3.- Instruccin FIR1

La sintaxis, la respuesta del filtro, y la respuesta en el tiempo de la seal filtrada se
muestran a continuacin. (Ver figura 6 y 7)

b = fir1(n,Wn,window)

Como se puede ver en las figuras 6 y 7, la respuesta del filtro presenta en la prctica
una respuesta similar a un filtro pasabajo, no as un filtro pasabanda. Esto se debe a las
exigencias del diseo y el orden aplicado. Para cumplir las exigencias del diseo y
verificar que el filtro trabaja como pasa-banda ser necesario aumentar en gran manera
el orden del filtro. Se podra mejorar el filtro empleando filtros en cascada, sin embargo
se tiene que tener cuidado con los retardos al aplicar los filtros.

Figura 6. Respuesta del filtro con la instruccin FIR1

0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
X: 30.76
Y: 0.8664
Respuesta FIR1
Frecuencia [Hz]
G
a
n
a
n
c
ia



Figura 7. Respuesta en el tiempo de la seal filtrada con FIR1

4.2.4.- Instruccin FIR2

La sintaxis, la respuesta del filtro, as como la respuesta de la seal filtrada en el tiempo
se muestran a continuacin. (Ver figura 8 y 9)

b = fir2(n,f,m,window)

La respuesta del filtro empleando la instruccin FIR2 es muy similar a la repuesta
empleando la instruccin FIR1.

Figura 8. Respuesta del filtro con la instruccin FIR2

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1
-0.5
0
0.5
1
1.5
2
Seal de Prueba Filtrada con FIR1
Tiempo [s]
A
p
lit
u
d
0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Respuesta FIR2
Frecuencia [Hz]
G
a
n
a
n
c
ia



Figura 9. Respuesta en el tiempo de la seal filtrada con FIR2

4.2.5.- Instruccin FIRCLS

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 10 y 11)

b = fircls(n,f,amp,up,lo)

Como se puede apreciar en las figuras 10 y 11, la respuesta de filtro presenta un
comportamiento inferior a los dos empleados anteriormente. Esto debido al mtodo que
emplea la instruccin que impone lmites para los rizados.


Figura 10. Respuesta del filtro con la instruccin FIRCLS

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1
-0.5
0
0.5
1
1.5
2
Seal de Prueba Filtrada con FIR2
Tiempo [s]
A
p
lit
u
d
0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
X: 30.76
Y: 0.7911
Respuesta FIRCLS
Frecuencia [Hz]
G
a
n
a
n
c
ia



Figura 11. Respuesta en el tiempo de la seal filtrada con FIRCLS


4.2.6.- Instruccin REMEZ

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 12 y 13)

b = remez(n,f,a)

El comportamiento del filtro empleando la instruccin REMEZ es an peor que los
analizados hasta el momento, motivo por el cual se desecha el diseo del filtro.

Figura 12. Respuesta en el tiempo de la seal filtrada con REMEZ


0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1
-0.5
0
0.5
1
1.5
2
Seal de Prueba Filtrada con FIRCLS
Tiempo [s]
A
p
lit
u
d
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-3
-2
-1
0
1
2
3
Respuesta REMEZ
Frecuencia [Hz]
G
a
n
a
n
c
ia


4.3.- Anlisis con el diseo de filtros IIR

Para el diseo de filtros IIR en MATLAB, inicialmente se procedi a calcular el orden
del filtro mediante las instrucciones: BUTTORD, CHEB1ORD, CHEB2ORD,
ELLIPORD. La frecuencia de muestreo en todos los casos fue de 10500 Hz.

4.3.1.- Instrucciones BUTTORD, CHEB1ORD, CHEB2ORD, ELLIPORD

La sintaxis y los resultados obtenidos con las instrucciones indicadas son:

[n,Wp] = buttord(Wp,Ws,Rp,Rs)

[n,Wp] = cheb1ord(Wp,Ws,Rp,Rs)

[n,Wp] = cheb2ord(Wp,Ws,Rp,Rs)

[n,Wp] = ellipord(Wp,Ws,Rp,Rs)

En todos los casos se obtienen un orden de filtro demasiado alto (N=20) para un filtro
del tipo IIR, hecho que da lugar a desestimar el orden debido a su difcil
implementacin.

Para propsitos de anlisis, de aqu en adelante se emplear un orden de filtro general
que ser N = 6.

4.3.2.- Instruccin BUTTER

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 13 y 14)

[b,a] = butter(n,Wn,'ftype')
Se observa en la figura 13 que la respuesta del filtro presenta un comportamiento plano
en la regin de frecuencias de paso, detalle que es bueno para el filtro. Sin embargo la
banda de transicin es bastante ancha.


Figura 13. Respuesta del filtro con la instruccin BUTTER




14. Respuesta en el tiempo de la seal filtrada con BUTTER

4.3.3.- Instruccin CHEBY1

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 15 y 16)

[b,a] = cheby1(n,R,Wp,'ftype')
En la figura 15 se observa el comportamiento de rizado constante en el rango de
frecuencias de paso. Este comportamiento no es de los deseados para la respuesta final
de la seal filtrada, sin embargo el mtodo permite banda de transicin estrecha.
0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
X: 30.76
Y: 0.7586
Respuesta Filtro Butterworth
Frecuencia [Hz]
G
a
n
a
n
c
ia
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
1.5
Seal de Prueba Filtrada con Butterworth
Tiempo [s]
A
p
lit
u
d



Figura 15. Respuesta del filtro con la instruccin CHEBY1

Figura 16. Respuesta en el tiempo de la seal filtrada con CHEBY1


4.3.4.- Instruccin CHEBY2

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 17 y 18)

[b,a] = cheby2(n,R,Wst,'ftype')
En la figura 17 se observa que el comportamiento en la banda de paso es el adecuado,
sin embargo el comportamiento en la banda de rechazo es indeseable pese al rizado
constante, que es caracterstico del mtodo.
0 1000 2000 3000 4000 5000 6000
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Respuesta Filtro Chebyshev I
Frecuencia [Hz]
G
a
n
a
n
c
ia
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
Seal de Prueba Filtrada con Chebyshev I
Tiempo [s]
A
p
litu
d



Figura 17. Respuesta del filtro con la instruccin CHEBY2


Figura 18. Respuesta en el tiempo de la seal filtrada con CHEBY2

4.3.5.- Instruccin ELLIP

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de la seal filtrada
se muestran a continuacin. (Ver figura 19 y 20)

[b,a] = ellip(n,Rp,Rs,Wp,'ftype')
En la figura 19 se observa el comportamiento de rizado, tanto en las bandas de paso de
frecuencia, como en las bandas de rechazo. Si bien es posible reducir el orden del filtro,
el sistema podra entrar en una oscilacin constante producto del los rizados.
0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Respuesta Filtro Chebyshev II
Frecuencia [Hz]
G
a
n
a
n
c
ia
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
1.5
Seal de Prueba Filtrada con Chebyshev II
Tiempo [s]
A
p
litu
d



Figura 19. Respuesta del filtro con la instruccin ELLIP

Figura 20. Respuesta en el tiempo de la seal filtrada con ELLIP

4.3.6.- Instruccin YULEWALK

La sintaxis, la respuesta del filtro, as como la respuesta en el tiempo de laseal filtrada
se muestran a continuacin. (Ver figura 21 y 22)

[b,a] = yulewalk(n,f,m)

En la figura 21 se observa la respuesta del filtro empleando Yulewalk. En el mismo se
observa que la respuesta del filtro es oscilatoria, tanto en la banda de paso de frecuencia,
como en la de rechazo. Adems del comportamiento no deseado, la banda de transicin
es bastante amplia. Debido a esto la respuesta de la seal filtrada presentar un
comportamiento oscilatorio.
0 1000 2000 3000 4000 5000 6000
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Respuesta Filtro Ellip
Frecuencia [Hz]
G
a
n
a
n
c
ia
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
1.5
Seal de Prueba Filtrada con Ellip
Tiempo [s]
A
p
litu
d



Figura 21. Respuesta del filtro con la instruccin YULEWALK

Figura 22. Respuesta en el tiempo de la seal filtrada con YULEWALK


5.- CONCLUSIONES


Por lo analizado se puede concluir que no todas las instrucciones (mtodos) son
idneas para disear un determinado tipo de filtro (pasa-bajo, pasa-alto, pasa-
banda, rechaza-banda, etc.), que la eleccin de clase de filtro FIR IIR
depender en gran manera de la aplicacin a realizar y de las especificaciones
que el mismo tenga que cumplir. Sin embargo MATLAB resulta ser una
herramienta de gran utilidad al momento de realizar los clculos numricos, y
simplifica en gran manera el diseo de filtros.

0 1000 2000 3000 4000 5000 6000
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Respuesta Filtro Yulewalk
Frecuencia [Hz]
G
a
n
a
n
c
ia
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01
-1.5
-1
-0.5
0
0.5
1
1.5
2
Seal de Prueba Filtrada con Yulewalk
Tiempo [s]
A
p
litu
d


Resulta complicado indicar cul es la mejor opcin cuando se habla de filtros
FIR IIR, ms an cuando en la actualidad continan desarrollndose nuevos
mtodos. Es obvio el diferente tratamiento que se tendra que dar a aplicaciones
en las que preservar la fase es vital (audio) frente a otras que slo se preocupan
de la magnitud de la respuesta en frecuencia. Por otro lado, los mtodos de
diseo que entraan una elevada carga computacional pueden resultar
inadecuados en sistemas que requieren una variacin de las caractersticas del
filtro, y por tanto de sus coeficientes, en funcin de las condiciones del entorno.
Sin embargo en la tabla 3 se muestran las principales ventajas y desventajas de
los filtros FIR IRR de manera general.



FIR IRR
Es posible el diseo del filtro con
una fase perfectamente lineal.
Al tener ceros y polos en la funcin
de transferencia el nmero de
coeficientes (orden) es mucho menor
comparado con uno clase FIR, por lo
tanto presentan regiones de
transicin estrechas
Al tener una respuesta finita son
incondicionalmente estables.
La presencia de polos podra
producir inestabilidades, por lo que
requiere un anlisis mayor.
La implementacin fsica es sencilla
comparada con los filtros clase IIR.
No garantizan que la fase de su
funcin de transferencia sea lineal
Es necesario un gran nmero de
coeficientes (orden mayor) para
conseguir las prestaciones que
brindara un filtro clase IIR de orden
mucho menor.
La implementacin fsica es ms
compleja comparada con los de clase
FIR

Tabla 3. Tabla comparativa de frecuencias obtenidas


Para la comparacin de resultados (Scripts desarrollados versus herramientas
de MATLAB) se emplearon las herramientas FDATool y Filterbuilder de
MATLAB. Estas herramientas son bastante completas y muy bien elaboradas,
por lo que los resultados son de alguna manera mejores empleando ests
herramientas. Sin embargo es necesario recalcar que aunque el FDAToll y el
Filterbuilder son herramientas avanzadas, no siempre entregan resultados que se
pueden implementar de manera fsica, y es ah donde entra el anlisis y los
scripts personalizados que podran ayudar a realizar un filtro que se pueda
implementar de manera fsica.

En el apartado de anexos se encuentra el cdigo imgenes de la aplicacin
desarrollada, el mismo hace uso de scripts desarrollados, mezclados con
instrucciones propias de MATLAB como ser: fdesign, fvtool, etc.
6.- BIBLIOGRAFIA



[1] Digital Siganl Processing: A Computer-Based Approach, Sanjit K. Mitra, 2da.
Edicin, Prentice-Hall

[2] Filtros Digitales, M. Martnez, A.J. Serrano, J. Villa, J. Gmez,
Curso 2009-2010.

[3] Signal Processing Toolbox for use with Matlab, The MathWorks, Inc., Versin 5.

[4] Tratamiento Digital de la Seal, Andoni Irizar Picn, http:// www.tecnun.es/
asignaturas/tratamiento%20digital/tds5.html










































ANEXO A

Cdigo empleado para determinar el orden del filtro empleando KAISERORD y
REMEZORD

Fs=10500;
fcuts= [0 30 3500 5100];
mags = [0 1 0];
devs = [0.01 0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,Fs);
n=n+rem(n,2);
hh = fir1(n,Wn,ftype, kaiser(n+1,beta),'noscale');

%%%%%%%%%%%%%%%%%%%%%%%%%

Fs=10500;
f= [0 30 3500 5100];
a = [0 1 0];
dev = [0.01 0.05 0.01];
[n,fo,ao,w] = firpmord(f,a,dev,Fs);
n=n+rem(n,2);
hh = firpm(n,fo,ao,w);
































ANEXO B

Cdigo empleado para el anlisis y resultados empleando mtodos para filtros FIR

FIR1

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=44;
Fny=Fs/2;
Bfir1=fir1(N,[500 3500]/Fny); % esta bien , pero necesito como
coeficientes
[b,a]=fir1(N,[500 3500]/Fny);
[H,w]=freqz(Bfir1);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
%plot(t,sf);
%title('Respuesta FIR1', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con FIR1', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);
%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));

FIR2

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=44;
Fny=Fs/2;

Bfir2=fir2(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]); %coeficientes

[b,a]=fir2(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
[H,w]=freqz(Bfir2);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
plot(t,sf);
%title('Respuesta FIR2', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con FIR2', 'FontSize',18);


xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);

%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));


FIRCLS

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=44;
Fny=Fs/2;

Bfircls=fircls(N,[0 10 30 3500 3600 Fny]/Fny, [0 0 1 0 0 ], [0.01 0.01
1.02 0.01 0.01], [-0.01 -0.01 0.98 -0.01 -0.01]);
[b,a]=fircls(N,[0 10 30 3500 3600 Fny]/Fny, [0 0 1 0 0 ], [0.01 0.01
1.02 0.01 0.01], [-0.01 -0.01 0.98 -0.01 -0.01]);
[H,w]=freqz(Bfircls);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
plot(t,sf);
%title('Respuesta FIRCLS', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con FIRCLS', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);
%axis([0 1 -1 1]);
%S=fft(s,512);
%SF=fft(sf,512);
%w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));

REMEZ

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=44;
Fny=Fs/2;

Bremez=remez(N,[0 10 30 3500 3600 Fny]/Fny, [0 0 1 1 0 0 ]);


[b,a]=remez(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
[H,w]=freqz(Bremez);
%plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
plot(t,sf);
title('Respuesta REMEZ', 'FontSize',18);
xlabel('Frecuencia [Hz]','FontSize',14);
ylabel('Ganancia','FontSize',14);
%title('Seal de Prueba Filtrada con REMEZ', 'FontSize',18);
%xlabel('Tiempo [s]','FontSize',14);
%ylabel('Aplitud','FontSize',14);

%axis([0 1 -1 1]);
%S=fft(s,512);
%SF=fft(sf,512);
%w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));






































ANEXO C

Cdigo empleado para determinar el orden del filtro empleando BUTTORD, y
CHEB1ORD

Fs=10500;
Fny=Fs/2;

Wp = [30 3500]/Fny; Ws = [20 3550]/Fny;
Rp = 3; Rs = 40;
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
[b,a] = butter(n,Wn);
Bbutter=butter(n,Wn);
[H,w]=freqz(Bbutter);
%plot(w*Fs/(2*pi),abs(H));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Fs=10500;
Fny=Fs/2;

Wp = [30 3500]/Fny; Ws = [20 3550]/Fny;
Rp = 3; Rs = 40;
[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs);
[b,a] = cheby1(n,Wn);
Bcheby1=cheby1(n,Wn);
[H,w]=freqz(Bcheby1);
%plot(w*Fs/(2*pi),abs(H));




























ANEXO D

Cdigo empleado para el anlisis y resultados empleando mtodos para filtros IIR

BUTTER
Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=6;
Fny=Fs/2;
[b,a]=butter(N,[30 3500]/Fny);
[H,w]=freqz(b,a,512);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
%plot(t,sf);
%title('Respuesta Filtro Butterworth', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con Butterworth', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);

%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));


CHEBY1

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=6;
Fny=Fs/2;
[b,a]=cheby1(N,3,[30 3500]/Fny);
[H,w]=freqz(b,a,512);
%plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
plot(t,sf);
%title('Respuesta Filtro Chebyshev I', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con Chebyshev I', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);


%axis([0 1 -1 1]);
%S=fft(s,512);
%SF=fft(sf,512);
%w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));

CHEBY2

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=6;
Fny=Fs/2;
%S=fft(s,1024);
%s_abs=abs(S);
%plot(s_abs);
%Fs=10500;
[b,a]=cheby2(N,30,[30 3500]/Fny);
[H,w]=freqz(b,a,512);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
%plot(t,sf);
title('Respuesta Filtro Chebyshev II', 'FontSize',18);
xlabel('Frecuencia [Hz]','FontSize',14);
ylabel('Ganancia','FontSize',14);
%title('Seal de Prueba Filtrada con Chebyshev II', 'FontSize',18);
%xlabel('Tiempo [s]','FontSize',14);
%ylabel('Aplitud','FontSize',14);
%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));

ELLIP

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=6;
Fny=Fs/2;
%S=fft(s,1024);
%s_abs=abs(S);
%plot(s_abs);
%Fs=10500;
[b,a]=ellip(N,0.1,30,[30 3500]/Fny);
[H,w]=freqz(b,a,512);
plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz


sf=filter(b,a,s);
plot(t,sf);
%title('Respuesta Filtro Ellip', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con Ellip', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);
%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));

YULEWALK

Fs=10500;
t=(1:100)/Fs;
s1=sin(2*pi*t*20);
s2=sin(2*pi*t*1500);
s3=sin(2*pi*t*4000);
s=s1+s2+s3;
%plot(t,s)
N=6;
Fny=Fs/2;


[b,a]=yulewalk(N,[0 10 30 3500 3600 Fny]/Fny,[0 0 1 1 0 0]);
[H,w]=freqz(b,a,512);
%plot(w*Fs/(2*pi),abs(H)); %Eje x en frecuencia Hz
sf=filter(b,a,s);
plot(t,sf);
%title('Respuesta Filtro Yulewalk', 'FontSize',18);
%xlabel('Frecuencia [Hz]','FontSize',14);
%ylabel('Ganancia','FontSize',14);
title('Seal de Prueba Filtrada con Yulewalk', 'FontSize',18);
xlabel('Tiempo [s]','FontSize',14);
ylabel('Aplitud','FontSize',14);
%axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
%plot(w,abs((S(1:256)')));
%hold on
%plot(w,abs((SF(1:256)')));














ANEXO

Cdigo empleado en la realizacin de la aplicacin para diseo en filtros en
MATLAB

ENTORNO GRAFICO

function varargout = FiltrosD(varargin)

% FILTROSS MATLAB code for FiltrosD.fig
% FILTROSS, by itself, creates a new FILTROSS or raises the
existing
% singleton*.
%
% H = FILTROSD returns the handle to a new FILTROSD or the handle
to
% the existing singleton*.
%
% FILTROSD('CALLBACK',hObject,eventData,handles,...) calls the
local
% function named CALLBACK in FILTROSS.M with the given input
arguments.
%
% FILTROSD('Property','Value',...) creates a new FILTROSD or
raises the
% existing singleton*. Starting from the left, property value
pairs are
% applied to the GUI before FiltrosD_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to Filtross_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows
only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Filtross

% Last Modified by GUIDE v2.5 16-Sep-2013 08:44:11

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Filtross_OpeningFcn, ...
'gui_OutputFcn', @Filtross_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else


gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Filtross is made visible.
function Filtross_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Filtross (see VARARGIN)

% Choose default command line output for FiltrosD
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);


% UIWAIT makes FiltrosD wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Filtross_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;



function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1
as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');


end



function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2
as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'String')) returns contents of edit3
as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function edit4_Callback(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text
% str2double(get(hObject,'String')) returns contents of edit4
as a double


% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end



function edit5_Callback(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit5 as text
% str2double(get(hObject,'String')) returns contents of edit5
as a double


% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


ti=get(handles.popupmenu3,'Value');
Fpaso=str2num(get(handles.edit1,'String'));


Fparada=str2num(get(handles.edit2,'String'));
Apaso=str2num(get(handles.edit3,'String'));
Aparada=str2num(get(handles.edit4,'String'));

if get(handles.radiobutton1,'Value')==1

if get(handles.popupmenu1,'Value')==1

H=filtros_Butter(Fpaso,Fparada,Apaso,Aparada,ti,4*max(Fparada));

elseif get(handles.popupmenu1,'Value')==2

H=filtros_cheby1(Fpaso,Fparada,Apaso,Aparada,ti,4*max(Fparada));

elseif get(handles.popupmenu1,'Value')==3

H=filtros_cheby2(Fpaso,Fparada,Apaso,Aparada,ti,4*max(Fparada));

elseif get(handles.popupmenu1,'Value')==4

H=filtros_ellip(Fpaso,Fparada,Apaso,Aparada,ti,4*max(Fparada));

elseif get(handles.popupmenu1,'Value')==5
filtros_yulewalk(Fparada,Fpaso,Apaso,4*max(Fparada));

end
fvtool(H);
else
if get(handles.popupmenu2,'Value')==1
[a b]=filtros_fir1(Fparada,Fpaso,4*max(Fparada),ti);

elseif get(handles.popupmenu2,'Value')==2
[a b]=filtros_fir2(Fparada,Fpaso,4*max(Fpaso),ti);

elseif get(handles.popupmenu2,'Value')==3
[a b]=filtros_filrcls(Fparada,Fpaso,4*max(Fpaso),ti);

end
end

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

VectorS=str2num(get(handles.edit5,'String'));

ti=get(handles.popupmenu3,'Value');
Fpaso=str2num(get(handles.edit1,'String'));
Fparada=str2num(get(handles.edit2,'String'));
Apaso=str2num(get(handles.edit3,'String'));
Aparada=str2num(get(handles.edit4,'String'));

[Fs s]=Generador_S(VectorS);

if get(handles.radiobutton1,'Value')==1



if get(handles.popupmenu1,'Value')==1
H=filtros_Butter(Fpaso,Fparada,Apaso,Aparada,ti,Fs);

elseif get(handles.popupmenu1,'Value')==2
H=filtros_cheby1(Fpaso,Fparada,Apaso,Aparada,ti,Fs);

elseif get(handles.popupmenu1,'Value')==3
H=filtros_cheby2(Fpaso,Fparada,Apaso,Aparada,ti,Fs);

elseif get(handles.popupmenu1,'Value')==4
H=filtros_ellip(Fpaso,Fparada,Apaso,Aparada,ti,Fs);

elseif get(handles.popupmenu1,'Value')==5
[a b]=filtros_yulewalk(Fparada,Fpaso,Apaso,Fs);
w=(0:511)/512*(Fs/2);
sf=filter(b,a,s);
S=fft(sf,1024);
subplot(2,2,4);
plot(w,abs((S(1:512))),'black')
grid
zoom

end
Senal_salida(Fs,s,H)
else
if get(handles.popupmenu2,'Value')==1
[a b]=filtros_fir1(Fparada,Fpaso,Fs,ti);

elseif get(handles.popupmenu2,'Value')==2
[a b]=filtros_fir2(Fparada,Fpaso,Fs,ti);

elseif get(handles.popupmenu2,'Value')==3
[a b]=filtros_filrcls(Fparada,Fpaso,Fs,ti);
end
w=(0:511)/512*(Fs/2);
sf=filter(b,a,s);
S=fft(sf,1024);
subplot(2,2,4);
plot(w,abs((S(1:512))),'black')
grid
zoom

end





% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1
contents as cell array
% contents{get(hObject,'Value')} returns selected item from
popupmenu1
set(handles.radiobutton1,'value',1);


set(handles.radiobutton2,'value',0);

% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu2.
function popupmenu2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2
contents as cell array
% contents{get(hObject,'Value')} returns selected item from
popupmenu2
set(handles.radiobutton1,'value',0);
set(handles.radiobutton2,'value',1);


% --- Executes during object creation, after setting all properties.
function popupmenu2_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu3.
function popupmenu3_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu3
contents as cell array
% contents{get(hObject,'Value')} returns selected item from
popupmenu3


% --- Executes during object creation, after setting all properties.


function popupmenu3_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)


% hObject handle to radiobutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton1
set(handles.radiobutton1,'value',1);
set(handles.radiobutton2,'value',0);


% --- Executes on button press in radiobutton2.
function radiobutton2_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton2
set(handles.radiobutton1,'value',0);
set(handles.radiobutton2,'value',1);


% --- Executes on key press with focus on popupmenu1 and none of its
controls.
function popupmenu1_KeyPressFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata structure with the following fields (see UICONTROL)
% Key: name of the key that was pressed, in lower case
% Character: character interpretation of the key(s) that was pressed
% Modifier: name(s) of the modifier key(s) (i.e., control, shift)
pressed
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton12.
function pushbutton12_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton12 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)









FUNCIONES A LAS QUE SE LLAMA

FILTROS BUTTER
function H=filtros_Butter(Fpaso,Fparada,Apaso,Aparada,tipo,Fs)

if tipo==1
h=fdesign.lowpass('Fp,Fst,Ap,Ast',Fpaso,Fparada,Apaso,Aparada,Fs);
H=design(h,'butter');
%fvtool(H);


elseif tipo==2
h =
fdesign.highpass('Fst,Fp,Ast,Ap',Fparada,Fpaso,Aparada,Apaso,Fs);
H = design(h,'butter');
%fvtool(H);

elseif tipo==3
h =
fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',Fparada(1:1),Fpaso(1
:1),Fpaso(2:2),Fparada(2:2),Aparada(1:1),Apaso(1:1),Aparada(2:2),Fs);
H = design(h,'butter');
%fvtool(H);

elseif tipo==4
h =
fdesign.bandstop('Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2',Fpaso(1:1),Fparada(1:
1),Fparada(2:2),Fpaso(2:2),Apaso(1:1),Aparada(1:1),Apaso(2:2),Fs);
H = design(h,'butter');
%fvtool(H);

End


FILTROS CHEBY 1
CHEBY 2


function H=filtros_cheby1(Fpaso,Fparada,Apaso,Aparada,tipo,Fs)

if tipo==1
h=fdesign.lowpass('Fp,Fst,Ap,Ast',Fpaso,Fparada,Apaso,Aparada,Fs);
H = design(h,'cheby1');
%fvtool(H);
elseif tipo==2
h =
fdesign.highpass('Fst,Fp,Ast,Ap',Fparada,Fpaso,Aparada,Apaso,Fs);
H = design(h,'cheby1');
%fvtool(H);
elseif tipo==3
h =
fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',Fparada(1:1),Fpaso(1
:1),Fpaso(2:2),Fparada(2:2),Aparada(1:1),Apaso(1:1),Aparada(2:2),Fs);
H = design(h,'cheby1');
%fvtool(H);
elseif tipo==4


h =
fdesign.bandstop('Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2',Fpaso(1:1),Fparada(1:
1),Fparada(2:2),Fpaso(2:2),Apaso(1:1),Aparada(1:1),Apaso(2:2),Fs);
H = design(h,'cheby1');
%fvtool(H);
end
FILTROS
CHEBY 2


function H=filtros_cheby2(Fpaso,Fparada,Apaso,Aparada,tipo,Fs)

if tipo==1
h=fdesign.lowpass('Fp,Fst,Ap,Ast',Fpaso,Fparada,Apaso,Aparada,Fs);
H = design(h,'cheby2');
%fvtool(H);
elseif tipo==2
h =
fdesign.highpass('Fst,Fp,Ast,Ap',Fparada,Fpaso,Aparada,Apaso,Fs);
H = design(h,'cheby2');
%fvtool(H);
elseif tipo==3
h =
fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',Fparada(1:1),Fpaso(1
:1),Fpaso(2:2),Fparada(2:2),Aparada(1:1),Apaso(1:1),Aparada(2:2),Fs);
H = design(h,'cheby2');
%fvtool(H);
elseif tipo==4
h =
fdesign.bandstop('Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2',Fpaso(1:1),Fparada(1:
1),Fparada(2:2),Fpaso(2:2),Apaso(1:1),Aparada(1:1),Apaso(2:2),Fs);
H = design(h,'cheby2');
%fvtool(H);
end

FILTROS
ELLIP
function H=filtros_ellip(Fpaso,Fparada,Apaso,Aparada,tipo,Fs)

if tipo==1
h=fdesign.lowpass('Fp,Fst,Ap,Ast',Fpaso,Fparada,Apaso,Aparada,Fs);
H = design(h,'ellip');
%fvtool(H);
elseif tipo==2
h =
fdesign.highpass('Fst,Fp,Ast,Ap',Fparada,Fpaso,Aparada,Apaso,Fs);
H = design(h,'ellip');
%fvtool(H);
elseif tipo==3
h =
fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',Fparada(1:1),Fpaso(1
:1),Fpaso(2:2),Fparada(2:2),Aparada(1:1),Apaso(1:1),Aparada(2:2),Fs);
H = design(h,'ellip');
%fvtool(H);
elseif tipo==4
h =
fdesign.bandstop('Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2',Fpaso(1:1),Fparada(1:
1),Fparada(2:2),Fpaso(2:2),Apaso(1:1),Aparada(1:1),Apaso(2:2),Fs);
H = design(h,'ellip');


%fvtool(H);
end

FILTROS YULEWALK
function [a b]=filtros_yulewalk(f,m,N,Fs)
fa=f/Fs;
[b,a] = yulewalk(N,fa,m);
fvtool(b,a);



FILTROS FIR1
function [a b]=filtros_fir1(n,f,Fs,tipo)
%Fs=100;
%f=[ 10 30];
%n=100;
Fny=Fs/2;
if tipo==1
Bfir1=fir1(n,f/Fny);
[b,a]=fir1(n,f/Fny);

elseif tipo==2
Bfir1=fir1(n,f/Fny,'high');
[b,a]=fir1(n,f/Fny,'high');

elseif tipo==3
Bfir1=fir1(n,f/Fny);
[b,a]=fir1(n,f/Fny);

elseif tipo==4
Bfir1=fir1(n,f/Fny,'stop');
[b,a]=fir1(n,f/Fny,'stop');
end

[H,w]=freqz(Bfir1);
subplot(2,2,3)
plot(w*Fs/(2*pi),abs(H));




FILTROS FIR2
function [a b]=filtros_fir2(n,f,Fs,tipo)
%Fs=500;
%n=100;
Fny=Fs/2;
%f=[10 20 50 60];
%f=[10 20];
%tipo=4;

if tipo==1
m=[1 1 0 0];
fa=[0 f(1) f(2) Fny];
Bfir2=fir2(n,fa/Fny,m);
[b,a]=fir2(n,fa/Fny,m);

elseif tipo==2
m=[0 0 1 1];


fa=[0 f(1) f(2) Fny];
Bfir2=fir2(n,fa/Fny,m);
[b,a]=fir2(n,fa/Fny,m);

elseif tipo==3
m=[0 0 1 1 0 0];
fa=[0 f(1) f(2) f(3) f(4) Fny];
Bfir2=fir2(n,fa/Fny,m);
[b,a]=fir2(n,fa/Fny,m);

elseif tipo==4
m=[1 1 0 0 1 1];
fa=[0 f(1) f(2) f(3) f(4) Fny];
Bfir2=fir2(n,fa/Fny,m);
[b,a]=fir2(n,fa/Fny,m);
end

[H,w]=freqz(Bfir2);
subplot(2,2,3)
plot(w*Fs/(2*pi),abs(H))


FILTROS FIRCLS

function [a b]=filtros_filrcls(n,f,Fs,tipo)
%b = fircls(n,f,a,up,lo,'both')
%Fs=10000;
%n=100;
%f=[10 20 50 60];
%f=[10 20];
%tipo=4;
%f=[0 0.4 0.6 0.7 0.8 1];
Fny=Fs/2;
%n=44;

if tipo==1
a=[1 0];
up=[1.02 0.01];
lo =[0.98 -0.01];
fa=[0 f(1) Fny];
Bfircls=fircls(n,fa/Fny,a,up,lo);
[b,a]=fircls(n,fa/Fny,a,up,lo);

elseif tipo==2
a=[0 1];
up=[0.5 1.02];
lo =[0 -0.01];
fa=[0 f(1) Fny];
Bfircls=fircls(n,fa/Fny,a,up,lo);
[b,a]=fircls(n,fa/Fny,a,up,lo);

elseif tipo==3
a= [0 0 1 0 0 ];
up=[0.01 0.01 1.02 0.01 0.01] ;
lo=[-0.01 -0.01 0.98 -0.01 -0.01];
fa=[0 f(1) f(2) f(3) f(4) Fny];
Bfircls=fircls(n,fa/Fny,a,up,lo);
[b,a]=fircls(n,fa/Fny,a,up,lo);



elseif tipo==4
a=[1 1 0 1 1];
up=[1.02 1.02 0.01 1.02 1.02] ;
lo=[0.98 0.98 -0.01 0.98 0.98];
fa=[0 f(1) f(2) f(3) f(4) Fny];
Bfircls=fircls(n,fa/Fny,a,up,lo);
[b,a]=fircls(n,fa/Fny,a,up,lo);
end

[H,w]=freqz(Bfircls);
subplot(2,2,3)
plot(w*Fs/(2*pi),abs(H));
OTROS:

function [Fs s]=Generador_S(VectorS)
%clear
%VectorS =[5000 1500 10000];
Fs=8*max(VectorS);
t=(1:100)/Fs;
s=0;
j=size(VectorS);j=j(2);
for i=1 :1:j
s=s+sin(2*pi*t*VectorS(i));
end

subplot(2,2,1);
plot(t,s)
grid
subplot(2,2,2);
S=fft(s,512);
w=(0:255)/256*(Fs/2);
plot(w,abs((S(1:256)')));
grid



function Senal_salida(Fs,s,H)


w=(0:511)/512*(Fs/2);
%j=abs(H);
%plot(freqz(abs(H)));


y=filter(H,s);

S=fft(y,1024);
subplot(2,2,4);
plot(w,abs((S(1:512))),'black')
grid
zoom