Está en la página 1de 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 MATLAB como 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 MATLAB son 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 MATLAB son 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. MATLAB puede 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 MATLAB es 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 MATLAB se 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?. Justifique 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

Prctica 2. Formas de ondas


Utilizando lo visto en la prctica #1 obtenga en el Matlab las siguientes grficas

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

x3(t)=x(-t),

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

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 + [ 1] = [], 12

Escriba el programa M que resuelve la siguiente ecuacin. Considere I= 0.12, x=200 y y(0)=6000

= 0, 1,2, .

%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

= y [ n]

m =

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 nx n nx + N x 1 (siendo N x su longitud) y que h [ n ] es no nula solamente en el intervalo nh n nh + N h 1 (siendo N h su longitud), entonces

y [ n]

es

no

nula

nicamente

en

el

intervalo

( nx + nh ) n ( nx + nh ) + N x + N h 2

(siendo su longitud N x + N h 1 ). Esto significa que

conv solamente necesita calcular y [ n ] para las N x + N h 1 muestras de este intervalo.

Si

x es un vector N x -dimensional que contiene las muestras de x [ n ] en el intervalo


nx n nx + N x 1 y h es un vector N h -dimensional que contiene las muestras de h [ n ] en

el intervalo nh n nh + N h 1 , entonces y = conv( x, h) devuelve en y las N x + N h 1 muestras de y [ n ] en el intervalo ( nx + nh ) n ( nx + nh ) + N x + N h 2 . 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:

1, p[n] = 0,

0n9 otro valor de n

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:

= x1 [ n ]

1 2 0

n=0 1 n 4 resto

h1 [ n ] =

1 1 2 0

n= 0 n =1 n=2 resto

h2 [ n ] =

1 2 3 1 0

n =1 n=2 n=3 n= 4 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

También podría gustarte