Documente Academic
Documente Profesional
Documente Cultură
ÁREA DE AUTOMATIZACIÓN
CONTROL AUTOMÁTICO
LABORATORIO Nº 1
LIMA, 2019
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
LABORATORIO No1
OBJETIVOS
INTRODUCCIÓN AL MATLAB
Funcionalidades básicas:
- Cálculo matemático.
- Cálculo matricial.
- Programación y desarrollo de algoritmos.
- Desarrollo e implementación de aplicaciones.
- Gráficos científicos y de ingeniería.
- Modelamiento, simulación y diseño de prototipos.
- Análisis de datos, exploración y visualización.
Otros toolboxes:
- Math, Statistics and Optimization.
- Signal Processing and Communications.
- Image Processing and Computer Vision.
- Computational Finance.
- Parallel Computing, otros.
2
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
3
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Entero
Real
Complejo
Carácter
>> pepe = 7
pepe =
7
Esta sentencia crea la variable entera pepe y le asigna el valor 7. Matlab muestra en
pantalla el resultado de cada operación. Si no se quiere visualizar el resultado, basta
poner un punto y coma después de cada sentencia:
>> pepe = 7;
4
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Todas las variables en Matlab son consideradas matrices. Las posibilidades que
utilizaremos son:
Empecemos ingresando una matriz como una lista de sus elementos. Se sigue las
siguientes reglas:
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
Como puede apreciarse en el ejemplo, los distintos elementos de una fila se separan
mediante espacios (o comas) y las distintas filas se separan mediante puntos y coma.
5
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
La Tabla 1 resume los comandos y símbolos especiales para gestionar una sesión de
trabajo.
Comando Descripción
clc Limpia la ventana de comandos
close all Cierra todas las ventanas que muestren gráficos.
clear Remueve todas las variables de memoria
clear var1 var2 Remueve las variables var1 y var2 de memoria
exist(‘name’) Determina si existe una variable con el nombre name
quit Detiene la ejecución del Matlab
who Lista las variables en memoria
whos Lista las variables y tamaños e indica si tienen parte
imaginaria
: Dos puntos, genera un arreglo con elementos
igualmente especiados
, Coma, separa elementos de un arreglo
; Punto y coma, suprime la impresión en pantalla;
también denota una nueva fila en un arreglo
… Tres puntos, permite continuar una línea
Si se necesita escribir una línea larga, se pueden usar tres puntos, por ejemplo:
Usar las teclas de desplazamiento (flechas), teclas Tab y Ctrl para rellamar, editar y
reusar funciones y variables tipeadas previamente. Por ejemplo, si se escribe la siguiente
línea erróneamente:
>>volumen = 1+sqr(5)
Matlab responde con un mensaje de error porque se escribió mal sqrt. En lugar de
teclear toda la línea, presionar la tecla de desplazamiento hacia arriba (↑) una vez para
mostrar la línea tecleada previamente. Presionar la tecla de desplazamiento hacia la
izquierda (←) varias veces para mover el cursor y agregar la letra t faltante, luego
presionar Enter. El uso repetido de la tecla de desplazamiento hacia arriba permite
visualizar las líneas tecleadas con anterioridad.
6
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
6. Manejo de matrices.-
Nota: ans es la variable por defecto donde Matlab guarda cualquier resultado; si
hubiéramos deseado utilizar otra variable deberíamos haberlo especificado:
» k = A(1,3)
k =
3
También se puede acceder a toda una fila o toda una columna, utilizando el
operador dos puntos. Este primer comando muestra todos los elementos de la
fila 2:
» A(2,:)
ans =
4 5 6
O bien a grupos de filas y/o columnas: Este comando muestra los elementos de
las filas 1 hasta la 2 y de las columnas 2 hasta la 3:
» A(1:2,2:3)
ans =
2 3
5 6
7
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Matlab ofrece una serie de operadores aritméticos válidos tanto para cálculo matricial
como para cálculo escalar:
Suma: +
Resta: -
Producto: *
División: /
Transpuesta: ‘
Potencia: ^
» A = [1 2; 3 4]
A =
1 2
3 4
» B = [2 4; 6 8]
B =
2 4
6 8
» C = A*B % producto matricial
C =
14 20
30 44
» D = A.*B % el punto indica operación elemento a elemento
D =
2 8
18 32
Además de los operadores comentados, existen una serie de funciones muy útiles en
cálculo y generación de matrices:
8
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Generación de matrices:
Manejo de matrices:
Ejemplos.-
» A = [1 2; 3 4]
A =
1 2
3 4
» B = inv(A)
B =
-2.0000 1.0000
1.5000 -0.5000
» A = zeros(1,4)
A =
0 0 0 0
» B = ones(2,3)
B =
1 1 1
1 1 1
9
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Podemos crear cualquier vector creciente o decreciente que deseemos. Esta operación
será bastante útil para formar bases de tiempo sobre las que se evaluará el valor de
funciones.
9. Manejo de polinomios.-
Matlab puede manejar muy bien los polinomios al representarlos mediante vectores.
Los coeficientes de un polinomio son los elementos del vector, en orden descendente de
potencias. Si queremos calcular las raíces del polinomio a continuación:
simplemente ingresamos:
>>p=[3 0 5 3 2 10];
>>roots(p)
10
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
>>roots(p)
>>q=[ 1 6 11 6];
>>roots(q)
>>pq=conv(p,q)
>>roots(pq)
Muchas funciones que hasta ahora se han usado, tales como sqrt y sin son
funciones incorporadas del Matlab. La Tabla 2 lista algunas de las funciones más
usadas. La creaciones funciones definidas por el usuario es vista al detalle en el ítem 16.
Si se desea guardar una sesión de Matlab para uso posterior, se deben usar los
comandos save y load. Teclear save hace que el Matlab guarde las variables de la
ventana de variables, esto es los nombres de las variables, sus tamaños, y sus valores, en
un archivo binario llamado matlab.mat, que el Matlab puede leer. Para recuperar las
variables de la ventana de variables, teclear load. Luego se puede continuar la sesión
como anteriormente.
Para guardar las variables de la ventana de variables con otro nombre, teclear save
‘nombre de archivo’. Si el archivo guardado contiene las variables A, B y C,
luego cargando el archivo con load ‘nombre de archivo’ se posicionan
dichas variables en la ventana de comandos, y de existir algunas variables con nombres
similares, éstas son reemplazadas.
Para guardar solo unas cuantas variables, digamos var1 y var2, teclear save
‘nombre de archivo’ var1 var2. Para recuperar var1 y var2 solo es
necesario teclear load ‘nombre de archivo’.
11
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Con la opción File->New->Script o bien con el icono New script (Ctrl+N) abrir el
Editor/Depurador de código Matlab, ver Figura 2. Tipear en el archivo abierto lo
siguiente:
% Program Example_1.m
% This program computes the cosine of
% the square root and displays the result.
x = sqrt(13:3:25);
y = cos(x)
12
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Recordar también que un script no puede tener un nombre con espacios ni guiones
medios.
Ejemplo:
La creación de una función de Matlab se verá con detalle en el ítem 16, Creación de
funciones definidas por el usuario.
14
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Bucles:
if expresión
sentencias
elseif expresión
sentencias
elseif expresión
sentencias
else
sentencias
end
Deseamos crear una función de Matlab que, a partir de una matriz dada, genere una
matriz cuadrada añadiendo filas o columnas de ceros, según sea necesario. La función
se llamará cuadra y se guardará en el archivo cuadra.m (mismo nombre que el nombre
de la función creada). Con la opción File->New->Function se abre el editor/depurador
de código Matlab, similar a la Figura 2, pero que ya trae embebida la notación
correspondiente, con las palabras claves: function y end.
15
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
if x>y
b(:,y+1:x)=0; %añade columnas
elseif y>x
b(x+1:y,:) =0; %añade filas
end
function b = inversa(a)
16
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Algunos de los comandos para dibujar gráficos bidimensionales son los siguientes:
Dibujo de gráficas:
clear all
clc
%Definiendo los vectores de tiempo y las
%funciones de seno y coseno.
t=0:0.05:10;
y=sin(t);
z=cos(t);
%Graficando en una sola grafica ambas %curvas
figure(1)
plot(t,y,'o',t,z,'x')
grid
title('Graficas del seno y
coseno')
xlabel('Seg')
legend('y=seno(t)','z=coseno(t)')
%Graficando en una sola ventana las 2 %curvas
pero en diferentes
graficas
figure(2)
subplot(211)
plot(t,y)
title('Grafica del seno')
xlabel('seg')
ylabel('y=sin(t)')
Observe que el vector t es una partición del dominio 0≤ t ≤ 10 con paso 0.05, mientras
que y, z son vectores que dan los valores del seno y coseno en los puntos de partición.
El programa anterior nos manda a graficar dos funciones trigonométricas, las cuales
podemos verlas en las gráficas de la Figura 3.
18
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
19
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
close all
clear all
clc
[X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X.* exp(-X.^2 - Y.^2);
mesh(X, Y, Z)
20
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
close all
clear all
clc
T = 0.05; %constante de tiempo [s]
omega = logspace(0,8,100); %vector de frecuencias [rad/s]
H_LP = (T*j*omega+1).^(-1); %filtro pasa-baja
H_HP = 1-H_LP; %filtro pasa-alta
pasa_baja=tf([1],[0.05 1]);
pasa_alta=1-pasa_baja;
bode(pasa_baja,'b-',pasa_alta,'r--');
grid on;
23
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
25
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Matlab cuenta con un amplio grupo de funciones que resultan muy útiles tanto para el
análisis de sistemas lineales (y no lineales) como para el diseño de sistemas de control.
Muchas de las tareas de análisis y diseño asociadas a dichos sistemas implican
operaciones de matrices, aritmética de números complejos, determinación de raíces,
conversiones de modelos y ploteo de funciones complicadas. Matlab fue diseñado para
facilitar la realización de muchas de estas operaciones.
1. Fundamentos.-
Dado que los sistemas LTI pueden ser representados usando modelos en la forma de
funciones de transferencia o ecuaciones de espacio de estados, Matlab trabaja con
dichos modelos, haciendo posible el empleo de técnicas tanto clásicas como modernas
en el análisis y diseño de sistemas de control. Cualquiera de estas formas de modelos se
puede expresar en forma de tiempo continuo (analógicas) o de tiempo discreto
(digitales). Las funciones de transferencia se pueden expresar como un cociente de
polinomios o una de sus dos formas factorizadas: cero-polo-ganancia o fracciones
parciales. Los modelos de sistemas de la forma espacio estados son idóneos para Matlab
porque son una expresión basada en matrices.
Para ilustrar las diversas formas en las que podemos formular modelos, usaremos el
ejemplo clásico de un sistema resorte-masa-amortiguador, el cual se muestra en la
Figura 7. En este sistema tres fuerzas actúan sobre una masa m: una fuerza de entrada
que depende del tiempo u(t), un resorte con constante de rigidez k y un amortiguador
viscoso con constante de amortiguación b. La posición de la masa en función del tiempo
26
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
El análisis de los sistemas LTI con frecuencia implica determinar ciertas propiedades
dinámicas como estabilidad y respuesta en frecuencia, que no son fáciles de determinar
usando análisis en el dominio del tiempo. Para estos análisis, muchas veces hacemos
uso de la transformada de Laplace, así se aplica la transformada de Laplace a la
ecuación en el dominio de tiempo para luego poder analizar el sistema en el dominio de
la frecuencia.
27
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Con frecuencia se usan diagramas de bloques para mostrar la relación entre las
funciones de transferencia y las variables de entrada y salida de un sistema.
También podemos combinar los bloques en un solo bloque de modelo del sistema como
se muestra en la Figura 9.
28
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
es:
Esta forma es de especial utilidad, pues muestra directamente las raíces de los
polinomios del numerador y del denominador (los ceros y los polos de sistema
respectivamente).
Por último, las funciones de transferencia también pueden escribirse en la forma de
expansión de fracciones parciales, o residuo, que es:
Esta forma es útil para determinar la transformada inversa de Laplace y para diseñar
ciertos tipos de filtros.
Podemos definir:
Usando notación de matrices, este modelo de sistema puede escribirse como un modelo
de espacio de estados:
29
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
2. Procedimiento.-
En el script:
K0=2; T0=4;
num0=[K0 0]; den0=[T0 1];
H0=tf(num0,den0);
K0=2; T0=4;
num0=[K0 0]; den0=[T0 1];
H0=tf(num0,den0);
Td=1;
Hd=tf(num0,den0,'InputDelay',Td)
30
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
En el script:
[numHd,denHd,Ts]=tfdata(Hd,'v')
>> [numHd,denHd,Ts]=tfdata(Hd,'v')
numHd =
0 1
denHd =
1 1
Ts =
0
s = tf('s');
H = exp(-s)*(2*s)/(4*s+1);
>> H
H =
2 s
exp(-1*s) * -------
4 s + 1
Continuous-time transfer function.
En el script:
H=zpk([-6 1 1],[-5 1],3);
31
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
>> H
H =
3 (s+6) (s-1)^2
---------------
(s+5) (s-1)
Continuous-time zero/pole/gain model.
También se puede usar la variable s para definir el modelo como una función racional
en s.
En el script:
s=zpk('s')
H=2*1/(s-1)*(s+2)
>> s =
s
Continuous-time zero/pole/gain model.
H =
2 (s+2)
-------
(s-1)
Continuous-time zero/pole/gain model.
ss1 =
32
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
a =
x1 x2
x1 0 1
x2 -4 -2
b =
u1
x1 0
x2 2
c =
x1 x2
y1 1 0
d =
u1
y1 0
Continuous-time state-space model.
a, b, c, y d, son nombres por defecto, son usados únicamente con el objetivo de mostrar
los datos, ellos no existen en el workspace de Matlab. Para obtener los parámetros del
sistema y darles nombres específicos, en el script:
[A1,B1,C1,D1,Ts]=ssdata(ss1)
>> [A1,B1,C1,D1,Ts]=ssdata(ss1)
A1 =
0 1
-4 -2
B1 =
0
2
C1 =
1 0
D1 =
0
Ts =
0
33
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Hcont1 =
4 s + 10
--------
s + 1
Continuous-time transfer function.
34
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
B=[10];
A=[1,4,3];
[r,p,k]=residue(B,A);
>> [r,p,k]=residue(B,A)
r =
-5
5
p =
-3
-1
k =
[]
num=[10];
den=[1,4,3];
[z,p,k]=tf2zp(num,den);
z =
Empty matrix: 0-by-1
p =
-3
35
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
-1
k =
10
La función zp2tf determina los vectores num y den que contienen los coeficientes,
en orden descendente de potencias de s, del numerador y denominador de la función de
transferencia polinómica, p es un vector columna que contiene las posiciones de polos
de la función de transferencia cero-polo-ganancia, z es una matriz que contiene las
posiciones de ceros correspondientes, con una columna para cada salida de un sistema
de múltiples salida, k es la ganancia de la función de transferencia cero-polo-ganancia.
La función de transferencia cero-polo-ganancia:
z=[]
p=[-3 -1]’;
k=10;
[num,den]=zp2tf(z,p,k);
num =
0 0 10
den =
1 4 3
TF → ZPK → SS →
TF:[num,den]= zp2tf(z,p,k) ss2tf(A,B,C,D,iu)
ZPK:[z,p,k]= tf2zp(num,den) ss2zp(A,B,C,D,iu)
SS:[A,B,C,D]= tf2ss(num,den) zp2ss(z,p,k)
36
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Un modelo puede ser representado por un bloque con entradas y salidas ya sea
conteniendo una función de transferencia o un modelo en espacio estado dentro de él.
Las funciones series, parallel, y feedback pueden ser usadas para realizar
manipulaciones básicas de bloques como se mostrara a continuación.
Hser=series(Ha,Hb)
La respuesta de Matlab:
Hser =
3
-------------
s^2 + 6 s + 8
Continuous-time transfer function.
37
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Hpar=parallel(Ha,Hb)
Hpar=
4 s + 10
-------------
s^2 + 6 s + 8
Finalmente, Ha(s) y Hb(s) son conectados en un lazo realimentado negativo con Ha(s) en
el lazo directo y Hb(s) en el lazo de realimentación:
feedbsign=-1; Hfeedb=feedback(Ha,Hb,feedbsign)
Hfeedb =
s + 4
--------------
s^2 + 6 s + 11
Continuous-time transfer function.
38
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Como punto de partida de esta sección definamos una función de transferencia continua,
H1c(s). Tomaremos H1c(s) como:
n1=[1,0.5]; d1=[1,2,4];
H1c=tf(n1,d1);
>> H1c
H1c =
s + 0.5
-------------
s^2 + 2 s + 4
Continuous-time transfer function.
Aún sin conocer las respuestas a diversas señales de prueba es posible analizar diversas
propiedades de un sistema dinámico, tales como estabilidad, frecuencias de resonancia,
y características del estado estacionario y transitorio.
ganancia_dc=dcgain(H1c);
>> ganancia_dc
ganancia_dc =
0.1250
b. Ancho de banda.-
Otro valor interesante de un sistema dinámico es su ancho de banda, que se define como
la primera frecuencia (en rad/s) en la que la ganancia cae por debajo del 70.79% (-3 dB)
de su valor en estado estacionario (ganancia DC). El comando en Matlab es
bandwidth.
ancho_banda=bandwidth(H1c);
39
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
>> ancho_banda
ancho_banda =
11.4812
p=pole(H1c)
p=
-1.0000 + 1.7321i
-1.0000 - 1.7321i
[A,B,C,D]=ssdata(H1c);
p0=eig(A);
p0 =
-1.0000 + 1.7321i
-1.0000 - 1.7321i
z=tzero(H1c)
Con pzmap podemos calcular y graficar tanto los polos y los ceros. Omitiendo los
parámetros de retorno solamente grafica los polos y los ceros en el plano complejo:
40
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Figura 10. Grafica de ubicación de polos y ceros en el plano complejo generada usando
la función pzmap
Los polos y autovalores siempre son números reales y/o complejos conjugados.
damp(H1c)
H1c_ss=ss(H1c);
Xo=[0 1];
figure(1)
initial(H1c_ss,Xo); %grafica la respuesta en el tiempo a las
%condiciones iniciales Xo
[y,t,x]= initial(H1c_ss,Xo); %permite obtener los vectores
%correspondientes a la respuesta libre del sistema
Tf=10;
figure(1)
impulse(H1c,Tf); %grafica la respuesta al impulso unitario
[y,t,x]= impulse(H1c); %permite obtener los vectores
%correspondientes a la respuesta impulsiva del sistema
42
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Podemos simular la respuesta escalón de uno o varios modelos LTI con step. La
entrada escalón es entonces unitaria (la altura del escalón es uno). Simulemos H1c desde
t=0 hasta Tf=10 segundos:
Tf=10;
step(H1c,Tf)
Tf=10;
[y,t]=step(H1d,Tf);
lsim es una función mas general de simulación ya que acepta una señal de entrada
cualquiera, no necesariamente un salto o un impulso. Para generar la señal de entrada
podemos usar gensig, que produce una onda senoidal, o una onda cuadrada, o pulsos
periódicos.
Como ejemplo simulemos H1c con una entrada sinusoidal, u, con un periodo Tp=0.5,
tiempo final Tf=10, y un paso Tstep=0.01:
Figura 14. Grafica de la respuesta a una entrada sinusoidal usando las funciones
gensig y lsim
44
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Para cálculo rápido de las respuestas en frecuencias se pueden usar los comandos
evalfr y freqresp. Para calcular la respuesta en frecuencia de un sistema para una
única frecuencia se usa evalfr. El comando freqresp permite calcular la respuesta
en frecuencia para varias frecuencias.
sys=tf([3,-1],[-2 1 1])
w=[-j, -2-j,-2+j]
H1=[evalfr(sys,w(1));evalfr(sys,w(2));evalfr(sys,w(3))]
H2=freqresp(sys,w)
En Matlab se obtiene:
>>
sys =
-3 s + 1
-------------
2 s^2 - s - 1
Continuous-time transfer function.
w =
0 - 1.0000i -2.0000 - 1.0000i -2.0000 + 1.0000i
H1 =
0 - 1.0000i
0.5846 - 0.3231i
0.5846 + 0.3231i
H2(:,:,1) =
0 - 1.0000i
H2(:,:,2) =
0.5846 - 0.3231i
H2(:,:,3) =
0.5846.3231i
45
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
b. Diagrama de Bode.-
sys=tf([3,-1],[-2 1 1])
figure(1)
bode(sys); %grafica diagrama de Bode
grid on;
[mag, fase, w]=bode(sys); %no grafica, solo entrega los
%datos de magnitude, fase y frecuencia
c. Diagrama de Nyquist.-
sys=zpk([],[-1 -1 -1],4);
figure(1)
nyquist(sys,'r-');
46
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
[re,im]=nyquist(sys,w)
[re,im,w]=nyquist(sys)
47
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
El visor LTI (LTI-viewer) hace muy simple realizar simulaciones, graficas de respuesta
en el tiempo y en la frecuencia, para uno o muchos modelos LTI que existan en el
directorio de trabajo. El visor LTI es fácil de ejecutar, por ejemplo:
[num,den]=ord2(10,0.2);
sys=tf(num,den);
h=ltiview({'step';'pzmap'},sys);
ltiview('current',tf(dcgain(sys),[0.3 1]),h)
Figura 17. Ventana que permite visualizar diversas respuestas (tiempo y frecuencia) de
un sistema, función ltiview
Matlab cuenta con un GUI para diseño interactivo de compensadores para el caso de
plantas SISO. Este GUI permite diseñar compensadores SISO usando el lugar
geométrico de las raíces, diagrama de Bode, técnicas de Nyquist y Nichols.
[num,den]=ord2(10,0.2);
sys=tf(num,den);
sisotool(sys);
48
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
Figura 18. Ventanas que permiten (a) modificar parámetros para diseño de
compensadores, y (b) visualizar diversas respuestas (tiempo y frecuencia) del sistema en
lazo abierto y lazo cerrado
49
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
EJEMPLO 1
clc
clear all
close all
s=tf('s');
G=1/(s^2+4*s+9);
Gss=ss(G);
Xo=[0 1];
[y,t,x]=initial(Gss,Xo); %respuesta libre
figure(1)
subplot(223)
plot(t,x(:,1),'r-',t,x(:,2),'g--');
title('Estados x(t)');
xlabel('t');
ylabel('x(t)');
legend('x_1(t)','x_2(t)');
subplot(221)
plot(t,y);
title('Salida y(t)');
xlabel('t');
ylabel('y(t)')
subplot(122)
plot(x(:,1),x(:,2));
title('Phase Potrait');
xlabel('x_1(t)');
ylabel('x_2(t)')
50
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
[u,t]=gensig('square',3,10,0.01);
[y,t]=lsim(G,u,t);
figure(3)
plot(t,y,'r-',t,u,'b--');
legend('y(t)','u(t)')
title('Respuesta a una entrada arbitraria');
xlabel('t');
EJEMPLO 2
52
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
--------------------------------------------------------------------------------------------------------------------
clc
clear all
close all
sysPT1=tf(1,[0.05 1]);
figure(1)
subplot(121)
bode(sysPT1,'r-');
sysPT2=tf(10,[1 0.05 10]);
d=[sqrt(2)/2 1.6 3];
for n=1:1:length(d)
sysPT2=[sysPT2; tf(10,[1 d(n) 10])];
grid on;
end;
subplot(122)
hold on
stil={'r-' 'b-' 'k-' 'g--'};
for n=1:1:length(d)+1
bode(sysPT2(n),stil{n});
grid on;
end
53
----------------------------------------------------------------------------------------------------------
LABORATORIO DE CONTROL AUTOMÁTICO