Professional Documents
Culture Documents
Introduccin a
Matlab y Simulink
Javier Ramrez Prez de Inestrosa
Dpto. Electrnica y Tecnologa de Computadores
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 y entornos
grficos de usuario
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
]
f=123456789
e = [1:9]
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
h = [1 2 3];
h'
(nada)
ans = 1
2
3
h * h'
h .* h
h + h
ans = 14
ans = 1 4 9
ans = 2 6 8
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
g(2,3)
g(3,:)
g(2,3) = 4
Entrada
Salida
Comentarios
ans =
g^2
g .^ 2
30 36 42
66 81 96
102 126 150 Multiplica la matriz por ella misma.
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.
rref(k)
ans = 1
0
0
Row-reduced
echelon form
rank(k)
ans = 3
El rango.
det(k)
ans = -136
El determinante.
0
1
0
0
0
1
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
10
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
11
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
12
save sesion
load sesion
25
Grficos
26
13
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
28
Resultado:
14
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
30
Resultado
15
Grficos tridimensionales
31
Programacin
Secuencias de comandos.
Al invocarlos se ejecutan en el entorno.
Las variables creadas son globales.
Ficheros de funcin
32
16
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;
33
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
34
17
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;
% Subfucin
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
35
Bifurcaciones
Condicin 1
Condicin
true
Sentencias
false
Condicin
false
Condicin 2
true
Bloque 1
true
Bloque 2
false
true
Bloque 1
true
Bloque 2
Bloque 3
36
18
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
37
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
38
19
Bucles
false
Condicin
Sentencias
true
Sentencias
Condicin
true
false
39
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
40
20
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
41
Toolboxes
Communications Toolbox
Filter design Toolbox
Image processing Toolbox
Signal Processing Toolbox
Statistics Toolbox
System Identification Toolbox
Wavelet Toolbox
42
21
Communications Toolbox
43
Filtrado de seales
y= filter(b,a,x);
44
22
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
45
Diseo de filtros
B = FIR1(N,Wn);
B = FIR1(N,Wn,'high');
46
23
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
47
48
24
49
50
25
51
52
26
Diezmado e interpolacin
Seal original
2
1.5
Y = DECIMATE(X,R)
0.5
0
-0.5
-1
-1.5
-2
0
20
40
60
80
100
120
20
25
30
Seal decimada
2
1.5
stem(x(1:120));
%Original
axis([0 120 -2 2])
title('Seal original')
figure
stem(y(1:30));
%Decimada
title('Seal decimada')
1
0.5
0
-0.5
-1
-1.5
-2
0
10
15
53
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
54
27
pwelch
Fs = 1000;
t = 0:1/Fs:.296;
% Una seal coseno de 200Hz ms ruido
x = cos(2*pi*t*200)+randn(size(t));
pwelch(x,[],[],[],Fs,'twosided');
% Ventana por defecto, solapamiento y NFFT.
55
Ejemplos
-10
-18
Power Spectral Density (dB/Hz)
-15
-20
-25
-30
-35
-40
-45
-50
0
-16
-20
-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
56
28
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);
57
Ejemplos
Covariance PSD Estimate
-24
-26
-28
-30
-32
-34
-36
-38
0
200
300
Frequency (Hz)
400
-30
-32
-34
-38
0
500
100
200
300
Frequency (Hz)
400
500
400
500
-24
-26
Power Spectral Density (dB/Hz)
-26
Power Spectral Density (dB/Hz)
-28
-36
100
-24
-28
-30
-32
-34
-36
-38
0
-24
-26
-28
-30
-32
-34
-36
100
200
300
Frequency (Hz)
400
500
-38
0
100
200
300
Frequency (Hz)
58
29
Predictor lineal:
Predictor
lineal
x (n) =
N
i =1
x (n)
A(i + 1) x(n i )
[A,E] = LPC(X,N)
Calcula:
Minimizando J= E{|e(n)|2}
59
Comunicaciones
Funciones principales:
60
30
61
randint
out
out
out
out
=
=
=
=
randint;
randint(N);
randint(M,N);
randint(M,N,rg);
%
%
%
%
62
31
Modulacin/demodulacin digital
63
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);
64
32
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.
65
Quadrature
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.5
0
In-Phase
0.5
66
33
Anlisis de errores
biterr
[number,ratio] = biterr(x,y);
[number,ratio] = biterr(x,y,k);
[number,ratio] = biterr(...,flg);
[number,ratio,individual] = biterr(...)
67
Ejemplo
x = randint(100,100,4);
% Seal original
% Introduccin de errores.
% Los errores pueden ser 1, 2, or 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
68
34
Ejercicio:
69
Introduccin a Simulink
en tiempo continuo,
muestreados,
hbridos y
sistemas multifrecuencia (contienen sistemas
muestreados a diferente frecuencia).
Introduccin a Matlab y Simulink
Javier Ramrez
70
35
Entorno de trabajo
71
72
36
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
73
74
Ejemplo
37
Simulacin
75
76
38
Estimacin espectral
77
Resultado de la simulacin
78
39
8-PSK (Gray)
79
Despacho 110
Introduccin a Matlab y Simulink
Javier Ramrez
80
40