Está en la página 1de 19

UNIVERSIDAD TÉCNICA DE AMBATO

FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E


INDUSTRIAL

“Proyecto Académico de Fin de Semestre”

Título: Diseño de una aplicación basada en Matlab,


para el modelado de Filtros Digitales FIR
mediante la Técnica de Ventanas.

Carrera: Electrónica y Comunicaciones

Área Académica: Comunicaciones

Línea de Investigación: Física y Electrónica

Ciclo Académico y paralelo: Noveno Semestre

Alumnos participantes: Aguagüiña Daniel


Hernández Joseph
Mayanquer Fernando
Quilligana Estuardo

Módulo y Docente: Codificación Digital de Señales


Ing. Jurado Marco
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

I. 1.
INFORME DEL PROYECTO
PP
2. YY

1. Título
Diseño de una aplicación basada en Matlab, para el modelado de Filtros Digitales FIR
mediante la Técnica de Ventanas.

2. Objetivos
2.1. General
Diseñar una aplicación basada en el software Matlab que permita modelar filtros digitales
de respuesta finita mediante el método de las ventanas.

2.2. Específicos
 Conocer detenidamente las ventajas de los filtros de respuesta finita (FIR).
 Discernir la principal aplicación del método de ventaneo, en las diferentes
configuraciones de filtros FIR.
 Analizar técnicas comunes para el diseño de filtros discretos en el dominio de la
frecuencia, así como los parámetros básicos que especifican a un filtro.
 Analizar técnicas del filtraje, así como algoritmos que permitan la implementación
de diferentes tipos de filtros usando modelos de identificación que se utilizan en
equipos de la ingeniería electrónica.
 Analizar la facilidad que genera la aplicación en el modelado de filtros FIR

3. Resumen

El presente proyecto hace hincapié en el diseño de filtros digitales FIR por medio de la
técnica de ventaneo, la cual nos ayuda a generar filtros más exactos y más rápidos según
nuestras necesidades. Está diseñado para cuatro tipos de filtros: Pasa bajo, alto, banda y
rechaza banda. La técnica que se utilizó consta de varias ventanas: Rectangular,
Blackman, Hanning y Kaiser, con las cuales se hicieron comparaciones de respuestas para
obtener el filtro más adecuado. El diseño se realizó mediante una interfaz programada en
Matlab.

4. Palabras clave: (Filtros Digitales, FIR, Interfaz, Ventana, Frecuencia, Matlab)

5. Introducción
Los filtros son sistemas que se diseñan principalmente para eliminar ciertas componentes
no deseadas de una señal. Generalmente estas componentes no deseadas se describen en
función de sus contenidos en frecuencias. Un filtro ideal permite el paso de ciertas
frecuencias sin modificarlas y elimina completamente otras; esto en la realidad no se puede
lograr con exactitud ya que no existen componentes tan precisos en el mercado razón por lo
que se tienen aproximaciones. El intervalo de frecuencias que deja pasar el filtro se le
denomina banda de paso y todas las frecuencias que elimina se le llama banda de supresión.
Podemos darnos cuenta que la tendencia actual es la migración de la tecnología analógica a
la digital, en este caso el filtrado digital ofrece varias ventajas con respecto a los filtrados
analógicos:
• El ancho de banda de un filtro digital está limitado por la frecuencia de muestreo, mientras
que en un filtro analógico, este parámetro depende de las características de los componentes
físicos.
• Se pueden implementar tanto en software como en hardware.
Se conocen usualmente dos tipos de filtros que se eligen según las necesidades y la
naturaleza del problema. Estos filtros se les conocen como FIR e IIR.
Este proyecto se enfocó al diseño de filtros FIR, ya que son más rápidos que los IIR y tienen
una repuesta de fase lineal.
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

6. Materiales y Metodología

6.1. Marco teórico


6.1.1. Filtros FIR

En el caso de un filtro con respuesta impulsional finita (FIR), una muestra de la salida se
puede definir como una combinación linear de muestras de la entrada presentes y pasadas.
Podemos expresar esta relación con una ecuación del tipo:

𝑦[𝑛] = 𝑎0 . 𝑥[𝑛] + 𝑎1 . 𝑥[𝑛 − 1] + 𝑎2 . 𝑥[𝑛 − 2] + ⋯ + 𝑎𝑁 . 𝑥[𝑛 − 𝑁]

Esta ecuación expresa que la muestra actual de la salida 𝑦[𝑛] es igual a la suma de las
muestras de la entrada actual 𝑥[𝑛] multiplicada por el factor 𝑎0 y de la muestra
anterior 𝑥[𝑛 − 1] multiplicada por el factor 𝑎1 , y de todas las muestras anteriores hasta el
instante [𝑛 − 𝑀] multiplicadas por su respectivo factor.
Los factores 𝑎𝑖 son los coeficientes del filtro. Modificando estos coeficientes podremos
variar de forma drástica las características del filtro.
La serie de coeficientes 𝑎0 , 𝑎1 , ... constituye la respuesta impulsional del filtro. De hecho,
podemos verificar que la respuesta del filtro a la señal impulso (digital):

𝑥 = {1,0,0,0,0,0,0, … }

Es la señal de salida:

𝑦 = {𝑎0 , 𝑎1 , 𝑎2 , 𝑎3 , … , 𝑎𝑁 , 0, 0, 0, … }

lo cual explica la denominación de filtro a respuesta impulsional finita. [1]

Algunas de las características de este tipo de filtros son las siguientes:

 Un filtro FIR puede ser diseñado para tener fase lineal.


 Siempre son estables porque son hechos únicamente con ceros en el plano
complejo.
 Los errores por desbordamiento no son problemáticos porque la suma de productos
en un filtro FIR es desempeñada por un conjunto finito de datos.
 Un filtro FIR es fácil de comprender e implementar.
 La salida siempre es una combinación lineal de los valores presentes y pasados de
la señal de entrada.
 Tiene memoria finita. [2]

6.1.2. Orden de un filtro

El número de muestras anteriores a la actual que se utilizan en un filtro para generar una
muestra de salida corresponde al orden del filtro. Un filtro de primer orden utiliza una sola
muestra precedente. De esta forma, un filtro recursivo de segundo orden se expresaría con
la ecuación siguiente:

𝑦[𝑛] = 𝑎0 . 𝑥[𝑛] + 𝑎1 . 𝑥[𝑛 − 1] + 𝑎2 . 𝑥[𝑛 − 2] − 𝑏1 . 𝑦[𝑛 − 1] − 𝑏2 . 𝑦[𝑛 − 2]


UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

Este filtro utiliza dos muestras anteriores de entrada y dos muestras anteriores de la salida.
Es la forma que tendría un filtro paso de banda que se utiliza bastante, denominado biquad
(de bicuadrático). Mientras mayor sea el orden de un filtro (cuantas más retardos se utilicen
en el circuito), el corte del filtro será más abrupto. [3]

6.1.3. Ejemplos de Filtros FIR

6.1.3.1 Filtro pasa bajo de primer orden

Para construir un filtro paso bajo FIR simple (que atenuará las frecuencias altas de una
señal de entrada), sólo hace falta efectuar la media de los valores de la muestra actual y la
muestra precedente, como ilustra el diagrama de bloques de la figura 1.

Figura 1: Diagrama de bloques de un filtro LP FIR [3]

El funcionamiento de este filtro se puede expresar mediante la ecuación siguiente:

𝑦[𝑛] = 0,5 . 𝑥[𝑛] + 0,5. 𝑥[𝑛 − 1]

Se puede entender intuitivamente el efecto paso bajo de esta operación, ya que al efectuar
la media atenuamos las variaciones bruscas de la señal, lo que origina un suavizado de la
señal de entrada. Este filtro es un ejemplo del filtro de tipo (moving average) (promedio
móvil). Veamos cuál sería la respuesta de este filtro a diferentes señales de entrada.
Consideremos primero una señal constante:

𝑥 = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … }

De la ecuación, deducimos que la señal de salida sería:

𝑦 = {0,5 , 1, 1, 1, 1, 1, 1, 1, 1, 1, … }

Por lo tanto, después de un transitorio corto (la primera muestra que vale 0.5), la señal de
salida es igual a la señal de entrada: una señal constante de amplitud 1. Para una señal
constante, que tiene una frecuencia nula, verificamos que las bajas frecuencias no se
atenúan en el filtrado.

Consideremos ahora una señal que oscila entre −1 y +1 a la frecuencia de Nyquist (la
frecuencia máxima):

𝑥 = {+1, − 1, + 1, − 1, + 1, − 1, +1, − 1, + 1, − 1, … }
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

En este caso, la señal de salida se atenúa muy rápidamente como podríamos preveer:

𝑦 = {0,5 , 0, 0, 0, 0, 0, 0, 0, 0, 0, … }

Podemos observar la respuesta en frecuencia del filtro en la figura 5. La ganancia, en


función de la frecuencia, viene dada por:

𝜋. 𝑓
𝐴(𝑓) = 𝐶𝑜𝑠 ( )
𝑓𝑠

Figura 2: Respuesta en frecuencia de un filtro LP FIR [3]

𝑓
La frecuencia de corte vale 4𝑠 (un cuarto de la frecuencia de muestreo). La simplicidad del
filtro se paga con una banda de transición ancha.

6.1.3.2 Filtro pasa alto FIR de primer orden

La estructura de un filtro paso alto FIR elemental es muy similar a la del filtro paso bajo
FIR que acabamos de ver, pero en vez de sumar dos muestras consecutivas, las restamos:

𝑦[𝑛] = 0,5 . 𝑥[𝑛] − 0,5. 𝑥[𝑛 − 1]

El efecto paso alto se explica fácilmente: al restar dos muestras sucesivas atenuamos la
señal en los puntos en los que varía lentamente (bajas frecuencias) y acentuamos allí donde
la señal varía rápidamente (altas frecuencias). La ganancia en función de la frecuencia viene
dada por:

𝜋. 𝑓
𝐴(𝑓) = 𝑆𝑖𝑛 ( )
𝑓𝑠

El diagrama de bloques de este filtro está representado en la figura 3, así como su función
de transferencia en la figura 4.

6.1.3.3 Filtro pasa de banda FIR de segundo orden

La ecuación de un de un filtro paso de banda (BP) simple no recursivo de segundo orden


es la siguiente:

𝑦[𝑛] = 0,5 . 𝑥[𝑛] − 0,5. 𝑥[𝑛 − 2]

Este filtro es de segundo orden, ya que utiliza un retardo de dos períodos de muestreo como
máximo (para obtener 𝑥[𝑛 − 2]). La ganancia del filtro en función de la frecuencia viene
dada por la siguiente ecuación:
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

Figura 3: Diagrama de bloques de un filtro simple HP FIR [3]

Figura 4: Respuesta en frecuencia de un filtro HP FIR [3]

2. 𝜋. 𝑓
𝐴(𝑓) = 𝑆𝑖𝑛 ( )
𝑓𝑠

𝑓
lo cual corresponde a un filtro paso de banda de frecuencia central 4𝑠 .Si en vez de
restar sumáramos las muestras 𝑥[𝑛] y 𝑥[𝑛 − 2], obtendríamos un filtro rechazo de
𝑓
banda de frecuencia central 4𝑠 .

6.1.4. Definiciones de Ventanas


6.1.4.1. Ventana Hamming

Esta ventana tiene un comportamiento temporal de medio ciclo de una señal cosenoidal y
normalizado en amplitud a la unidad. Esta ventana de caracteriza por el argumento N impar.
Su ecuación es la siguiente y genera N muestras:

2𝜋𝑛
𝑤(𝑛) = { 0.64 − 0.46 𝐶𝑜𝑠 ( ) ; 0≤𝑛≤𝑁
𝑁
0; 𝑜𝑡𝑟𝑜 𝑣𝑎𝑙𝑜𝑟

𝑁∆𝑓 = 3.3
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

6.1.4.2. Ventana Blackman

Esta ventana tiene un comportamiento temporal definido por una serie trigonométrica de
Fourier para aproximarse mejor a un espectro que carece de altas frecuencias. Esta ventana
de caracteriza por el argumento N impar. Su ecuación es la siguiente y genera N muestras:

2𝜋𝑛 4𝜋𝑛
𝑤(𝑛) = {0.42 − 0.5 𝐶𝑜𝑠 ( 𝑁 ) + 0.08𝐶𝑜𝑠 ( 𝑁 ) ; 0 ≤ 𝑛 ≤ 𝑁
0; 𝑜𝑡𝑟𝑜 𝑣𝑎𝑙𝑜𝑟

𝑁∆𝑓 = 5.5

6.1.4.3. Ventana Rectangular

La ventana rectangular es utilizada comúnmente para analizar las señales transitorias para
conocer la presencia de eventos continuos de tipo sinusoidales. Su ecuación es la siguiente:

1; 0 ≤ 𝑛 ≤ 𝑁
𝑤(𝑛) = {
0; 𝑜𝑡𝑟𝑜 𝑣𝑎𝑙𝑜𝑟

𝑁∆𝑓 = 0.9

6.1.4.4. Ventana Hanning

La ventana Hanning llamada por su inventor Von Hann, tiene la forma de un ciclo de una
onda cosenoidal, a que se agrega 1 para que asi siempre sea positivo. Su ecuación es la
siguiente:

2𝜋𝑛
𝑤(𝑛) = {0.5 − 0.5 𝐶𝑜𝑠 ( 𝑁 ) ; 0 ≤ 𝑛 ≤ 𝑁
0; 𝑜𝑡𝑟𝑜 𝑣𝑎𝑙𝑜𝑟

𝑁∆𝑓 = 3.1

6.1.4.5. Ventana Kaiser

Es una ventana w(n) muy cercana a la ideal utilizada para procesamiento digital de señales
definida por:

1
𝑛−𝛼 2 2
𝐼0 [𝛽 [1 − ( 𝛼 ) ] ]
𝑤(𝑛) = ;0 ≤ 𝑛 ≤ 𝑁
𝐼0 (𝛽)
0 ; 𝑜𝑡𝑟𝑜 𝑣𝑎𝑙𝑜𝑟
{

0.1102 (𝛼𝑠 − 8.7) ; 𝛼𝑠 > 50𝑑𝐵


0.4
𝛽 = {0.5842(𝛼𝑠 − 21) + 0.07886(𝛼𝑠 − 21); 21 ≤ 𝛼𝑠 ≤ 50
0 ; 𝛼𝑠 < 21
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

donde 𝐼0 es la función de Bessel modificada de primer tipo de orden cero, α es un número


real arbitrario que determina la forma de la ventana y n es un número natural que determina
el tamaño de la ventana. [4]

6.1.5. Tipos de Filtros

Los filtros más corrientes son los filtros paso bajo (Low Pass, LP), paso alto (High Pass,
HP), paso de banda (Band Pass, BP) y los filtros rechazo de banda (o paso no banda) (Band
Reject, Band stop o Notch). En la figura 5 se representan estos 4 tipos de filtros mediante
su respuesta en frecuencia o espectro de amplitud. Cada punto de la respuesta en frecuencia
nos indica la atenuación a la que se someterá una señal a una frecuencia determinada.

Figura 5: Tipos de Filtros [5]

 Los filtros paso bajo (LP) dejan pasar las frecuencias que están por debajo de una
determinada frecuencia.
 Los filtros paso alto (HP) dejan pasar las frecuencias que están por encima de una
determinada frecuencia.

Estos dos tipos de filtros están definidos por su frecuencia de corte, que es la frecuencia a
1
la cual la amplitud de la señal se reduce a 0.707 ( ) de su valor máximo, es decir, sufre
√2
3 dB de atenuación.

 Los filtros paso banda (BP) dejan pasar las frecuencias que están situadas en una
determinada banda de frecuencia, es decir, entre dos determinadas frecuencias.
 Los filtros rechazo de banda (BR) dejan pasar todas las frecuencias excepto las
que están 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
1
amplitud de la señal se reduce a 0.707 ( 2) de su valor máximo, es decir, sufre 3

dB de atenuación.
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

Estos dos tipos de filtros están definidos por su frecuencia central y su ancho de
banda, que sería la diferencia entre las frecuencias de corte inferior y superior.
Como se ilustra en la figura 5, las transiciones entre la banda pasante y la banda de
corte no son generalmente limpias en los filtros reales. Existe, por tanto, una banda
de transición entre la zona donde teóricamente todo pasa y la zona donde
teóricamente nada pasa.
Los filtros pueden combinarse en serie o en paralelo para obtener respuestas
frecuenciales más complejas. [5]

6.2 Metodología

6.2.1 Comandos de Matlab para el diseño de Filtros FIR

6.2.1.1 Función FIR1

 B = fir1(N,Wn,type,window);

Diseña un filtro FIR pasa bajo de orden N (longitud N+1) y frecuencia de corte Wn
(normalizada con respecto a la frecuencia de Nyquists, 0 ≤ Wn ≤ 1). Se pueden especificar
otro tipo de filtros de la misma forma que con los filtros IIR mediante el parámetro type.

Por ejemplo, para un filtro rechaza banda:


 B = fir1(N,[W1 W2],'stop',window);

Para un filtro pasa alto:


 B = fir1(N,Wn,’high’,window);

Para un filtro pasa banda:


 B = fir1(N,[W1 W2],window);

Por defecto la función FIR usa la ventana de Hamming. Otro tipo de ventanas pueden
también especificarse:
Para la ventana de Rectangular:
 B=fir1(N,Wn,boxcar(N+1));

Para la ventana de Blackman:


 B=fir1(N,Wn,blackman(N+1));

Para la ventana de Hanning:


 B=fir1(N,Wn,hanning(N+1));

Para la ventana de Kaiser:


 B=fir1(N,Wn,kaiser(N+1,5.653));
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

7. Procedimiento
Luego de analizar la parte interfaz gráfica, se procede a plasmarlas en lo que se hace conocer
dentro de este software como “guide”, en donde para el caso de nuestro proyecto ha quedado
de la siguiente manera:

Figura 6: Pagina Inicial

Luego de cada botón, text label, etc, asignado en la interfaz gráfica, se procedió a la
programación de los mismos, generando un código fuente que se lo adjunta al final de este
informe.

Figura 7: Código Fuente

Para finalmente tener un exitoso resultado plasmado en la siguiente interfaz, sin


surgimiento de errores
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

Figura 8: Interfaz gráfica final.

8. Conclusiones
 Los filtros de respuesta finita al impulso (FIR finite impulse response) tienen la ventaja
de ser utilizados con facilidad y poseer fase lineal para una respuesta al impulso par o
impar.
 La técnica de ventaneo se basa en la respuesta de un filtro al aplicarle la ventana
deseada por medio de una multiplicación de sus ecuaciones, la ventana hace que en el
filtro real diseñado se tengan menos variaciones de transición o supresión y con esto
se logre y filtrado más efectivo.
 Cabe mencionar que las diferentes técnicas de ventaneo son utilizadas de acuerdo con
las especificaciones que el equipo o usuario requieran
 La realización de este programa nos facilita en gran medida el diseño de los filtros
digitales FIR mediante la técnica de ventaneo.

9. Referencias bibliográficas
[1] Introduccion Filtros FIR. Disponible en: http://ocw.uv.es/ingenieria-y-arquitectura/filtros-
digitales/tema_3._diseno_de_filtros_fir.pdf
[2] Smith, J. O. “Aplicaciones de los Filtros FIR”. Disponible en:
http://ccrmawww.stanford.edu/˜
jos/filters/
[3] Orden del Filtro. “Ejemplos Filtros FIR”. Disponible en:
http://www.dtic.upf.edu/~egomez/teaching/sintesi/SPS1/Tema7-FiltrosDigitales.pdf
[4] Definiciones de Ventanas. Disponible en: http://profesores.fi-
b.unam.mx/maixx/Biblioteca/Librero_Telecom/Libro_ProcDigitSeniales_Ibarra/DSP_Cap
_18_ventanas.pdf
[5] Introduccion al filtrado digital “Tipos de Filtros”. Disponible en:
http://www.dtic.upf.edu/~egomez/teaching/sintesi/SPS1/Tema7-FiltrosDigitales.pdf
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

10. Anexo

Página Principal – Caratula


function varargout = Principal(varargin)
% PRINCIPAL M-file for Principal.fig
% PRINCIPAL, by itself, creates a new PRINCIPAL or raises the existing
% singleton*.
%
% H = PRINCIPAL returns the handle to a new PRINCIPAL or the handle to
% the existing singleton*.
%
% PRINCIPAL('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PRINCIPAL.M with the given input arguments.
%
% PRINCIPAL('Property','Value',...) creates a new PRINCIPAL or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Principal_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Principal_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 Principal

% Last Modified by GUIDE v2.5 25-Jul-2017 14:08:00

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Principal_OpeningFcn, ...
'gui_OutputFcn', @Principal_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 Principal is made visible.


function Principal_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 Principal (see VARARGIN)

a=imread('uta.jpg');
axes(handles.axes1)
image(a)
axis off

b=imread('fisei.jpg');
axes(handles.axes2)
image(b)
axis off

% Choose default command line output for Principal


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes Principal wait for user response (see UIRESUME)


% uiwait(handles.figure1);
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

% --- Outputs from this function are returned to the command line.
function varargout = Principal_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;

% --- Executes on button press in Inicio.


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

% --- Executes on button press in salir.


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

Pagina Secundaria – Proyecto


%***Diseño de Filtros FIR***
function varargout = proyecto(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @proyecto_OpeningFcn, ...
'gui_OutputFcn', @proyecto_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 proyecto is made visible.
function proyecto_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = proyecto_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 Fmuestreo_Callback(hObject, eventdata, handles)


% hObject handle to Fmuestreo (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 Fmuestreo as text


% str2double(get(hObject,'String')) returns contents of Fmuestreo as a double
% --- Executes during object creation, after setting all properties.
function Fmuestreo_CreateFcn(hObject, eventdata, handles)
% hObject handle to Fmuestreo (see GCBO)
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

% 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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Fpaso_Callback(hObject, eventdata, handles)


% hObject handle to Fpaso (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 Fpaso as text


% str2double(get(hObject,'String')) returns contents of Fpaso as a double
% --- Executes during object creation, after setting all properties.
function Fpaso_CreateFcn(hObject, eventdata, handles)
% hObject handle to Fpaso (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Rizado_Callback(hObject, eventdata, handles)


% hObject handle to Rizado (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 Rizado as text


% str2double(get(hObject,'String')) returns contents of Rizado as a double
% --- Executes during object creation, after setting all properties.
function Rizado_CreateFcn(hObject, eventdata, handles)
% hObject handle to Rizado (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Frechazo_Callback(hObject, eventdata, handles)


% hObject handle to Frechazo (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 Frechazo as text


% str2double(get(hObject,'String')) returns contents of Frechazo as a double
% --- Executes during object creation, after setting all properties.
function Frechazo_CreateFcn(hObject, eventdata, handles)
% hObject handle to Frechazo (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function orden_Callback(hObject, eventdata, handles)


% hObject handle to orden (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of orden as text


% str2double(get(hObject,'String')) returns contents of orden as a double
% --- Executes during object creation, after setting all properties.
function orden_CreateFcn(hObject, eventdata, handles)
% hObject handle to orden (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on button press in proyecto.
function FIR_Callback(hObject, eventdata, handles)

%Se limpia el workspace de MATLAB y las variables en uso.


clc;

wn=str2double(get(handles.Fpaso,'String'));

wn2=str2double(get(handles.fpaso2,'String'));

N=str2double(get(handles.orden,'String'));

aprox = handles.type;
TipFil = handles.clase;

switch TipFil

case 1
b = imread ('pasabajo.png');
if aprox == 1
hu=fir1(N,wn); %windowed FIR coefficients (uniform window)
[H,w]=freqz(hu,1,512); %vector de respuesta de frecuencia n-point vector, h, and
the corresponding angular frequency vector,
%w, para el polinomio del denominador de un filtro fir a es 1

elseif aprox == 2
hu=fir1(N,wn,blackman(N+1)); %windowed FIR coefficients (Blackman window)
[H,w]=freqz(hu,1,512); %compute frequency response of filter para el polinomio del
denominador de un filtro fir a es 1

elseif aprox ==3


fc=wn; %normalized cutoff frequency
hu=fir1(N,fc,hanning(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response

else
hu=fir1(N,wn,kaiser(N+1,5.653)); % Diseña un filtro FIR pasobajo de orden N
(longitud N+1) y frecuencia de corte Wn windowed FIR coefficients (Kaiser window)
[H,w]=freqz(hu,1,512); %compute frequency response of filter
%vector de respuesta de frecuencia n-point vector, h, and the
%corresponding angular frequency vector

end

case 2
b = imread ('pasaalto.png');
if aprox == 1
hu=fir1(N,wn,'high',boxcar(N+1));
[H,w]=freqz(hu,1,512); %frequency response

elseif aprox == 2
hu=fir1(N,wn,'high',blackman(N+1));
[H,w]=freqz(hu,1,512); %frequency response

elseif aprox ==3


hu=fir1(N,wn,'high',hanning(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

else
hu=fir1(N,wn,'high',kaiser(N+1,5.653)); %windowed FIR coefficients (Kaiser
window)
[H,w]=freqz(hu,1,512); %compute frequency response of filter

end

case 3
b = imread ('pasabanda.png');
if aprox == 1
fc=[wn, wn2]; %normalized cutoff frequencies
hu=fir1(N,fc,boxcar(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response

elseif aprox == 2
fc=[wn, wn2]; %normalized cutoff frequencies
hu=fir1(N,fc,blackman(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response para el polinomio del denominador de un
filtro fir a es 1

elseif aprox ==3


fc=[wn, wn2]; %normalized cutoff frequencies
hu=fir1(N,fc,hanning(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response

else
fc=[wn, wn2] %normalized cutoff frequencies
hu=fir1(N,fc,kaiser(N+1,5.653)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response

end

case 4
b = imread ('rechazabanda.png');
if aprox == 1
fc=[wn, wn2];
hu=fir1(N,fc,'stop',boxcar(N+1));
[H,w]=freqz(hu,1,512); %frequency response

elseif aprox == 2
fc=[wn, wn2];
hu=fir1(N,fc,'stop',blackman(N+1));
[H,w]=freqz(hu,1,512); %frequency response

elseif aprox ==3


fc=[wn, wn2];
hu=fir1(N,fc,'stop',hanning(N+1)); %filter coefficients
[H,w]=freqz(hu,1,512); %frequency response

else
fc=[wn, wn2];
hu=fir1(N,fc,'stop',kaiser(N+1,5.653)); %windowed FIR coefficients (Kaiser
window)
[H,w]=freqz(hu,1,512); %compute frequency response of filter

end
end

axes(handles.axes1);
plot(w/pi,20*log10(abs(H)));
grid on;
title (['Respuesta en Magnitud, Orden:', num2str(N)]);
xlabel('Frecuencia normalizada');
ylabel('|H(e^{jw})|')
axes(handles.axes3);
grid on;
[y,t]= impz(hu,1,10);
stem(t,y,'m');
xlabel('n')
ylabel('Amplitud')
title (['Respuesta al Impulso, Orden:', num2str(N)]);
axes(handles.axes2);
plot(w/pi,unwrap(angle(H)));
grid on;
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

title (['Respuesta en Fase, Orden:', num2str(N)]);


xlabel('Frecuencia normalizada')
ylabel('Fase |H(e^{jw})|(rad)')

axes(handles.axes11);
image (b)
axis off

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

if hObject == handles.butter
tipo = 1;
elseif hObject == handles.chevy1
tipo = 2;
elseif hObject == handles.chevy2
tipo = 3;
else
tipo = 4;
end

handles.type = tipo;
guidata(hObject,handles)

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

if hObject == handles.PB
fil = 1;
elseif hObject == handles.PA
fil = 2;
elseif hObject == handles.PBanda
fil = 3;
elseif hObject == handles.PAlto
fil = 4;

end

handles.clase = fil;
guidata(hObject,handles)

function fpaso2_Callback(hObject, eventdata, handles)


% hObject handle to fpaso2 (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 fpaso2 as text


% str2double(get(hObject,'String')) returns contents of fpaso2 as a double

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


function fpaso2_CreateFcn(hObject, eventdata, handles)
% hObject handle to fpaso2 (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Frechazo2_Callback(hObject, eventdata, handles)


% hObject handle to Frechazo2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

% Hints: get(hObject,'String') returns contents of Frechazo2 as text


% str2double(get(hObject,'String')) returns contents of Frechazo2 as a double

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


function Frechazo2_CreateFcn(hObject, eventdata, handles)
% hObject handle to Frechazo2 (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
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
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)
close (gcbf)

% --- 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)
limpia='';

set (handles.Fpaso, 'String', limpia);


set (handles.fpaso2, 'String', limpia);
set (handles.orden, 'String', limpia);

function Fsenal_Callback(hObject, eventdata, handles)


% hObject handle to Fsenal (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 Fsenal as text


% str2double(get(hObject,'String')) returns contents of Fsenal as a double

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


function Fsenal_CreateFcn(hObject, eventdata, handles)
% hObject handle to Fsenal (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 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)
%--------borrar graficas
axes (handles.axes1);
cla;
axes (handles.axes2);
cla;
axes (handles.axes3);
cla;
axes (handles.axes4);
cla;

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


function axes10_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes10 (see GCBO)
UNIVERSIDAD TÉCNICA DE AMBATO
FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL
PERÍODO ACADÉMICO: Marzo/2017 – Septiembre/2017

% eventdata reserved - to be defined in a future version of MATLAB


% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes10


a = imread ('uta.png');
image (a)
axis off

También podría gustarte