Está en la página 1de 14

MÁSTER UNIVERISTARIO EN AUTOMÁTICA E INFORMÁTICA

INDUSTRIAL

CONTROL PREDICTIVO E INTELIGENTE

EJERCICIOS OPTIMIZACIÓN

ALUMNO:
MARCELO ALEJANDRO ALVAREZ LUNA

FECHA:
15 – 02 – 2019
Contenido
1. Identificación de un sistema dinámico discreto de 2º orden. ........................................................ 1
2. Identificación de un sistema dinámico continuo ............................................................................ 6
3. Diseñar un modelo de predicción de k+3 para el ejercicio 1 .......................................................... 8
4. Diseñar un PID para un proceso continuo utilizando optimización. ............................................ 11
EJERCICIOS OPTIMIZACIÓN

1. Identificación de un sistema dinámico discreto de 2º orden.

- Crear un modelo de fdt discreta estable. Hacer experimento con step y añadir ruido de medida
Utilizar toolbox para identificar los parámetros

Para el presente ejercicio se utilizó la siguiente función de transferencia:

0.15(𝑧 − 0.3)
𝑔𝑧 =
(𝑧 − 0.9)(𝑧 − 0.6)
FDT discreta propuesta en polos y ceros

0.15𝑧 − 0.045
𝑔𝑧 =
𝑧 2 − 1.5𝑧 + 0.54
FDT discreta propuesta polinomial

Se ha obtenido la respuesta frente al escalón unitario y se ha agregado ruido para conseguir una salida
próxima a la realidad:

Figura 1 Respuesta de FDT discreta frente a escalón unitario

Código para obtener valores de la función de transferencia:


global xz yz fcoste
fcoste=0;
z=tf('z');
gz=0.15*(z-0.3)/((z-0.9)*(z-0.6));%Función de transferencia
yz=step(gz); %respuesta ante escalón
ym=max(yz);
yz=yz+0.1*ym*(rand(size(yz))-0.5); %Añade ruido aleatorio a la salida
xz=ones(size(yz)); %Entrada aplicada al sistema
figure
plot([xz,yz],'x'); %Visualización experimento
legend('Entrada escalón','Respuesta del sistema');

1
Una vez obtenido los valores del sistema dinámico de segundo orden se procede a realizar la función
objetivo la cual ayudará realizar la identificación.

Código función Jzrecta_step:


function J=Jzrecta_step(th)
% Función de coste para ajuste a una recta.
% se asume que los parámetros de la función transferencia están en th,
% empezando por pi y después qi(m=n-1)
% Los parámetros de la recta se pasan en th
% Los datos del experimento se pasan mediante var globales
global xz yz fcoste
N=length(yz);
gz=tf(th(end/2+1:end),[1,th(1:end/2)],1); %El tercer parámetro es el periodo
yzh=step(gz,N-1);
e=yz-yzh;
J=e'*e/N;
fcoste=J;

Se debe realizar la llamada a la función fminunc propia del toolbox de optimización (Optimtool) de Matlab
de la siguiente manera:
thz=fminunc(@Jzrecta_step,[-1,1,1,0]); %[c,d,a,b]

Los parámetros a, b, c y d se encuentran parametrizados de la siguiente manera en la función de


transferencia del modelo discreto:

a∗𝑧+b
𝑔𝑧 =
𝑧2 +c∗𝑧+d

Al ejecutar el algoritmo de optimización regresa el vector thz con los parámetros a,b,c y d los cuales serán
utilizados para formar la función de transferencia de la siguiente manera:

gzh=tf(thz(end/2+1:end),[1,thz(1:end/2)],1);
yzh=step(gzh,length(yz)-1);
figure
plot([yz,yzh],'x')
legend('Datos del experimento','FDT identificada');

0.038495(𝑧 − 4.327)
𝑔𝑧 =
(𝑧 − 0.9066)(𝑧 − 0.1664)
FDT discreta identificada en polos y ceros

0.038495𝑧 + 0.1666
𝑧=
𝑧 2 − 1.073𝑧 + 0.1508
FDT discreta identificada polinomial

Para el presente caso se ha obtenido el valor de la función de coste la cual es J=0.0051 siendo este un
valor muy pequeño por lo que se puede concluir que la identificación ha sido exitosa con los valores
experimentales.
En la Figura 2 se ha graficado los datos del experimento versus la función de transferencia identificada
mediante la función fminunc.

2
Figura 2 Datos experimentales vs FDT identificada

Uso de Pseudoaleatoria para identificación


Si bien es cierto el sistema identificado mediante la entrada del escalón unitario muestra una función de
transferencia muy próxima a la propuesta y el resultado de la función de coste es muy pequeño, esta
entrada no es la mejor opción para este tipo de experimentos ya que pierde muchos datos por ser
constante, es por ello que se ha optado por utilizar una entrada pseudoaleatoria para corroborar lo
realizado en el apartado anterior.

Para generar la señal pseudoaleatoria se ha utilizado el siguiente código:


%% Pseudoaleatoria
vector1=[1 1 1 1 1 1 1];
vector2=[0 0 0 0 0 0 0];
vector3(1)=1;
N=(2^7)-1;
amplitudpseudo = 0.5;
for(i=1:N)
aux=xor(vector1(4),vector1(7));
vector2(1)=aux;
vector2(2)=vector1(1);
vector2(3)=vector1(2);
vector2(4)=vector1(3);
vector2(5)=vector1(4);
vector2(6)=vector1(5);
vector2(7)=vector1(6);
vector1=vector2;
vector3(i+1)=vector2(7);
end
for(i=1:N)
if(vector3(i)==1)
salida(i)=amplitudpseudo;
end
if(vector3(i)==0)
salida(i)=-amplitudpseudo;
end
end
xz = salida;%pseudoaleatoria
figure
stairs(xz);

3
De igual manera se puede generar la señal pseudoaleatoria utilizando la función idinput propia del Matlab
que nos devolverá un vector según los parámetros que se ingresen.

Figura 3 Señal pseudoaleatoria

Una vez que se ha obtenido la señal pseudoaleatoria se procede a evaluar la función de transferencia
frente a esta señal.

%Función de transferencia
z=tf('z',1);
gz=0.15*(z-0.3)/((z-0.9)*(z-0.6));
[nz,dz]=tfdata(gz,'v');
yz=dlsim(nz,dz,xz); %respuesta ante pseudoaleatoria
ym=max(yz);
yz=yz+0.1*ym*(rand(size(yz))-0.5); %Añade ruido aleatorio a la salida
figure
plot([xz',yz],'x'); %Visualización experimento
legend('PRBS','Respuesta del sistema');

Figura 4 Respuesta de FDT discreta frente a entrada pseudoaleatoria

4
Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:

Código función Jzrecta_prbs:


function J=Jzrecta_prbs(th)
% Función de coste para ajuste a una recta.
% Los parámetros de la recta se pasan en th
% Los datos del eperimento se pasan mediante var globales
global xz yz fcoste
N=length(yz);
gz=tf(th(end/2+1:end),[1,th(1:end/2)],1);
[nz,dz]=tfdata(gz,'v');
yzh=dlsim(nz,dz,xz);
e=yz-yzh;
J=e'*e/N;
fcoste=J;

Al evaluar el algoritmo se ha obtenido la siguiente función de transferencia:

0.14685(𝑧 − 0.2917)
𝑔𝑧 =
(𝑧 − 0.8981)(𝑧 − 0.6121)
FDT discreta identificada en polos y ceros

0.1468𝑧 − 0.04283
𝑧=
𝑧 2 − 1.51𝑧 + 0.5497
FDT discreta identificada polinomial

Se debe tener en cuenta que el valor de la función de coste obtenida ha sido J=2.8208e-04 siendo este un
valor de error mucho mas pequeño que el obtenido al utilizar como entrada al sistema el escalón unitario,
por ende se puede concluir que la entrada pseudoaleatoria nos da como resultado una mejor
identificación, esto se puede corroborar igualmente en la Figura 5 donde se ha evaluado frente al escalón
unitario la respuesta del sistema original y el sistema identificado, siendo estas muy parecidas.

Figura 5 FDT propuesta vs FDT identificada

5
2. Identificación de un sistema dinámico continuo

- Hacer lo mismo, pero para un sistema continuo de 2º orden subamortiguado

Para el presente ejercicio se utilizó la siguiente función de transferencia:

5
𝑔𝑠 =
𝑠2
+ 1.5𝑠 + 4.5
FDT continua propuesta

Se ha obtenido la respuesta frente al escalón unitario y se ha agregado ruido para conseguir una salida
próxima a la realidad:

Figura 6 Figura 1 Respuesta de FDT continua frente a escalón unitario

Una vez obtenido los valores del sistema dinámico de segundo orden se procede a realizar la función
objetivo la cual ayudará realizar la identificación.

Código Jsrecta_recta:
function J=Jsrecta_step(th)
% Función de coste para ajuste a una recta.
% Los parámetros de la recta se pasan en th
% Los datos del eperimento se pasan mediante var globales
global xs ys t fcoste
N=length(ys);
gs=tf(th(1),[1,th(2:end)]);
ysh=step(gs,t);
e=ys-ysh;
J=e'*e/N;
fcoste=J;

Se debe realizar la llamada a la función fminunc propia del toolbox de optimización (Optimtool) de Matlab
de la siguiente manera:
ths=fminunc(@Jsrecta_step,[1,1,1]); %[a,b,c]

6
Los parámetros a, b y c se encuentran parametrizados de la siguiente manera en la función de
transferencia del modelo continuo:

a
𝑔𝑠 =
𝑠2 +b∗𝑠+c

Con lo parámetros obtenidos en el vector ths se procede a formar la función de transferencia:

4.945
𝑔𝑠 =
𝑠 2 + 1.491𝑠 + 4.449
FDT continua identificada

Para el presente caso se ha obtenido el valor de la función de coste la cual es J=0.0017 siendo este un
valor muy pequeño por lo que se puede concluir que la identificación ha sido exitosa con los valores
experimentales.
En la Figura 7 se ha graficado los datos del experimento versus la función de transferencia identificada
mediante la función fminunc.

Figura 7 Datos experimentales vs FDT identificada

Uso de Pseudoaleatoria para identificación


Al igual que en el apartado 1 se comprobará mediante una entrada pseudoaleatoria la identificación antes
realizada.

Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:

Código función Jsrecta_prbs:


function J=Jsrecta_prbs(th)
% Función de coste para ajuste a una recta.
% Los parámetros de la recta se pasan en th
% Los datos del experimento se pasan mediante var globales
global xs ys t fcoste
N=length(ys);
gs=tf(th(1),[1,th(2:end)]);

7
ysh=lsim(gs,xs,t);
e=ys-ysh;
J=e'*e/N;
fcoste=J;

Al evaluar el algoritmo se ha obtenido la siguiente función de transferencia:

5.049
𝑔𝑠 =
𝑠2
+ 1.513𝑠 + 4.519
FDT continua identificada

Se debe tener en cuenta que el valor de la función de coste obtenida ha sido J=1.3663e-06 siendo este un
valor de error mucho mas pequeño que el obtenido al utilizar como entrada al sistema el escalón unitario,
por ende se puede concluir que la entrada pseudoaleatoria nos da como resultado una mejor
identificación, esto se puede corroborar igualmente en la Figura 8 donde se ha evaluado frente al escalón
unitario la respuesta del sistema original y el sistema identificado, siendo estas muy parecidas.

Figura 8 FDT propuesta vs FDT identificada, sistemas continuos

3. Diseñar un modelo de predicción de k+3 para el ejercicio 1

Se debe considerar para este tipo de modelos de predicción que las entradas para identificar cada uno de
los instantes desplazados sean diferentes de esta manera se podrá corroborar la correcta identificación
del sistema.

Se ha generado 4 entradas pseudoaleatorias utilizando la función idinput propia de Matlab (System


Identification Toolbox™).

xz1=idinput(100);%Entrada para datos experimentales


xz2=idinput(100);%Entrada para predecir yzk+1
xz3=idinput(100);%Entrada para predecir yzk+2
xz4=idinput(100);%Entrada para predecir yzk+3

8
Figura 9 Entradas pseudoaleatorias para identificar el sistema

Se ha evaluado el sistema frente a la entrada pseudoaleatoria xz1 y se le ha agregado ruido aleatorio para
tener una salida cercana a la realidad.

yz=dlsim([0.15 -0.045],[1 -1.5 0.54],xz1); %respuesta ante pseudoaleatoria


ym=max(yz);
yz=yz+0.1*ym*(rand(size(yz))-0.5); %Añade ruido aleatorio a la salida

Figura 10 Respuesta del sistema frente a PRBS

Para el modelo de predicción de k+3 se debe considerar que la primera predicción 𝑦𝑘+1 utiliza la
información disponible hasta el instante k y las entradas que se aplicarán en el futuro, de hecho para la
predicción k+1 solo se necesita información que esta disponible en el instante k.
Se ha usado la matriz de regresores para identificar el instante 𝑦𝑘+1 de la siguiente manera:
%% Matriz de regresores y minimización
R1=[-yz(2:end-1), -yz(1:end-2), xz2(2:end-1), xz2(1:end-2)];
Y1= yz(3:end);
th1=R1\Y1;
yzk1=R1*th1;

9
Una vez que se ha obtenido el primer modelo de predicción se hará uso de la función fminunc para seguir
con el instante 𝑦𝑘+2
function J=Jprediccion2(th)
global xz3 yz N yzk1 fcoste2
yjk2 = th(1)*yzk1(1:end) + th(2)*yz(2:end-1) + th(3)*xz3(3:end) + th(4)*xz3(2:end-1);
e=yz(3:end)-yjk2 ; %Error
J=e'*e/(length(yz)-2);
fcoste2 = J;

Se prosigue de igual manera para el instante 𝑦𝑘+3


function J=Jprediccion3(th)
global xz4 yz N yzk1 yzk2 fcoste3
yjk3 = th(1)*yzk2(1:end) + th(2)*yzk1(1:end) + th(3)*xz4(3:end) + th(4)*xz4(2:end-1);
e=yz(3:end)-yjk3 ; %Error
J=e'*e/(length(yz)-2);
fcoste3 = J;

Figura 11 Datos experimentales vs predicciones

Al utilizar diferentes entradas para los modelos de predicción y obtener salidas muy parecidas se puede
visualizar que el algoritmo está cumpliendo su función (Figura 11), cabe destacar que el error irá
aumentando mientras se desee predecir instantes mas alejados del original (Figura 12).

Figura 12 Error entre puntos

10
4. Diseñar un PID para un proceso continuo utilizando optimización.

- Comenzar definiendo una función objetivo para la respuesta del sistema en bucle cerrado (una
posibilidad es utilizar un modelo de referencia)

Para el presente ejercicio se ha utilizado la siguiente función de transferencia que será el modelo de la
planta a ser controlada:

1.249
𝑔𝑝 =
𝑠2 + 0.9844𝑠 + 1.249

Y el modelo de referencia está dado por la siguiente función de transferencia:

2
𝑔𝑚 =
𝑠2 + 0.9844𝑠 + 2

Figura 13 FDT Planta vs Modelo de referencia

Como se puede observar en la Figura 13 lo que se busca es que el comportamiento de la planta en lazo
cerrado siga al modelo de referencia.

Se debe tener en cuenta que el controlador buscado tiene la siguiente forma:

1
𝑃𝐼𝐷 = 𝑘𝑝 (1 + + 𝑇𝑑 ∗ 𝑠)
𝑇𝑖 ∗ 𝑠

𝑘𝑝
𝑃𝐼𝐷 = 𝑘𝑝 + + 𝑘𝑝 ∗ 𝑇𝑑 ∗ 𝑠
𝑇𝑖 ∗ 𝑠

𝑘𝑖
𝑃𝐼𝐷 = 𝑘𝑝 + + 𝑘𝑑 ∗ 𝑠
𝑠

𝑘𝑑 ∗ 𝑠 2 + 𝑘𝑝 ∗ 𝑠 + 𝑘𝑖
𝑃𝐼𝐷 =
𝑠

11
Al igual que en los apartados anteriores y para obtener una mejor identificación de los parámetros del
controlador se ha utilizado una señal pseudoaleatoria como señal de entrada a los sistemas.

Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:
function J=parametroscontrolador(th)
global xs ym yp t gp
s=tf('s');
gc=tf(th(1:end/1),[1 0]);
gt=feedback(series(gc,gp),1);
ysh=lsim(gt,xs,t);
e=ym-ysh;
J=e'*e/length(xs);

Se ha obtenido el siguiente controlador:

0.2277𝑠 2 + 0.7069𝑠 + 0.6965


𝑃𝐼𝐷 =
𝑠
%% Comprobar el resultado
gc=tf(ths(1:end/1),[1 0]);
figure
step(gp,t);
hold on;
step(gm,t);
hold on;
step(feedback(series(gc,gp),1));
legend('Planta en lazo abierto','Modelo de referencia','Salida controlada lazo
cerrado');

Figura 14 Respuesta del controlador

Como se puede observar en la Figura 14 el controlador obtenido intenta seguir al modelo de referencia,
si bien es cierto no se ajusta totalmente al modelo requerido evita que el sistema tenga un sobre impulso
demasiado grande y logra llegar a la referencia establecida.

12

También podría gustarte