Tutorial Matlab
Librerias de Matlab
En este trimestre se va a necesitar dos librerias que se encuentran disponibles en las direcciones siguientes: http://www.ece.mtu.edu/faculty/akambard/book/adsp_mfiles.zip y http://www.ece.mtu.edu/faculty/akambard/book/adsp_guis.zip. Para utilizarlas hay que descomprimir ambas carpetas y copiarlas en el directorio /work que se encuentra dentro del directorio de instalación de Matlab. Luego hay que añadir la ruta de ambas carpetas para que puedan ser utilizadas por Matlab, esto se hace en ' Files - Set Path... '.
Variables en Matlab
A diferencia de C, las variables en Matlab no son declaradas, aunque se les debe asignar un valor antes . Estas deben tener un nombre que comiencen con caracter y su tipo es definido automáticamente por Matlab de acuerdo al valor que se les asigne. Por ejemplo, si quiero crear una variable que se llame frecuencia, solo necesito escribir lo siguiente:
x = 10
En el workplace se puede observar las variables existentes, su valor y su tipo. La variable x fue creada del tipo double, y tiene un valor 10. En caso de no tener disponible el Workplace se puede abrir en la pestaña Desktop.
Otro tipo de variable utilizado en Matlab son los vectores o arreglos. Estos se crean de la siguiente forma:
x = [2 3 4]
Se colocan los valores de cada elemento dentro de corchetes y separados por espacios. Las matrices se crean de forma similar, pero separando las filas por medio de punto y coma (;)
y = [5 6 7; 8 9 0]
Se puede determinar la transpuesta de un vector o de una matriz así.
x'
Si deseo crear una matriz z con el valor del transpuesto de y solo hay que asignarle la transpuesta de x a z así:
z = x'
Para acceder a algún elemento del vector o matriz solo hay que escribir el nombre del vector o matriz y entre parentesis el elemento que se quiere, separados por comas en el caso de la matriz. Por ejemplo x(2) nos da el valor 6, y y(1,3) nos da 0.
Los vectores y matrices tienen las mismas operaciones que se estudiaron en Álgebra Lineal. Suma, resta y producto como se definió en Matemáticas 3. Por ejemplo y*x' está bien definido, a diferencia de y*x que no lo esta y da un error.
Otra operación posible es elevar al cuadrado una matriz cuadrada. Generamos una matriz cuadrada w así: w = z*x. Luego elevamos al cuadrado a w: w^2.
Si únicamente deseamos calcular los cuadrados de cada elemento se puede hacer con el operador punto (.). Este operador le indica a Matlab que se desea que se hagan todas las operaciones elemento a elemento. Se puede observar que w.^2, es diferente a w^2. Este operador ademas sirve para realizar productos entre vectores que no estan definidos en algebra lineal, por ejemplo: x.*x va a calcular los cuadrados de cada elemento del vector x.
Se puede determinar el tamaño de un vector con la función length. Para determinar el tamaño de una matriz se puede utilizar la función size.
Graficación
Matlab permite realizar gráficas de forma muy eficiente. Para realizar una gráfica es necesario tener dos vectores del mismo tamañp. Vamos a graficar el seno de x en un período. Primero es necesario crear el vector tiempo, lo vamos a hacer por medio del contructor de vectores. Queremos que t tenga valores entre 0 y 2 pi separados por pasos de 0.01. Utilizamos la siguiente instrucción:
t = 0 : 0.01 : 2 * pi;
Utilizamos los dos punto para que no nos muestre el resultado en pantalla. Si utilizamos la función length veremos la longitud de t (629 puntos).
Para calcular el seno de t hacemos lo siguente:
y = sin(t);
Para graficarlos utilizamos la instrucción plot, esta pide pares de vectores del mismo largo a graficar.
plot(t,y)
Podemos graficar dos o mas curvas en la misma pantalla introduciendo mas de un par de vectores a la funcion plot.
w = cos(t);
plot(t,y,t,w);
Podemos realizar dos gráficas independientes en la misma ventana con el comando subplot, los dos primeros parametros son el numero de gráficos vertical y horizontal y le tercero el gráfico actual. Por ejemplo:
subplot(2,1,1)
plot(t,y)
subplot(2,1,2)
plot(t,w)
Genera las dos gráficas en la misma pantalla pero en ejes separados.
Funciones Simbólicas
Matlab permite crear funciones simbolicas de forma tal que puedan ser evaluadas posteriormente. Para crear una función simbólica se coloca su expresión entre comillas simples. Un ejemplo de esto es lo siguiente:
y = ' 1 - exp (-t) ';
Para evaluarla se utiliza la función eval asi: ye = eval(y)
Operadores lógicos, relacionales y busqueda
En Matlab existen los mismos operadores lógicos y relacionales que en C.
Los operadores relacionales son los siguientes siguientes: >, >=, ==, ~=, <=, <.
Los operadores lógicos son los siguientes | (or), & (and), ~ (not).
La función find, busca los valores en un arreglo que cumplan determinadas condiciones. Por ejemplo, busquemos el máximo de la función siguiente: t * exp(-t). Utilizaremos la función max() que busca el valor máximo en un arreglo.
m = find(y == max(y))
m almacena los índices de los elementos que cumplan la condición dada. y(m) y t(m) almacenan el valor máximo y el tiempo en el que ocurre.
Ayuda de Matlab
En la ayuda se encuentra toda la documentación de cada función estadar de Matlab, junto con ejemplos y algunas opciones útiles. Por ejemplo, se puede elegir el color de las curvas generadas por la función plot, unicamente hay que buscar que parametro modifica eso en la ayuda. Cualquier duda que no pueda resolver con la ayuda de Matlab no dude preguntarle a su preparador del curso. Su correo electrónico es: neduartes@gmail.com.
Código a utilizar comentado
p=y*z % multiplicacion de matrices
pp=p^2 % elevacion al cuadrado de matrices CUADRADAS
p1=p*p % que es lo mismo que la multiplicacion de p por p
p2=p.^2 % ahora es la multiplicacion punto a punto
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Generacion automatica de matrices y vectores %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=0:.1:4; % generando un vector fila con valores del 0 al 4 en saltos de .1
x=sin(2*pi*t); % generando el seno de 2 pi t para el rango de t dado
size(x) % fijate cuantos valores hay en el vector x
plot(t,x) % grafica del seno de 2 pi t contra t
t=0:.01:4; % como no quedo muy bien hacemos los espacios de tiempo mas pequeños
x=sin(2*pi*t); % volvemos a calcular el seno para el nuevo t
plot(t,x) % regraficamos
dx=diff(x)/.01; % con diff calculamos la derivada de x (que llamamos dx) en el rango de t
size(dx) % miramos el tamaño del nuevo vector dx --observa que mide uno menos que x
size(x) % ¿lo ves?
length(t) % otra manera de medir un vector
t1=t(2:length(t)); % en este caso asignamos a el nuevo vector t1 el rango de t para dx
plot(t,x,t1,dx) % graficamos ambas señales
%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Subgraficas %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,1);
plot(t,x) % o las graficamos en ambitos diferentes
subplot(2,2,2);
plot(t1,dx)
subplot(2,2,[3 4]);% se pueden unir dos o mas regiones
plot(t,x,t1,dx)
%%
% hay que mencionar los operadores + - * / ^
% y los operadores .+ .- .* ./ .^
%%
%%
% y tambien otras funciones importantes
% como cos tan atan i j real imag conj log log10
% sqrt abs angle min max sign
%%
%%
% use help sobre las funciones. Por ejemplo, help sqrt
%%
x='4*t.*exp(-2*t)' % variables simbolica, observa el uso del * y .*
t=0:0.05:4; % espacio de tiempo en el que voy a evaluar
xe=eval(x); % evaluacion de la funcion en t
plot(t,xe) % grafica de la funcion
%%%%%%%%%%%%%%%%%%%%%%%
% %
% Operaciones logicas %
% %
%%%%%%%%%%%%%%%%%%%%%%%
q=find(xe>=0.7) % find encuentra los indices en los que es verdadero xe>=0.7
length(xe) % q tiene 6 elementos, el primero es el 9
xe(9) % observe que xe(9)=0.7189
xe(15) % pero que xe(15)=0.6905
k=find(xe==max(xe)) % otra vez buscamos el indice en el que xe es maximo
t(k) % tiempo en el que ocurre el maximo
xe(k) % valor del maximo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Otros operadores relacionales %
% < >= <= == ~= %
% y logicos %
% & (AND) | (OR) ~ (NOT) xor %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% funciones especificas del curso %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=-2:.01:4; % generacion del vector tiempo
x1=ustep(t-1); % escalon retrasado en uno
plot(t,x1)
x2=uramp(t-1); % rampa retrasada en uno
plot(t,x2)
x3=urect(.5*t-1); % pulso retrasado y expandido
plot(t,x3)
x4=tri(2*t-2); % triangulo retrasado y comprimido
plot(t,x4)
x5=sinc(t/2); % funcion sinc expandida
plot(t,x5)
x6=4*exp(-2*t).*cos(pi*t).*ustep(t); % combinacion de funciones. Tambien udelta
plot(t,x6)
Comments (0)
You don't have permission to comment on this page.