Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin a
Matlab y Simulink
Javier Ramrez Prez de Inestrosa
Dpto. Teora de la Seal, Telemtica y Comunicaciones
Universidad de Granada
Email: javierrp@ugr.es
Este tutorial se puede obtener en:
http://www.ugr.es/~javierrp
Qu es Matlab?
Aplicaciones tpicas
Clculo matemtico
Desarrollo de algoritmos
Adquisicin de datos
Modelado, simulacin y prototipado
Anlisis de datos y visualizacin
Grficos
Desarrollo de aplicaciones e interfaces
grficas de usuario (GUI)
Introduccin a Matlab y Simulink
Javier Ramrez
Ms sobre MatLab
El entorno de Matlab
Sintaxis
Entrada
Salida
Comentarios
2+3
7-5
34*212
1234/5786
2^5
ans = 5
ans = 2
Los resultados son los esperados.
ans = 7208
ans = 0.2173 Ntese que al resultado se le da el nombre ans.
ans = 32
a = sqrt(2)
a = 1.4142
b = a, pi, 2 + 3i
b = 1.4142
ans = 3.1416
ans = 2.0000 +
3.0000i
c = sin(pi)
eps
c = 1.2246e-016
ans = 2.2204e-016
d=
[1 2 3 4 5 6 7 8 9 d = 1 2 3 4 5 6 7 8 9
]
e=123456789
e = [1:9]
f=123456789
f = 1:9
g = 0:2:10
f(3)
f(2:7)
f(:)
g = 0 2 4 6 8 10
ans = 3
ans = 2 3 4 5 6 7
123456789
(nada)
ans = 1
2
3
h * h'
h .* h
h + h
ans = 14
ans = 1 4 9
ans = 2 4 6
g = [ 1 2 3;
4 5 6; 7 8 9]
g = 1 2 3
4 5 6
7 8 9
Construccin de matrices.
ans = 6
ans = 7 8 9
g = 1 2 3
4 5 4
7 8 9
h = [1 2 3];
h'
g(2,3)
g(3,:)
g(2,3) = 4
Entrada
g^2
g .^ 2
Salida
Comentarios
ans =
30 36 42
66 81 96
Multiplica la matriz por ella misma.
102 126 150
ans = 1 4 9
Eleva al cuadrado cada elemento de la
16 25 36
matriz.
49 64 81
Control de la salida
El comando format
format compact
format long
format short
No visualizar salida:
help format
Ms informacin.
Introduccin a Matlab y Simulink
Javier Ramrez
10
Ms sobre matrices
Entrada
Salida
rand(2)
ans = 0.9501
0.2311
ans = 0.8913
0.7621
rand(2,3)
zeros(2)
ones(2)
ans = 0
0
ans = 1
1
Comentarios
0.6068
0.4860
0.4565 0.8214
0.0185 0.4447
0
0
1
1
eye(2)
ans = 1 0
0 1
Matriz identidad I.
hilb(3)
11
Ms sobre matrices
Concatenacin
Sea la matriz a:
>> a = [1 2; 3 4]
a =
1 2
3 4
Introduccin a Matlab y Simulink
Javier Ramrez
12
Salida
[a, a, a]
ans = 1 2 1 2 1 2
3 4 3 4 3 4
[a; a; a]
ans = 1
3
1
3
1
3
2
4
2
4
2
4
ans = 1
3
0
0
2
4
0
0
0
0
1
2
0
0
3
4
13
Ms sobre matrices
Programacin
for i=1:10,
for j=1:10,
t(i,j) = i/j;
end
end
14
+, -, *, y /
Debemos distinguir:
.*:
Multiplicacin componente a componente.
*
Multiplicacin matricial.
Introduccin a Matlab y Simulink
Javier Ramrez
15
Escalares
Un escalar es un nmero.
La potencia (^).
Introduccin a Matlab y Simulink
Javier Ramrez
16
Escalares
a = 1
3
Ejemplos
2
4
Entrada
Salida
Comentarios
b=2
b=2
a + b
ans = 3 4
5 6
a * b
ans = 2 4
6 8
a ^ b
ans = 7 10
15 22
a .^ b
ans = 1 4
9 16
Potencia componente a
componente.
17
Vectores
Salida
Comentarios
v = [1 2 3]
u = [3 2 1]
v = 1 2 3
u = 3 2 1
Define 2 vectores.
v * u
Error
v * u'
ans = 10
dot(v,u)
ans = 10
cross(v,u)
ans = -4 8 -4
18
Matrices
Entrada
Salida
Comentarios
k = [16 2 3;
5 11 10;
9 7 6]
k = 16 2 3
5 11 10
9 7 6
Define una
matriz.
trace(k)
ans = 33
Traza de una
matriz
rank(k)
ans = 3
Rango de una
matriz.
det(k)
ans = -136
Determinante de
una matriz
19
Matrices
Entrada
Salida
ans =
inv(k)
[vec,val] =
eig(k)
Comentarios
0.0294 -0.0662 0.0956
-0.4412 -0.5074 1.0662
0.4706 0.6912 -1.2206
Inversa de una
matriz
Vectores propios
y autovalores de
una matriz.
Las columnas de
"vec" contienen
los vectores
propios;
las entradas de
la diagonal de
"val" son los
autovalores.
20
whos
Lista las variables definidas en el entorno.
>> whos
Name
a
b
c
Size
Bytes
Class
100x1
100x100
1x1
800
80000
8
double array
double array
double array
clear
Borra variables del entorno.
Introduccin a Matlab y Simulink
Javier Ramrez
21
22
Resolviendo ecuaciones
x = a \ b
x es igual a la inversa de a por b
Ejemplo
a = [1 2 3; 4 5 6; 7 8 10]; b = [1 1 1]';
Solucin:
x =
-1
1
0
Introduccin a Matlab y Simulink
Javier Ramrez
23
Diary(session.txt);
Diary <ON/OFF> ;
24
save sesion
save fichero X
load sesion
Si los ficheros se pueden salvar en formato texto (ascii). Pueden verse con un editor de textos.
Introduccin a Matlab y Simulink
Javier Ramrez
25
Grficos
26
Ejemplo
Mes = 1:12;
T_Gr = [-2 0 2 4 8 12 14 14 12 8 4 0];
T_Ma = [-4 -2 0 2 6 14 18 18 16 8 2 -2];
xlabel('Mes');
ylabel('Temperatura (C)');
title('Temperaturas minimas en Granada y
Madrid');
legend('Granada','Madrid');
grid;
27
Resultado:
28
subplot
Mes = 1:12
T_Gr = [-2 0 2 4 8 12 14 14 12 8 4 0];
T_Ma = [-4 -2 0 2 6 14 18 18 16 8 2 -2];
subplot(2,1,1);
plot(Mes, T_Gr, 'bo-');
xlabel('Mes');
ylabel('Temperatura (C)');
title('Temperaturas minimas en Granada');
grid;
subplot(2,1,2);
plot(Mes, T_Ma, 'rv-');
xlabel('Mes');
ylabel('Temperatura (C)');
title('Temperaturas minimas en Madrid');
grid;
Introduccin a Matlab y Simulink
Javier Ramrez
29
Resultado
30
Grficos tridimensionales
31
Grficos tridimensionales
Z = X.*exp(-X.^2-Y.^2);
contour3(X,Y,Z,30)
surface(X,Y,Z,'EdgeColor',[.8 .8.8],'FaceColor','none')
grid off
0.5
0.4
view(-15,25)
0.3
colormap cool
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5
2
1
0
-1
-2
-2
-1.5
-1
-0.5
0.5
1.5
32
Programacin
Secuencias de comandos.
Al invocarlos se ejecutan en el entorno.
Las variables creadas son globales.
Ficheros de funcin
33
Un ejemplo de funcin
function y = media (x)
% Valor medio de x.
% Para vectores, media(x) devuelve el valor medio.
% Para matrices, media(x) es un vector fila
% que contiene el valor medio de cada columna.
[m,n] = size(x);
if m == 1
m = n;
end
y = sum(x)/m;
34
Argumentos de funciones
nargin y nargout
Ejemplo:
function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = a + b;
end
Introduccin a Matlab y Simulink
Javier Ramrez
35
Subfunciones
function [media,mediana] = estadistica(u) % Funcin principal
% ESTADISTICA Calcula la media y la
% mediana utilizando funciones internas.
n = length(u);
media = mean(u,n);
mediana = median(u,n);
function a = mean(v,n)
% Calcula la media.
a = sum(v)/n;
% Subfuncin
function m = median(v,n)
% Calcula la mediana.
w = sort(v);
if rem(n,2) == 1
m = w((n+1)/2);
else
m = (w(n/2)+w(n/2+1))/2;
end
% Subfuncin
36
Bifurcaciones
Condicin 1
Condicin
true
Sentencias
false
Condicin
false
Condicin 2
true
Bloque 1
false
Bloque 2
false
true
Bloque 1
true
Bloque 2
Bloque 3
37
if
Sentencia if
Bifurcacin multiple
if condicin
sentencias
end
if condicin1
bloque1
elseif condicin2
bloque2
elseif condicin3
bloque3
else
bloque4
end
Ejemplo
if rem(a,2) == 0
disp('a is par')
b = a/2;
end
38
switch
switch expresion
case case1,
bloque1
case {case2, case3, ...}
bloque2
...
otherwise,
switch valor
bloque3
case -1
end
disp('negativo');
case 0
disp('cero');
case 1
disp('positivo');
otherwise
disp('otro');
end
Introduccin a Matlab y Simulink
Javier Ramrez
39
Bucles
false
Condicin
Sentencias
true
Sentencias
Condicin
true
false
40
for
for i = 1:n
sentencias
end
for i = vector
sentencias
end
for i = n:-0.2:1
sentencias
end
for i = 1:m
for j = 1:n
sentencias
end
end
41
while
{continue, break}
while condicin
sentencias
end
Sentencia break
Hace que termine
la ejecucin
Sentencia continue
Hace que se pase
inmediatamente a la
siguiente iteracin
del bucle for o while
n = 1;
while prod(1:n) < 1e100
n = n + 1;
end
42
Toolboxes
Communications Toolbox
Filter Design Toolbox
Image Processing Toolbox
Signal Processing Toolbox
Statistics Toolbox
System Identification Toolbox
Wavelet Toolbox
43
Communications Toolbox
44
Filtrado de seales
y= filter(b,a,x);
45
Respuesta en frecuencia
[H,w] = freqz(b,a,N);
Calcula N puntos de la
respuesta en frecuencia del
filtro definido por b y a.
Para el filtro:
y(n)= 0.8y(n-1) + x(n)
20
Magnitude (dB)
Phase (degrees)
freqz(1,[1 -0.8],256);
10
0
-10
0
0.2
0.4
0.6
0.8
Normalized Frequency ( rad/sample)
0.2
0.4
0.6
0.8
Normalized Frequency ( rad/sample)
0
-20
-40
-60
0
46
Diseo de filtros
B = FIR1(N,Wn);
B = FIR1(N,Wn,'high');
47
for i=1:L
B = FIR1(N(i),Wn,'bandpass');
[H1,W]= freqz(B,1,NFFT);
H(:,i)= H1;
end
-40
-60
% Diseo.
% Respuesta.
N=8
N=16
N=32
N=64
-20
|H|
NFFT= 256;
L
= length(N);
H
= zeros(NFFT,L);
-80
0
Fase de H (rads)
% Parametros.
N= [8 16 32 64];
Wn = [0.4 0.6];
0.2
0.4
0.6
w en unidades de
0.8
10
1
N=8
N=16
N=32
N=64
0
-10
-20
-30
0
0.2
0.4
0.6
w en unidades de
0.8
48
49
50
51
52
53
Diezmado e interpolacin
Seal original
2
1.5
Y = DECIMATE(X,R)
1
0.5
0
-0.5
-1
-1.5
-2
0
20
40
80
100
120
20
25
30
Seal decimada
stem(x(1:120));
%Original
axis([0 120 -2 2])
title('Seal original')
figure
stem(y(1:30));
%Decimada
title('Seal decimada')
60
1.5
1
0.5
0
-0.5
-1
-1.5
-2
0
10
15
54
Diezmado e interpolacin
Seal original
2
1.5
Y = INTERP(X,R)
1
0.5
0
-0.5
-1
-1.5
-2
0
10
15
20
25
30
80
100
120
Seal interpolada
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
0
20
40
60
55
pwelch
Fs = 1000;
t = 0:1/Fs:.296;
% Una seal coseno de 200 Hz ms ruido
x = cos(2*pi*t*200)+randn(size(t));
pwelch(x,[],[],[],Fs,'twosided');
% Ventana por defecto, solapamiento y NFFT.
56
Ejemplos
Periodogram PSD Estimate
-15
-18
-20
-20
-25
-30
-35
-40
-45
-50
0
-16
-10
-22
-24
-26
-28
-30
-32
100
200
300
400
500
600
Frequency (Hz)
700
800
900
-34
0
100
200
300
400
500
600
Frequency (Hz)
700
800
900
57
Mtodo de covarianza
pcov(X,ORDER,NFFT,Fs)
randn('state',1);
x = randn(100,1);
y = filter(1,[1 1/2 1/3 1/4 1/5],x);
pcov(y,4,[],1000);
58
Ejemplos
Covariance PSD Estimate
-24
-26
-26
-28
-30
-32
-34
-36
-38
0
100
200
300
Frequency (Hz)
400
-30
-32
-34
-38
0
500
100
200
300
Frequency (Hz)
400
500
400
500
-24
-26
-26
-28
-36
-24
-28
-30
-32
-34
-36
-38
0
-24
-28
-30
-32
-34
-36
100
200
300
Frequency (Hz)
400
500
-38
0
100
200
300
Frequency (Hz)
59
Predictor lineal:
Predictor
lineal
x (n)
i 1
x (n)
A(i 1) x(n i)
[A,E] = LPC(X,N)
Calcula:
Minimizando J= E{|e(n)|2}
60
Comunicaciones
Funciones principales:
61
62
randint
out
out
out
out
=
=
=
=
randint;
randint(N);
randint(M,N);
randint(M,N,rg);
%
%
%
%
63
Modulacin/demodulacin digital
64
Modulacin/demodulacin digital
Mapping+modulacin/demodulacin
dmodce/ddemodce
y
y
y
y
y
y
y
y
y
=
=
=
=
=
=
=
=
=
dmodce(x,Fd,Fs,'method/nomap'...);
dmodce(x,Fd,Fs,'ask',M);
dmodce(x,Fd,Fs,'fsk',M,tone);
dmodce(x,Fd,Fs,'msk');
dmodce(x,Fd,Fs,'psk',M);
dmodce(x,Fd,Fs,'qask',M);
dmodce(x,Fd,Fs,'qask/arb',inphase,quadr);
dmodce(x,Fd,Fs,'qask/cir',numsig,amp,phs);
dmodce(x,Fd,[Fs initphase],...);
Slo mapping
modmap/demodmap
modmap('method',...);
y = modmap(x,Fd,Fs,'ask',M);
y = modmap(x,Fd,Fs,'fsk',M,tone);
y = modmap(x,Fd,Fs,'msk');
y = modmap(x,Fd,Fs,'psk',M);
y = modmap(x,Fd,Fs,'qask',M);
y = modmap(x,Fd,Fs,'qask/arb',inphase,quadr);
y = modmap(x,Fd,Fs,'qask/cir',numsig,amp,phs);
65
Ejemplo
M = 16;
Fd = 1;
Fs = 3;
x = randint(100,1,M);
%
%
%
%
%
%
Modulacin M-aria.
Se muestrea el mensaje original
a una muestra por segundo.
La seal modulada se muestrea
a una frecuencia de 3 muestras por segundo.
Mensaje digital aleatorio.
66
Quadrature
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.5
0
In-Phase
0.5
67
Anlisis de errores
biterr
[number,ratio] = biterr(x,y);
[number,ratio] = biterr(x,y,k);
[number,ratio] = biterr(...,flg);
[number,ratio,individual] = biterr(...)
68
Ejemplo
x = randint(100,100,4);
% Seal original
% Introduccin de errores.
% Los errores pueden ser 1, 2, o 3 (no 0).
% Colocacin de los errores
errorplace = (rand(100,100) > .9);
errorvalue = randint(100,100,[1,3]); % Valor error
errors = errorplace.*errorvalue;
y = rem(x+errors,4); % Seal y error sumadas mod 4
% Anlisis de errores
format short
[num_bit,ratio_bit] = biterr(x,y,2)
[num_sym,ratio_sym] = symerr(x,y)
Introduccin a Matlab y Simulink
Javier Ramrez
69
Ejercicio:
70
Introduccin a Simulink
en tiempo continuo,
muestreados,
hbridos y
sistemas multifrecuencia (contienen sistemas
muestreados a diferente frecuencia).
Introduccin a Matlab y Simulink
Javier Ramrez
71
Entorno de trabajo
72
73
Resultado de la simulacin
1
0.5
0
-0.5
-1
0
500
1000
0.5
1500
2000
2500
3000
1
0.5
0
-0.5
-1
0
1.5
2.5
3
4
x 10
74
Ejemplo
75
Simulacin
76
77
Estimacin espectral
78
Resultado de la simulacin
79
8-PSK (Gray)
80
Procesado de imgenes
Lectura de imgenes:
A = imread(filename, fmt)
map
Mapa de color
imshow(I)
imshow(I,[low high])
imshow(RGB)
imshow(BW)
imshow(X,map)
81
Lectura de imgenes
A= imread('texto.tif');
imshow(A);
size(A); size(A);
500500
[B map]=
imread('flor.tif');
imshow(B); size(A);
5005003
82
Transformaciones espaciales
B = imresize(A, scale)
B = imresize(A, [mrows ncols])
B = imrotate(A,angle)
B = imrotate(A,angle,method)
->
B = imrotate(A,angle,method,bbox)
method
bbox
->
Bounding box
{crop} loose
B= imcrop(A);
B= imcrop(A,rect);
Herramienta interactiva
83
Filtrado 2D
B= imfilter(A,h)
Original
N= 5;
h = ones(N,N) / (N*N);
Af = imfilter(A,h);
Filtrada N= 5
Introduccin a Matlab y Simulink
Javier Ramrez
Filtrada N= 20
84
f1,
f1,
f1,
f1,
f2]
f2]
f2]
f2]
=
=
=
=
0.8
Magnitude
Magnitude
0.8
0.6
0.4
0.6
0.4
0.2
0.2
0
1
0
1
0.5
1
0.5
-0.5
-1
-1
Fx
0.5
-0.5
Fy
0.5
0
-0.5
Filtro 55
Fy
-0.5
-1
-1
Fx
Filtro 2020
85
Diseo de filtros 2D
1
0.8
0.6
h = fwind1(Hd, win)
h = fwind1(Hd, win1, win2)
h = fwind1(f1, f2, Hd,...)
0.4
0.2
0
1
0.5
0
Ejemplo:
-0.5
-0.5
1
0.5
h = fwind1(Hd,hamming(21));
freqz2(h);
-1
-1
0.5
0
1
0.5
1
0.5
-0.5
Fy
-0.5
-1
-1
Fx
86
6000
15000
4000
10000
4000
3000
2000
2000
5000
100
200
1000
0
100
200
100
200
87
250
250
250
200
200
200
150
150
150
100
100
100
50
50
50
100
200
100
200
100
200
88
6000
15000
4000
10000
2000
5000
4000
2000
50
100
150
200
250
50
100
150
200
200
200
200
100
100
100
50
100
150
200
250
50
100
150
200
250
15000
2000
50
100
150
200
250
50
100
150
200
250
50
100
150
200
250
2000
10000
1000
0
1000
5000
0
50
100
150
200
250
50
100
150
200
250
89
90
Ejemplo:
http://en.wikipedia.org/wiki/Iris_flower_data_set
503 = 150 muestras de flores Iris de tres especies
91
Anlisis discriminante:
knn:
class = classify(sample,training,group)
class = classify(sample,training,group,type)
class = classify(sample,training,group,type,prior)
Class
Class
Class
Class
=
=
=
=
knnclassify(Sample,
knnclassify(Sample,
knnclassify(Sample,
knnclassify(Sample,
Training,
Training,
Training,
Training,
Group)
Group, k)
Group, k, distance)
Group, k, distance, rule)
92
load fisheriris
SL = meas(51:end,1);
SW = meas(51:end,2);
group = species(51:end);
3.4
3.2
3
SW
Fisher versicolor
Fisher virginica
2.8
2.6
2.4
2.2
2
4.5
5.5
6.5
7.5
SL
h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
set(h1,'LineWidth',2)
legend('Fisher versicolor','Fisher virginica','Location','NW')
93
Clasificamos una
matriz de datos 2-D:
[X,Y] =
meshgrid(linspace(4.5,8)
,linspace(2,4));
X = X(:); Y = Y(:);
[C,err,P,logp,coeff] =
classify([X Y],[SL SW],
group,'quadratic');
Visualizar la
clasificacin:
hold on;
gscatter(X,Y,C,'rb','.',1,'off');
K = coeff(1,2).const;
L = coeff(1,2).linear;
Q = coeff(1,2).quadratic;
f = sprintf('0 =
%g+%g*x+%g*y+%g*x^2+%g*x.*y+%g*y.^2',
...
K,L,Q(1,1),Q(1,2)+Q(2,1),Q(2,2));
h2 = ezplot(f,[4.5 8 2 4]);
set(h2,'Color','m','LineWidth',2)
axis([4.5 8 2 4])
xlabel('Sepal Length')
ylabel('Sepal Width')
title('{\bf Classification with Fisher
Training Data}')
94
Fisher versicolor
Fisher virginica
3.6
3.4
SW
3.2
3
2.8
2.6
2.4
2.2
2
4.5
5.5
6.5
7.5
SL
95
Seleccin de caractersticas
96
Seleccin de caractersticas
Kernel Function: linear_kernel
1.8
setosa (training)
setosa (classified)
versicolor (training)
versicolor (classified)
Support Vectors
1.6
1.4
setosa (training)
setosa (classified)
versicolor (training)
versicolor (classified)
Support Vectors
1.2
3.5
1
0.8
3
0.6
0.4
2.5
0.2
1.5
2.5
3.5
4.5
5.5
4.5
5.5
6.5
97
Despacho 22
ETSII
Introduccin a Matlab y Simulink
Javier Ramrez
98