Documenti di Didattica
Documenti di Professioni
Documenti di 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
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 3
Ms sobre MatLab
2+3 ans = 5
7-5 ans = 2
Los resultados son los esperados.
34*212 ans = 7208
1234/5786 ans = 0.2173 Ntese que al resultado se le da el nombre ans.
2^5 ans = 32
a = sqrt(2) a = 1.4142 Se puede escoger el nombre de la variable.
ans = 30 36 42
g^2
66 81 96
Multiplica la matriz por ella misma.
102 126 150
ans = 1 4 9
g .^ 2 Eleva al cuadrado cada elemento de la
16 25 36
matriz.
49 64 81
El comando format
format compact
Controla el espaciado de lneas.
format long
Muestra los 15 dgitos que se utilizan en el clculo.
format short
Muestra nicamente cinco dgitos.
; al final del comando.
No visualizar salida:
help format
Ms informacin.
Concatenacin
Generar nuevas matrices a partir de otras
creadas previamente
Por ejemplo:
Sea la matriz a:
>> a = [1 2; 3 4]
a =
1 2
3 4
Entrada Salida
[a, a, a] ans = 1 2 1 2 1 2
3 4 3 4 3 4
[a; a; a] ans = 1 2
3 4
1 2
3 4
1 2
3 4
[a, zeros(2); zeros(2), a'] ans = 1 2 0 0
3 4 0 0
0 0 1 3
0 0 2 4
Programacin
Se pueden construir matrices mediante programacin
for i=1:10,
for j=1:10,
t(i,j) = i/j;
end
end
+, -, *, y /
Definen operaciones con matrices.
Debemos distinguir:
.*:
Multiplicacin componente a componente.
*
Multiplicacin matricial.
Un escalar es un nmero.
>> whos
Name Size Bytes Class
clear
Borra variables del entorno.
a x =b
save sesion
Salva todas las variables en el archivo binario sesion.mat.
save fichero X
Salva slo la variable X
load sesion
Recupera los datos previamente salvados
xlabel('Mes');
ylabel('Temperatura (C)');
title('Temperaturas minimas en Granada y
Madrid');
legend('Granada','Madrid');
grid;
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;
view(-15,25) 0.4
0.2
0.1
-0.1
-0.2
-0.3
-0.4
-0.5
2
-1
1.5 2
0.5 1
-0.5 0
-2 -1.5 -1
-2
Ficheros de funcin
Permiten definir funciones propias.
Variables locales.
La informacin se pasa como parmetros.
Se pueden definir subfunciones.
Introduccin a Matlab y Simulink
Javier Ramrez 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;
nargin y nargout
Nmero de argumentos de entrada y salida con
los que se llama a la funcin.
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);
true
Condicin 1
Bloque 1
false false false
Condicin Condicin
true
Condicin 2
true true
Sentencias Bloque 1 Bloque 2 Bloque 2
false
Bloque 3
if condicin if condicin1
sentencias bloque1
end elseif condicin2
bloque2
elseif condicin3
Ejemplo bloque3
else
if rem(a,2) == 0 bloque4
disp('a is par') end
b = a/2;
end
false
Condicin Sentencias
true
Sentencias Condicin true
false
Sentencia continue
n = 1;
Hace que se pase
while prod(1:n) < 1e100
inmediatamente a la
n = n + 1;
siguiente iteracin
end
del bucle for o while
Communications Toolbox
y= filter(b,a,x);
Filtra la secuencia x con el filtro descrito por b y a.
[H,w] = freqz(b,a,N);
20
Calcula N puntos de la
Magnitude (dB)
respuesta en frecuencia del 10
-10
0 0.2 0.4 0.6 0.8 1
Normalized Frequency ( rad/sample)
Para el filtro: 0
Phase (degrees)
y(n)= 0.8y(n-1) + x(n) -20
-40
B = FIR1(N,Wn,'high');
Filtro paso alta.
|H|
-40 N=64
H = zeros(NFFT,L);
-60
for i=1:L
B = FIR1(N(i),Wn,'bandpass'); % Diseo.
[H1,W]= freqz(B,1,NFFT); % Respuesta. -80
0 0.2 0.4 0.6 0.8 1
H(:,i)= H1;
w en unidades de
end
10
N=8
Fase de H (rads)
% Visualizacion de la respuesta en frecuencia.
subplot(2,1,1); 0 N=16
plot(W/pi,20*log10(abs(H))); N=32
xlabel('w en unidades de \pi'); -10 N=64
ylabel('|H|');
legend('N=8','N=16','N=32','N=64'); -20
grid;
subplot(2,1,2);
-30
0 0.2 0.4 0.6 0.8 1
plot(W/pi,unwrap(angle(H))); w en unidades de
xlabel('w en unidades de \pi');
ylabel('Fase de H (rads)');
legend('N=8','N=16','N=32','N=64');
grid;
1.5
Y = DECIMATE(X,R) 0.5
-0.5
Ejemplo: Decimacin en un factor 4.
-1
t = 0:.00025:1; % Vector de tiempos
-1.5
x = sin(2*pi*30*t) + sin(2*pi*60*t);
-2
0 20 40 60 80 100 120
y = decimate(x,4);
Seal decimada
2
1.5
stem(x(1:120)); %Original
1
axis([0 120 -2 2])
0.5
title('Seal original')
0
figure -0.5
stem(y(1:30)); %Decimada -1
-2
0 5 10 15 20 25 30
1.5
Y = INTERP(X,R) 1
0.5
-0.5
y = interp(x,4); -2
0 5 10 15 20 25 30
figure 1
stem(y(1:120)); 0.5
title('Seal interpolada'); 0
-0.5
-1
-1.5
-2
0 20 40 60 80 100 120
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.
-15 -18
-20
Power Spectral Density (dB/Hz)
-20
-24
-30
-26
-35
-28
-40
-30
-45
-32
-50 -34
0 100 200 300 400 500 600 700 800 900 0 100 200 300 400 500 600 700 800 900
Frequency (Hz) Frequency (Hz)
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);
Mtodo de covarianza modificado
pmcov(X,ORDER,NFFT,Fs)
randn('state',1);
x = randn(100,1);
y = filter(1,[1 1/2 1/3 1/4 1/5],x);
pmcov(y,4,[],1000);
-26 -26
Power Spectral Density (dB/Hz)
-30 -30
-32 -32
-34 -34
-36 -36
-38 -38
0 100 200 300 400 500 0 100 200 300 400 500
Frequency (Hz) Frequency (Hz)
-26 -26
Power Spectral Density (dB/Hz)
-30 -30
-32 -32
-34 -34
-36 -36
-38 -38
0 100 200 300 400 500 0 100 200 300 400 500
Frequency (Hz) Frequency (Hz)
N
x (n) A(i 1) x(n i)
i 1
[A,E] = LPC(X,N)
Calcula:
Minimizando J= E{|e(n)|2}
Los coeficientes del predictor, A.
La varianza del error, E.
Funciones principales:
Generacin de seales aleatorias
Anlisis de errores
Codificacin de la fuente (escalar, diferencial)
Codificacin para el control de errores
(convolucional, codificacin lineal de bloques)
Modulacin y demodulacin (analgica y digital)
Filtrado mediante filtros especiales
Aritmtica en cuerpos de Galois
randint
Genera una matriz de nmeros aleatorios enteros
uniformemente distribuidos.
out = randint; % Un solo valor [0,1]
out = randint(N); % Matriz cuadrada NN
out = randint(M,N); % Matriz MN
out = randint(M,N,rg); % Se especifica el rango.
0.8
0.6
0.4
0.2
Quadrature
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1
In-Phase
biterr
Calcula el nmero de bits errneos y la tasa de error.
[number,ratio] = biterr(x,y);
[number,ratio] = biterr(x,y,k);
[number,ratio] = biterr(...,flg);
[number,ratio,individual] = biterr(...)
% 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)
0.5
-0.5
-1
0 500 1000 1500 2000 2500 3000
0.5
-0.5
-1
0 0.5 1 1.5 2 2.5 3
4
x 10
8-PSK (Gray)
1
1
0.8
0.8
0.6
Magnitude
0.6
Magnitude
0.4
0.4
0.2
0.2
0
0
1
1
0.5 1
0.5 1
0 0.5
0 0.5
0
0 -0.5
-0.5 -0.5
-0.5
-1 -1
Fy -1 -1
Fx Filtro 55 Fy Fx Filtro 2020
0.8
0.6
Magnitude
colormap(jet(64));
mesh(f1,f2,Hd);
0.5
h = fwind1(Hd,hamming(21));
0
freqz2(h); 1
0.5 1
0 0.5
0
-0.5 -0.5
Fy -1 -1
Fx
3000
4000 10000
2000
2000 5000
1000
0 0 0
0 100 200 0 100 200 0 100 200
50 50 50
0 0 0
0 100 200 0 100 200 0 100 200
4000 10000
2000
2000 5000
0 0 0
0 50 100 150 200 250 0 50 100 150 200 0 50 100 150 200 250
0 0 0
0 50 100 150 200 250 0 50 100 150 200 250 0 50 100 150 200 250
15000
2000 2000
10000
1000 1000
5000
0 0 0
0 50 100 150 200 250 0 50 100 150 200 250 0 50 100 150 200 250
http://en.wikipedia.org/wiki/Iris_flower_data_set
503 = 150 muestras de flores Iris de tres especies
Iris setosa, Iris virginica, Iris versicolor
4 caractersticas de cada ejemplo:
Longitud y anchura de los ptalos y spalos
Anlisis discriminante:
class = classify(sample,training,group)
class = classify(sample,training,group,type)
class = classify(sample,training,group,type,prior)
knn:
Class = knnclassify(Sample, Training, Group)
Class = knnclassify(Sample, Training, Group, k)
Class = knnclassify(Sample, Training, Group, k, distance)
Class = knnclassify(Sample, Training, Group, k, distance, rule)
SL = meas(51:end,1); 3.2
SW = meas(51:end,2);
3
group = species(51:end);
SW
2.8
2.6
2.4
2.2
2
4.5 5 5.5 6 6.5 7 7.5 8
SL
h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
set(h1,'LineWidth',2)
legend('Fisher versicolor','Fisher virginica','Location','NW')
3.6
3.4
3.2
SW
2.8
2.6
2.4
2.2
2
4.5 5 5.5 6 6.5 7 7.5 8
SL
1.2
3.5
1
0.8
3
0.6
0.4
2.5
0.2
0 2
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 4 4.5 5 5.5 6 6.5 7
http://www.ugr.es/~javierrp