You are on page 1of 41

Introduccin a Matlab y Prctica 1 y 2: Seales Continuas y

Discretas
MATLAB(MATrix LABoratory) es un sistema basado en matrices que permite resolver
problemas numricos relativamente complejos y visualizar los resultados con facilidad, debido a
que los planteamientos y las soluciones se expresan de manera similar a su forma matemtica
original. El objetivo de las simulaciones en el curso de Seales y Sistemas I es utilizar
MATLABcomo instrumento para comprender en detalle los aspectos ms importantes del
curso terico, adems de aprender a utilizar una herramienta de uso extendido en el rea de
procesamiento de seales y comunicaciones. En general, las seales en MATLABson
representadas por matrices numricas, que pueden contener entradas complejas. Todas las
variables definidas son matrices. Las matrices con solo una columna o fila son interpretadas
como vectores. Todas las matrices representadas en MATLABson indexadas comenzando con
1, por ejemplo, y(1,2) es el elemento correspondiente a la segunda columna de la primera fila de
la matriz y. MATLABpuede ejecutar una secuencia de comandos almacenados en un archivo.
Estos archivos se conocen como archivos .m, ya que tienen sta extensin. Los archivos .m
facilitan mucho del trabajo en MATLAB, y permiten adems la construccin de funciones para
realizar tareas especficas. Estos archivos se pueden crear utilizando el editor de texto de
MATLAB, el cual puede ser llamado a travs del comando edit o utilizando la barra de
herramientas en la parte superior de la ventana. Para ejecutar una rutina .m basta con escribir en
la lnea de comando el nombre del archivo sin la extensin (o en el caso de una funcin el
nombre del archivo con los parmetros respectivos), asegurndose de que se encuentra en el
directorio apropiado. En la ventana de comandos de MATLABes posible el moverse entre
directorios con las instrucciones cd.., cd <directorio>:, etc, similar a los comandos utilizados en
DOS. La hoja de trabajo o workspace permite escribir instrucciones o secuencias de
instrucciones
las cuales se van ejecutando al pulsar <return>.Las variables del workspace pueden ser
almacenadas en formato .mat, utilizando el comando save, y pueden ser cargadas de nuevo
utilizando el comando load. Para obtener ms informacin de stos y otros comandos
puede utilizar la instruccin help <comando>.
1. INTRODUCCION AL USO DE MATLAB.
Lo primero que debe comprenderse al usar Matlab es que el manejo de los datos se hace en
forma
matricial, las operaciones matemticas deben estar acorde con este principio. As un escalar es
visto por Matlab como una matriz 1x1, un vector fila de N elementos es una matriz 1xN o si se
trata de un vector columna sus dimensiones son entonces Nx1. Empecemos a explorar cada uno
de los puntos expuestos haciendo uso del programa. Inicie una sesin en Matlab, para ello basta
con hacer doble click sobre el icono del programa, y aparece la interfaz principal que es el
command window. Usted puede comenzar a trabajar directamente en esta pantalla, que tiene
caractersticas que le permiten agilizar en cierto grado la escritura de las instrucciones a ejecutar,
por ejemplo puede usar las flechas del teclado para volver a escribir comandos que ha usado
anteriormente en la misma sesin. La ayuda en lnea del programa es bastante completa, puede
accesarla directamente desde el men principal o desde el command window. Matlab posee un
conjunto de funciones bsicas built in, cuyo cdigo no es visible al usuario, y funciones ms
avanzadas basadas en las anteriores, las cuales muchas veces estn incluidas en toolboxes,
clasificados segn la aplicacin en particular. Cada funcin tiene una ayuda que Usted puede
visualizar directamente en el command window ejecutando el comando help nombre de la
funcin. Cuando trabaja en el command window cada variable creada es almacenada
temporalmente en el workspace, al finalizar la sesin (ejecutando el comando quit o exit) las
variables se borran, a menos que Usted grabe la sesin, en este caso solo se guardan las
variables,
no las instrucciones ejecutadas. Si necesita desarrollar un programa que usar con relativa
frecuencia, o que es de una extensin considerable, o sencillamente quiere guardar todos los
pasos que sigui en la sesin, lo ms conveniente es crear un programa. Para ello abra el
editor/debugger de programas haciendo click sobre el icono de New-M File que esta en el menu
principal del command window, en este editor puede escribir el programa, correrlo y corregir los
errores que se presenten de manera rpida y amena. Tambin puede hacer uso de cualquier editor
de texto para copiar sus programas, para que matlab los reconozca solo debe guardarlos con
extensin .m . Matlab tiene varios tipos de archivo, los archivos con extensin .mat son de datos,
por ejemplo cuando guarda una sesin, esta se guarda con el nombre que usted le asigne con la
extensin .mat (ver la ayuda del comando save). Los archivos de programa tienen la extensin
.m.
Los grficos tienen extensin .fig, aunque el programa le permite guardar las figuras como
imgenes (formatos jpg, tiff, etc). Adems los archivos de Simulink, la herramienta de
programacin grfica de Matlab que aprenderemos posteriormente, se guardan con extensin
.mdl. Las funciones de Matlab son rutinas que devuelven variables de salida dadas ciertas
variables de entrada (argumentos de la funcin). La primera lnea de una funcin debe seguir el
siguiente formato:
function [x,y] = name(a,b,c)
donde:
x e y son las variables de salida name es el nombre de la funcin, que se recomienda sea tambin
el nombre con el que se guarda el archivo .m, as en un programa cualquiera se invoca la funcin
escribiendo por ejemplo:
[u,v]=name(p,r,s)
Matlab posee prcticamente todas las funciones que se necesitan para hacer procesamiento de
seales, cuando necesite realizar un procesamiento y desconozca el nombre de la funcin
correspondiente en Matlab, haga una bsqueda por palabras claves usando el comando lookfor
keyword. Por ejemplo:
lookfor plot,
2. ALGUNOS COMANDOS DE MATLAB.
MATLAB est diseado para trabajar con matrices. Existen comandos para generar matrices
caractersticas como ones(matrices llenas de unos), zeros(matrices llenas de ceros), etc. Para
trasponer una matriz A se emplea A >>A(i, : ) accede a la i-sima fila de la matriz A
>>A ( :, j) accede a la j-sima columna de la matriz A
>>A*B multiplica las matrices A y B
>>X=A/B resuelve X*B=A
>>size Da el tamao de la matriz
>>length Da la longitud de un vector
>>A( :,[2,4])=A( :, [2,4])*[1 2 3;4 5 6] Las columnas 2 y 4 de A se multiplican por una matriz
RELACIONES
<, >=., <=, ~=(no igual a )
NMEROS: Usa nmeros enteros, complejos, reales; Inf es Infinito; i y j representan la raz
cuadrada de -1
OPERACIONES ARITMTICAS: +, -, *. (multiplicacin de dos vectores punto a punto), /.
(divisin de vectores punto a punto).
CONDICIONALES
If CONDICION
CONDICION DE VERDADERO
else
CONDICION DE FALSO
end
ITERACIONES
For var=inicio:paso:final
CUERPO
End
ITERACIONES CONDICIONALES
While CONDICION
CUERPO
end
FUNCIONES ESCALARES: Estn diseadas para trabajar con escalares o con matrices pero
elemento a elemento: Por ejemplo: sin, cos, log, sqrt (raz cuadrada),tan, acos,atn,exp, abs
FUNCIONES VECTORIALES: min, max, sum, mean. Cuando lo hacen sobre matrices
calculan a lo largo de las columnas
FIGURAS
>>figure Para abrir una nueva grfica o figura
>>plot(x,y, estiloelegido) Para graficar y vs x con un trazo definido
Para agregar un ttulo a una figura
>>hold on
>>title(titulo)
Para agregar leyenda en el eje x
>>xlabel(texto)
Para agregar leyenda en eje y
>>ylabel(texto)
MISCELANEOS
>>cd a: cambia directorio a a:
>>dir lista directorio
>>what lista los archivos .m y .mat
>>nombre ejecuta el script nombre
>>A=[1 2 3 ; 4 5 6] crea la siguiente matriz
>>help comando le presentar la ayuda existente para el comando elegido
>>lookfor palabraclave buscar todos aquellos comandos que contienen en su definicin la
palabraclave
>>A=rand(5,4) crea una matriz 5x4 con elementos aleatorios entre 0 y 1
>>a=[1 2 3 ] crea un vector a
>>B=B(1:2,: ) Selecciona de las filas 1 y 2 todas las columnas
>>s=bnnnnnn .. (Cuando el comando no cabe en una lnea se colocan 3 o mas puntos
suspensivos y se continua en la otra lnea
>>who Permite conocer que variables y matrices estn definidas en un momento dado
>>whos Igual a who pero adems ofrece todos los detalles de cada matriz
>>clear borra todas las variables
>>clear a Borra solo a
>>eps eps=nmero mas pequeo representable por Matlab
>>save nombre guarda los arreglos que se han definido en un archivo llamado nombre
>>load nombre carga nombre.mat
>>path es la trayectoria sobre la cual Matlab busca funciones; esto incluye los toolboxes
>>% Indica que de ah en adelante (misma lnea) lo que sigue es comentario
EDICIN DE LNEAS:
Si se usan las flechitas uno puede ir atrs y reutilizar instrucciones ya escritas
GENERACIN DE SECUENCIA
>>X=[inicio:paso:fin]; Colocar ; al final impide que se escriba la secuencia generada (se haga
eco en pantalla)
2. INTRODUCCIN A LA PRESENTE PRCTICA
En esta gua se omitirn las explicaciones del uso de las funciones empleadas en la prctica, use
el comando help cada vez que se encuentre con una nueva funcin y lea con atencin la
descripcin dada
La introduccin de datos en Matlab se puede hacer:
Cargando un archivo de datos externos (ver el comando load)
Creando una secuencia de entrada en el editor
Ejecutando alguna funcin
Directamente desde el workspace, por ejemplo ejecute las siguientes
lneas:
>> A=[1 2 3; 9 8 10 ;1 1 1]
Se crea una matriz A con dimensiones 3x3; observe como se hace la diferenciacin entre filas y
columnas. Observe que sucede si al final de la instruccin anterior aade el operador; La
instruccin para crear la matriz A es equivalente, entre otras, a :
>>A=[
>>1 2 3
>>9 8 10
>>1 1 1]
Para obtener algn elemento de A, escriba A(n,m) donde n es la fila y m la columna del elemento
deseado, pruebe las siguientes instrucciones:
>>A(2,:)
>>A(1:2,3)
>>size(A)
>>length(A)
>>y=A.^2
>>t=0:20
>>t=0:0.1:1
Para obtener ms informacin acerca de MATLABse recomienda consultar la pgina web
http://www.indiana.edu/~statmath/math/matlab/index.html. All puede conseguir muchos otros
enlaces de inters.
PRACTICA 1: GENERACIN Y GRAFICACIN DE SEALES
CONTINUAS Y DISCRETAS
OBJETIVOS
1. Comprender como se simulan seales continuas y discretas en el tiempo usando MATLAB
2. Generar seales exponenciales, sinusoidales, cuadrada, diente de sierra y escaln, visualizarlas
en forma continua y discreta.
3. Revisar las diferentes modalidades que existen para graficar una seal.
EXPERIMENTO
Genere un archivo .m nuevo. Escriba cada instruccin y ejectela para ver su funcionamiento. Al
terminar la prctica podr ejecutar todas las instrucciones y mostrar los resultados a su profesor.
Se le sugiere separe zonas de ejecucin usando la instruccin pause.
SEALES CONTINUAS
Antes de obtener una seal continua en el tiempo, primero se debe crear un vector que represente
la secuencia temporal, teniendo el cuidado de elegir un espaciamiento entre muestras apropiado.
Por ejemplo para generar seales en el intervalo de tiempo , con muestras tomadas cada 0.05s,
escriba en la lnea de comandos:
>>T=0.05
para definir la separacin temporal (en segundos) entre las muestras. Exprese la secuencia
temporal que va desde -1 a 1, en pasos T:
>>t=[-1:T:1]
Observe que todos los elementos del vector t fueron mostrados en la pantalla. Para evitarlo,
usualmente se coloca un punto y coma (;) despus de cada instruccin.
Para generar la funcin real decreciente x(t)=e-t, escriba:
>>x=exp(-t);
Dibuje x(t) vs. t:
>>plot(t,x,'-y')
El smbolo '-y' indica las caractersticas del trazo: "-" es el tipo de trazo e "y" es el color (en este
caso yellow o amarillo). Puede obtener ms informacin de cualquier comando utilice help; por
ejemplo si Ud. quiere saber mas detalles del comando plot escriba:
>>help plot
Pruebe con las diferentes combinaciones de trazos y colores.
Calcule la exponencial creciente w(t)=et:
>>w=exp(t);
Para graficar w(t) existen tres posibilidades : puede dar el comando
>>clf
para borrar la figura anterior, o puede dibujar directamente en el espacio disponible lo cual
borrar la figura que estaba anteriormente. Tambin puede dibujarlas simultneamente con el
comando:
>>hold on
En cualquiera de los tres casos, dibuje despus w(t)
>>plot(t,w,':r')
Si desea incluir una cuadrcula en el grfico escriba, luego de hacer el plot:
>>grid; para eliminarla escriba nuevamente: >>grid;
Cada vez que Ud. desee graficar una nueva figura debe usar la instruccin:
>>figure o figure(k) donde k es el nmero que ser asignado a la figura Calcule y grafique las
siguientes funciones con cambios lineales en la escala temporal: x1(t)=e-2t y x2(t)=e-t/2.
Dibjelas junto a la seal original x(t).
>>x1=exp(-2*t);
>>x2=exp(-t/2);
>>plot(t,x1,'-y',t,x2,'--g')
Observe los siguientes smbolos: '*' para la multiplicacin y '/' para la divisin. Proceda de igual
manera para la seal x3(t) = e-2|t|. El valor absoluto de t se calcula con el comando:
>>abs(t)
Por lo tanto la seal x3 se genera con el siguiente comando:
>>x3=exp(-2*abs(t));
>>plot(t,x3,':m')
Ahora graficaremos varias seales en una misma figura pero en espacios diferentes. Para eso se
divide primero la figura en una matriz de subgrficos de las dimensiones que uno desee. Imagine
que queremos graficar 4 funciones. Dividimos la figura como una matriz de 2x2 y en cada
subgrfico aparecer una de las seales.
>>subplot(2,2,1); plot(t,x1,'-y');
>>subplot(2,2,2); plot(t,,x2,'--g');
>>subplot(2,2,3); plot(t,x3,'r');
>>subplot(2,2,4); plot(t,x,'-b');
Para generar una seal exponencial compleja y(t)=ej2t escriba en la lnea de comandos:
>>y=exp(j*2*pi*t);
Observe que 'j' y 'pi' son valores internamente definidos en MATLAB. Corresponden a la
unidad imaginaria y al nmero respectivamente. 'i' tambin puede emplearse en lugar de 'j'.
Para evitar confusiones se recomienda no usar 'i' ni 'j' como variables. La seal 'y' es compleja,
a
diferencia de las seales anteriores. Para comprobarlo escriba:
>>whos
Observe que todas las funciones y valores que se han definido se encuentran disponibles en la
memoria. Esto no hace falta si Ud. tiene en la pantalla abierto el workspace. Para observar las
partes real e imaginaria de 'y', primero cree una nueva figura o espacio de presentacin:
>>figure(2)
Luego dibuje las partes real e imaginaria.
>>plot(t,real(y),'-b',t,imag(y),':r')
Las sinusoides reales tambin pueden ser generadas directamente en MATLAB, por ejemplo si
se
quieren generar sinusoides se puede usar sin (para Seno) y cos (para Coseno).
>>v1=sin(pi*t-pi/6);
>>v2=cos(pi*t+pi/4);
Ahora generar una seal cuadrada peridica usando la siguiente instruccin:
>>cuad=square(2*pi*t);
Grafquela:
>>plot(t,cuad)
Observe que las pendientes no son infinitas. Esto ocurre porque el nmero de puntos es
bajo. Haga una prueba usando mas puntos de tiempo (debe definir otro vector de tiempo y
volver a graficar). Revise el help de la funcin square.
Ahora generar una seal diente de sierra peridica usando la siguiente instruccin:
>>saw=sawtooth(2*pi*t);
Grafquela:
>>plot(t,saw)
Revise el help de esta instruccin. Para finalizar la prctica generaremos un escaln
>>escalon=[zeros(1,20) ones(1,21)];
>>plot(t,escalon)
SEALES DISCRETAS
Se le recomienda hacer esta parte de la prctica en un archivo *.m. Antes de continuar borre
todos los valores que se encuentran almacenados en memoria:
>>clear

Esta instruccin tambin puede emplearse para borrar una sola variable. Por ejemplo:
>>clear w o ms de una variable:
>>clear x, v1, v2
Para generar una seal discreta en el tiempo x[n], primero se debe definir un vector ndice
temporal 'n' apropiado. Por ejemplo, para producir una curva exponencial decreciente x[n]=0.9n
en el intervalo escriba:
>>n=[-10:10]
La curva exponencial decreciente x[n] se obtiene escribiendo:
>>x=(0.9).^n;
Donde '.^ ' representa la operacin de elevar 0.9 a cada uno de los elementos de n. A
continuacin grafquela.
>>stem(n,x)
Obtenga una exponencial creciente:
>>w=(1.11).^n;
Grafquela:
>>stem(n,w)
Genere y grafique la seal par x3[n]=0.9|n|.
>>x3=(0.9).^abs(n);
>>stem(n,x3);
Calcule y grafique la senoidal compleja y[n]=ejn/5-/3.
>>y=exp(j*pi*n/5-pi/3);
>>stem(n,y);
Grafique las partes real e imaginaria de y[n]. Cul es el perodo de la seal?. J ustifique su
respuesta grfica y analticamente. Calcule la funcin z[n]=x[n]y[n]
>>z=x.*y;
Explique como se interpretan las partes real e imaginaria de z[n].
De modo similar a la parte A, genere dos senoidales reales.
>>v1=cos(pi*n/5-pi/3);
>>v2=sin(pi*n/5+pi/4);
Obtenga las funciones par e impar de cada una.
>>v1par=0.5*(v1+fliplr(v1));
>>v1imp=0.5*(v1-fliplr(v1));
Calcule los valores de las funciones par e impar en n=0
>>v1par(find(n= =0)) %Sin punto y coma al final
>>v1imp(find(n= =0))
Calcule los valores de las funciones par e impar en n=0 para v1, v2, al igual que para las
siguientes seales:
>>u=[zeros(1,10) ones(1,11)]; %Escaln unitario discreto
>>e=x.*u;
Para finalizar genere alguna de las seales peridicas que conoci al generar seales
continuas, pero en forma discreta. Genere un vector discreto de tiempo N de 200 puntos.
Pruebe con square(N/pi). Grafique con stem.
ASIGNACION
Luego de haber aprendido algunos comandos Ud. debe realizar la siguiente actividad:
1) Genere un vector de tiempo( que se inicie en t =-1) de 20000 puntos en pasos de
1/10000
2) Genere la siguiente seal: -2+3*cos(20*pi*t)+sin(40*pi*t)
3) Genere una seal cuadrada peridica con perodo igual a 1/10 segundos
4) Genere una seal diente de sierra peridica con perodo igual a 1/10 segundos
5) Genere una seal igual a sgn(t-0.5)
6) Grafique estas 4 seales en una sola hoja usando subplot y plot; a la ltima grfica fjele
un eje de tiempo entre -2 y 2 y un eje de amplitudes entre -2 y 2. A la tercera pngale
grilla. A la segunda pngale un ttulo. A la primera pngale nombre a los ejes.
7) Genere un escaln unitario
8) Determine la parte par e impar del escaln
9) Grafique estas 3 funciones una sobre la otra en tres figuras y colores distintos (use stem)
10) Grafquelas ahora en una misma hoja usando subplot y plot
11) Determine los ndices donde la seal diente de sierra toma valores menores a 0.005 y
mayores a -0.005
1

Prctica 2. Formas de ondas
Utilizando lo visto en la prctica #1 obtenga en el Matlab las siguientes grficas









2



















3









4







5












6






Generar x(t) de la figura y calcular y representar las seales x1(t)=(t-2), x2(t)=x(t/3), x3(t)=x(-t),
x4(t)=x(t)-x1(t)




7






Pruebe esta funcin (mantenga los valores de t y x

[y, ty]=cuadrado(x, t);


Seal elevada al cuadrado

DISEO DE UNA INTERFAZ GRAFICA USANDO GUIDE PARA
GENERAR
UNA GUI (GRAPHIC USER INTERFACE)
Preparacin
Antes de asistir al laboratorio Ud. Debe:
-Ver el demo que tiene Matlab sobre Diseo de GUIs
-Leer los help que posee Matlab sobre el mismo tema
-Leer toda la informacin que se ofrece en este archivo
-Tener a disposicin (en un disco) el logo de la UABC y la rutina fftplot. Esta rutina permite
determinar el contenido espectral de una seal y graficar o su espectro o su Densidad Espectral
de Potencia. Asegrese de comprenderla.
Conceptos sobre Diseo de Interfaces grficas (GUI)
Introduccin:
GUIDE es un ambiente de desarrollo que permite crear interfaces grficas con el usuario, tales
como botones y ventanas de seleccin, ventanas grficas, mens, ejes para graficar, etc. Cuando
en el
command window se escribe guide, se ofrece la posibilidad de abrir hojas de trabajo ya creadas
(p.ej.
>>guide archivo.fig) o una nueva sobre la cual se irn agregando componentes. Lo que se cree
aqu se
guardar con la extensin .fig.
La primera vez que uno salva la interfaz que est diseando se crea tambin un archivo .m sobre
el cual habr que programar lo que se quiere ver o controlar desde el GUI
Una vez que se disea la interfaz grfica (GUI) que uno desea fijando las caractersticas de
botones,
ventanas, etc. que la conforman, se puede entonces programar dicha interfaz con el editor de
archivos
.m
Herramientas:
Uno puede seleccionar botones, mens desplegables, graficas, etc. y transferirlos a la hoja de
trabajo en una posicin determinada. Haciendo doble clic sobre algn elemento y luego, con el
cursor
cambiado a una X, uno se posiciona en la hoja de trabajo y selecciona el tamao que quiere que
ocupe
la herramienta seleccionada dentro de la hoja de trabajo.
Cuando uno selecciona una herramienta, con doble clic se pueden seleccionar todos los detalles:
Por
ejemplo el color de fondo, los nombres con los cuales se les relacionar en el archivo .m, etc.
2
A diferencia de la ejecucin de funciones o scripts de MATLAB tradicionales, la ejecucin de
GUIs viene dada por la secuencia de eventos y las acciones asociadas a cada uno de ellos. El
script no
finaliza a menos que el usuario genere un botn que ejecute tal accin. El desarrollo de GUIs se
realiza en dos etapas:
a) Seleccin de las herramientas (controles, mens y ejes) que conformarn el GUI.
b) Codificacin de la respuesta de cada uno de los componentes ante la interaccin del usuario.
Lo primero que se debe hacer es escribir guide en el command window. Aparecer la siguiente
ventana. Se selecciona una hoja en blanco (Blank GUI)




Aparecer de inmediato una hoja de trabajo como la que sigue:


A la izquierda estn las herramientas disponibles. Si en este momento se salva el GUI debemos
seleccionar un nombre. Se almacenar en el directorio donde estemos ubicados nombre.fig y
nombre.m .
Para utilizar una herramienta se selecciona y arrastra a la posicin deseada en la hoja de trabajo;
se puede modificar su tamao tal y como se hace con cualquier figura. Otras caractersticas se
pueden
modificar haciendo doble click. Aparecer un editor de propiedades como el que sigue:
Al hacer una modificacin en el editor de propiedades tambin cambiar el cdigo relacionado a
cada botn en el archivo .m




3
El archivo nombre.m tiene toda una estructura de handles (manejadores) que alimentarn a la
GUI. La estructura de handles es pasada como una entrada a cada callback (llamada a una parte
de un
programa).
Puedes usar la estructura de handles para:
Compartir datos entre callbacks
Acceder la data en el GUI
Para almacenar los datos contenidos en una variable X, se fija un campo de la estructura de
handles
igual a X y se salva la estructura de handles con guidata como se muestra a continuacin:
handles.current_data=X
guidata(hObject, handles)
En cualquier momento puedes recuperar la data haciendo
X=handles.current_data
Cdigo asociado a cada elemento del GUI
Automticamente al crear el GUI y salvarlo aparece en el archivo .m una cantidad de lneas de
cdigo
fijas. En la primera parte del script aparece una cantidad de lneas de cdigo fijo. La primera
instruccin :
function varargout = untitled(varargin) indica que se est creando un GUI de nombre untitled con
argumentos de salida varargout y argumentos de entrada varagin. Solo se muestran las dos
primeras y
la ltima lnea.
function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
..
% Last Modified by GUIDE v2.5 19-Oct-2005 16:25:55
Aqu comienza un cdigo de inicializacin que se pide no se edite. Tambin se muestra solo la
primera
y ltima lnea
% Begin initialization code - DO NOT EDIT
4

% End initialization code - DO NOT EDIT
Hasta aqu llega el cdigo de inicializacin. Comienza entonces lo que queremos que ocurra
antes de que el GUI se haga visible. Estas instrucciones se colocan despus de la lnea donde
dice
function untitled_......
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
..

varargout{1} = handles.output;
Luego de esto aparecen los callbacks dependiendo de las herramientas que se han incorporado al
GUI.
Por ejemplo:



Aqu se han colocado 3 Radio Button, 1 Push Button, un Pop-Up men y 1 eje para graficar.
A continuacin describiremos brevemente las herramientas disponibles, el cdigo automtico
asociado
a cada una de ellas y como interactuar con las mismas.
boton pushbutton: Se ejecuta una determinada accin cuando son presionados. En el archivo
.m
aparecen automticamente un grupo de instrucciones asociadas a l.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
5
AQUI SE COLOCA EL CODIGO QUE SE ESPERA EJECUTAR CUANDO SE PRESIONES
EL
PUSHBUTTON1
% 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)
listas de seleccion: Aqu se puede colocar una lista de elementos para que el usuario pueda
seleccionar alguno. En el archivo .m aparecen automticamente un grupo de instrucciones
asociadas a
l.
% --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles)

% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
..
% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from listbox1
Como se observa en la ayuda (Hint) que aparece en las dos ltimas lneas, si se coloca la
instruccin
Contents= get(hObject,'String')
Se obtendr un nmero que indica que seleccin se hizo. Por ejemplo si se seleccion el tercer
elemento de la lista, Contents dar 3
Boton edit
Permite a los usuarios ingresar o modificar parmetros que se quieren introducir.
function edit1_Callback(hObject, eventdata, handles)
..
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
Observe la ayuda (HINT)
SI SE COLOCA LA INSTRUCCION
A= str2double(get(hObject,'String'))
Entonces, se podr tener en A el valor del nmero que uno escribi en la casilla
SI SE COLOCA LA INSTRUCCION
A= get(hObject,'String')
Entonces, se podr tener en A los caracteres que uno escribi
6
Botn RadioButton
Son botones de seleccin. Si hay varios generalmente son mutuamente excluyentes. Para
seleccionarlo
basta ubicarse y presionar el ratn.
% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of radiobutton1
SI SE COLOCA LA INSTRUCCION
a=get(hObject,'Value')
Entonces en a se tendr 1 si el botn fue seleccionado
Ejes para graficar:
Aqu no se genera nada especial pero uno debe fijar las condiciones de la grfica y activarla o
desactivarla segn convenga.
Por ejemplo si la grfica tiene asociado el nombre de axes1 y se quiere deshabilitar
set(handles.axes1,'Visible','off');
PopUp men. Cuando se hace click despliega opciones. Para agregar elementos a la lista, en
el
editor de propiedades se busca el elemento string y all se coloca la lista de las opciones.
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
.
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
..
% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1
SI SE COLOCA LA INSTRUCCION
contents=get(hObject,'Value')
ENTONCES SE OBTENDRA UN NUMERO QUE INDICA QUE SELECCIN SE HIZO.
POR
EJEMPLO SI SE SELECCION EL TERCER ELEMENTO DE LA LISTA, contents DARA 3
7
Experimento


Ud. Debe disear una GUI con las siguientes caractersticas:
Debe presentar del lado izquierdo el sello y nombre de la UABC
Permitir dibujar 1 de dos seales (una sinusoide y una cuadrada)
La seleccin del tipo de seal se har con radiobutton.
El usuario debe fijar el valor de Fs y Fseal y utilizar un botn para actualizarlos
En cualquier momento se puede cambiar el tipo de seal.
Debe tener un botn para salir del programa que cierra todas las ventanas
Para esto desde el comand window escriba guide. Debe escoger Blank Gui o sea una hoja de
trabajo
en blanco con las herramientas del lado izquierdo. Seleccione el icono de grficas y arrstrelo
hacia la
hoja de trabajo. Este se llamar axes1. Arrastre otro; este se llamar axes2. En estos lugares Ud.
colocar el sello de la UABC (axes2) y la grfica (sinusoide o cuadrada) (axes1); dndole doble
click
sobre esta puede ver sus propiedades; busque la variable Tag y cambie el nombre de axes2 a
Imagen.
Guarde el archivo con el nombre practicaGui. Si Ud. quiere deshabilitar inicialmente axes 1 debe
escribir (luego del grupo de instrucciones que se ejecutan antes de que el GUI sea visible)
set(handles.axes1,'Visible','off');
Esto apaga la rejilla donde se graficar la seal seleccionada
La instruccin SET tiene la siguiente estructura:
SET(H,'PropertyName',PropertyValue)
Luego se habilitar Imagen que es donde aparecer el sello de la UABC.
axes(handles.Imagen);
image(imread('usb','jpg'));
8
Adems eliminar las escalas en X y en Y
set(handles.Imagen,'Xtick',[]);
set(handles.Imagen,'Ytick',[]);
Ahora arrastre un radiobutton que se llamar radiobutton1. Actvelo agregando, en la zona de
cdigo que se ejecuta antes de que la interfaz sea visible, la siguiente instruccin:
set(handles.radiobutton1,'Value',1);
Ahora arrastre otro radiobutton que se llamar radiobutton2. Inicialmente desactvelo:
set(handles.radiobutton2,'Value',0);
En este momento aparecern dos callback cada uno asociado a cada radiobutton. En el callback
de radiobutton1 agregue las siguientes instrucciones:
set(handles.radiobutton1,'Value',1);
set(handles.radiobutton2,'Value',0);
En el callback de radiobutton2 coloque, en cambio:
set(handles.radiobutton1,'Value',0);
set(handles.radiobutton2,'Value',1);
Esto los har excluyentes.
Si en este momento ejecuta el archivo .m le aparecern: el sello de la UABC y los dos
radiobutton
estando activado el 1 (Sinusoide). Ahora le pondr nombres al lado de los radio button. Para eso
har
doble clic sobre el radio button y aparecer el Inspector de Propiedades (Property Inspector);
busque
String y all pondr el nombre deseado (Sinusoide). Haga lo mismo con el otro y pngale
Cuadrada.
Agregue ahora un pushbutton: Su tag ser pushbutton1 y al String pongale Salir. En donde
est el cdigo correpondiente al pushbutton escriba la instruccin close all. Cuando se presione
el
botn Salir se cerrarn todas las ventanas incluyendo el .fig que se est ejecutando
% --- 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 all
Ahora generar el vector de tiempo y los dos mensajes de la siguiente manera (coloque fs y fm a
su gusto, por ejemplo10000 y 10). Este cdigo puede colocarlo inmediatamente despus de
donde el
comentario dice: % --- Executes just before NOMBRE DE SU PROGRAMA is made visible.
9
t=[0:1/fs:1];
mensaje1=sin(2*pi*fm*t);
mensaje2 = square(2*pi*fm*t);
handles.mensaje1 = mensaje1;
handles.mensaje2 = mensaje2;
Se habilita el sitio donde se graficar la funcin
set(handles.axes2,'Visible', 'on');
axes(handles.axes2)
AQUI SE SELECCIONA SI SE TRABAJARA CON LA SINUSOIDE O CON LA
CUADRADA
DE ACUERDO AL BOTON QUE ESTE SELECCIONADO Y SE GRAFICA
switch get(handles.radiobutton1,'Value')
case 1
mensaje = handles.mensaje1;
case 0
mensaje = handles.mensaje2;
end
plot(mensaje)
Ahora ejecute y vea lo que ocurre. Arregle el cdigo para que la sinusoide aparezca desde el
comienzo.
Aada ahora la posibilidad de agregarle a la GUI dos ventanas que permitan fijar la frecuencia de
muestreo y la frecuencia de las sinusoides y la cuadrada.
10
Ejercicio




Ud. Debe disear una GUI similar a la siguiente:
Esta interfaz le permitir presentar 3 seales distintas o en tiempo o en frecuencia. La
frecuencia(fm) de la Sinusoide, la fundamental de la Cuadrada y la fundamental de la Diente de
Sierra podr ser fijada por el usuario; cuando se cambie la frecuencia se presionar el botn
Nuevo Mensaje para que esta sea incorporada como dato; luego se puede visualizar con la
frecuencia cambiada. Se debe disponer de un botn de Salir que cierre todas las ventanas.
Antes de que aparezca la primera seal debe aparecer el sello de la UABC al lado izquierdo.
Cuando se grafique la primera seal este desaparecer.
Luego de que presione cualquiera de los botones que indican Tiempo o Frecuencia aparecer la
primera seal o el primer espectro graficado.
En cualquier momento Ud. podr cambiar fm, Presionar nuevo mensaje y estar listo para
poder
ver otra Sinusoide, Cuadrada o Diente de Sierra y sus espectros.
Una vez que tenga operativa esta GUI, debe agregarle nuevas ventanas que fijen la frecuencia
de muestreo y el nmero de puntos que Ud. desea trabajar. (fs y N).
Posteriormente piense en un diseo diferente en el cual las seales (sinusoidal, cuadrada y
Diente de sierra) se puedan seleccionar por medio de un men del tipo listbox o pop-up men,
mientras que el dominio de presentacin sea elegido con un radio button.
SEALES Y SISTEMAS
Prctica 4.
Solucin de ecuaciones de diferencia por recursin

1. Simule en el Matlab la ecuacin
[] 1 +

12
[ 1] = [], = 0, 1,2, .

Escriba el programa M que resuelve la siguiente ecuacin.

Considere I= 0.12, x=200 y y(0)=6000

%ecuacion de diferencia (ejercicio)
% Calcula y(n)
y0=input ('y ');
I=input ('constante ');
x=input (' entrada constante ');
y=[]; %se define a y como un vector vacio
y(1)=(1+(I/12))*y0-x;
for n=2:360
y(n)=(1 + (I/12))*y(n-1)-x;
if y(n) < 0, break, end
end


*Actividad a realizar posterior a la prctica: Modifique el problema de forma que pueda tener una
entrada arbitraria x diferente de una constante

2. Haga un programa en el Matlab que resuelva la ecuacin de diferencias:


[] = () ( 1) ( 1)


dada la entrada e(n) dada por:
[] =
1
0



Grafique la respuesta y la entrada. Realice los misma simulacin utilizando el Simulink

Practica # 5 Convolucin Discreta y respuesta la impulso

NOTAS PRCTICAS SOBRE MATLAB

En cualquier momento, puede obtener ayuda sobre una funcin Matlab introduciendo en la consola el
comando help <funcion>.

Dependiendo del resultado de cada apartado, puede que se le solicite representarlo de forma grfica,
para lo cual pueden serle de ayuda los comandos siguientes:

plot o stem para representar grficamente un conjunto de valores.
subplot para representar conjuntamente ms de una grfica en la misma ventana.
figure para crear una nueva ventana grfica y no sobrescribir la grfica de la ventana anterior.
title, xlabel, ylabel para insertar texto en el encabezado, en el eje horizontal y en el eje vertical,
respectivamente, de la grfica activa.

1. Introduccin a la convolucin

La funcin de Matlab conv calcula la suma de convolucin
[ ] [ ] [ ]
m
y n h m x n m

=
=


Para calcular la suma, Matlab requiere que [ ] x n y [ ] h n sean secuencias de duracin finita. Si
asumimos que [ ] x n es no nula solamente en el intervalo 1
x x x
n n n N + (siendo
x
N su
longitud) y que [ ] h n es no nula solamente en el intervalo 1
h h h
n n n N + (siendo
h
N su
longitud), entonces [ ] y n es no nula nicamente en el intervalo
( ) ( ) 2
x h x h x h
n n n n n N N + + + + (siendo su longitud 1
x h
N N + ). Esto significa que
conv solamente necesita calcular [ ] y n para las 1
x h
N N + muestras de este intervalo.

Si x es un vector
x
N -dimensional que contiene las muestras de [ ] x n en el intervalo
1
x x x
n n n N + y h es un vector
h
N -dimensional que contiene las muestras de [ ] h n en
el intervalo 1
h h h
n n n N + , entonces ( , ) y conv x h = devuelve en y las 1
x h
N N +
muestras de [ ] y n en el intervalo ( ) ( ) 2
x h x h x h
n n n n n N N + + + + .

Ha de tener en cuenta que la funcin conv no devuelve los ndices de las muestras de [ ] y n
almacenadas en el vector y . El usuario de la funcin conv es el responsable de conocer cules
son dichos ndices en funcin de los ndices de los vectores de entrada.

EJEMPLO
Convolucin de pulsos rectangulares.

Suponga que x[n] y v[n] son iguales al pulso rectangular definido por:

[ ]


=
n de valor otro
n
n p
, 0
9 0 , 1


Encuentre el producto de convolucin utilizando la funcin de matlab conv.

Solucin:
Los comandos en MATLAB para calcular la convolucin para este caso son:

p=[0 ones(1,10) zeros(1,5)]; % corresponde para n=-1 hasta n=14
x=p; v=p;
y= conv(x,v);
n=-2:25;
stem(n,y(1:length(n)))



a)Dibuje con la instruccin stem la grfica y etiquetela con title, xlabel, ylabel, es decir pngale una
nombre a los ejes y ttulo a la grfica.
b) Determine N (Nx)_____, M (Nh)________ y el largo del dominio (no cero) de la seal resultante
de la convolucin

c) Determine la convolucin de la seal resultante consigo misma y a la vez haga lo mismo con la salida

d) A lo largo del ejercicio emplearemos las tres seales siguientes:
[ ]
1
1 0
2 1 4
0
n
x n n
resto
=


[ ]
1
1 0
1 1
2 2
0
n
n
h n
n
resto
=

=

=


[ ]
2
1 1
2 2
3 3
1 4
0
n
n
h n n
n
resto
=

= =


Realice
a) x1*h1+x1*h2, x1*(h1+h2)
b) X1*(h1*h2) , (x1*h1)*h2, (x1*h2)*x1
Grafique los resultados con su valor adecuado de n y escriba sus conclusiones



Prctica 6





































Prctica 7

You might also like