Complementos de Procesado de Señal y Comunicaciones
Máster en Sistemas Multimedia
Introducción a
Matlab y SimulinkJavier Ramírez Pérez de InestrosaDpto. Teoría de la Señal, Telemática y Comunicaciones
Universidad de Granada
Email: [email protected]
Este tutorial se puede obtener en:
http://www.ugr.es/~javierrp
Introducción a Matlab y SimulinkJavier Ramírez 2
¿Qué es Matlab?
MATLAB es un lenguaje de alto nivel para
realizar cálculos cientifico-técnicos.
Integra las herramientas de cálculo
necesarias con otras de visualización así
como, un entorno de programación de fácil
uso.
Introducción a Matlab y SimulinkJavier Ramírez 3
Aplicaciones típicas
Cálculo matemático
Desarrollo de algoritmos
Adquisición de datos
Modelado, simulación y prototipado
Análisis de datos y visualización
Gráficos
Desarrollo de aplicaciones e interfaces
gráficas de usuario (GUI)
Introducción a Matlab y SimulinkJavier Ramírez 4
Más sobre MatLab
MatLab significa “MATrix LABoratory”
El tipo básico de datos es el vector que no requiere ser dimensionado.
Proporciona unos paquetes de extensión (“toolboxes”) para aplicaciones específicas
Estos paquetes incluyen librerías de funciones MatLab (M-files) que extienden las posibilidades de MatLab para resolver problemas específicos
Introducción a Matlab y SimulinkJavier Ramírez 5
El entorno de Matlab
Introducción a Matlab y SimulinkJavier Ramírez 6
Sintaxis
Algunos ejemplos sencillos
Entrada Salida Comentarios
2 + 3
7-5
34*212
1234/5786
2^5
ans = 5
ans = 2
ans = 7208
ans = 0.2173
ans = 32
Los resultados son los esperados.
Nótese que al resultado se le da el nombre ans.
a = sqrt(2) a = 1.4142 Se puede escoger el nombre de la variable.
Introducción a Matlab y SimulinkJavier Ramírez 7
b = a, pi, 2 + 3i
b = 1.4142
ans = 3.1416
ans = 2.0000 +
3.0000i
Se pueden introducir varios
comandos en una sola línea. Pi, i,
y j son constantes.
c = sin(pi)
eps
c = 1.2246e-016
ans = 2.2204e-016
"eps" es el limite actual de
precisión. No se puede operar con
números inferiores a eps.
d =
[1 2 3 4 5 6 7 8 9
]
e = [1:9]
f = 1:9
d = 1 2 3 4 5 6 7 8 9
e = 1 2 3 4 5 6 7 8 9
f = 1 2 3 4 5 6 7 8 9
Definición de vectores. "d", "e",
son "f" vectores. Son iguales. El
operador “:” se utiliza para formar
vectores; cuenta desde el número
inicial al final de uno en uno.
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
1 2 3 4 5 6 7 8 9
Otros usos de “:”. Se utiliza para
acceder a parte o la totalidad de
los datos de un vector o matriz.
Introducción a Matlab y SimulinkJavier Ramírez 8
h = [1 2 3];
h'
(nada)
ans = 1
2
3
Un punto y coma ";" evita que se
visualice la salida.
Una coma simple " ' " calcula la
traspuesta de una matriz, o en el caso
de vectores, intercambia entre vectores
fila y columna.
h * h'
h .* h
h + h
ans = 14
ans = 1 4 9
ans = 2 4 6
Operaciones con vectores. * es la
multiplicación matricial. Las
dimensiones deben ser las apropiadas.
" .* " es la multiplicación componente a
componente.
g = [ 1 2 3;
4 5 6; 7 8 9]
g = 1 2 3
4 5 6
7 8 9
Construcción de matrices.
g(2,3)
g(3,:)
g(2,3) = 4
ans = 6
ans = 7 8 9
g = 1 2 3
4 5 4
7 8 9
Accediendo a los elementos de la
matriz.
":" se utiliza para acceder a una fila
completa.
Introducción a Matlab y SimulinkJavier Ramírez 9
g^2
g .^ 2
ans = 30 36 42
66 81 96
102 126 150
ans = 1 4 9
16 25 36
49 64 81
Multiplica la matriz por ella misma.
Eleva al cuadrado cada elemento de la
matriz.
Entrada Salida Comentarios
Introducción a Matlab y SimulinkJavier Ramírez 10
Control de la salida
El comando format
format compact
Controla el espaciado de líneas.
format long
Muestra los 15 dígitos que se utilizan en el cálculo.
format short
Muestra únicamente cinco dígitos.
“;” al final del comando.
No visualizar salida:
help format
Más información.
Introducción a Matlab y SimulinkJavier Ramírez 11
Más sobre matrices
Funciones incluidas en MatLabEntrada Salida Comentarios
rand(2)
rand(2,3)
ans = 0.9501 0.6068
0.2311 0.4860
ans = 0.8913 0.4565 0.8214
0.7621 0.0185 0.4447
Genera una matriz de
números aleatorios entre 0 y 1
zeros(2)
ones(2)
ans = 0 0
0 0
ans = 1 1
1 1
Genera una matriz 2x2 de
ceros o unos.
eye(2) ans = 1 0
0 1Matriz identidad I.
hilb(3) ans = 1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
Matriz de Hilbert 3x3.
Introducción a Matlab y SimulinkJavier Ramírez 12
Más sobre matrices
Concatenación
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
Introducción a Matlab y SimulinkJavier Ramírez 13
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
Más sobre matrices - concatenación
Introducción a Matlab y SimulinkJavier Ramírez 14
Más sobre matrices
Programación Se pueden construir matrices mediante programación
for i=1:10,
for j=1:10,
t(i,j) = i/j;
end
end
No se produciría salida puesto que la única línea que podría generar salida (t(i,j) =i/j;) termina en “;”
Sin el “;”, Matlab escribiría la matriz t 100 veces!!
Introducción a Matlab y SimulinkJavier Ramírez 15
Operaciones con matrices
+, -, *, y /
Definen operaciones con matrices.
Debemos distinguir:
“.*”:
Multiplicación componente a componente.
“*”
Multiplicación matricial.
Introducción a Matlab y SimulinkJavier Ramírez 16
Escalares
Un escalar es un número.
Matlab los almacena como matrices 1x1
Todas las operaciones entre escalares y
matrices se realizan componente a
componente salvo:
La potencia (“^”).
Introducción a Matlab y SimulinkJavier Ramírez 17
Escalares
Ejemplos
Entrada Salida Comentarios
b=2 b=2 Define b como un escalar.
a + bans = 3 4
5 6
La suma se hace componente a
componente.
a * bans = 2 4
6 8Igual que la multiplicación.
a ^ bans = 7 10
15 22Potencia matricial - a*a
a .^ bans = 1 4
9 16
Potencia componente a
componente.
a = 1 2
3 4
Introducción a Matlab y SimulinkJavier Ramírez 18
Vectores
Un vector es una matriz de una sola fila o
columnaEntrada Salida Comentarios
v = [1 2 3]
u = [3 2 1]
v = 1 2 3
u = 3 2 1Define 2 vectores.
v * u Error Las dimensiones no coinciden.
v * u' ans = 10Al tomar la traspuesta se corrige el
error.
dot(v,u) ans = 10Producto escalar (idéntico al
anterior).
cross(v,u) ans = -4 8 -4El producto vectorial sólo se emplea
con vectores en 3 dimensiones.
Introducción a Matlab y SimulinkJavier Ramírez 19
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 = 33Traza de una
matriz
rank(k) ans = 3Rango de una
matriz.
det(k) ans = -136Determinante de
una matriz
Matlab tiene numerosas funciones predefinidas (help matfun).
Introducción a Matlab y SimulinkJavier Ramírez 20
Matrices
Entrada Salida Comentarios
inv(k)
ans = 0.0294 -0.0662 0.0956
-0.4412 -0.5074 1.0662
0.4706 0.6912 -1.2206
Inversa de una
matriz
[vec,val] =
eig(k)
vec = -0.4712 -0.4975 -0.0621
-0.6884 0.8282 -0.6379
-0.5514 0.2581 0.7676
val = 22.4319 0 0
0 11.1136 0
0 0 -0.5455
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.
Introducción a Matlab y SimulinkJavier Ramírez 21
Variables en el espacio de trabajo
whos
Lista las variables definidas en el entorno.
>> whos
Name Size Bytes Class
a 100x1 800 double array
b 100x100 80000 double array
c 1x1 8 double array
Grand total is 10101 elements using 80808 bytes
clear
Borra variables del entorno.
Introducción a Matlab y SimulinkJavier Ramírez 22
Resolución de sistemas de ecuaciones
Una de las principales aplicaciones de las matrices es la representación de sistemas de ecuaciones lineales.
Si a es una matriz de coeficientes, x es un vector columna que contiene las incógnitas y b los términos constantes, la ecuación
a x =b
representa el correspondiente sistema de ecuaciones.
Introducción a Matlab y SimulinkJavier Ramírez 23
Resolviendo ecuaciones
Para resolver el sistema en MatLab 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]';
Solución:
x =
-1
1
0
Introducción a Matlab y SimulinkJavier Ramírez 24
Salvar y recuperar datos
Los datos de la sesión se pierden al salir de
MatLab.
Para salvar la sesión (entrada y salida)
Diary(‘session.txt’);
Guarda los comandos introducidos en la sesión.
Diary <ON/OFF> ;
Para salvar una o varias matrices
save datos.mat (guarda todas las variables)
save datos.mat x (sólo guarda x)
Introducción a Matlab y SimulinkJavier Ramírez 25
Salvar y recuperar matrices
save sesion
Salva todas las variables en el archivo binario “sesion.mat”.
save fichero X
Salva sólo la variable X
load sesion
Recupera los datos previamente salvados
Si los ficheros se pueden salvar en formato texto (-ascii). Pueden verse con un editor de textos.
Introducción a Matlab y SimulinkJavier Ramírez 26
Gráficos
El comando básico es: plot
plot(y);
plot(x,y);
plot(x,y,’b+’,x,z,’gx’);
color (b,g) blue,green
Marcador (+,x)
Personalización del gráfico:
title, xlabel, ylabel, legend, grid.
Introducción a Matlab y SimulinkJavier Ramírez 27
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];
plot(Mes, T_Gr, 'bo', Mes, T_Ma, 'rv');
xlabel('Mes');
ylabel('Temperatura (°C)');
title('Temperaturas minimas en Granada y
Madrid');
legend('Granada','Madrid');
grid;
Introducción a Matlab y SimulinkJavier Ramírez 28
Resultado:
Introducción a Matlab y SimulinkJavier Ramírez 29
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;
Introducción a Matlab y SimulinkJavier Ramírez 30
Resultado
Introducción a Matlab y SimulinkJavier Ramírez 31
Gráficos tridimensionales
[x,y] = meshgrid(-2:.2:2, -2:.2:2);
z = x .* exp(-x.^2 - y.^2);
mesh(z);
Introducción a Matlab y SimulinkJavier Ramírez
Gráficos 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
view(-15,25)
colormap cool
32
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1
0
1
2
-0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
Introducción a Matlab y SimulinkJavier Ramírez 33
Programación
Ficheros de comandos (scripts)
Secuencias de comandos.
Al invocarlos se ejecutan en el entorno.
Las variables creadas son globales.
Ficheros de función
Permiten definir funciones propias.
Variables locales.
La información se pasa como parámetros.
Se pueden definir subfunciones.
Introducción a Matlab y SimulinkJavier Ramírez 34
Un ejemplo de función
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;
Introducción a Matlab y SimulinkJavier Ramírez 35
Argumentos de funciones
nargin y nargout
Número de argumentos de entrada y salida con los que se llama a la función.
Ejemplo:function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = a + b;
end
Introducción a Matlab y SimulinkJavier Ramírez 36
Subfunciones
function [media,mediana] = estadistica(u) % Función 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) % Subfunción
% Calcula la media.
a = sum(v)/n;
function m = median(v,n) % Subfunció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
Introducción a Matlab y SimulinkJavier Ramírez 37
Bifurcaciones
Condición
Sentencias
false
true
Condición
true
Bloque 1 Bloque 2
false
Condición 1
false
Condición 2
Bloque 1
Bloque 2
true
Bloque 3
false
true
Introducción a Matlab y SimulinkJavier Ramírez 38
if
Sentencia if
if condición
sentencias
end
Bifurcación multiple
if condición1
bloque1
elseif condición2
bloque2
elseif condición3
bloque3
else
bloque4
end
Ejemplo
if rem(a,2) == 0
disp('a is par')
b = a/2;
end
Introducción a Matlab y SimulinkJavier Ramírez 39
switch
switch expresion
case case1,
bloque1
case case2, case3, ...
bloque2
...
otherwise,
bloque3
end
switch valor
case -1
disp('negativo');
case 0
disp('cero');
case 1
disp('positivo');
otherwise
disp('otro');
end
Introducción a Matlab y SimulinkJavier Ramírez 40
Bucles
Condición
Sentencias
false
true
Condición
Sentencias
true
false
Introducción a Matlab y SimulinkJavier Ramírez 41
for
for i = 1:n
sentencias
end
for i = n:-0.2:1
sentencias
end
for i = 1:m
for j = 1:n
sentencias
end
end
for i = vector
sentencias
end
Introducción a Matlab y SimulinkJavier Ramírez 42
while continue, break
while condición
sentencias
end
Sentencia continue
Hace que se pase
inmediatamente a la
siguiente iteración
del bucle for o while
Sentencia break
Hace que termine
la ejecución
n = 1;
while prod(1:n) < 1e100
n = n + 1;
end
Introducción a Matlab y SimulinkJavier Ramírez 43
Toolboxes
Toolboxes para DSP y comunicaciones:
Communications Toolbox
Filter Design Toolbox
Image Processing Toolbox
Signal Processing Toolbox
Statistics Toolbox
System Identification Toolbox
Wavelet Toolbox
Introducción a Matlab y SimulinkJavier Ramírez 44
Procesamiento de señales y comunicaciones
Matlab dispone de unas librerías para
tratamiento digital de señales.
Signal Processing Toolbox
Communications Toolbox
Introducción a Matlab y SimulinkJavier Ramírez 45
Filtrado de señales
y= filter(b,a,x);
Filtra la secuencia x con el filtro descrito por b y a.
Introducción a Matlab y SimulinkJavier Ramírez 46
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.8·y(n-1) + x(n)
freqz(1,[1 -0.8],256);0 0.2 0.4 0.6 0.8 1
-60
-40
-20
0
Normalized Frequency ( rad/sample)
Ph
as
e (
de
gre
es
)
0 0.2 0.4 0.6 0.8 1-10
0
10
20
Normalized Frequency ( rad/sample)
Ma
gn
itu
de
(d
B)
Introducción a Matlab y SimulinkJavier Ramírez 47
Diseño de filtros
B = FIR1(N,Wn);
Filtro FIR paso baja de orden N.
Wn es la frecuencia de corte normalizada (0<Wn<1).
B = FIR1(N,Wn,'high');
Filtro paso alta.
Wn = [W1 W2]; B = FIR1(N,Wn,'bandpass');
Filtro paso banda.
Wn = [W1 W2]; B = FIR1(N,Wn,'stop');
Filtro rechaza banda (notch).
Introducción a Matlab y SimulinkJavier Ramírez 48
Ejemplo: Filtros FIR paso banda
% Parametros.
N= [8 16 32 64]; % Coeficientes del filtro
Wn = [0.4 0.6]; % Frecuencias de corte.
NFFT= 256; % Respuesta en frecuencia
L = length(N);
H = zeros(NFFT,L);
for i=1:L
B = FIR1(N(i),Wn,'bandpass'); % Diseño.
[H1,W]= freqz(B,1,NFFT); % Respuesta.
H(:,i)= H1;
end
% Visualizacion de la respuesta en frecuencia.
subplot(2,1,1);
plot(W/pi,20*log10(abs(H)));
xlabel('w en unidades de \pi');
ylabel('|H|');
legend('N=8','N=16','N=32','N=64');
grid;
subplot(2,1,2);
plot(W/pi,unwrap(angle(H)));
xlabel('w en unidades de \pi');
ylabel('Fase de H (rads)');
legend('N=8','N=16','N=32','N=64');
grid;
0 0.2 0.4 0.6 0.8 1-80
-60
-40
-20
0
w en unidades de
|H|
N=8
N=16
N=32
N=64
0 0.2 0.4 0.6 0.8 1-30
-20
-10
0
10
w en unidades de
Fa
se
de
H (
rad
s)
N=8
N=16
N=32
N=64
Introducción a Matlab y SimulinkJavier Ramírez 49
Diseño y análisis de filtros (fdatool)
Introducción a Matlab y SimulinkJavier Ramírez 50
Signal Processing Tool (SPTool)
Introducción a Matlab y SimulinkJavier Ramírez 51
Signal Processing Tool (SPTool)
Introducción a Matlab y SimulinkJavier Ramírez 52
Signal Processing Tool (SPTool)
Introducción a Matlab y SimulinkJavier Ramírez 53
Signal Processing Tool (SPTool)
Introducción a Matlab y SimulinkJavier Ramírez 54
Diezmado e interpolación
Y = DECIMATE(X,R)
Ejemplo: Decimación en un factor 4.
t = 0:.00025:1; % Vector de tiempos
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);
stem(x(1:120)); %Original
axis([0 120 -2 2])
title('Señal original')
figure
stem(y(1:30)); %Decimada
title('Señal decimada')
0 20 40 60 80 100 120-2
-1.5
-1
-0.5
0
0.5
1
1.5
2Señal original
0 5 10 15 20 25 30-2
-1.5
-1
-0.5
0
0.5
1
1.5
2Señal decimada
Introducción a Matlab y SimulinkJavier Ramírez 55
Diezmado e interpolación
Y = INTERP(X,R)
t = 0:0.001:1; % Time vector
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = interp(x,4);
stem(x(1:30));
title('Señal original');
figure
stem(y(1:120));
title('Señal interpolada');
0 5 10 15 20 25 30-2
-1.5
-1
-0.5
0
0.5
1
1.5
2Señal original
0 20 40 60 80 100 120-2
-1.5
-1
-0.5
0
0.5
1
1.5
2Señal interpolada
Introducción a Matlab y SimulinkJavier Ramírez 56
Densidad de potencia espectral
periodogram
Fs = 1000; t = 0:1/Fs:.3;
% Una señal coseno de 200Hz más ruido
x = cos(2*pi*t*200)+randn(size(t));
periodogram(x,[],'twosided',512,Fs);
% Se usa la ventana por defecto
pwelch
Fs = 1000; t = 0:1/Fs:.296;
% Una señal coseno de 200 Hz más ruido
x = cos(2*pi*t*200)+randn(size(t));
pwelch(x,[],[],[],Fs,'twosided');
% Ventana por defecto, solapamiento y NFFT.
Introducción a Matlab y SimulinkJavier Ramírez 57
Ejemplos
0 100 200 300 400 500 600 700 800 900-50
-45
-40
-35
-30
-25
-20
-15
-10
Frequency (Hz)
Po
wer
Sp
ectr
al D
en
sit
y (
dB
/Hz)
Periodogram PSD Estimate
0 100 200 300 400 500 600 700 800 900-34
-32
-30
-28
-26
-24
-22
-20
-18
-16
Frequency (Hz)
Po
wer
Sp
ectr
al D
en
sit
y (
dB
/Hz)
Welch PSD Estimate
Introducción a Matlab y SimulinkJavier Ramírez 58
Estimación espectral paramétrica
Método 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);
Método 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);
Introducción a Matlab y SimulinkJavier Ramírez 59
Ejemplos
0 100 200 300 400 500-38
-36
-34
-32
-30
-28
-26
-24
Frequency (Hz)
Po
we
r S
pe
ctr
al D
en
sit
y (
dB
/Hz)
Covariance PSD Estimate
0 100 200 300 400 500-38
-36
-34
-32
-30
-28
-26
-24
Frequency (Hz)
Po
we
r S
pe
ctr
al D
en
sit
y (
dB
/Hz)
Modified Covariance PSD Estimate
0 100 200 300 400 500-38
-36
-34
-32
-30
-28
-26
-24
Frequency (Hz)
Po
we
r S
pe
ctr
al D
en
sit
y (
dB
/Hz)
Burg PSD Estimate
0 100 200 300 400 500-38
-36
-34
-32
-30
-28
-26
-24
Frequency (Hz)
Po
we
r S
pe
ctr
al D
en
sit
y (
dB
/Hz)
Yule-Walker PSD Estimate
Introducción a Matlab y SimulinkJavier Ramírez 60
Modelado. Predicción lineal
Predictor lineal: Estima la muestra siguiente utilizando N muestras
anteriores.
[A,E] = LPC(X,N)
Calcula:
Los coeficientes del predictor, A.
La varianza del error, E.
)(nx Predictor
lineal
N
iinxiAnx
1)()1()(ˆ
)(ˆ nx )(ˆ)()( nxnxne
Minimizando J= E|e(n)|2
Introducción a Matlab y SimulinkJavier Ramírez 61
Comunicaciones
Funciones principales:
Generación de señales aleatorias
Análisis de errores
Codificación de la fuente (escalar, diferencial)
Codificación para el control de errores
(convolucional, codificación lineal de bloques)
Modulación y demodulación (analógica y digital)
Filtrado mediante filtros especiales
Aritmética en cuerpos de Galois
Introducción a Matlab y SimulinkJavier Ramírez 62
Modulación analógica y digital
Introducción a Matlab y SimulinkJavier Ramírez 63
Funciones utilizadas frecuentemente
randint
Genera una matriz de números 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.
Introducción a Matlab y SimulinkJavier Ramírez 64
Modulación/demodulación digital
Introducción a Matlab y SimulinkJavier Ramírez 65
Modulación/demodulación digital
“Mapping”+modulación/demodulación dmodce/ddemodce
y = dmodce(x,Fd,Fs,'method/nomap'...);
y = dmodce(x,Fd,Fs,'ask',M);
y = dmodce(x,Fd,Fs,'fsk',M,tone);
y = dmodce(x,Fd,Fs,'msk');
y = dmodce(x,Fd,Fs,'psk',M);
y = dmodce(x,Fd,Fs,'qask',M);
y = dmodce(x,Fd,Fs,'qask/arb',inphase,quadr);
y = dmodce(x,Fd,Fs,'qask/cir',numsig,amp,phs);
y = dmodce(x,Fd,[Fs initphase],...);
Sólo “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);
Introducción a Matlab y SimulinkJavier Ramírez 66
Ejemplo
M = 16; % Modulación M-aria.
Fd = 1; % Se muestrea el mensaje original
% a una muestra por segundo.
Fs = 3; % La señal modulada se muestrea
% a una frecuencia de 3 muestras por segundo.
x = randint(100,1,M); % Mensaje digital aleatorio.
% Modulación M-ary PSK
y = dmodce(x,Fd,Fs,'psk',M);
% Adición de ruido Gaussiano.
ynoisy = y + .04*randn(300,1) + .04*j*randn(300,1);
% Diagrama de dispersión a partir de las observaciones ruidosas.
scatterplot(ynoisy,1,0,'b.');
% Demodulación para recuperar el mensaje
z = ddemodce(ynoisy,Fd,Fs,'psk',M);
s = symerr(x,z) % Comprobar la tasa de error de los símbolos.
Introducción a Matlab y SimulinkJavier Ramírez 67
Gráfico de dispersión (ruido)
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Qu
ad
ratu
re
In-Phase
Scatter plot
Introducción a Matlab y SimulinkJavier Ramírez 68
Análisis de errores
biterr
Calcula el número de bits erróneos y la tasa de error.
[number,ratio] = biterr(x,y);
[number,ratio] = biterr(x,y,k);
[number,ratio] = biterr(...,flg);
[number,ratio,individual] = biterr(...)
Introducción a Matlab y SimulinkJavier Ramírez 69
Ejemplo
x = randint(100,100,4); % Señal original
% Introducción de errores.
% Los errores pueden ser 1, 2, o 3 (no 0).
% Colocación de los errores
errorplace = (rand(100,100) > .9);
errorvalue = randint(100,100,[1,3]); % Valor error
errors = errorplace.*errorvalue;
y = rem(x+errors,4); % Señal y error sumadas mod 4
% Análisis de errores
format short
[num_bit,ratio_bit] = biterr(x,y,2)
[num_sym,ratio_sym] = symerr(x,y)
Introducción a Matlab y SimulinkJavier Ramírez 70
Ejercicio:
Estudiar mediante Matlab/Simulink el efecto del ruido en los sistemas de comunicación digital.
Construir el diagrama de bloques de simulación.
Simular el sistema: Diferentes esquemas de modulación (ASK, PSK, FSK,
MSK).
Obtener las curvas de error en función de la SNR.
Adicionalmente, considérese PSK con M= 4 y 8 símbolos y compárese las curvas de error frente a la SNR.
Introducción a Matlab y SimulinkJavier Ramírez 71
Introducción a Simulink
Simulink es una herramienta para modelado,
simulación y análisis de sistemas dinámicos.
Soporta tanto sistemas lineales como no
lineales:
en tiempo continuo,
muestreados,
híbridos y
sistemas multifrecuencia (contienen sistemas
muestreados a diferente frecuencia).
Introducción a Matlab y SimulinkJavier Ramírez 72
Entorno de trabajo
Introducción a Matlab y SimulinkJavier Ramírez 73
Construcción del diagrama de bloques
Introducción a Matlab y SimulinkJavier Ramírez 74
Resultado de la simulación
0 500 1000 1500 2000 2500 3000-1
-0.5
0
0.5
1
0 0.5 1 1.5 2 2.5 3
x 104
-1
-0.5
0
0.5
1
Introducción a Matlab y SimulinkJavier Ramírez 75
Ejemplo
Introducción a Matlab y SimulinkJavier Ramírez 76
Simulación
Introducción a Matlab y SimulinkJavier Ramírez 77
Análisis/síntesis LPC de la señal de voz
Introducción a Matlab y SimulinkJavier Ramírez 78
Estimación espectral
Introducción a Matlab y SimulinkJavier Ramírez 79
Resultado de la simulación
Introducción a Matlab y SimulinkJavier Ramírez 80
Sistema de comunicación digital
8-PSK (Gray)
Introducción a Matlab y SimulinkJavier Ramírez
Procesado de imágenes
Lectura de imágenes: A = imread(filename, fmt)
Lee una imagen en escala de grises o en color
fmt especifica el formato de imagen (BMP, JPEG, PNG, TIFF, etc)
[X, map] = imread(...)
map Mapa de color
Visualización de la imagen imshow imshow(I)
imshow(I,[low high])
imshow(RGB)
imshow(BW)
imshow(X,map)
81
Introducción a Matlab y SimulinkJavier Ramírez
Lectura de imágenes
A= imread('texto.tif');
imshow(A);
size(A); size(A);
500500
[B map]=
imread('flor.tif');
imshow(B); size(A);
5005003
82
Introducción a Matlab y SimulinkJavier Ramírez
Transformaciones espaciales
Modificación del tamaño B = imresize(A, scale)
B = imresize(A, [mrows ncols])
Rotar una imagen B = imrotate(A,angle)
B = imrotate(A,angle,method)
method -> Interpolación ‘nearest’, ‘bilinear’, ‘bicubic’
B = imrotate(A,angle,method,bbox)
bbox -> Bounding box ‘crop’ ‘loose’
Recortar una imagen B= imcrop(A); Herramienta interactiva
B= imcrop(A,rect);
83
Introducción a Matlab y SimulinkJavier Ramírez
Filtrado 2D
B= imfilter(A,h) N= 5;
h = ones(N,N) / (N*N);
Af = imfilter(A,h);
84
Original Filtrada N= 5 Filtrada N= 20
Introducción a Matlab y SimulinkJavier Ramírez
Respuesta en frecuencia de filtros 2D
[H, f1, f2] = freqz2(h, n1, n2)
[H, f1, f2] = freqz2(h, [n2 n1])
[H, f1, f2] = freqz2(h)
[H, f1, f2] = freqz2(h, f1, f2)
85
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
10
0.2
0.4
0.6
0.8
1
Fx
Fy
Magnitude
Filtro 55 Filtro 2020-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
10
0.2
0.4
0.6
0.8
1
Fx
Fy
Magnitude
Introducción a Matlab y SimulinkJavier Ramírez
Diseño de filtros 2D
h = fwind1(Hd, win)
h = fwind1(Hd, win1, win2)
h = fwind1(f1, f2, Hd,...)
Ejemplo:
[f1,f2] = freqspace(21,'meshgrid');
Hd = ones(21);
r = sqrt(f1.^2 + f2.^2);
Hd((r<0.1)|(r>0.5)) = 0;
colormap(jet(64));
mesh(f1,f2,Hd);
h = fwind1(Hd,hamming(21));
freqz2(h);
86
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
10
0.2
0.4
0.6
0.8
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
10
0.5
1
1.5
Fx
Fy
Magnitude
Introducción a Matlab y SimulinkJavier Ramírez
Ajuste del nivel de intensidad
87
0 100 2000
2000
4000
6000
0 100 2000
5000
10000
15000
0 100 2000
1000
2000
3000
4000
Introducción a Matlab y SimulinkJavier Ramírez
Ecualización del histograma
88
0 100 2000
50
100
150
200
250
0 100 2000
50
100
150
200
250
0 100 2000
50
100
150
200
250
Introducción a Matlab y SimulinkJavier Ramírez
Ecualización del histograma
89
0 50 100 150 200 2500
2000
4000
6000
0 50 100 150 2000
5000
10000
15000
0 50 100 150 200 2500
2000
4000
0 50 100 150 200 2500
100
200
0 50 100 150 200 2500
100
200
0 50 100 150 200 2500
100
200
0 50 100 150 200 2500
1000
2000
0 50 100 150 200 2500
5000
10000
15000
0 50 100 150 200 2500
1000
2000
Introducción a Matlab y SimulinkJavier Ramírez
Filtrado de ruido (Filtro de Wiener)
J = wiener2(I, [m n], noise)
[J, noise] = wiener2(I, [m n])
Wiener2 estima la media y la varianza entorno a cada pixel
A continuación crea un filtro pixel a pixel basado en estas estimaciones
v2es la varianza del ruido
90
Introducción a Matlab y SimulinkJavier Ramírez
Matlab para reconocimiento de patrones
Asignación de una clase a un vector de
características x del objeto a clasificar:
Ejemplo: Fisher Iris dataset:
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 características de cada ejemplo:
Longitud y anchura de los pétalos y sépalos
91
Introducción a Matlab y SimulinkJavier Ramírez
Matlab para reconocimiento de patrones
Análisis 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)
Máquinas de vectores de soporte: Group = svmclassify(SVMStruct, Sample)
Group = svmclassify(SVMStruct, Sample, 'Showplot‘,ShowplotValue)
SVMStruct = svmtrain(Training, Group)
SVMStruct =svmtrain(..., 'Kernel_Function', Kernel_FunctionValue)
92
Introducción a Matlab y SimulinkJavier Ramírez
Análisis discriminante: Ejemplo
load fisheriris
SL = meas(51:end,1);
SW = meas(51:end,2);
group = species(51:end);
h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
set(h1,'LineWidth',2)
legend('Fisher versicolor','Fisher virginica','Location','NW')
93
4.5 5 5.5 6 6.5 7 7.5 82
2.2
2.4
2.6
2.8
3
3.2
3.4
3.6
3.8
SL
SW
Fisher versicolor
Fisher virginica
Introducción a Matlab y SimulinkJavier Ramírez
Análisis discriminante: Ejemplo
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
clasificación: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
Introducción a Matlab y SimulinkJavier Ramírez
Análisis discriminante: Ejemplo
95
4.5 5 5.5 6 6.5 7 7.5 82
2.2
2.4
2.6
2.8
3
3.2
3.4
3.6
3.8
4
SL
SW
Classification with Fisher Training Data
Fisher versicolor
Fisher virginica
Introducción a Matlab y SimulinkJavier Ramírez
Selección de características
[IDX, Z]= rankfeatures(X, Group)
[IDX, Z]= rankfeatures(X, Group,'Criterion', CriterionValue)
load fisheriris;
X= meas(1:100,:);
Group= species(1:100);
[IDX, Z] = rankfeatures(X',Group);
% Selecionamos las variables más discriminativas
data= X(:,[IDX(1) IDX(2)]);
% Selección aleatoria de subconjuntos de entrenamiento y test
[train, test] = crossvalind('holdOut',Group);
cp = classperf(Group);
% Entrenamiento de una máquina de vectores de soporte
svmStruct = svmtrain(data(train,:),Group(train),'showplot',true);
% Añadimos título.
title(sprintf('Kernel Function: %s',...
func2str(svmStruct.KernelFunction)),...
'interpreter','none');
% Clasificación del conjunto de test
classes = svmclassify(svmStruct,data(test,:),'showplot',true);
% Evaluación a partir de la tasa de correctas.
classperf(cp,classes,test);
cp.CorrectRate
96
Introducción a Matlab y SimulinkJavier Ramírez
Selección de características
97
data= X(:,[IDX(1) IDX(2)]); data= X(:,[IDX(3) IDX(4)]);
1 1.5 2 2.5 3 3.5 4 4.5 5 5.50
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8Kernel Function: linear_kernel
setosa (training)
setosa (classified)
versicolor (training)
versicolor (classified)
Support Vectors
4 4.5 5 5.5 6 6.5 72
2.5
3
3.5
4
4.5Kernel Function: linear_kernel
setosa (training)
setosa (classified)
versicolor (training)
versicolor (classified)
Support Vectors
Introducción a Matlab y SimulinkJavier Ramírez 98
Estas transparencias se pueden obtener en:
http://www.ugr.es/~javierrp
Para cualquier consulta:
Javier Ramírez ([email protected])
Dpto. Teoría de la Señal, Telemática y Comunicaciones
Despacho 22
ETSII
Gijón - Octubre 2006 1
Simulación de sistemas de control continuos con MATLAB y SIMULINK
Ayuda
Biblioteca de SIMULINK
Selección de carpetasde trabajo
Visualización devariables del espacio de
trabajo
Crear, abrir y guardar archivosde funciones o de variables del
espacio de trabajo
Línea de comandos
Gijón - Octubre 2006 2
Comandos básicos de MATLAB para las prácticas de Regulación
1. Comandos básicos. Variables, vectores y matrices.
Matlab es un programa de cálculo matemático muy flexible y potente, con posibilidades gráficas para la presentación de los datos, por lo que se utiliza en muchos campos de la ciencia y la investigación como herramienta de cálculo matemático. Los comandos y funciones que se describen a continuación funcionan generalmente en todas las versiones de MATLAB, aunque algunos sólo lo hacen en las versiones más modernas y otros han quedado obsoletos. En este último caso las versiones más modernas disponen de otros comandos o funciones que los sustituyen. Algunos de ellos están disponibles bajo botones o menús en las nuevas versiones.
NOTA: En este documento se recogen unos pocos ejemplos de entre las inmensas posibilidades que ofrece Matlab. Se deben consultar las ayudas de Matlab u otros documentos si se desea un conocimiento más amplio. Se deben utilizar y modificar los ejemplos aquí incluidos para adquirir las destrezas básicas que permitirán utilizar el programa como herramienta para la asignatura. Téngase en cuenta que algunos ejemplos están encadenados, es decir, es necesario ejecutar determinados comandos anteriores para que los siguientes funcionen correctamente.
Realizar operaciones algebraicas es muy sencillo,
>> a = 2>> b = 3>> suma = a + b suma = 5
o simplemente:
>> 2 + 3ans =
5
La variable “ans” contiene el resultado de la última operación realizada y puede consultarse en cualquier momento así como el resto de las variables que se vayan creando:
>> suma suma = 5
>> ans ans = 5
Si se quiere ver el nombre de todas las variables que se están utilizando se pueden usar los comandos who y whos. Con save y load se pueden guardar las variables que se están usando y recuperarlas posteriormente. El comando help proporciona ayuda y combinado con otro comando, ayuda sobre ese comando en concreto (p.ej. help who). Para abandonar el programa se pueden usar los comandos quit o exit. (En versiones bajo Windows se dispone de los correspondientes menús y botones para estas funciones)
Matlab maneja matrices, y como casos particulares de las mismas, vectores fila y vectores columna:
>> matriz = [1 2 34 5 67 8 9]>> matriz = [1,2,3;4,5,6;7,8,9]
>> vectorfila = [1 2 3]>> vectorfila = [1,2,3]>> vectorcolumna = [1,2,3]' (' transposición)>> vectorcolumna = [1;2;3]
2. Valores complejos.
>> c = 2 + 3*j -> se utilizan “j” o “i” como valores imaginarios>> modulo = abs(c) -> se obtiene el módulo
Gijón – Octubre 2006 3
>> argumento = angle(c) -> el valor del argumento esta en radianes>> grados = argumento * 180 / pi -> pero se convierte fácilmente a grados
NOTA: obviamente "i", "j", "ans", "pi", "help", "sin", etc. son nombres que ya están definidos para variables, constantes, comandos o funciones de Matlab y no se deben usar para nombrar nuevas funciones o variables del usuario. ¡Matlab distingue entre mayúsculas y minúsculas!
3. Polinomios.
Los polinomios se introducen en forma de vectores fila que contienen los coeficientes del polinomio.
>> p = [1 -6 0 -27] -> s3-6s2-27>> raices = roots(p) -> da las raíces del polinomio en un vector columna>> polinomio = poly(raices) -> se vuelve a obtener el polinomio original
Se pueden multiplicar y dividir polinomios: c(s)=a(s)*b(s); c(s)/a(s)= q(s)+r(s)/a(s)
>> a = [1 2 3] -> s2+2s+3>> b = [4 5 6] -> 4s2+5s+6>> c = conv(a,b)c = 4 13 28 27 18 -> producto de los dos polinomios= 4s4+13s3+28s2+27s+18>> [q,r] = deconv(c,a) -> división de c(s) por a(s)q = 4 5 6 -> q(s) es el cociente de la división r = 0 0 0 0 0 -> r(s) es el resto de la división
Como se puede observar, a veces el resultado de una función, pueden ser varias variables y sus argumentos también pueden ser varios y de diferentes tipos. Se debe consultar mediante el comando help (p.ej. help deconv) cuales son los argumentos que admite cada función y que variables va a devolver como resultado.
4. Representaciones gráficas 2D y 3D.
Representación de la función seno:>> t = [0:1:100] -> vector tiempo>> x = t -> eje x>> y = sin(0.1*t) -> eje y>> plot(x,y)
Representación de dos funciones:>> t = [0:1:100]>> x = t>> y = [sin(0.1*t) ; cos(0.1*t)]>> plot(x,y)
Representación en 3D:>> t = [0:1:100] -> vector tiempo>> x = t -> eje x>> y = sin(0.1*t) -> eje y>> z = cos(0.2*t) -> eje z>> plot3(x,y,z)
5. Funciones de Transferencia.
Para trabajar con funciones de transferencia, se introducen por separado dos vectores, uno con los coeficientes del polinomio del numerador y otro con los del denominador:
Gijón – Octubre 2006 4
>> num = [1 2] -> s+2>> den = [1 3 5] -> s2+3s+5>> printsys(num,den) -> muestra la función de transferencia (s+2)/(s^2+3s+5)>> pzmap(num,den) -> muestra el mapa de ceros y polos del sistema gráficamente>> [p,z] = pzmap(num,den) -> en los vectores columna “p” y “z” se tendrán los polos y
ceros respectivamente del sistema>> pzmap(p,z) -> muestra el mapa de ceros y polos del sistema a partir de estos
Para un sistema de segundo orden:
>> wn = 30 -> valor para ωn>> xi = 0.3 -> valor para ξ>> [num2,den2] = ord2(wn,xi) -> función de transferencia de segundo orden con ωn y ξ>> printsys(num2,den2) -> la función de transferencia de segundo orden
1/(s^2+18s+900)
En versiones de MATLAB superiores a la 5.0 se puede trabajar con el objeto especial Función de Transferencia, que permite operar cómodamente con ellas…
>> g = tf([1 2], [1 3 5]) -> función “tf”(s+2)/(s^2+3s+5)
… o incluso representarlas y operar con ellas en forma simbólica:
>> s = tf(´s´) -> crea el objeto “s”>> g = (s+2)/(s^2+3*s+5)(s+2)/(s^2+3s+5)>> g2 = g*g
Estos objetos Función de Transferencia se pueden sumar, multiplicar, etc. y aplicarles lasfunciones que aquí se describen, válidas también para un par de polinomios numerador/denominador:
>> num = [1 2] -> s+2>> den = [1 3 5] -> s2+3s+5>> pzmap(num,den)
Equivale a:>> g =tf([1 2], [1 3 5]) ->g=(s+2)/(s^2+3s+5)>> pzmap(g)
Y para pasar de ‘num/den’ a ‘g’ y de ‘g’ a ‘num/den’:
>> g = tf(num,den)>> [p,z] = pzmap(g)>> num = dcgain(g*tf(poly(p),poly(z)))*poly(z)>> den = poly(p)
O más directamente:>> g = tf(num,den)>> num= deal(g.num:)>> den = deal(g.den:)
>> m = feedback(g,1,-1) -> proporciona la función de transferencia en bucle cerrado con realimentación unitaria “1” y negativa "-1"
6. Respuesta en el tiempo.
>> impulse(g) -> representa gráficamente la respuesta en el tiempo del sistema ante una entrada impulso
>> step(g) -> representa gráficamente la respuesta en el tiempo del sistema ante una entrada escalón unitario. Un clic con el ratón sobre las gráficas proporciona información sobre sus valores
>> [y,x,t] = step(g) -> almacena en "y" la respuesta del sistema, en "x" la evolución de las variables de estado y en "t" el vector de tiempo
>> maximo = max(y) -> da el valor máximo que alcanza la respuesta del sistema
Gijón – Octubre 2006 5
7. Respuesta en frecuencia.
>> bode(g) -> dibuja el diagrama de bode del sistema>> [mag,fase] = bode(g,3) -> da los valores de magnitud (no está en decibelios) y de fase
(en grados) del sistema para ω = 3>> [mag,fase,w] = bode(g) -> devuelve los valores de magnitud, fase y pulsación, en tres
vectores, para utilizarlos posteriormente con otras funciones como por ejemplo:
>> maximo = max(mag) -> valor en el pico de resonancia de la relación de amplitudes>> resonancia = 20*log10(maximo) -> valor en el pico de resonancia expresado en decibelios
>> [Gm,Pm,wg,wp] = margin(g) -> ¿¿¿ Resultados extraños ???Gm = ∞ Indica que el margen de fase y de ganancia son infinito,Pm = ∞ y que no se puede determinar un valor de ω para elloswg = NaN (NaN = Not a Number)wp = NaN
>> g1 = 10/((s+1)*(s+2)*(s+3)) -> se crea una nueva FdT para probar la función “margin”>> [Gm1,Pm1,wg1,wp1] = margin(g1) Gm1 = -> margen de ganancia (no está en decibelios)Pm1 = -> margen de fase en grados wg1 = -> pulsación (frecuencia en rad/s) para el margen de ganancia wp1 = -> pulsación (frecuencia en rad/s) para el margen de fase>> margin(g1) -> representa gráficamente el margen de ganancia y de fase
>> nichols(g) -> diagrama magnitud-fase>> ngrid(´new´) -> superpone el ábaco de Nichols al diagrama anterior>> shg -> muestra la pantalla gráfica>> clf -> limpia la pantalla gráfica (en versiones antiguas "clg")>> hold on -> bloquea la pantalla gráfica para superponer un nuevo trazado>> hold off -> desbloquea la pantalla gráfica para realizar nuevos trazados
>> nyquist(g) -> diagrama de Nyquist del sistema. El tramo con valores de ω>0 es el “Diagrama Polar” del sistema
>> ltiview(g) -> permite representar conjuntamente las gráficas ya descritas para varios sistemas simultáneamente
8. Lugar de las raíces.
>> rlocus(g) -> lugar de las raíces del sistema>> polos = rlocus(num,den,3) -> polos del sistema en bucle cerrado para "k=3">> hold on -> fija la pantalla gráfica para seguir trabajando sobre ella>> rlocus(num,dem,[3 4]) -> dibuja la posición de las raíces (polos) del sistema en bucle
cerrado para los valores de "k=3" y "k=4">> rltool -> herramienta para el diseño de reguladores basado en el L.R.>> sisotool -> herramienta de diseño más genérica que “rltool”
NOTA: Las unidades de los resultados (grados, radianes, decibelios, etc.) pueden variar según las versiones de Matlab.
Gijón – Octubre 2006 6
Elementos básicos de SIMULINK
1. La biblioteca de Simulink.
Simulink proporciona un entorno gráfico al usuario que facilita enormemente el análisis, diseño y simulación de sistemas (de control, electrónicos, etc.), al incluir una serie de rutinas que resuelven los cálculos matemáticos de fondo, junto con una sencilla interfaz para su uso. Proporciona un entorno de usuario gráfico que permite dibujar los sistemas como diagramas de bloques tal y como se haría sobre un papel.
El conjunto de componentes incluidos junto al programa Simulink, incluye bibliotecas de fuentes de señal, dispositivos de presentación de datos, sistemas lineales y no lineales, conectores y funciones matemáticas. En caso de que sea necesario, se pueden crear nuevos bloques a medida por el usuario.
El programa Simulink se inicia desde el botón "Simulink Library Browser" (Biblioteca de Simulink, ver imagen de portada) de la ventana de comandos de Matlab, o desde la línea de comandos mediante la orden:
>> simulink
Una vez iniciado el programa el entorno de trabajo queda dividido en tres partes.
− La ventana de comandos de Matlab (Matlab command window): desde la que se puede ejecutar cualquier comando del mismo, dar valores a variables y controlar la ejecución de las simulaciones.
Conjunto básico debloques de función de
Simulink
Crear un nuevo modelo
Busqueda de BloquesAbrir un modelo
− La ventana de la biblioteca de Simulink (Simulink Library Browser): desde la que se seleccionan los componentes que se van a insertaren el sistema a simular.
− La o las ventanas de los modelos: en las que se dibujan los modelos y se realizan y controlan las simulaciones. Estas ventanas aparecen cuando se abre un modelo ya existente o se crea una ventana en blanco para dibujar un nuevo modelo. Para ello, se pueden utilizar los botones de la ventana de la librería de Simulink.
Gijón – Octubre 2006 7
Todos los componentes básicos de Simulink, se pueden encontrar en su biblioteca de componentes. A continuación se describen los componentes básicos de la biblioteca de Simulink:
Continuous: Bloques que pueden ser representados como una función continua en el tiempo.Derivative: La salida del bloque se corresponde con la derivada de la entrada.Integrator: La salida del bloque se corresponde con la integral de la entrada. Los parámetros del bloque permiten controlar el valor inicial de la salida, así como la existencia de límites superiores e inferiores en la salida.Transfer Fcn: Permite expresar una función de transferencia mediante su expresión en la variable compleja s. Sus parámetros son los polinomios del numerador y del denominador de la función, expresados como vectores fila.Transport Delay: La salida del bloque se corresponde con la entrada al mismo retrasada una cantidad de tiempo, que se fija como parámetro en el bloque.Zero-Pole: Función de transferencia expresada en función de la ganancia en régimen permanente, y la situación de los polos y ceros del sistema.
Math: Bloques que realizan operaciones matemáticas sobre sus entradas.Abs: Calcula el valor absoluto de su entrada.Gain: Aplica una ganancia constante a la entrada.Math Function: Este bloque incluye la mayor parte de las funciones matemáticas típicas, con la excepción de las funciones trigonométricas.Product: Calcula el producto escalar de sus entradas. Un parámetro del bloque permite regular el número de entradas del mismo.Sign: Calcula el signo de la entrada. +1 indica positivo, -1 negativo, y 0 un valor nulo.Sum: Calcula la suma de todas sus entradas. Un parámetro permite indicar el número de entradas, y si estas deben ser invertidas antes de la suma. Ejemplo: un valor para el parámetro "++-+" indicaría que el bloque tiene 4 entradas, y que la tercera de ellas debe ser invertida antes de sumarla.Trigonometric Function: En este bloque se incluyen todas las funciones trigonométricas típicas.
Nonlinear: Bloques no lineales.Dead Zone: Incluye una zona muerta en el sistema, centrada en torno a cero. El sistema no responde ante estos valores. La magnitud de la zona muerta puede ser modificada, y echa asimétrica por medio de los parámetros del sistema.Relay: La salida pasa al estado on=1 cuando la entrada supera un valor umbral, y a estado off=0 cuando cae por debajo de un umbral distinto. El estado inicial es off.Saturation: La señal de salida no sobrepasa un valor umbral, configurable con los parámetros del bloque.Switch: Una entrada del sistema permite escoger cual de las otras dos entradas se presenta en la salida.
Signals&Systems: Manejo de sistemas y señales.Subsystem: Permite la realización de sistemas jerárquicos. Al abrir el subsistema, nos permite incluir en su interior, nuevos bloques constructivos, e incluso anidar nuevos subsistemas.In1: Por defecto un subsistema no contiene entradas. Por cada entrada que se desee añadir se le debe incluir uno de estos bloques.Out1: Por defecto un subsistema no contiene salidas. Por cada entrada que se desee añadir se le debe incluir uno de estos bloques.
Mux: Permite la inclusión de un conjunto de señales en una única línea de transmisión (que transmite datos vectoriales), lo que facilita la representación en el dibujo. Parámetros: número de entradas. Admite tanto entradas escalares como vectoriales.Demux: Permite la descomposición de los datos puesto en forma vectorial en una línea mediante un multiplexador. Parámetros: número de salidas.Data Store Memory: Define una variable del entorno de trabajo que se va a usar como lugar de almacenamiento de datos útil para evitar tener que hacer conexiones complejas que compliquen el diagrama de bloque que se está usando.Data Store Read: Lee el valor actual de una variable de almacenamiento, que debe estar previamente definida mediante un bloque Data Store MemoryData Store Write: Cambia el valor actual de una variable de almacenamiento, que debe estar previamente definida mediante un bloque Data Store Memory
Sinks: Sumideros de señales.Display: Representa numéricamente el valor de una variable.Scope: Representa gráficamente la evolución en el tiempo de una variable.To Workspace: Guarda el valor de la señal indicada en una variable del entorno de trabajo del Matlab. Se puede escoger el nombre de la misma, y limitar su tamaño.To File: Guarda en un fichero de tipo ".mat" los datos de la señal de entrada al bloque.Stop Simulation: Detiene la simulación si el valor de la entrada es distinto de 0.
Sources: Fuentes de señales.Chirp Signal. Genera una señal senoidal, modulada en frecuencia, entre un valor inicial y un valor final.Clock: Tiempo que se lleva de simulación.Constant: Proporciona una señal de valor constante.From Workspace: Proporciona una secuencia de datos tomadas del entorno de trabajo del Matlab. La variable elegida debe contener una matriz indicando los valores de la señal, y los instantes en los que la señal toma estos valores.From File: Proporciona datos tomados de un fichero ".mat", en el que debe estar el valor de la variable, junto a los instantes de tiempo en que toma cada valor.Pulse Generator: Genera una onda cuadrada, de la que se puede controlar la amplitud, el periodo y el tiempo de duty (relación entre el tiempo que la onda toma su valor máximo y el tiempo que toma el valor mínimo).Ramp: Genera una señal de tipo Rampa.Random Number: Genera números aleatorios distribuidos según una función normal.Signal Generator: Simula un generador de señales electrónico, permitiendo generar ondas dientes de sierra, ondas cuadradas y senoidales.Sine Wave: Generador de ondas senoidales.Step: Genera una señal de tipo escalón.Uniform Random Number: Genera números aleatorios distribuidos según una función uniforme.
Gijón – Octubre 2006 8
2. Creación de un modelo.
Para simular un sistema, se deben insertar en las ventanas de simulación los distintos componentes con los que se va a construir el modelo. Se pueden seguir los siguientes pasos:
Descripción del Bloque
1
2
3
4
5
Representación gráficadel Bloque
Crear un modelo nuevo
Buscar un bloque
Situar un bloque
Conectarbloques
Crear unabifurcación
6
7
1) Crear un nuevo modelo: Para abrir una nueva ventana de simulación se debe pulsar el botón "nuevo modelo".
2) Buscar un bloque: Se puede buscar un bloque expandiendo el árbol de la biblioteca o buscándolo directamente por su nombre en la ventana de búsqueda. En este caso, si hay más de un bloque que pueda corresponder a ese nombre, irán apareciendo a medida que se pulse la tecla "enter" (retorno).
3) Situar un bloque: Para situar un bloque, se mantiene pulsado el botón izquierdo del ratón sobre el icono en forma de rombo que hay junto al nombre del bloque y se arrastra hacia la posición deseada en la ventana de simulación.
4) Conectar bloques: En cada bloque, las puntos de salida aparecen indicados mediante una flecha saliente del bloque "|>", mientras que los puertos de entrada a cada bloque se indican con una flecha entrante al mismo ">|". Se conecta la entrada de un bloque a la salida de otro, manteniendo pulsado el botón izquierdo del ratón mientras se arrastra desde el símbolo de entrada de uno de los bloques hasta el de salida de otro o viceversa.
5) Crear una bifurcación: Si se desea llevar la salida de un bloque a la entrada de más de uno se necesita crear una bifurcación en la conexión. Para hacerlo, se arrastra con el ratón desde la entrada del nuevo bloque a conectar hasta la línea de la conexión que se va a bifurcar.
6) Modificar los bloques: Se pueden rotar o aplicar simetrías a los bloques usados, según convenga la colocación de entradas/salidas para el esquema que se esté realizando, pulsando sobre él el botón derecho del ratón y utilizando los menús desplegables o mediante la opción "Formar" del menú principal ("Format\Flip Block", "Format\Rotate Block", etc.). También mediante los menús o haciendo doble clic sobre el bloque, se pueden modificar sus parámetros.
7) Inserción de textos: Se puede incluir un texto aclaratorio o informativo en cualquier parte de la ventana del modelo, haciendo doble clic en una zona libre y escribiendo directamente el texto.
Gijón – Octubre 2006 9
También se pueden cambiar los nombres y posiciones de los bloques que se empleen para la simulación antes o después de conectarlos. Asimismo los enlaces de las conexiones pueden moverse o modificarse. Para eliminar cualquier elemento basta con seleccionarlo con un clic y eliminarlo con la tecla "sup" o "delete", o utilizar alguno de los menús.
Conviene guardar ("File\Save as") periódicamente el modelo, incluso antes de terminarlo, para evitar perder el trabajo realizado.
Un ejemplo trivial incluiría la selección de dos componentes: "Simulink\Sources\Sine Wave" y "Simulink\Sinks\Scope" de la ventana "Simulink Library Browser", y el arrastre de los mismos hasta la ventana de dibujo. En el caso de nuestro ejemplo básico, para conectar el generador de señales y el osciloscopio, simplemente se debe situar el ratón sobre el punto de salida del generador, pulsar el botón izquierdo, arrastrar el ratón hasta el punto de entrada del osciloscopio y soltar el botón del ratón.
Controles de zoom
1
2
3
4
5
Número de entradas delosciloscopio
Control de la simulación
Duración de la simulación en segundos
67
Botón de propiedades
3. Control de la simulación y visualización de resultados.
Antes de poder ejecutar la simulación, es necesario seleccionar los parámetros apropiados para la misma (1). Desde el menú: "Simulation\Parameters", se puede desplegar un cuadro de dialogo, en el que se controlan parámetros de la simulación de entre los cuales el que se modifica
Gijón – Octubre 2006 10
más habitualmente es el tiempo final de la simulación. (Otros parámetros accesibles son el tiempo de inicio de la simulación, el método matemático que se empleará para llevarla a cabo, o las variables que se tomarán/guardarán de/en el espacio de trabajo). La simulación se puede poner en marcha o detener mediante el menú anterior o los botones de la ventana (2).
Para visualizar los resultados de la misma son muy útiles los bloques se encuentran en el grupo "Sinks" de la biblioteca de Simulink. De entre ellos, quizás el más útil es el bloque "Scope" que simula el comportamiento de un osciloscopio. Tras realizar una simulación se pueden ver los resultados que ha registrado haciendo un doble clic sobre él (3). Para ver correctamente los resultados se utilizan los controles de zoom (4), siendo conveniente pulsar siempre tras una simulación el botón de autoescala (el de los prismáticos) para ver el total de los datos registrados. Los otros tres botones de zoom permiten respectivamente ampliar un área señalada con un arrastre del ratón, ampliar el eje "X" de la misma manera o ampliar el eje "Y".
El bloque "Scope" tiene una serie de propiedades a las que se accede a través del botón correspondiente de la ventana "Scope" (5). Dos de las más útiles son la que permite elegir el número de entradas que se desean para el osciloscopio (6) "Number of axes" (que será también el número de gráficos que representará) y la que determina si el osciloscopio almacena todos los datos de la simulación o sólo los últimos obtenidos (7) "Limit rows to last". Respecto a este último control, es conveniente eliminar la marca "√" del cuadradito blanco para que el osciloscopio mantenga todos los datos registrados durante la simulación completa.
A
B
Mux
Si se desea visualizar más de una señal en un osciloscopio, existen dos posibilidades:A) Aumentar el número de entradas del osciloscopio como se comentó anteriormente.B) Utilizar un bloque "Mux" para que ambas señales aparezcan en el mismo gráfico.
Gijón – Octubre 2006 11
EJEMPLO 1
Simular la respuesta de un sistema descrito por su función de transferencia ante una determinada señal de entrada con Matlab o Simulink es muy sencillo:
Y(s)X(s)
x(t) y(t)9·48)( 2 ++
=ss
sG
Con Matlab se puede obtener la respuesta ante un inpulso de Dirac, un escalón, etc.:
>> g = tf([8], [1 4 9])g=8/(s^2+4s+9)
>> impulse(g)
>> step(g)
Con Simulink se construye el modelo del sistema, pudiendo optarse por introducir sus parámetros de forma explícita o dejarlos como parámetros a los que se les puede asignar un valor como variables desde la ventana de comandos de Matlab. Una vez ejecutada la simulación se obtendrá en el bloque “Scope” el resultado de la misma.
A B
Gijón – Octubre 2006 12
EJEMPLO 2
Si se desea simular un sistema más complejo basta con trasladar las ecuaciones de su modelo a un modelo de bloques de Simulink.
Modelo del sistema:
qr(t)=qa(t)+qp(t)qr(t)=R·i2(t)qa(t)=C·dti(t)/dtqp(t)=(ti(t)-ta(t))/Rt
Simulink puede simular sistemas no lineales, como se puede ver en el siguiente modelo, siendo necesario en muchos casos definir los valores iniciales de algunas de las variables del sistema (en bloques como los “integrator”). Los valores del modelo representado que se han dejado como parámetros son asignados en la ventana de comandos de Matlab (debe tenerse cuidado con el uso de mayúsculas y minúsculas en la denominación de estos parámetros). Los archivos de ejemplo indicados contienen el modelo representado y el espacio de trabajo con los valores asignados a los parámetros para la ventana de comandos de Matlab.
Archivos: calentador_no_lineal.mdl, calentador.mat
Qp(t)
Qr(t) Qa(t)i(t)
ta(t)
ti(t) ti(t)ta(t)i(t)
Modelo no lineal del calentador
Initial=Tio
time=2000inicial=1final=1.5
time=6000inicial=20final=15
ParámetrosR=20 ohm
C=4184 julio/ºCRt=0.1 ºC·s/julio
Modelo no lineal del calentador(Simulation->Parameters->Solver: Stop Time=10000)
Qr(t)=Qa(t)+Qp(t)Qr(t)=R·i(t)^2
Qa(t)=C·dti(t)/dtQp(t)=(ti(t)-ta(t))/Rt
(Crear en la ventana de comandos de Matlab)
Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)
Io=1 ATao=20ºTio=22º
s
1
1/Rt
1/CRu^2
0
Display
ScopeIntegratorStep 1
Step 2
Gain 2Gain 1
Gain 3
Fcn
También se puede linealizar el modelo respecto a un punto de funcionamiento y construir el modelo en transformadas de Laplace. Luego se trasladan las ecuaciones del modelo linealizado a un modelo de Simulink mediante, por ejemplo, bloques “Función de Transferencia” (TransferFcn).
Calentador
Fuente decorriente
i(t)
ti(t) ta(t)
qa(t)
qr(t)
qp(t)
RC
Rt
Gijón – Octubre 2006 13
Modelo linealizado del sistema en Transformadas de Laplace:
Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)
Qp(s)=(Ti(s)-Ta(s))/Rt
Archivos: calentador_lineal.mdl, calentador.mat
Qr(s) Qa(s)
Qp(s)
Ti(s) ti(t)
i(t)ta(t)
Ta(s)
I(s)
Modelo lineal del calentador(Simulation->Parameters->Solver: Stop Time=10000)
time=2000inicial=0final=0.5
time=6000inicial=0final=-5
Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)
Io=1 ATao=20ºTio=22º
ParámetrosR=20 ohm
C=4184 julio/ºCRt=0.1 ºC·s/julio
Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)
Qp(s)=(Ti(s)-Ta(s))/Rt
(Crear en la ventana de comandos de Matlab)
1
Rt
0
Display
2*R*Io
1
1
C.s
Step 2
Step 1 Transfer Fcn 1
Transfer Fcn 2
Transfer Fcn 3 Scope
Al comparar los resultados de la simulación de ambos modelos, se puede observar el error que introduce la linealización del modelo.
+2.5º -5º
+2º
-5º22º
Gijón – Octubre 2006 14
EJEMPLO 3
Una vez diseñado un regulador para un sistema, basándose en su modelo linealizado, se puede comprobar con Simulink si el comportamiento final del sistema es adecuado. Basta con añadir los bloques que representan el sistema de control diseñado.
+_
Selector detemperatura
Regulador
Accionador
Sensor detemperatura
Proceso
Filtrado y amplificación
Comparador Calentador
Archivos: calentador_lineal_regulador.mdl, calentador_regulador.mat
Qr(s) Qa(s)
Qp(s)
Ti(s) ti(t)
r(t)ta(t)
Ta(s)
I(s)
Modelo lineal del calentador con un regulador PID(Simulation->Parameters->Solver: Stop Time=2500)
time=500inicial=0final=5
time=1500inicial=0final=-5
Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)
Io=1 ATao=20ºTio=22º
ParámetrosR=20 ohm
C=4184 julio/ºCRt=0.1 ºC·s/julio
Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)
Qp(s)=(Ti(s)-Ta(s))/Rt
(Crear en la ventana de comandos de Matlab)
R(s)Regulador PID
Realimentación unitaria
K·(s+a)(s+c)/(s·(s+b))K=2.57a=0.05b=0.023c=0.0025
Corriente i(t)1
Rt
5
Display
K
1
s +(a+c)s+a*c2
s +b.s22*R*Io
1
1
C.s
Sin embargo, siempre que sea posible, es conveniente comprobar el comportamiento del sistema de control sobre el modelo no lineal del sistema. Pueden tenerse en cuenta, por ejemplo, limitaciones en la evolución de determinadas variables del sistema. En el siguiente ejemplo, a parte de utilizar el modelo no lineal que se tenía para el sistema, se ha supuesto que la corriente máxima i(t) que se puede conseguir es de 10 A y que su valor nunca es negativo. Esto se ha reflejado en el modelo mediante un bloque denominado “Saturation”.
Gijón – Octubre 2006 15
Archivos: calentador_no_lineal_regulador.mdl, calentador_regulador.mat
Qp(t)
Qr(t) Qa(t)r(t)
ta(t)
ti(t) ti(t)ta(t)r(t)Initial=Tio
time=500inicial=22final=27
time=1500inicial=20final=15
ParámetrosR=20 ohm
C=4184 julio/ºCRt=0.1 ºC·s/julio
Modelo no lineal del calentador con un regulador PID(Simulation->Parameters->Solver: Stop Time=25000)
Qr(t)=Qa(t)+Qp(t)Qr(t)=R·i(t)^2
Qa(t)=C·dti(t)/dtQp(t)=(ti(t)-ta(t))/Rt
(Crear en la ventana de comandos de Matlab)
Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)
Io=1 ATao=20ºTio=22º
Realimentación unitaria
Regulador PID
K·(s+a)(s+c)/(s·(s+b))K=2.57a=0.05b=0.023c=0.0025
Saturations
1K
1/Rt
1/CRu^2
27
Display
s +(a+c)s+a*c2
s +b.s2
i(t)
Corriente i(t)
Los resultados muestran (aunque no son exactamente iguales en una y otra simulación) que el sistema de control sigue comportándose correctamente.
22º
1 A
Gijón – Octubre 2006 16
EJERCICIO 1: Visualización de la respuesta de un sistema
Construir una función de transferencia sustituyendo los dígitos ABCDEFGH con los números de su D.N.I., ajustados a la derecha y rellenando con un cero por la izquierda si es necesario:
DNI: . . 1AB*s+2CD-- --- --- G(s)= ----------------AB CDE FGH s3+1E*s2+5F*s+1GH
Por ejemplo:
DNI: 09.345.678 109*s+234-- --- --- G(s)= ----------------AB CDE FGH s3+15*s2+56*s+178
Incluir en el informe los siguientes datos y resultados: (Indicar todos los comandos y el diagrama de bloques del modelo en Simulink utilizados para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)
1. Apellidos, Nombre y DNI del alumno.
2. La función de Transferencia G(s) creada.
3. Los ceros y polos del sistema G(s).
4. Respuesta ante un impulso. (con Matlab) 4.1. Dibujo de la respuesta. 4.2. Máximo de la respuesta. 4.3. Valor en Régimen permanente.
5. Respuesta ante un escalón. (con Simulink) 5.1. Dibujo de la respuesta. 5.2. Máximo de la respuesta. 5.3. Valor en Régimen permanente.
Gijón – Octubre 2006 17
EJERCICIO 2: Creación de un modelo de simulación
Ri
K u (t)i
u (t)m
M.
D.T.
I =cte.e
J
B
P (t)m
P (t)r
w(t)
i (t) i
u (t)c
Li
El sistema de la figura está compuesto por los siguientes elementos:
- Un rectificador controlado que alimenta a un motor CC con una tensión continua ui(t) proporcional a la tensión uc(t), con constante de proporcionalidad K.
- Un motor CC con corriente de excitación constante de parámetros: Ri, Li, cte. contraelectromotriz Kb y cte. de par del motor Kp.
- El conjunto rotor-eje del motor y de la D.T. tiene una inercia J y un coeficiente de rozamiento viscoso B (que se representan en la figura). En el extremo del eje existe un par resistente variable, pr(t), debido a los elementos mecánicos que mueve el motor y que no aparecen en la figura.
Modelo matemático del sistema:
ui(t) = K·uc(t)ui(t) = Ri·ii(t) + Li·dii(t)/dt + um(t)um(t) = Kb·w(t)pm(t) = Kp·ii(t)pm(t) = pr(t) + J·dw(t)/dt + B·w(t)
En transformadas de Laplace:
Ui(s) = K·Uc(s)Ui(s) = Ri·Ii(s) + Li·s·Ii(s) + Um(s)Um(s) = Kb·W(s)Pm(s) = Kp·Ii(s)Pm(s) = Pr(s) + J·s·W(s) + B·W(s)
Obtenga el valor de los parámetros de las ecuaciones sustituyendo convenientemente los dígitos de su D.N.I. en las expresiones siguientes:
D.N.I.: A B . C D E . F G HA B . C D E . F G H
K =1+AKb=0.2-0.01·B [V·s/rad]Kp=1+0.2·C [N·m/A]Ri=10-D [Ω]Li=0.01+0.02·(E+F) [H]J =10+G [Kg·m2]B =5–(0.1·H) [Kg·m2/s]
Por ejemplo:D.N.I.: 0 9 . 3 4 5 . 6 7 8
A B . C D E . F G H
K =1+0=1Kb=0.2-0.01·9=0.11 [V·s/rad]Kp=1+0.2·3=1.6 [N·m/A]Ri=10-4=6 [Ω]Li=0.01+0.02·(5+6)=0.23 [H]J =10+7=17 [Kg·m2]B =5–(0.1·8)=4.2 [Kg·m2/s]
Construir el modelo del sistema en Simulink considerando a uc(t) como entrada, pr(t) como perturbación y w(t) como salida.
Gijón – Octubre 2006 18
Incluir en el informe los siguientes datos y resultados:(Dibujar el diagrama de bloques del modelo en Simulink utilizado para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)
1. Apellidos, Nombre y DNI del alumno.
2. Dibujo del diagrama de bloques usado en las simulaciones.
3. Valores de las Constantes utilizadas (K, Kp, Li, ....).
4. Simular la respuesta del sistema a un escalón de cinco unidades en la entrada Uc(t). 4.1. Obtener el valor al que tiende la respuesta en régimen permanente.
4.2. Determinar la constante de tiempo T del sistema.
5. Añadir a la simulación el efecto de un escalón de cinco unidades en la perturbación, una vez que la respuesta al escalón del apartado 4 ha alcanzado el régimen permanente. 5.1. Dibujar aproximadamente la respuesta. 5.2. Obtener el valor al que tiende la respuesta en régimen permanente.
6. Simular la respuesta del sistema ante una entrada senoidal en Uc(t) de pulsación w=1 rad/s y amplitud 5. (Recuerde anular la perturbación introducida en el apartado 5) 6.1. Dibujar las senoides en régimen permanente. 6.2. Obtener el valor de la amplitud de la senoide de la salida una vez alcanzado el régimen
permanente. 6.3. Obtener la diferencia de fase entre la entrada y la salida una vez alcanzado el régimen
permanente.
Gijón – Octubre 2006 19
EJERCICIO 3: Estudio de la respuesta en frecuencia de un sistema y bucle cerrado
Construir una función de transferencia sustituyendo los dígitos ABCDEFGH con los números de su D.N.I., ajustados a la derecha y rellenando con un cero por la izquierda si es necesario:
DNI: . . 1AB*s+2CD-- --- --- G(s)= ----------------AB CDE FGH s3+1E*s2+5F*s+1GH
Por ejemplo:
DNI: 09.345.678 109*s+234-- --- --- G(s)= ----------------AB CDE FGH s3+15*s2+56*s+178
Incluir en el informe los siguientes datos y resultados:(Indicar todos los comandos utilizados para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)
1. Apellidos, Nombre y DNI del alumno.
2. Indicar la función de Transferencia G(s) creada.
3. Obtener ceros y polos del sistema G(s).
4. Dibujar el diagrama de Bode y obtener el valor del módulo (en decibelios) y la fase (en grados) de la respuesta en frecuencia para ω=5 rad/s de G(s).
5. Obtener el valor del módulo (en decibelios) en el pico de resonancia y la frecuencia de resonancia de G(s). (!ATENCION¡ Puede que el pico de resonancia no exista o no coincida con el valor máximo en módulo del diagrama de Bode. Indicar si suceden estas situaciones).
6. ¿Cuánto vale “Mr”?
7. Obtener la función de transferencia M(s) resultado de realimentar unitaria y negativavente a G(s)con K=1.
X(s)G(s)
+
_
Y(s)K
M(s)
8. Obtener los polos del sistema en bucle cerrado M(s) para K= 5.
9. Obtener los márgenes de ganancia y de fase y las frecuencias correspondientes a esos márgenes para G(s) (En algunos casos pueden ser infinito).
Gijón – Octubre 2006 20
EJERCICIO 4: Diseño de un regulador para un modelo de simulación
Se pretende diseñar un regulador para el sistema del ejercicio 2 cuando este se realimenta negativamente mediante una tacodinamo. La tacodinamo proporciona una tensión de salida de un voltio por cada 1.000 r.p.m. con una respuesta dinámica semejante a un sistema de primer orden con constante de tiempo T=0.1 segundos.
Sistema sin realimentación: (Obtener los valores de los parámetros como en el ejercicio 2)
W(s)G2(s)=
Pr(s)
+G1(s)=Uc(s) Li·s+Ri
J·Li·s2+(B·Li+J·Ri)·s+(Ri·B+Kp·Kb)Li·s+Ri
K·Kp_
Especificaciones para el regulador: Tiempo de establecimiento: ts ≤ 0.4 segundos Sobreoscilación: Mp ≤ 5%Anular el error de posición, ep, en régimen permanente.Eliminar el efecto de perturbaciones en el par pr(t) sobre el régimen permanente del sistema.
Sistema realimentado:
W(s)G2(s)=
H(s)=
Pr(s)
+G1(s)=Uc(s) Li·s+Ri
J·Li·s2+(B·Li+J·Ri)·s+(Ri·B+Kp·Kb)Li·s+Ri
K·KpR(s)
+
_
V(s)
T·s+1
Kt
_
Incluir en el informe los siguientes datos y resultados:(Dibujar el diagrama de bloques del modelo en Simulink utilizado para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)
1. Apellidos, Nombre y DNI del alumno.
2. Valores de las Constantes utilizadas (K, Kp, Li, ....) incluyendo las de la tacodinamo.
3. Regulador diseñado para el control incluyendo los cálculos realizados para obtenerlo. Utilizar a ser posible el criterio de la vertical para el diseño: si el ángulo de compensación obtenido para el regulador sale negativo cambiar la especificación de ts por ts ≤ 0.2 segundos y si sale mayor de 90ºcambiar por ts ≤ 1. Si persisten los problemas consulte con el tutor.
4. Dibujo del diagrama de bloques en bucle cerrado que incluye el regulador utilizado con Simulink.
5. Simular la respuesta del sistema a un escalón de cinco unidades en la entrada v(t). 5.1. Obtener aproximadamente el valor de la sobreoscilación Mp. 5.2. Obtener aproximadamente el valor del tiempo de pico tp. 5.3. Obtener el valor al que tiende la respuesta del sistema, w(t), en régimen permanente.
6. Simular el efecto de un escalón de 2.000 unidades en la perturbación pr(t) una vez que la respuesta anterior ha alcanzado el régimen permanente y dibujar la respuesta del sistema.
1
SIMULINK – MATLAB
CONTENIDO
1. ELEMENTOS BÁSICOS
2. EL MOTOR DC
3. SUBSISTEMAS
4. ECUACIONES DIFERENCIALES
5. SIMULACIÓN DE SISTEMAS
INTRODUCCIÓN
Simulink es una extensión de Matlab utilizado en el modelamiento y simulación de
sistemas. Para arrancar Simulink se puede hacer desde el prompt de Matlab
digitando el comando >>Simulink o utilizando el icono . Se abre la ventana
Simulink Library Browser como se indica abajo y se puede diagramar un nuevo
modelo activando el botón New Model , o sea el icono o de
2
Un modelo es un conjunto de bloques que representa un sistema y como archivo
tiene extensión *.mdl
1. ELEMENTOS BÁSICOS
Los elementos básicos son líneas y bloques. Los bloques están agrupados en:
Sources, Links, Discrete, Continuos, Math, etc., tal como aparecen en la ventana
anterior. Cada bloque tiene entradas y salida para realizar su interconexión. Por
ejemplo, haga clic en Discrete y luego clic en Discrete Transfer Fcn y arrastre el
bloque a la ventana en blanco. Si quiere modificar la función de transferencia del
bloque haga doble clic en él y digite los coeficientes del numerador y denominador
en la nueva ventana que aparece. Para la función 1/(z2 +2z +4) con tiempo de
muestreo de 1 seg, quedaría:
Para realizar el diagrama en bloques de un sistema se hace lo siguiente:
3
Lo primero es arrastrar los bloques a la página en blanco de forma que, Step es
la función paso o escalón que se obtiene de Sources, Scope es el osciloscopio
que se obtiene de Sinks, Transfer Fcn se obtiene de Continuos, Sum y Gain se
obtienen de Math. Modifique los bloques dando doble clic sobre cada uno de ellos
para cambiar sus parámetros o valores e interconéctelos.
Lo segundo es cambiar los nombres a los bloques y asignar las variables o
señales haciendo doble clic en el lugar en que se van a colocar y salvar el modelo
especificándole un nombre, por ejemplo ejem1.mdl
Por último se debe simular el sistema. Para ello se configura la señal de entrada,
en este caso la función paso. Dar doble clic y asignar los siguientes parámetros:
Step time=0, Inicial value=0, Final value=1, Sample time=0. Para simular el
sistema de control se escoge del menú o el icono .y luego
se hace doble clic en Scope para ver su respuesta o salida del sistema. Para
observar además la entrada se puede colocar otro Scope a la salida de Step y se
puede probar para varios pasos variando su amplitud, tiempo de inicio y tiempo de
4
iniciación del paso. Para observar mejor la respuesta se usa el botón Autoscale
(binoculares ) de la ventana del Scope. Si quiere observar mejor la
respuesta o parte de ella se pueden cambiar los parámetros de simulación,
Simulation Simulation parameters. Por ejemplo cambiar el Start time y el Stop
time y correr nuevamente la simulación.
2. EJEMPLO: MODELAR UN MOTOR DC
Un actuador común en sistemas de control es el motor DC. Provee directamente
movimiento rotatorio y acoplado con poleas o correas puede proveer movimiento
transnacional.
2.1 ECUACIONES DINÁMICAS
El circuito eléctrico de la armadura y el diagrama de cuerpo libre del rotor es
mostrado en la figura con sus ecuaciones dinámicas.
5
(1) Leyes de Newton
(2) Leyes de Kirchhoffs
Los parámetros físicos tienen los siguiente valores :
Momento de inercia del rotor : J = 0.01kg.m2/sg2
Rata de amortiguamiento del sistema mecánico: b = 0.1 N.m.sg
Constante de la fuerza electromotriz: Ke = Kt = 0.01 Nm/Amp
Resistencia eléctrica: R = 1 ohm
Inductancia eléctrica: L =0.5H
Fuente de voltaje de entrada: V
Posición angular: θ
Se asume que el rotor y el eje son rígidos
6
2.2 MODELADO DEL MOTOR EN VELOCIDAD
2.3 EXTRAER MODELO LINEAL
Para obtener la función de transferencia del motor primero se trasladan los
parámetros del motor al modelo creando un archivo en Matlab (*.m) de la siguiente
forma:
% VALORES DE LOS PARÁMETROS DEL MOTOR
J = 0.01;
b = 0.1;
Ke = 0.01;
7
Kt = 0.01;
R = 1;
L = 0.5;
Se ejecuta este archivo y se simula el modelo para una entrada de paso unitario
de valor V = 0.01, con los siguientes parámetros de simulación: Stop time = 3 sg.
Arranque la simulación y observe la salida (velocidad del motor).
Como segundo paso se debe obtener el modelo lineal de Matlab del motor. Para
esto, borre el bloque Scope y cámbielo por Out obtenido de la librería de
Signals&Systems. Haga lo mismo para Step cambiándolo por In de esta misma
librería. Los bloques In y Out definen la entrada y salida del sistema que le
gustaría extraer. Salve este modelo. El sistema quedará así:
Como tercero y último paso, después de desarrollado el modelo y salvarlo por
ejemplo con el nombre MotorDcVel.mdl se ejecutan los siguientes comandos:
8
% OBTENER EL MODELO LINEAL DEL SISTEMA
[num, den] = linmod('MotorDcVel')
Gps = tf(num, den)
La respuesta es :
3. SUBSISTEMAS
Abra una nueva ventana y arrastre de la librería Signals&Systems el bloque
SubSystem , haga doble clic en este bloque, abra el modelo MotorDcVel.mdl (el
que tiene In y Out como terminales) cópielo y péguelo en la nueva ventana de
subsistema anterior. Cierre ventanas y aparece una nueva con el bloque con los
terminales del subsistema creado. Déle el nombre MotorDcVel. Si a este bloque
de subsistema se le da doble clic aparece el modelo completo diseñado
anteriormente. Otra forma es señalar los bloques de interés, ir a menú Edit -->
create Subsytem
3.1 SISTEMA EN LAZO ABIERTO
Al subsistema creado que constituye la planta de un sistema de control se le va a
adicionar un controlador y obtendremos la función de transferencia en lazo abierto
y lazo cerrado.
9
% CONTROL DE UN MOTOR DC
[num, den]=linmod('ControlMotor')
Glazo_abierto = tf(num, den)
Respuesta:
3.2 SISTEMA EN LAZO CERRADO
% CONTROL DE UN MOTOR DC
[num, den]=linmod('ControlMotor')
Glazo_cerrado= tf(num, den)
Respuesta:
10
3.3 SISTEMA DISCRETO
DIAGRAMA EN SIMULINK
PROGRAMA MATLAB
% SISTEMA DISCRETO DISCRETO
T=0.1;
[num,den]=dlinmod('MotorDigital',T)
Glazo_cerradoz=tf(num,den,T)
Respuesta:
11
4. SOLUCIÓN DE ECUACIONES DIFERENCIALES
Ejemplo:
Resolver la siguiente ecuación diferencial:
yytytyyytydt
dy
dt
yd6'34''46'3''463
2
2
Diagrama Simulink:
Respuestas:
12
Ejemplo:
Comprobar la integración por Simulink.
13
5. SIMULACIÓN DE SISTEMAS
5.1 INTERCAMBIO DE MATLAB A SIMULINK
Para utilizar señale de Matlab a Simulink de la librerís Sources se utiliza el bloque
From Workspace.
14
Ejemplo: Resolver la ecuación y’’ + y = e t, y’(0) = 0, y(0) =3
El vector [ t x ] se ejecuta en Matlab en el workspace de la siguiente forma:
>> t = 0:0.001:0.999;
>> t = t’;
>> x = exp(t)
Al ejecutarse Simulink toma los datos entregados por Matlab. No olvidar colocar
condición inicial y(0) = 3 en el integrador.
5.2 INTERCAMBIO DE SIMULINK A MATLAB
Para enviar datos de Simulink a Matlab se utiliza de la librería Sinks el bloque To
Workspace.
Ejemplo:
Resolver la ecuación: f(t) = Mx’’ + Bx’ + Kx, M=1, B=1, K= 10, F(t) = 5
15
Diagrama Simulink:
En Matlab:
>> plot(t,y)
5.3 EJERCICIOS
Ejercicio1:
16
Si la entrada es una señal senoidal, encontrar las salidas referidas a vC y iL.
Ejercicio2:
Para el siguiente problema hallar la variación de h si el caudal normal Q es de 10
lit/min y en t=5 seg se aplica una perturbación de 2 lit/min. El valor de K=10, A= 2
m2.
hKtqdt
dhA )(
Diagrama Simulink:
17
EJERCICIO3: LA BOLA MAGNÉTICA
Ecuaciones:
iRVh
img
dt
hdm
dt
diL (2) )1(
2
2
2
Valores:
m=0.1 Kg; g=9.81; R=2 Ohm; L=0.02 H; =0.001
Diagrama simulink:
18
Controlador:
zeros=[-11.5+7.9i, -11.5-7.9i]
polos=[0 -1000]
ganancia=-3.3057e+004
Planta:
i(0) = 0; h(0)=0.05; h’(0)=0
19
20
EJERCICIO4: TANQUE DE AGUA
Ecuación del modelo:
habVdt
dhA
dt
dVol
Diagrama simulink:
21
Controlador:
Planta:
EJERCICIO5: MOVIMIENTO PARABÓLICO
22
Ecuaciones:
acelerado Movimiento ''
unforme Movimiento 0''
gy
x
Condiciones iniciales:
Vo=100 m/sg; = 30º
23
24
EJERCICIO6: PÉNDULO SIMPLE
Ecuación:
0''' wsenBLmL
Valores:
w (peso) = 2; L (longitud) = 0.6; B (amortiguación) = 0.08;
Condiciones iniciales: ’(0) = -2 rad/sg; (0) = /2
25
Diagrama simulink:
26
EJEMPLO: SISTEMA MECANICO
Parámetros:
m1=40; m2=60; k1=400; k2=400; b1=180; b2=220;
Ecuaciones dinámicas:
1)21()21(11
1)( bvvdtvvkdt
dvmtf
22221)12()12(12
20 vbdtvkbvvdtvvkdt
dvm
Ecuaciones de Laplace:
1)21()21(1
11)( bVVVVs
KsVmsF
2222
1)12()12(1
220 VbVs
kbVVVV
s
ksVm
27
Diagrama simulink:
EJEMPLO: SISTEMA TERMOQUÍMICO
Se desarrolla una reacción termoquímica en donde el reaccionante A se convierte
en un producto B.
Velocidad de reacción: r(t)= k c(t)
Constante de velocidad de reacción: k = 0,2 min-1
28
Concentración de la entrada: ci(t)
Para t= 0; ci(0)=1.25 lbmol/pie3
Volumen de la masa reaccionante: V= 5 litros
Flujo de entrada: F= 1 lt/min
Ecuación dinámica:
)()()()(
tKVctFctFcdt
tdcV i
)()()()(
tcKVFtFcdt
tdcV i
)()()(
tcKVF
Ftc
dt
tdc
KVF
Vi
Constante de tiempo:
KVF
V
Ganancia de estado estacionario:
KVF
FKe
Reemplazando valores: = 2.5 min; Ke = 0.5;
Condición inicial de la concentración: c(0)
0 = Fci(0) - Fc(0) - KVc(0)
Reemplazando valores: c(0) = 0.625 lbmol/pie3
29
Programa en Matlab:
%Entrada al paso. Programa pplineal.m
function dy=pplineal(t,y)
global K X tau
dy=(K*X-y)/tau;
% Entrada rampa. Programa rplineal.m
function dy=rplineal(t,y)
global K r tau
dy=(K*r*t-y)/tau;
% Entrada senoidal. Programa splineal.m
function dy=splineal(t,y)
global K tau A w
dy=(K*A*sin(w*t)-y)/tau;
% Programa principal
F=1;
V=5;
K=0.2;
ci0=1.25;
c0=solve('F*ci0-F*c0-K*V*c0=0');
c0=eval(c0)
%Constante de tiempo
tau=V/(F+K*V)
% tau=2.5 minutos
%Ganancia en estado estacionario
Ke=F/(F+K*V)
% Ke=0.5
30
global R K tau X r A w Rango Inicio
Rango=input('Tiempo de simulacion=');
Inicio=input('Condiciones iniciales=');
N=input('ESCRIBA 1=PASO, 2=RAMPA, 3=SENO: ');
disp(' ')
switch N
case 1
X=input('Valor del paso=');
[t,y]=ode45('pplineal',Rango,Inicio);
plot(t,y)
case 2
r=input('valor pendiente de la rampa=');
[t,y]=ode45('rplineal',Rango,Inicio);
plot(t,r*t,t,y/K,'r')
case 3
A=input('Amplitud del seno=');
w=input('Frecuencia del seno=');
[t,y]=ode45('splineal',Rango,Inicio);
disp('Amplitud del perfil de la respuesta')
K*A/sqrt(1+(w*tau)^2)
disp('Fase de la respuesta respecto a la entrada')
atan(-w*tau)
plot(t,A*sin(w*t),t,y,'r')
end
31
Programa en Simulink:
EJEMPLO: SISTEMA HIDRAULICO
% HIDRAULICO UNA ETAPA
C1=3; R1=1; C2=10; R2=2;
qi=2;
keyboard
plot(t,qo)
title('HIDRAULICO')
grid
32
pause
n=1;
while n==1
T=input('Entre tiempo: ')
delta=input('Entre valor delta: ')
i=find(t<=(T+delta)&t>=(T-delta));
tiempo=t(i)
caudal_salida=qo(i)
n=input('Entre 1 para seguir y 0 para parar: ')
end
EJEMPLO: SISTEMA ELÉCTRICO
% CIRCUITO RC DE DOS ETAPAS
R1=10e3; R2=20e3; C1=1e-6; C2=10e-6;
ei=10;
keyboard
plot(t,eo)
title('CIRCUITO RC')
grid
33
pause
n=1;
while n==1
T=input('Entre tiempo: ')
delta=input('Entre valor de delta: ')
i=find(t<=(T+delta)&t>=(T-delta));
tiempo=t(i)
voltaje_salida=eo(i)
n=input('Entre 1 para seguir y 0 para parar: ')
end
INTRODUCCION A SIMULINK
Matlab (Matrix Laboratory) es un sistema basado en matrices para realizar cálculos matemáticos y de ingeniería. Entre las múltiples herramientas que presenta este programa se encuentra Simulink que es una librería de MATLAB que permite la simulación de procesos mediante diagramas de bloques.
1. Acceso a la librería de bloques de Simulink:
Para acceder a la librería de Simulink se debe abrir inicialmente la ventana principal de Matlab (Matlab Command Window). En esta se puede ejecutar el comando “simulink” o hacer clic en el símbolo correspondiente en la barra de herramientas en la parte superior de esta ventana.
Al hacer esto aparecerá el listado de las librerías correspondientes a simulink, donde se podrá tener acceso a todos los bloques que brinda esta herramienta. Para abrir una nueva hoja de trabajo se deberá acceder a través de: File à New à Model, o hacer clic en el símbolo de “hoja nueva”.
Figura 1. Simulink Library Browser
La librería “Simulink” contiene los bloques necesarios para simular un sistema mediante técnicas convencionales, las demás librerías son herramientas adicionales que se utilizan para aplicaciones específicas de control avanzado. En la Figura 2 se muestra el contenido de la librería Simulink.
Figura 2. Librería Simulink. En la figura 3 se pueden observar los bloques mas utilizados en la simulación de procesos. Estos se encuentran en hacer clic en el signo (+) de cada librería. Pueden ser utilizados al hacer clic sobre ellos y arrastrándolos sobre la hoja de trabajo. Igualmente en la tabla 1 se pueden observar una descripción mas detalladas de algunas de estas funciones.
Figura 3. Bloques mas utilizados en la librería Simulink
Tabla 1. Detalles de algunos bloques de la librería Simulink.
Bloque Función Librería Parámetros requeridos
Constante Asigna un valor constante a la entrada.
Sources Valor de la constante.
Entrada escalón Introduce un escalón de magnitud específica en un tiempo dado.
Sources Tiempo del escalón Valor inicial del escalón, Valor Final del Escalón
Entrada Rampa Introduce una rampa en un tiempo especificado.
Sources Tiempo de la rampa, pendiente
Entrada Senoidal Introduce una señal senoidal específicada por el usuario.
Sources Amplitud de la onda, Fase.
Workspace Almacena datos de la señal que llega al bloque y la convierte en vector. Si se conecta al reloj se almacena el vector tiempo.
Sinks Nombre y tipo de la variable (Save format:
Matrix)
Scope Grafica la señal que se introduzca con respecto al tiempo.
Sinks Entradas
XYgraph Grafica la entrada superior en el eje x y la inferior en el eje y
Sinks Rango de los ejes
Función de Transferencia
Representa la función de transferencia a lazo abierto.
Contin. Numerador y Denominador de la FT
Integrador Integra una señal en función del tiempo
Contin. Valor inicial desde el cual se va a integrar
Retardo de transporte Introduce un retardo en el tiempo en el cual aparece la señal.
Contin. Valor del retardo (Debe ser un número positivo)
Ganancia Multiplica la señal por cualquier valor de ganancia que se introduzca.
Math Valor de la ganancia
Sumador Suma dos señales. Math Número de entradas a sumar
Multiplicador Multiplica dos señales. Math Número de entradas a multiplicar
Matlab-Function Aplica cualquier función matemática conocida por Matlab a la señal.
Functions and Tables
Función a utilizar
PID Es un controlador donde se puede introducir una parte proporcional, una integral y una derivativa
Blocksets & Toolbox.:
Simulink-extras: Aditional linear
Proporcional: K, Integral: K/Ti, Derivativo: K.Td
Mux Permite representar dos señales distintas en una misma gráfica.
Signals &System. Número de entradas
Obs. Colocando el nombre del bloque de interés en el buscador (Simulink library browser), se puede ubicar directamente en la librería de bloques.
Notas sobre el uso de Matlab.
- Los bloques pueden ser movidos al arrastrase con el botón izquierdo del mouse y pueden ser copiados al hacer clic sobre ellos con el botón izquierdo del mouse y arrastrando la copia creada.
- Los bloques se deben unir mediante flechas. Esto se logra haciendo clic en la flecha de salida
del bloque deseado y conectándola (sin soltar el botón), a la flecha del bloque que se desea unir.
- Para que las modificaciones en el programa hagan efecto este deberá ser grabado después de realizar los cambios.
- Al hacer clic con el botón derecho sobre una señal, se podrá obtener una “línea” de esta señal
para llevarla o conectarla a un bloque deseado.
- Al barrer el mouse sobre un grupo de bloques se podrán mover estos a la vez y copiarlos en grupo.
- El “save format” de los “workspace” debe ser colocado en “array” para poder “graficar” las
variables deseadas posteriormente. 2. Ejemplos de Uso de Simulink
Modelos Matemáticos no Linealizados. a) Simular la siguiente ecuación diferencial y encontrar su respuesta ante una entrada escalón.
1)(*60
exp5)(
=
−
+ tXTdt
xd Donde, X0 = 0 en T=500
Solución:
- Seleccionar los bloques necesarios para representar el modelo y llevarlos a la hoja de trabajo. Para ello debe buscar los bloques en las librerías correspondientes (Ver tabla 1 y figuras 2 y 3), seleccionar cada uno haciendo "click" sobre él para marcarlo y arrastrarlo con el "mouse" hasta la ventana.
Figura 4. Bloques necesarios para la representación de la ecuación.
- Armar el modelo. Las ecuaciones diferenciales pueden representarse en bloques de "Simulink" como función del tiempo sin linealizarlas ni llevarlas al dominio de Laplace. En primer lugar, se debe despejar la derivada temporal para expresarla en función de los demás términos de la ecuación:
)(*60
exp51)(
tXTdt
xd
−
−= (1)
Luego, se debe establecer qué valores en la ecuación son constantes y cuáles son función del tiempo, en este caso, la conversión X depende del tiempo, pero la temperatura T es constante.
El primer término del lado derecho de la ecuación (1) se puede representar como un escalón unitario o como una entrada constante.
En el segundo término [5exp(-60/T).X(t)], la temperatura se representa, igualmente, como una entrada escalón o como una entrada constante, luego se invierte con un bloque Matlab Function, donde se especifica la función 1/u, se multiplica por una ganancia de –60 con un bloque Gain, y se introduce nuevamente en una Matlab Función para obtener la exponencial, que va a ser multiplicada por 5 con otro bloque Gain, como se muestra en la figura 5.
La variable X(t) no se conoce porque es el resultado de integrar el lado derecho de la ecuación, esta variable debe multiplicarse con la exponencial con un bloque producto para formar el segundo término de la ecuación diferencial, luego ambos términos se combinan con un bloque Sum para obtener la ecuación (dX(t)/dt) completa que pasa por un integrador para obtener la variable X(t), que se realimenta al bloque producto.
Se debe colocar igualmente un bloque de reloj para que el simulador contabilice el tiempo. Todas las señales que se deseen guardar o ser posteriormente llamadas para graficar, deben ser alimentadas a un bloque workspace (Save format : Array)
Figura 5. Diagrama de bloques de la simulación de la ecuación diferencial.
Haciendo clic en cada bloque se pueden cambiar sus parámetros y sus nombres. En este caso se colocan los siguientes:
Entrada Escalón (T) Integrador Matlab Function (1/T) Matlab Function Exp(E/KT)
Step Time = 0 Valor Inicial = 500 Valor Final = 500
Inicial Value = 0 Fuction = 1/u Fuction = exp
De esta forma tenemos:
Figura 6. Diagrama de Bloques con sus parámetros.
- A continuación se abre el menú Simulation à Simulation Parameters y se modifica el tiempo de parada. En este caso se pondrá 8 seg. Posteriormente se simula la ecuación diferencial apretando el botón o símbolo de “play” en la parte superior de la pantalla y se espera a que la maquina realice el calculo (indicado en la parte inferior derecha de la ventana)
- Después de realizar la simulación se regresa a la ventana principal de Matlab y se grafican
los resultados colocando el comando: plot(T,X) y se obtiene:
Figura 7. Simulación de la respuesta de la ecuación diferencial.
Para observar la respuesta del sistema ante una perturbación se coloca:
Entrada Escalón (T)
Step Time = 4
Valor Inicial = 500
Valor Final = 1000
Para que el simulador acepte el cambio, el archivo debe ser guardado (no debe aparecer un “asterisco” al lado del nombre del programa en la parte superior de la ventana). Después de simular y graficar, se obtiene:
Figura 8. Respuesta del sistema de la ecuación diferencial ante entrada escalón.
Se observa la perturbación del sistema en el tiempo = 4 seg.
Ecuaciones Diferenciales Acopladas
b) Simular el siguiente sistema de ecuaciones diferenciales.
)(*)1( TaTBFoToTAdt
dT−−−= A = 0.08 B = 0.05
)(*)2( TTaDFpToTaCdt
dTa−+−= C = 0.5 D = 0.01
Donde Fo, To1 y To son posibles perturbaciones cuyos valores son:
Fo = 0.01 m3/min, To1 = 280K, To2 = 350K
Solución:
- Los Bloques seleccionados son:
Figura 9. Bloques usados para la representación del sistema.
- Armar el modelo. Las ecuaciones diferenciales se "escriben en bloques de Simulink" como función del tiempo sin realizar ninguna modificación de las mismas para linealizarlas o llevarlas al dominio de Laplace.
Figura 10. Diagrama de bloques del proceso con sus parámetros.
Los parámetros iniciales de los bloques y simulación serán:
Entrada Escalón (T01)
Entrada Escalón (T02) Entrada Escalón (Fo) Integrador (T)
Integrador (Ta)
Stop Time
Step Time = 0 Valor Inicial = 280 Valor Final = 280
Step Time = 0 Valor Inicial = 350 Valor Final = 350
Step Time = 0 Valor Inicial = 0.01 Valor Final = 0.01
Initial Value = 280
Initial Value = 350
200
- Después de Simular y Graficar usando: Plot(t,[T,Ta]) se obtiene,
Figura 11. Simulación del sistema de ecuaciones diferenciales
Funciones de transferencia a lazo abierto y lazo cerrado
c) Dada la siguiente función de trasferencia obtenga la respuesta del sistema a lazo abierto ante una entrada escalón.
24
12 ++
=ss
FT
Solución:
- Los Bloques seleccionados son:
Figura 12. Bloques usados para la representación del sistema.
- Armar el modelo.
Figura 13. Diagrama de bloques del proceso con sus parámetros.
Los parámetros iniciales de los bloques y simulación serán:
Entrada Escalón Función de
Trasferencia Parámetros Simulación
Step Time = 0 Valor Inicial = 0 Valor Final = 1
Numerador = [1] Denominador = [1 4 2]
Stop Time = 20
- Después de Simular y Graficar usando: Plot(T,X) se obtiene,
Figura 14. Respuesta temporal de la función de transferencia. d) Compare la respuesta a lazo cerrado obtenida para la función de transferencia del ejemplo
anterior con la respuesta obtenida al aumentar 5 veces la ganancia y con la respuesta obtenida al usar un controlador de función de transferencia:
+=
TiKGc
111 Donde, K = 1 y Ti = 0.5
Solución:
- Los Bloques seleccionados son:
Figura 15. Bloques usados para la representación del sistema.
- Armar el modelo.
Figura 16. Diagrama de bloques del proceso con sus parámetros.
Los parámetros de los bloques son:
Entrada Escalón Ganancia Mux PID Stop Time
Step Time = 0 Valor Inicial = 0 Valor Final = 1
Gain = 5 Number of inputs
= 3
Proporcional = 1 Integral = 1/0.5 Derivative = 0
20
- Después de Simular y Graficar usando: Plot(T,s) se obtiene,
Figura 17. Respuesta temporal de la función de transferencia.