Tutorial Simulink 2

163
Complementos de Procesado de Señal y Comunicaciones Máster en Sistemas Multimedia Introducción a Matlab y Simulink Javier Ramírez Pérez de Inestrosa Dpto. 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

Transcript of Tutorial Simulink 2

Page 1: Tutorial Simulink 2

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

Page 2: Tutorial Simulink 2

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.

Page 3: Tutorial Simulink 2

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)

Page 4: Tutorial Simulink 2

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

Page 5: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 5

El entorno de Matlab

Page 6: Tutorial Simulink 2

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.

Page 7: Tutorial Simulink 2

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.

Page 8: Tutorial Simulink 2

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.

Page 9: Tutorial Simulink 2

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

Page 10: Tutorial Simulink 2

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.

Page 11: Tutorial Simulink 2

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.

Page 12: Tutorial Simulink 2

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

Page 13: Tutorial Simulink 2

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

Page 14: Tutorial Simulink 2

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!!

Page 15: Tutorial Simulink 2

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.

Page 16: Tutorial Simulink 2

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 (“^”).

Page 17: Tutorial Simulink 2

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

Page 18: Tutorial Simulink 2

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.

Page 19: Tutorial Simulink 2

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).

Page 20: Tutorial Simulink 2

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.

Page 21: Tutorial Simulink 2

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.

Page 22: Tutorial Simulink 2

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.

Page 23: Tutorial Simulink 2

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

Page 24: Tutorial Simulink 2

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)

Page 25: Tutorial Simulink 2

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.

Page 26: Tutorial Simulink 2

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.

Page 27: Tutorial Simulink 2

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;

Page 28: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 28

Resultado:

Page 29: Tutorial Simulink 2

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;

Page 30: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 30

Resultado

Page 31: Tutorial Simulink 2

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);

Page 32: Tutorial Simulink 2

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

Page 33: Tutorial Simulink 2

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.

Page 34: Tutorial Simulink 2

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;

Page 35: Tutorial Simulink 2

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

Page 36: Tutorial Simulink 2

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

Page 37: Tutorial Simulink 2

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

Page 38: Tutorial Simulink 2

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

Page 39: Tutorial Simulink 2

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

Page 40: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 40

Bucles

Condición

Sentencias

false

true

Condición

Sentencias

true

false

Page 41: Tutorial Simulink 2

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

Page 42: Tutorial Simulink 2

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

Page 43: Tutorial Simulink 2

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

Page 44: Tutorial Simulink 2

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

Page 45: Tutorial Simulink 2

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.

Page 46: Tutorial Simulink 2

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)

Page 47: Tutorial Simulink 2

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).

Page 48: Tutorial Simulink 2

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

Page 49: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 49

Diseño y análisis de filtros (fdatool)

Page 50: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 50

Signal Processing Tool (SPTool)

Page 51: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 51

Signal Processing Tool (SPTool)

Page 52: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 52

Signal Processing Tool (SPTool)

Page 53: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 53

Signal Processing Tool (SPTool)

Page 54: Tutorial Simulink 2

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

Page 55: Tutorial Simulink 2

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

Page 56: Tutorial Simulink 2

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.

Page 57: Tutorial Simulink 2

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

Page 58: Tutorial Simulink 2

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);

Page 59: Tutorial Simulink 2

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

Page 60: Tutorial Simulink 2

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

Page 61: Tutorial Simulink 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

Page 62: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 62

Modulación analógica y digital

Page 63: Tutorial Simulink 2

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.

Page 64: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 64

Modulación/demodulación digital

Page 65: Tutorial Simulink 2

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);

Page 66: Tutorial Simulink 2

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.

Page 67: Tutorial Simulink 2

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

Page 68: Tutorial Simulink 2

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(...)

Page 69: Tutorial Simulink 2

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)

Page 70: Tutorial Simulink 2

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.

Page 71: Tutorial Simulink 2

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).

Page 72: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 72

Entorno de trabajo

Page 73: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 73

Construcción del diagrama de bloques

Page 74: Tutorial Simulink 2

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

Page 75: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 75

Ejemplo

Page 76: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 76

Simulación

Page 77: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 77

Análisis/síntesis LPC de la señal de voz

Page 78: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 78

Estimación espectral

Page 79: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 79

Resultado de la simulación

Page 80: Tutorial Simulink 2

Introducción a Matlab y SimulinkJavier Ramírez 80

Sistema de comunicación digital

8-PSK (Gray)

Page 81: Tutorial Simulink 2

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

Page 82: Tutorial Simulink 2

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

Page 83: Tutorial Simulink 2

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

Page 84: Tutorial Simulink 2

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

Page 85: Tutorial Simulink 2

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

Page 86: Tutorial Simulink 2

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

Page 87: Tutorial Simulink 2

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

Page 88: Tutorial Simulink 2

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

Page 89: Tutorial Simulink 2

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

Page 90: Tutorial Simulink 2

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

Page 91: Tutorial Simulink 2

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

Page 92: Tutorial Simulink 2

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

Page 93: Tutorial Simulink 2

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

Page 94: Tutorial Simulink 2

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

Page 95: Tutorial Simulink 2

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

Page 96: Tutorial Simulink 2

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

Page 97: Tutorial Simulink 2

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

Page 98: Tutorial Simulink 2

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

Page 99: Tutorial Simulink 2

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

Page 100: Tutorial Simulink 2

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

Page 101: Tutorial Simulink 2

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:

Page 102: Tutorial Simulink 2

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

Page 103: Tutorial Simulink 2

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.

Page 104: Tutorial Simulink 2

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.

Page 105: Tutorial Simulink 2

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.

Page 106: Tutorial Simulink 2

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.

Page 107: Tutorial Simulink 2

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

Page 108: Tutorial Simulink 2

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.

Page 109: Tutorial Simulink 2

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

Page 110: Tutorial Simulink 2

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

Page 111: Tutorial Simulink 2

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º

Page 112: Tutorial Simulink 2

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”.

Page 113: Tutorial Simulink 2

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

Page 114: Tutorial Simulink 2

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.

Page 115: Tutorial Simulink 2

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.

Page 116: Tutorial Simulink 2

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.

Page 117: Tutorial Simulink 2

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).

Page 118: Tutorial Simulink 2

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.

Page 119: Tutorial Simulink 2

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

Page 120: Tutorial Simulink 2

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:

Page 121: Tutorial Simulink 2

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

Page 122: Tutorial Simulink 2

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.

Page 123: Tutorial Simulink 2

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

Page 124: Tutorial Simulink 2

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;

Page 125: Tutorial Simulink 2

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:

Page 126: Tutorial Simulink 2

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.

Page 127: Tutorial Simulink 2

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:

Page 128: Tutorial Simulink 2

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:

Page 129: Tutorial Simulink 2

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:

Page 130: Tutorial Simulink 2

12

Ejemplo:

Comprobar la integración por Simulink.

Page 131: Tutorial Simulink 2

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.

Page 132: Tutorial Simulink 2

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

Page 133: Tutorial Simulink 2

15

Diagrama Simulink:

En Matlab:

>> plot(t,y)

5.3 EJERCICIOS

Ejercicio1:

Page 134: Tutorial Simulink 2

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:

Page 135: Tutorial Simulink 2

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:

Page 136: Tutorial Simulink 2

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

Page 137: Tutorial Simulink 2

19

Page 138: Tutorial Simulink 2

20

EJERCICIO4: TANQUE DE AGUA

Ecuación del modelo:

habVdt

dhA

dt

dVol

Diagrama simulink:

Page 139: Tutorial Simulink 2

21

Controlador:

Planta:

EJERCICIO5: MOVIMIENTO PARABÓLICO

Page 140: Tutorial Simulink 2

22

Ecuaciones:

acelerado Movimiento ''

unforme Movimiento 0''

gy

x

Condiciones iniciales:

Vo=100 m/sg; = 30º

Page 141: Tutorial Simulink 2

23

Page 142: Tutorial Simulink 2

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

Page 143: Tutorial Simulink 2

25

Diagrama simulink:

Page 144: Tutorial Simulink 2

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

Page 145: Tutorial Simulink 2

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

Page 146: Tutorial Simulink 2

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

Page 147: Tutorial Simulink 2

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

Page 148: Tutorial Simulink 2

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

Page 149: Tutorial Simulink 2

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

Page 150: Tutorial Simulink 2

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

Page 151: Tutorial Simulink 2

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

Page 152: Tutorial Simulink 2

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.

Page 153: Tutorial Simulink 2

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

Page 154: Tutorial Simulink 2

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

Page 155: Tutorial Simulink 2

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.

Page 156: Tutorial Simulink 2

- 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

Page 157: Tutorial Simulink 2

De esta forma tenemos:

Figura 6. Diagrama de Bloques con sus parámetros.

Page 158: Tutorial Simulink 2

- 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:

Page 159: Tutorial Simulink 2

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.

Page 160: Tutorial Simulink 2

- 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

Page 161: Tutorial Simulink 2

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

Page 162: Tutorial Simulink 2

- 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.

Page 163: Tutorial Simulink 2

- 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.