Beruflich Dokumente
Kultur Dokumente
ABRIL
2016
0.10653 (+0.8467 )
G(z) = +1+2 =
1 (0.6065 )
0.1761
= 1.32050.496
0+1
+12
0.10653 (+0.8467 )
1 (0.6065 )
So co-primos. Para resolver este exemplo, iremos utilizar o algoritmo 3.1,o objetivo
cancelar o zero:
PASSO 1: fatorar B como B = B+B, onde B+ monico
B(z) = B+(z)B-(z) = (z + 0.8467)0.10653
PASSO 2 : encontrar a soluo R e S com degS>degA de
AR + B-S = A0Am
A equao de Diophantina ento
A(z)(B + z )Rp(z) + B + z (B z )S(z) = B+(z)A0(z)Am(z)
()
()
a1 + b0s0 = am1
a2+b0s1=am2
essas equaes podem ser resolvidas se b0 0. A soluo
s0 =
s1 =
11
0
22
=
=
1.3205 +1.607
0.10653
0.4966+0.6065
0.10653
= 2.6852
= 1.0321
R(z) = B+ = z +0 = z + 0.8467
S(z) = s0z + s1 = 2.6852z 1.0321
T(z) = A0Bm =
0
0
0.1761
= 0.10653 = 1.6531z
G(z) = +1+2 =
0.10653 (+0.8467 )
1 (0.6065 )
()
()
(+0.8467 )
= 1.32050.496
Com
(1)
= (1) =
1+ 1+ 2
0+1
= Bmp(z)
11.3205 0.496
r1 = 0 +
2 1+ 101+ 2 2 0 (1+00)
0( 2 1101+2 2 0)
0 20+ 2 20 1 01+ 0+ 11 1
2 1101+2 2 0
0 0.496 0.10653 + 0.6065 +0.4960(1.3205 ) 0.10653 0.0902+ 01.3205 +1.607 0.0902 2
0.0902 2 +1.6070.10653 0.09020.60650.10653
r1 = 0,975
Perceba que o denominador zero se os polinmios A(z) e B(z) tem um fator
comum, equacionando os coeficientes dos termos z e z0 na equao diophantina temos:
s0 =
s0 =
+
0( 12120 2+02)
1101+20
S0= 11,72
s1 =
0( 22 20 21+02 1)
1101+20
s1 =
0.0902(1.6070.6065 (1.3205 0.6065 )0.4966+0.6065) 0.10653 (0.49660.6065 0.6065 2 0.49661.607+0.6065 1.3205 )
0.0902 1.6070.10653 0.0902 +(0.6065 0.10653 2 )
s1= 1,1259
alm disso, mostrado que:
R(z) = z + r1 = z + 0.975
S(z) = s0z + s1 = 11.72z + 1.1259
T(z) = A0(z) = (z+a0) = -4.15(z+1)
G(s) =
(+)
Com a = 1 e b = 1. O desenvolvimento dado pelo algoritmo 3.1 vai ser usado para
encontrar um controlador em tempo continuo. Desde que o processo seja de segunda
ordem, o sistema em malha fechada ser de terceira ordem e o controlador de grau
mnimo de primeira ordem. O polinmio Am tem grau 2 (degAm = degA), Bm uma
constante (degBm = degB) e A0 tem grau 1 (degA0 = 2 - 0 1 = 1). Sendo assim:
A0(s) = s+a0
Sendo assim, a funo de transferncia desejada :
Bm (s)
Am (s)
s+2 s+
1
s+1.4s+1
a+r1 = 2 + a0
1+ r1 = 1.4 + 1
r1 = 1.4
s0 = 2.4 1.4
s0 = 1
bs1 = a0
s1 = 1
As equaes acima so possveis de resolver se a varivel b 0. Alm disso, temos
B = 1, B- = b = 1, e Bm = /b = 1, logo:
+
R(s) = B+ = 1
S(s) = s0s + s1 = s + 1
T(s) = Bm(s)A0(s) =
1+ 1+ 2
0+1
s0 =
s1 =
= Bmp(z) =
11
0
22
0
=
=
(s+ a0) = s + 1
11.3205 0.496
0.10653 +0.0902
1.3205 +1.607
0.10653
0.4966+0.6065
0.10653
= - 4.15
= 2.6852
= 1.0321
G(s) =
(+)
G(z) = +1+2 =
0.10653 (+0.8467 )
1 (0.6065 )
0.1761
= 1.32050.496
100
0
0
100
0 0
0 0
0
0
0
0
1 0
0 1
___________________________________
(0) =
0
0
0
0
0
0
0
0
0.01
0.2
0.01
0.2
0.01 0.01
0.2 0.2
____________________________________
(0)=
0
0
0
0
0 0
0 0
0
0
0
0
0 0
0 0
0
0
0
(0) = 0(0) = 0(0) = 0
0
0
0
Clculo do MQR
A sada do sistema calculada da seguinte forma
y(k)=-a1*y(k-1)-a2*y(k-2)+b0*u(k-1)+b1*u(k-2);
desse modo podemos atualizar o , o erro e o ganho do estimador
(k-1)=[-y(k-1) -y(k-2) u(k-1) u(k-2)]'
e(k)=y(k)- (k-1)'* (k-1)
K=P* (k-1)/( + (k-1)'*P* (k-1))
Calculamos o novo vetor de estimao de parmetros
Teta(k)=Teta(k-1)+K*e(k);
A partir desses dados se atualiza a matriz de covarincia
P=(P-K* (k-1)'*P)/
A prxima etapa armazenar os parmetros atualizados
Teta(k) = [ a1atualizado a2atualizado b0atualizado
b1atualizado]
PASSO 2: aplicar o mtodo de alocao de plos e grau mnimo dado pelo algoritmo
3.1 onde os polinmios A e B so os estimadores obtidos no passo 1. Os polinmios R,S
e T do controlador ento so obtidos:
+(
R=
S=
T=
1
0+1)
1
0
0
r1(150) = 0.1111(0.1111)
s0(150) = 1.6422(1.6422)
s1(150) = -0.7471(-0.7471)
t0(150) = 0.8951(0.8951)
G(s) =
(+)
G(z) = +1+2 =
0.10653 (+0.8467 )
1 (0.6065 )
()
()
(+0.8467 )
0.1761
(1)
= (1) =
1+ 1+ 2
0+1
= Bmp(z) = 0.8951
Poldes = ^(-0.5+j0.2739)
Atravs de manipulaes matemticas confirmaremos esses valores
am = z - 1.3205z + 0.496
am1 = -1.3205
am2 = 0.496
bm= 0.1761z = b0
desde que os parmetros amostrados da planta possam depender tanto dos parmetros
contnuos conhecidos e desconhecidos, procederemos como se todos os parmetros
fossem desconhecidos. Precisamos de um modelo de regresso linear para os
parmetros da planta
= ( b0 b1 a1 a2 )T
(t) = ( u(t 1) u(t 2) y(t 1) y(t 2) )
o PASSO 1 utilizado aqui o mesmo utilizado no exemplo 3.4, logo omitiremos
Antes de mais nada, precisamos desenvolver um controlador sem o cancelamento do processo
zero considerando B+ = 1. Usando a condio de causalidade degAc 2degA-1 = 3, sendo que o
grau de A = 2. O grau de R deve ser portanto de grau 1. O grau mnimo obtido pela escolha
dos menores graus possveis no desenvolvimento do polinmio, ento obtemos degAc = 3 e
degR = degS = 1. A equao de Diophantina para o problema
(z2 + a1z+ a2)(z+ r1) + (b0z+ b1)(s0z+ s1) = (z2 + am1z+ am2)(z + ao1)
A identificao dos coeficientes de potncias iguais para Z :
z2 : a1+ r1+ b0s0= am1+ ao1
z : a2+ a1r1+ b1s0+ b0s1= am1ao1+ am2
z0 : a2r1+ b1s1= am2ao1
1
0 20+ 2 20 1 01+ 0+ 11 1
2 1101+2 2 0
s0 =
1+0(1+1)
s1 =
0
0 221
1
r1(150) = 0.1111(0.1111)
s0(150) = 1.6422(1.6422)
s1(150) = -0.7471(-0.7471)
t0(150) = 0.8951(0.8951)
onde
uf(t) +am1uf(t-1) + am1uf(t-2) = u(t)
yf(t) + am1yf(t-1) + am1yf(t-2) = y(t)
isso importante agora obter um auto-regulador direto pela aplicao do algoritmo 3.3.
Os modelos do parmetros dados pela equao (3.30) so portanto estimados, e o sinal
de controle computado da seguinte maneira:
0u(t) +1u(t-1) = 0uc(t) - 0y(t) - 1y(t-1)
Onde 0,1, 0, e 1so os estimadores obtidos e 0 dado pela equao 3.29, que
0= 1 + am1 + am2
Perceba que o estimador de r0 deve ser diferente de zero para o controlador ser causal.
A figura acima onde compara o sinal de entrada e de sada na simulao do algoritmo
direto e a figura seguinte mostra os parmetros estimados. O transitrio inicial depende
fortemente das condies iniciais. Em t = 150 os parmetros do controlador so:
r1/r0(150) = 0.8467(0.8467)
s0/r0(150) = 2.6852(2.6852)
s1/r0(150) = -1.0321(-1.0321)
t0/r0(150) = 1.6531(1.6531)
r1/r0(150) = -0.1643(0.8467)
s1/r0(150) = -0.5987(-1.0321)
s0/r0(150) = 1.21(2.6852)
t0/r0(150) = 0.6214(1.6531)
Para fazer isso, consideraremos o mesmo sistema como no exemplo 3.5 onde o
controlador foi definido como:
0
R = q + r1S = s0q + s1
1 1
0 + 1
PROBLEMAS
3.1 uma amostra de um modelo de um processo em tempo continuo com h = 1 a
seguinte funo pulso de transferncia obtida
() =
+ 1.2
+ 0.25
RESPOSTA
Especificaes do projeto: o sistema em malha fechada teria um plo que
corresponderia a seguinte caracterstica polinomial em tempo continuo
S + 2s + 1 = (s+1)
Isso corresponde a
=1
A condio de integrador d
R = R(z-1)
A partir disso temos a seguinte condies:
(1) BT = BmA0
(2) AR + BS = AmA0
Como B instvel devemos ter Bm = BBm. isso faz (1) BT = BBmA0 T = BmA0.
Escolhido Bm temos que:
(1) (1)
(1)
(1)
= 1 Bm(1) = (1)
Bm = bm = (1) =
0.25
2.2
RESPOSTA
Como H(z) no fase mnima cancelaremos B- = B entre e . Um STR indireto
dado pela equao 3.24
A0Amym = u + y
Com
= B-R, = B-S, T = BmA0.
Alm do mais temos
A0Amym = A0Bmuc = A0BBmuc = BTuc = uc
1
y = 0 u + 0 y
1
ym = 0 uc
= y ym = uf + yf - ucf
Para lambda = 1
Percebemos que quanto menor o valor o valor inicial de teta, o sistema passar a ter uma
dificuldade em acompanhar inicialmente o valor de referncia aumentando o valor do
erro de regime permanente.
.
Para teta = [0 0 0.01 0.2]T
O valor inicial de teta deve ser o menor possvel, pois a mnima variao pode causar a
instabilidade no sistema.
3.7 considere o regulador auto sintonizador indireto no exemplo 3.5. faa uma
simulao ao longo dos perodos, e investigue como os parmetros aproximam se dos
seus valores verdadeiros. Tambm explore como a faixa de convergncia depende do
fator de esquecimento .
RESPOSTA
Utilizaremos os mesmos valores de lambda do problema 3.6
Para lambda = 1
r1(150) = 0.1149(0.1111)
s0(150) = 1.5135(1.6422)
s1(150) = -0.6653(-0.7471)
t0(150) = 0.8799(0.8951)
r1(150) = 0.1111(0.1111)
s0(150) = 1.6422(1.6422)
s1(150) = -0.7471(-0.7471)
t0(150) = 0.8951(0.8951)
r1(150) = 0.1111(0.1111)
s0(150) = 1.6422(1.6422)
s1(150) = -0.7471(-0.7471)
t0(150) = 0.8951(0.8951)
RESPOSTA
Foi considerado a seguinte funo em malha fechada:
y(t)= -a1y(t-2)-a2y(t-3)+b0u(t-1)+b1u(t-2)
foi adicionado um delay a mais nas variveis de sada do sistema (destacado de
vermelho) os parmetros da entrada no foi alterado
Podemos analisar que na prtica se a planta por algum motivo falhasse em fornecer a
informao do sistema isso poderia acarretar em srios problemas, pois pode-se
observar que um simples delay na sada da planta j o suficiente para levar a
instabilidade do sistema.
3.11 aplique o regulador auto ajustvel indireto do exemplo 3.5 para o processo com a
funo de transferncia
() =
1
( + 1)
1
+ 2
Comparando as duas situaes, podemos ver que o deslocamento do plo no eixo zero
para a esquerda tem um efeito percebvel na sada do sistema:
Nos momentos iniciais o sobressinal reduzido consideravelmente em relao a funo
de transferncia original, isso se deve ao fato do plo ter sido deslocado do eixo zero
para a esquerda, por outro lado, repare que o sinal de controle mantm um esforo
maior para tentar minimizar o erro, a partir de t =25 o erro em regime permanente
igual em ambos os casos.
ANEXOS
/////////////////EXEMPLO 3.4///////////////////////////////
%% STR indireto usando
% Astrom & Wittenmark,
% Prof. Andr Ferreira
% MODIFICADO POR PEDRO
clear all
close all
clc
MQR e MDPP
Exemplo 3.4, p.104
- 29/01/2014
JUNIOR
%% Definio da planta
planta=tf(1,[1 1 0]); % Planta analgica
Ts=0.5; % Intervalo de amostragem
planta_discretizada=c2d(planta,Ts); % Planta discretizada
% Parmetros da planta
[numd,dend]=tfdata(planta_discretizada,'v');
b0=numd(2);
b1=numd(3);
a1=dend(2);
a2=dend(3);
%% Sistema em MF desejado
csi=0.7;
freq_nat=1;
% Plos discretos desejados
pol_des=exp(-csi*freq_nat*Ts + j*freq_nat*sqrt(1-csi^2)*Ts);
Pol_des=[pol_des conj(pol_des)];
% FT desejada em MF
Am=poly([pol_des conj(pol_des)]);
Bm=[polyval(Am,1) 0]; % Escolhido para ter ganho DC unitrio
func_desej_disc=tf(Bm,Am,Ts);
% Parmetros da planta desejada em MF
[nummd,denmd]=tfdata(func_desej_disc,'v');
bm0=nummd(2);
am1=denmd(2);
am2=denmd(3);
%% Vetor de Entrada
uc = [];
neg=-1*ones(1,25);
pos=ones(1,25);
for i = 1:3
uc = [uc pos neg];
end
%% Condies iniciais necessrios para o MQR
N = length(uc); % Nmero de realizaes (medidas)
lambda = 0.65;
%pulo do gato - valor escolhido por tentativa e erro
%tf([1 r1],1,0.5);
%tf([t0 t1],1,0.5);
///////////////////////////////////////////////////////////
////////EXEMPLO 3.5////////////////////////////////////////
%% STR indireto usando MQR e MDPP
% Astrom & Wittenmark, Exemplo 3.4, p.104
% Prof. Andr Ferreira - 29/01/2014
%MODIFICADO POR PEDRO JUNIOR
clear all
close all
clc
%% Definio da planta
g=tf(1,[1 1 0]); % Planta analgica
Ts=0.5; % Intervalo de amostragem
gd=c2d(g,Ts); % Planta discretizada
% Parmetros da planta
[numd,dend]=tfdata(gd,'v');
b0=numd(2);
b1=numd(3);
a1=dend(2);
a2=dend(3);
%% Sistema em MF desejado
csi=0.7;
Wn=1;
% Plos discretos desejados
pdes=exp(-csi*Wn*Ts + j*Wn*sqrt(1-csi^2)*Ts);
Pdes=[pdes conj(pdes)];
% FT desejada em MF
Am=poly([pdes conj(pdes)]);
Bm=[polyval(Am,1) 0]; % Escolhido para ter ganho DC unitrio
gmd=tf(Bm,Am,Ts);
% Parmetros da planta desejada em MF
[nummd,denmd]=tfdata(gmd,'v');
bm0=nummd(2);
am1=denmd(2);
am2=denmd(3);
%Polinmio A0:
a0=0; %Este parmetro sugerido no prprio livro
A0=tf([1 a0],[1],0.5);
%% Vetor de Entrada
uc = [];
neg=-1*ones(1,25);
pos=ones(1,25);
for i = 1:3
uc = [uc pos neg];
end
%% Condies iniciais necessrios para o MQR
N = length(uc); % Nmero de realizaes (medidas)
lambda = 0.65;
%pulo do gato (^-^)
P0 = diag([100 100 1 1]); % Inicializar a matriz de covarincia *****
Teta0 = [0 0 0.01 0.2]'; % Inicializar o vetor de parmetros Teta
estimado *****
fi0=[0 0 0 0]';
yest=[0 0 0]';
diagP=diag(P0)';
Teta=[Teta0 Teta0 Teta0];
fi=[fi0 fi0 fi0];
diagP=[diagP; diagP; diagP];
P=P0;
cont=0*Teta;
y=0*yest;
u=0*yest;
erro=0*yest;
for k = 4:N
%% MQR
% ----- Calcula a sada atual
y(k)=-a1*y(k-1)-a2*y(k-2)+b0*u(k-1)+b1*u(k-2); % Sada da
planta
% ----- Atualiza Fi
fi(:,k-1)=[-y(k-1) -y(k-2) u(k-1) u(k-2)]';
% ----- Calcula o erro de estimao
erro(k)=y(k)-fi(:,k-1)'*Teta(:,k-1);
% ----- Calcula o vetor de ganhos
K=P*fi(:,k-1)/(lambda+fi(:,k-1)'*P*fi(:,k-1));
% ----- Calcula o novo vetor de estimao de parmetros
Teta(:,k)=Teta(:,k-1)+K*erro(k);
% ----- Atualiza a matriz de covarincia
P=(P-K*fi(:,k-1)'*P)/lambda;
diagP=[diagP; diag(P)'];
% ----- Armazena parmetros
a1est = Teta(1,k);
a2est = Teta(2,k);
b0est = Teta(3,k);
b1est = Teta(4,k);
%Operador de Transferncia:
%am1=Amq(2);
%am2=Amq(3);
beta=((1+am1+am2)/(b0est+b1est));
bm0=beta*b0est;
bm1=beta*b1est;
Hmq=tf([bm0 bm1],[1 am1 am2],0.5);
%% PASSO 2 - valores dos polinmios R, S e T
%
%
%
%
%
r1 = b1est/b0est;
s0 = (am1-a1est)/b0est;
s1 = (am2-a2est)/b0est;
t0 = bm0/b0est;
cont(:,k)=[r1 s0 s1 t0]';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%Coeficientes r1, s1 e s0:
r1=((a0*am2*(b0est*b0est))+((a2est-am2-a0*am1)*(b1est*b0))+((a0+am1a1est)*(b1est*b1est)))/((b1est*b1est)(b1est*b0est*a1est)+(a2est*(b0est*b0est)));
s1=((a0*am2)-(a2est*r1))/(b1est);
s0=((am1+a0)-(r1+a1est))/(b0est);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Polinmios R, S e T:
R=tf([1 r1],1,0.5);
S=tf([s0 s1],1,0.5);
t0= beta*1;
t1= beta*a0;
T=tf([t0 t1],1,0.5);
cont(:,k)=[r1 s0 s1 t0]';
%
%Polinmios R, S e T:
%R= tf([1 b1/b0],1,0.5); %tf([1 r1],1,0.5);
%S=tf([s0 s1],1,0.5);
%t0= beta*1;
%t1= beta*a0;
%T= tf([(bm0/b0) 0],1,0.5); %tf([t0 t1],1,0.5);
///////////////////////////////////////////////////////////
///////////EXEMPLO 3.7 & 3.8//////////////////////////////
%Aluno:PEDRO JUNIOR
%Exemplo 3.7 E 3.8
clear all
close all
clc
%% Funo de transferencia
G=tf(1,[1 1 0]);
%Tempo de amostragem
h=0.5;
%Funo de transferencia discretizada
Gd=c2d(G,h);
%Parametros da planta
[Bd,Ad]=tfdata(Gd,'v');
b0=Bd(2);
b1=Bd(3);
a1=Ad(2);
a2=Ad(3);
%% Sistema desejado em malha fechada
%Dados para o sistema em malha fechada
csi=0.7;
Wn=1;
% Plos discretos desejados
pdes=exp(-csi*Wn*h + j*Wn*sqrt(1-csi^2)*h);
P=[pdes conj(pdes)];
% FT desejada em MF
Am=poly([pdes conj(pdes)]);
Bm=[polyval(Am,1) 0];
Gmd=tf(Bm,Am,h);
% Parmetros da planta desejada em malha fechada
[Bmd,Amd]=tfdata(Gmd,'v');
bm0=Bmd(2);
am1=Amd(2);
am2=Amd(3);
%% Vetor de Entrada para a Onda Quadrada (uc);
N=input(' Entre com o numero de Interaes?:');
%% Sinal de entrada Onda Quadrada;
j=0;
while j<N
for j=j+1:j+25
uc(j)=1;
end
for j=j+1:j+25
uc(j)=-1;
end
end
%% Condies iniciais necessrios para o MQR
N = length(uc); % Nmero de realizaes (medidas)
lambda = 1;
P0 = 100*eye(4); % Inicializar a matriz de covarincia *****
Teta0 = [0.1 0 0 0]'; % Inicializar o vetor de parmetros Teta
estimado *****
fi0=[0 0 0 0]';
yest=[0 0 0]';
diagP=diag(P0)';
Teta=[Teta0 Teta0 Teta0];
fi=[fi0 fi0 fi0];
diagP=[diagP; diagP; diagP];
P=P0;
cont=0*Teta;
y=0*yest;
u=0*yest;
yf=0*yest;
uf=0*yest;
erro=0*yest;
%d0=1; % Atraso do sistema exemplo 3.7
d0=2; % Atraso do sistema exemplo 3.8
for k = 4:N
%% MQR
% ----- Calcula a sada atual
y(k)=-a1*y(k-1)-a2*y(k-2)+b0*u(k-1)+b1*u(k-2); % Sada da
planta
% ----- Atualiza Fi
fi(:,k-d0)=[uf(k-d0) uf(k-d0-1) yf(k-d0) yf(k-d0-1)]';
% ----- Calcula o erro de estimao
erro(k)=y(k)-fi(:,k-d0)'*Teta(:,k-1);
% ----- Calcula o vetor de ganhos
K=P*fi(:,k-d0)/(lambda+fi(:,k-d0)'*P*fi(:,k-d0));
% ----- Calcula o novo vetor de estimao de parmetros
Teta(:,k)=Teta(:,k-1)+K*erro(k);
% ----- Atualiza a matriz de covarincia
P=(P-K*fi(:,k-d0)'*P)/lambda;
diagP=[diagP; diag(P)'];
% ----- Armazena parmetros
r0 = Teta(1,k);
r1 = Teta(2,k);
s0 = Teta(3,k);
s1 = Teta(4,k);
t0 = 1 + am1 + am2; % constante
%% PASSO 2 - Guarda parmetros normalizados por ro
cont(:,k)=[r1/r0 s0/r0 s1/r0 t0/r0];
%% PASSO 3 - clculo da lei de controle e da entrada e sada filtradas
u(k)=(t0*uc(k)-s0*y(k)-s1*y(k-1)-r1*u(k-1))/r0; % Sinal de
controle
uf(k) = u(k) - am1*uf(k-1) - am2*uf(k-2);
yf(k) = y(k) - am1*yf(k-1) - am2*yf(k-2);
% Limite do sinal de controle
if u(k)>=4,
u(k)=4;
elseif u(k)<=-4,
u(k)=-4;
end
end
%% Sinais de Entrada e Saida do Processo;
figure(1)
subplot(211)
grid on
hold on
plot(uc,'k--')
%Subplot(312)
plot(y,'b')
legend('Sinal de referncia (uc)','Sinal de sada (y)')
xlabel('Amostras')
title('Sada e Referncia');
%xlim([0 100])
%% Sinal de Controle;
subplot(212)
stairs(u,'r')
grid on
legend('Sinal de controle (u)')
xlabel('Amostras')
title('Sinal de Controle');
%xlim([0 100])
%% Parmetros a1 e a2 do Processo real e estimados;
figure(2)
subplot(221)
hold on
grid on
stairs(cont(1,:),'c','LineWidth',2)
r1=0.8467*ones(1,N);
plot(r1,'k-.')
legend('r1/r0 estimado','r1/r0 real')
xlabel('Amostras')
title('Parmetro r1/r0 estimado');
subplot(222)
hold on
grid on
stairs(cont(2,:),'r','LineWidth',2)
a2=2.6852*ones(1,N);
plot(a2,'k-.')
legend('s0/r0 estimado','s0/r0 real')
xlabel('Amostras')
title('Parmetro s0/r0 estimado');
subplot(223)
hold on
grid on
stairs(cont(3,:),'b','LineWidth',2)
a3=-1.0321*ones(1,N);
plot(a3,'k-.')
legend('s1/r0 estimado','s1/r0 real')
xlabel('Amostras')
title('Parmetro s1/r0 estimado');
subplot(224)
hold on
grid on
stairs(cont(4,:),'g','LineWidth',2)
a4=1.6531*ones(1,N);
%grid on
plot(a4,'k-.')
legend('t0/r0 estimado','t0/r0 real')
xlabel('Amostras')
title('Parmetro t0/r0 estimado');
//////////////////////////////////////////////////////////////////////
//////////////////////EXEMPLO 3.10////////////////////////////////////
%Aluno:PEDRO JUNIOR
%Exerccio 3.9
clear all
close all
clc
%% Funo de transferencia
G=tf(1,[1 1 0]);
%Tempo de amostragem
h=0.5;
%Funo de transferencia discretizada
Gd=c2d(G,h);
%Parametros da planta discretizada em forma de vetor
[Bd,Ad]=tfdata(Gd,'v');
%% Dados para o sistema em malha fechada
%Parametros usados para o sistema desejado em malha fechada
csi=0.5; %coeficiente de amortecimento
Wn=1.5; %frequencia natural
% Plos discretos desejados
pdes=exp(-csi*Wn*h + j*Wn*sqrt(1-csi^2)*h);
P=[pdes conj(pdes)];
% Funo de transferencia em malha fechada
Am=poly([pdes conj(pdes)]);
Bm1=[polyval(Am,1) 0];
% Sistema desejado em malha fechada discretizado
Gmd1=tf(Bm1,Am,h);
% Parmetros da planta desejada em malha fechada em forma de vetor
[Bmd,Amd]=tfdata(Gmd1,'v');
%% Parametros para o encontrar o controlador
b0=Bd(2);
b1=Bd(3);
a1=Ad(2);
a2=Ad(3);
bm0=Bmd(2);
am1=Amd(2);
am2=Amd(3);
a0=0;
%% Beta
beta=(1+am1+am2)/(b0+b1);
%% Minha nova FT desejada em MF
Am=poly([pdes conj(pdes)]);
Bm2=[beta*b0 beta*b1];
Gmd2=tf(Bm2,Am,h);
[Bmd2,Amd2]=tfdata(Gmd2,'v');
%% Valor de Entrada para a Onda Quadrada (uc);
N=input(' Entre com o numero de Interaes?:');
%% Sinal de entrada Onda Quadrada;
j=0;
while j<N
for j=j+1:j+25
uc(j)=1;
end
for j=j+1:j+25
uc(j)=-1;
end
end
%% Condies iniciais necessrios para o MQR
% Nmero de realizaes
N = length(uc);
lambda = 0.98;%Fator de esquecimento
P0 = diag([100 100 1 1]); % Inicializar a matriz de covarincia
Teta0 = [0 0 0.01 0.2]'; % Inicializar o vetor de parmetros Teta
estimado
fi0=[0 0 0 0]';
yest=[0 0 0]';
diagP=diag(P0)';
%Nmero de parametros a serem estimados
Teta=[Teta0 Teta0 Teta0];
fi=[fi0 fi0 fi0];
%Comportamento da matriz de covariancia
diagP=[diagP; diagP; diagP];
P=P0;
cont=0*Teta;
y=0*yest;
u=0*yest;
erro=0*yest;
for k = 3:N
%% MQR
%Calcula a sada atual
y(k)=-a1*y(k-1)-a2*y(k-2)+b0*u(k-1)+b1*u(k-2); % Sada da planta
%Atualiza fi
fi(:,k-1)=[-y(k-1) -y(k-2) u(k-1) u(k-2)]';
%Calcula o erro de estimao
erro(k)=y(k)-fi(:,k-1)'*Teta(:,k-1);
%Calcula o vetor de ganhos
K=P*fi(:,k-1)/(lambda+fi(:,k-1)'*P*fi(:,k-1));
%Calcula o novo vetor de estimao de parmetros
Teta(:,k)=Teta(:,k-1)+K*erro(k);
%Atualiza a matriz de covarincia
P=(P-K*fi(:,k-1)'*P)/lambda;
diagP=[diagP; diag(P)'];
%Armazena parmetros
a1est = Teta(1,k);
a2est = Teta(2,k);
b0est = Teta(3,k);
b1est = Teta(4,k);
%% Valores dos polinmios R, S e T
r1=((a0*am2)*(b0est^2)+(a2est-am2-a0*am1)*(b1est*b0est)+(a0+am1a1est)*(b1est^2))/(b1est^2-b1est*b0est*a1est+a2est*(b0est^2));
s0=((b1est*(a0*am1-a2est-am1*a1est+(a1est^2)+am2a1est*a0))/((b1est^2)b1est*b0est*a1est+a2est*(b0est^2)))+((b0est*(am1*a2est-a1est*a2esta0*am2+a0*a2est))/((b1est^2)-b1est*b0est*a1est+a2est*(b0est^2)));
s1=((b1est*(a1est*a2est-am1*a2est+a0*am2-a0*a2est))/((b1est^2)b1est*b0est*a1est+a2est*(b0est^2)))+((b0est*(a2est*am2-(a2est^2)a0*am2*a1est+a0*a2est*am1))/((b1est^2)b1est*b0est*a1est+a2est*(b0est^2)));
t0 = (1+am1+am2)/(b0est+b1est);
% Armazena parmetros do controlador
cont(:,k)=[r1 s0 s1 t0]';
%% Clculo da lei de controle
% Sinal de controle
u(k)=-r1*u(k-1)+t0*uc(k)-s0*y(k)-s1*y(k-1);
% Limite do sinal de controle
if u(k)>=4,
u(k)=4;
elseif u(k)<=-4,
u(k)=-4;
end
end
%% Sinais de Entrada e Saida do Processo;
figure(1)
subplot(211)
grid on
hold on
plot(uc,'k--')
%Subplot(312)
plot(y,'b')
legend('Sinal de referncia (uc)','Sinal de sada (y)')
xlabel('Amostras')
title('Sada e Referncia');
%xlim([0 100])
%% Sinal de Controle;
subplot(212)
stairs(u,'r')
grid on
legend('Sinal de controle (u)')
xlabel('Amostras')
title('Sinal de Controle');
%xlim([0 100])
%% Parmetros a1 e a2 do Processo real e estimados;
figure(2)
subplot(211)
hold on
stairs(Teta(1,:),'c')
a1=-1.6065*ones(1,N);
plot(a1,'k-.')
stairs(Teta(2,:),'b')
a2=0.6065*ones(1,N);
grid on
plot(a2,'k--')
legend('a1 estimado','a1 real','a2 estimado','a2 real')
xlabel('Amostras')
ylabel('Amplitude')
title('Parmetros a1 e a2 estimados');
%xlim([0 100])
%% Parmetros b0 e b1 do Processo real e estimados;
subplot(212)
hold on
stairs(Teta(3,:),'g')
b0=0.1065*ones(1,N);
plot(b0,'k-.')
stairs(Teta(4,:),'r')
b1=0.0902*ones(1,N);
grid on
plot(b1,'k--')
legend('b0 estimado','b0 real','b1 estimado','b1 real')
xlabel('Amostras')
ylabel('Amplitude')
title('Parmetros b0 e b1 estimados');
%xlim([0 100])
%% Parmetros do controlador r1, s0, s1 e t0
figure(3)
subplot(221)
hold on
stairs(cont(1,:),'y','LineWidth',2)
r1=0.1111*ones(1,N);
grid on
plot(r1,'k-.')
legend('r1 estimado','r1 real')
xlabel('Amostras')
title('Parmetro r1 do controlador');
subplot(222)
hold on
stairs(cont(2,:),'r','LineWidth',2)
a2=1.6422*ones(1,N);
grid on
plot(a2,'k-.')
legend('s0 estimado','s0 real')
xlabel('Amostras')
title('Parmetro s0 do controlador');
subplot(223)
hold on
stairs(cont(3,:),'b','LineWidth',2)
a3=-0.7471*ones(1,N);
grid on
plot(a3,'k-.')
legend('s1 estimado','s1 real')
xlabel('Amostras')
title('Parmetro s1 do controlador');
subplot(224)
hold on
stairs(cont(4,:),'g','LineWidth',2)
a4=0.8951*ones(1,N);
grid on
plot(a4,'k-.')
legend('t0 estimado','t0 real')
xlabel('Amostras')
title('Parmetro t0 do controlador');
//////////////////////////////////////////////////////////////////////
//////////////////////PROBLEMAS: 3.6/ 3.7/ 3.9/ 3.11//////////////////
%% STR indireto usando MQR e MDPP
% Astrom & Wittenmark, Exemplo 3.4, p.104
% Prof. Andr Ferreira - 29/01/2014
%MODIFICADO POR PEDRO JUNIOR
clear all
close all
clc
%% Definio da planta
%g=tf(1,[1 1 0]); % Planta analgica
g=tf(1,[1 2 1]); % Planta analgica do problema 3.11
Ts=0.5; % Intervalo de amostragem
gd=c2d(g,Ts); % Planta discretizada
% Parmetros da planta
[numd,dend]=tfdata(gd,'v');
b0=numd(2);
b1=numd(3);
a1=dend(2);
a2=dend(3);
%% Sistema em MF desejado
csi=0.7;
Wn=1;
% Plos discretos desejados
pdes=exp(-csi*Wn*Ts + j*Wn*sqrt(1-csi^2)*Ts);
Pdes=[pdes conj(pdes)];
% FT desejada em MF
Am=poly([pdes conj(pdes)]);
Bm=[polyval(Am,1) 0]; % Escolhido para ter ganho DC unitrio
gmd=tf(Bm,Am,Ts);
% Parmetros da planta desejada em MF
[nummd,denmd]=tfdata(gmd,'v');
bm0=nummd(2);
am1=denmd(2);
am2=denmd(3);
%Polinmio A0:
a0=0; %Este parmetro sugerido no prprio livro
A0=tf([1 a0],[1],0.5);
%% Vetor de Entrada
uc = [];
neg=-1*ones(1,25);
pos=ones(1,25);
for i = 1:3
diagP=[diagP; diag(P)'];
% ----- Armazena parmetros
a1est = Teta(1,k);
a2est = Teta(2,k);
b0est = Teta(3,k);
b1est = Teta(4,k);
%Operador de Transferncia:
%am1=Amq(2);
%am2=Amq(3);
beta=((1+am1+am2)/(b0est+b1est));
bm0=beta*b0est;
bm1=beta*b1est;
Hmq=tf([bm0 bm1],[1 am1 am2],0.5);
%% PASSO 2 - valores dos polinmios R, S e T
%
%
%
%
%
r1 = b1est/b0est;
s0 = (am1-a1est)/b0est;
s1 = (am2-a2est)/b0est;
t0 = bm0/b0est;
cont(:,k)=[r1 s0 s1 t0]';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%Coeficientes r1, s1 e s0:
r1=((a0*am2*(b0est*b0est))+((a2est-am2-a0*am1)*(b1est*b0))+((a0+am1a1est)*(b1est*b1est)))/((b1est*b1est)(b1est*b0est*a1est)+(a2est*(b0est*b0est)));
s1=((a0*am2)-(a2est*r1))/(b1est);
s0=((am1+a0)-(r1+a1est))/(b0est);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Polinmios R, S e T:
R=tf([1 r1],1,0.5);
S=tf([s0 s1],1,0.5);
t0= beta*1;
t1= beta*a0;
T=tf([t0 t1],1,0.5);
cont(:,k)=[r1 s0 s1 t0]';
%
%Polinmios R, S e T:
%R= tf([1 b1/b0],1,0.5); %tf([1 r1],1,0.5);
%S=tf([s0 s1],1,0.5);
%t0= beta*1;
%t1= beta*a0;
%T= tf([(bm0/b0) 0],1,0.5); %tf([t0 t1],1,0.5);
u(k)=-4;
end
end
subplot(221)
hold on
plot(uc,'r--')
plot(y,'b')
legend('uc','y')
xlabel('Amostras')
title('Sada e Referncia');
subplot(223)
stairs(u,'b')
legend('u')
xlabel('Amostras')
title('Sinal de Controle');
subplot(224)
stairs(cont')
legend('r1','s0','s1','t0')
xlabel('Amostras')
title('Parmetros do Controlador');
subplot(222)
stairs(Teta')
legend('a1','a2','b0','b1')
xlabel('Amostras')
title('Parmetros Estimados');
hold off