Sie sind auf Seite 1von 50

UNIVERSIDADE FEDERAL DA PARABA

PROGRAMA DE PS-GRADUAO EM ENGENHARIA MECNICA


CENTRO DE TECNOLOGIA

IDENTIFICAO DE SISTEMAS
(3 Lista de Exerccios)

PROFESSOR: Jos A. Riul


ALUNO: Richard Senko

Joo Pessoa
Maro 2015

1 Exerccios do Coelho, A. A. R.; Identificao de Sistemas Dinmicos Lineares.


5.2 Identificar a funo de transferncia discreta de um processo governado pela seguinte
equao a diferena:

y (t ) a1 y (t 1) b0 u (t 1)

a
y (t ) y (t 1) u (t 1) 1 T
b0
utilizando o estimador dos mnimos quadrados (procedimento off-line). As medidas de entrada e
sada so (estes dados sero armazenados no Matlab e depois utilizados no cdigo que ser
desenvolvido):
t
1
2
3
4
5
6
7
8
9
10
11
12
13
14

y(t)
0
0.239
-0.486
0.159
0.194
0.0039
0.0067
-0.315
0.196
-0.452
0.366
-0.261
-0.077
-0.212

u(t)
1.197
-1.830
-0.420
-0.5721
-0.287
0.435
-1.404
0.193
-1.771
0.701
-0.389
-1.040
-1.256
0.966

Para N amostras

T 1
y1
T
y
2 2 a1 Y
M b0
M
T

N
y N
O estimador dos mnimos quadrados dado pela seguinte equao:

TY

%Exerccio 5.2 do livro do Coelho


%MQ no-recursivo
clear all
clc
y=[0;0.239;-.486;.159;.194;.0039;.0067;-.315;.196;-.452;.366;-.261;-.0
77;-.212];

u=[1.197; -1.830;-.420;-.5721;-.287;.435; -1.404;.193; -1.771;.701;


-.389;-1.040; -1.256;.966];
n=length(y);
Y=[];
fi=[];
for j=2:1:n;
Y=[Y;y(j)];
fi=[fi;-y(j-1) u(j-1)];
end
theta=(inv(fi'*fi))*fi'*y(2:14);
a1=theta(1)
b0=theta(2)

a1 = 0.4115
b0 = 0.1871
Comparao da resposta real e a estimada
0.4

resposta real
resposta estimada

0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5

10

12

14

Da equao do processo temos que

b0 z 1
y( z)
y ( z ) a1 z y ( z ) b0 z u ( z )

u ( z ) 1 a1 z 1
1

Sendo a1=0,4115 e b0=0,1871 a funo de transferncia discreta estimada do sistema dada da


seguinte forma

0,1871z 1
G ( z )
1 0, 4115 z 1

5.3 Considerar o processo discreto caracterizado pela equao:

y (t ) b0u (t ) b1u (t 1)

b
y (t ) u (t ) u (t 1) 0 T
b1
onde as seguintes medidas foram obtidas (estes dados sero armazenados no Matlab e depois
utilizados no cdigo que ser desenvolvido):
t
0
1
2
3
4
5
6
7
8
9
10

y(t)
0
1
-1
1
1
1
-1
-1
0
0
0

u(t)
0
1.1
-0.2
0.1
0.9
1
0.1
-1.1
-0.8
-0.1
0

Para N amostras

T 1
y1
T
y
2 2 b0 Y
M b1
M
T

y N
N
O estimador dos mnimos quadrados dado pela seguinte equao:

TY

%Exerccio 5.3 do livro do Coelho


%MQ no-recursivo
clear all
clc
y=[0;1.1;-.2;.1;.9;1;.1;-1.1;-.8;-.1;0];
u=[0;1;-1;1;1;1;-1;-1;0;0;0];
n=length(y);
Y=[];
fi=[];
for j=2:1:n;
Y=[Y;y(j)];
fi=[fi;u(j) u(j-1)];
end

theta=(inv(fi'*fi))*fi'*Y;
b0=theta(1)
b1=theta(2)
t=[1:11];
figure(1)
plot(t,u)
figure(2)
plot(t,y)
for t=2:1:n
yest=fi*theta;
end
t=2:1:n;
figure(3)
plot(t,Y,t,yest')

b0 = 0.6143
b1 = 0.5143
Comparao da resposta real e a estimada
1.5
resposta real
resposta estimada
1

0.5

-0.5

-1

-1.5

10

11

O vetor de parmetros estimados :

b
0, 6143
0

0,5143
b1

5.5 Admitir o processo discreto representado por

0,5 z 1
Y ( z)
Gp ( z)

1
1
(1 0,5 z )(1 0,5 z ) U ( z )
Logo

Y ( z)
0,5 z 1

U ( z ) 1 0, 6 z 1 0, 05 z 2
y ( k ) 0, 6 y (k 1) 0, 05 y ( k 2) 0,5u (k 1) equao de diferenas do processo

- Utilizando o Matlab
%Exerccio 5.5 do livro do Coelho
clear all
close all
clc
t1=0:0.5:12;
ur=t1;
%rampa
us=sin(t1*pi/5);
%senide
for j=1:1:3
ud(j)=1;
%degrau
yd(j)=0;
yr(j)=0;
ys(j)=0;
end
for j=3:1:25
ud(j)=1;
%degrau
yd(j)=0.6*yd(j-1)-0.05*yd(j-2)+0.5*ud(j-1);
yr(j)=0.6*yr(j-1)-0.05*yr(j-2)+0.5*ur(j-1);
ys(j)=0.6*ys(j-1)-0.05*ys(j-2)+0.5*us(j-1);
end
t2=1:1:25;
%Figuras das respostas a cada entrada
figure(1)
subplot(121);plot(t2,ud);title('Degrau')
subplot(122);plot(t2,yd);title('Resposta devido ao degrau')
figure(2)
subplot(121);plot(t1,ur);title('Rampa')
subplot(122);plot(t1,yr);title('Resposta devido a rampa')
figure(3)
subplot(121);plot(t1,us);title('Sinal senoidal')
subplot(122);plot(t1,ys);title('Resposta devido ao sinal senoidal')
%MQ para cada entrada
Yd=[];Yr=[];Ys=[];
fid=[];fir=[];fis=[];

for k=3:1:20;
Yd=[Yd;yd(k)];Yr=[Yr;yr(k)];Ys=[Ys;ys(k)];
fid=[fid;yd(k-1) ud(k-1)];fir=[fir;yr(k-1) ur(k-1)];fis=[fis;ys(k-1) us(k-1)];
end
tetad=inv(fid'*fid)*fid'*Yd;tetar=inv(fir'*fir)*fir'*Yr;tetas=inv(fis'*fis)*fis'*Ys;
a1_d=tetad(1)
b0_d=tetad(2)
a1_r=tetar(1)
b0_r=tetar(2)
a1_s=tetas(1)
b0_s=tetas(2)
for t=2:1:20
yestd=fid*tetad;
yestr=fir*tetar;
yests=fis*tetas;
end
%Matrizes de covarincia
p_d=inv(fid'*fid)
p_r=inv(fir'*fir)
p_s=inv(fis'*fis)
a1_d =
5.399968404755433e-001
b0_d =
5.128974535139698e-001
a1_r =
5.308566041799027e-001
b0_r =
5.220647986267659e-001
a1_s =
5.332686168665950e-001
b0_s =
5.238393141206926e-001
p_d =
6.984969973760109e-001
-6.850831589986276e-001
p_r =
2.661298664253226e-001
-2.457130719966514e-001
p_s =
4.065680054574111e-001
-3.370515678749010e-001

-6.850831589986276e-001
7.274824736477847e-001
-2.457130719966514e-001
2.287592346597027e-001
-3.370515678749010e-001
3.803854185780419e-001

a) Obter a sada do processo y(t) para os seguintes sinais de entrada:


i) Sinal degrau: u(t) = 1;

Degrau

Resposta devido ao degrau

1.4

1.8

1.2

1.6
1

1.4
1.2

0.8

1
0.6

0.8
0.6

0.4

0.4
0.2

0.2
0

10

20

30

10

20

30

ii) Sinal rampa: u(t) = t;


Rampa

12

Resposta devido a rampa

14
12

10

10

8
6
6
4

10

15

10

15

iii) Sinal senoidal u(t) = sen (t/5);

Sinal senoidal

Resposta devido ao sinal senoidal


1.5

0.8
1

0.6
0.4

0.5

0.2
0

-0.2
-0.5

-0.4
-0.6

-1

-0.8
-1

10

15

-1.5

10

15

b) Utilizando como modelo estimado funo de transferncia discreta de primeira ordem,


determinar os parmetros a1 e b0 pelo mtodo dos mnimos quadrados (procedimento off-line)
para as trs entradas. Discutir a preciso dos resultados (admitir 20 medidas).
Vetor de parmetros estimados para entrada degrau

a
0,540
d 1d

0,513
b0 d
Vetor de parmetros estimados para entrada rampa

a
0, 531
r 1r

0,522
b0 r
Vetor de parmetros estimados para o sinal senoidal

a
0,533
s 1s

0,524
b0 s
Para comparar os parmetros estimados podemos verificar o tamanho dos elementos da matriz
de covarincia de cada entrada. A matriz de covarincia definida como:

P (t ) [ T (t ) (t )]1
Matriz de covarincia para entrada degrau

0, 698 0, 685

0, 685 0, 727

Pd (t )

Matriz de covarincia para entrada rampa

0, 266 0, 246

0, 246 0, 229

Pr (t )

Matriz de covarincia para o sinal senoidal

0, 407 0,337

0,337 0,380

Ps (t )

Verifica-se que os elementos da matriz de covarincia para entrada rampa tm menor magnitude
consequentemente os parmetros estimados para o sinal rampa so os de maior preciso.

10

5.6 Seja o sistema representado pelo seguinte modelo de segunda ordem:

A( z 1 ) y (t ) z d B ( z 1 )u (t ) e(t )
onde

A( z 1 ) 1 1,5 z 1 0, 7 z 2
B ( z 1 ) 1 0,5 z 1
d 1
e sendo e(t) um sinal rudo branco com mdia 0 (zero) e desvio padro 0.01. Seja u(t) uma
sequencia N(0,1) ou PRBS com amplitude 1.
- Primeiro caso (na,nb) = (1,0):

(1 1,5 z 1 ) y(t ) z 1u (t ) e(t )


y ( k ) 1,5 y ( k 1) u ( k 1) e( k )
- Utilizando o Matlab:
%Questo 5.6 do livro do Coelho
clear all
close all
format long e
clc
%Gerando um PRBS com amplitude +-1
i=1;
for t1_prbs=0:0.01:0.99
u1(i)=0;
t_prbs(i)=t1_prbs;
i=i+1;
end
for t_prbs=1:1:length(u1);
if rand>0.5;
u2(t_prbs)=1;
else
u2(t_prbs)=-1;
end
u(t_prbs)=u1(t_prbs)+u2(t_prbs);
if u(t_prbs)==0;
u(t_prbs)=u2(t_prbs);
else
end
end
i_prbs=1:1:100;
figure(1)
plot(i_prbs,u),axis([0 100 -1.5 1.5])
%Gerando o rudo branco com desvio padro igual a 0.01
N=100;
e=0.01*randn(N,1);
11

media_e=mean(e)
variancia_e=var(e)
figure(2)
plot(e)
%MQR
np=2;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
for t=1:3
y(t)=0;
a1(t)=teta(1);
b0(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=4:1:N
y(t)=1.5*y(t-1)+u(t-1)+e(t);
fi=[-y(t-1);u(t-1)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
K=p*fi/(1+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(t);
% vetor de parmetros
p=(p-K*fi'*p);
% matriz de covarincia
a1(t)=teta(1);
b0(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(3)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,b0(t)),title('b0'),xlabel('amostras');
- Sinal de entrada PRBS de amplitude 1:

12

1.5

0.5

-0.5

-1

-1.5

10

20

30

40

50

60

70

80

90

100

- Rudo com mdia 0 e desvio padro 0,01:


0.025
0.02
0.015
0.01
0.005
0
-0.005
-0.01
-0.015
-0.02
-0.025

10

20

30

40

50

60

70

80

90

100

- Parmetros estimados:
a1

b0

1.4

-0.2

1.2

-0.4

-0.6

0.8

-0.8
0.6

-1

0.4

-1.2

0.2

-1.4
-1.6

50
amostras

100

50
amostras

100

Verifica-se que os parmetros estimados chegaram ao valor dos parmetros do modelo definido
na simulao de y
SEQ = 7,251365872463060 (somatrio do erro quadrtico)

13

R2 = 1 (coeficiente de correlao mltipla)


- Segundo caso (na,nb) = (1,1):

(1 1,5 z 1 ) y (t ) z 1 (1 0,5 z 1 )u (t ) e(t )


y (k ) 1,5 y (k 1) u (k 1) 0,5u ( k 2) e(k )
O sinal de entrada e o rudo so gerados da mesma forma do primeiro caso a diferena est no
estimador
%MQR
np=3;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
for t=1:4
y(t)=0;
a1(t)=teta(1);
b0(t)=teta(2);
b1(t)=teta(3);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=5:1:N
y(t)=1.5*y(t-1)+u(t-1)+0.5*u(t-2)+e(t);
fi=[-y(t-1);u(t-1);u(t-2)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
K=p*fi/(1+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(t);
% vetor de parmetros
p=(p-K*fi'*p);
% matriz de covarincia
a1(t)=teta(1);
b0(t)=teta(2);
b1(t)=teta(3);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(3)
subplot(131),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(132),plot(t,b0(t)),title('b0'),xlabel('amostras');
subplot(133),plot(t,b1(t)),title('b1'),xlabel('amostras');
- Parmetros estimados:

14

a1

b0

1.4

-0.2

0.7

1.2

-0.4

0.6

-0.6

0.5

0.8

-0.8

0.4
0.6

-1

0.3

0.4

-1.2

0.2

0.2

-1.4
-1.6

b1

0.8

50
amostras

100

0.1

50
amostras

100

50
amostras

100

SEQ = 7,619913784614652 (somatrio do erro quadrtico)


R2 = 1 (coeficiente de correlao mltipla)
- Terceiro caso (na,nb) = (2,0):

(1 1,5 z 1 0, 7 z 2 ) y (t ) z 1u (t ) e(t )
y (k ) 1,5 y ( k 1) 0, 7 y ( k 2) u (k 1) e(k )
O programa semelhante ao dos outros casos
- Parmetros estimados
a1

a2

0.7

-0.2
-0.4
-0.6

b0

1.4

0.6

1.2

0.5

0.4

0.8

0.3

0.6

0.2

0.4

0.1

0.2

-0.8
-1
-1.2
-1.4
-1.6

50
amostras

100

50
amostras

100

50
amostras

100

SEQ = 3,745969378594384 (somatrio do erro quadrtico)


R2 = 0,9919777068172568 (coeficiente de correlao mltipla)
15

- Quarto caso (na,nb)=(2,1)

(1 1,5 z 1 0, 7 z 2 ) y(t ) z 1 (1 1,5 z 1 )u(t ) e(t )


y (k ) 1,5 y ( k 1) 0, 7 y ( k 2) u ( k 1) 0,5u ( k 2) e(k )
O programa semelhante ao dos outros casos
- Parmetros estimados
a1

0
-0.5

0.6

-1

0.4

-1.5

0.2

-2

1.5

50
amostras
b0

a2

0.8

100

50
amostras
b1

100

50
amostras

100

0.8
0.6

0.4
0.5
0

0.2
0

50
amostras

100

SEQ = 10,41190894382616 (somatrio do erro quadrtico)


R2 = 0,9891539955226569 (coeficiente de correlao mltipla)

16

5.8
i) Gerando e salvando o sinal de entrada (PRBS 1) e o rudo (mdia 0 e desvio padro 0,01)
%Gerando um PRBS com amplitude +-1
i=1;
for t1_prbs=0:0.01:0.99
u1(i)=0;
t_prbs(i)=t1_prbs;
i=i+1;
end
for t_prbs=1:1:length(u1);
if rand>0.5;
u2(t_prbs)=1;
else
u2(t_prbs)=-1;
end
u(t_prbs)=u1(t_prbs)+u2(t_prbs);
if u(t_prbs)==0;
u(t_prbs)=u2(t_prbs);
else
end
end
t_prbs=0:0.01:0.99;
figure(1)
plot(t_prbs,u),axis([0 1 -1.5 1.5])
%Gerando o rudo branco com desvio padro igual a 0.01
N=100;
e=0.01*randn(N,1);
media_e=mean(e)
variancia_e=var(e)
figure(2)
plot(e)
aa=[u' e];
save sinais.dat aa ascii
- Sinal de entrada PRBS

17

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0

10

20

30

40

50

60

70

80

90

100

10

20

30

40

50

60

70

80

90

100

- Rudo
0.03

0.02

0.01

-0.01

-0.02

-0.03

- Programa para estimao pelos MQR


%Questo 5.8 do livro do Coelho
clear all
close all
format long e
clc
load sinais.dat
u=sinais(:,1);
e=sinais(:,2);
N=length(u);

18

t=1:1:N;
figure(1)
plot(t,u);axis([0 N -1.2 1.2])
figure(2)
plot(e)
%parmetro variante b0r
for t1=1:1:100
if t1>=0 & t1<=20
b0r(t1)=2;
elseif t1>=21 & t1<=40
b0r(t1)=3;
elseif t1>=41 & t1<=60
b0r(t1)=2;
elseif t1>=61 & t1<=80
b0r(t1)=3;
else
b0r(t1)=2;
end
end
t1=1:1:100;
figure(3)
plot(t1,b0r),axis([0 100 1.8 3.2])
%MQR
np=2;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for t=1
y(t)=0;
a1(t)=teta(1);
b0(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=2:1:N
y(t)=0.8*y(t-1)+b0r(t)*u(t-1)+e(t);
fi=[-y(t-1);u(t-1)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(t);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
a1(t)=teta(1);
b0(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
19

SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(4)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,b0(t)),title('b0'),xlabel('amostras');
- Para fator de esquecimento =1
- Parmetros estimados =1
a1

b0

-0.1
2.5
-0.2

-0.3

-0.4
1.5
-0.5

-0.6

-0.7
0.5
-0.8

-0.9

20

40
60
amostras

80

100

20

40
60
amostras

80

100

SEQ = 3.162474068501219e+001
R2 = 9.814097045064584e-001
- Para fator de esquecimento =0,9
- Parmetros estimados com =0,9

20

a1

b0

-0.1
2.5
-0.2

-0.3

-0.4
1.5
-0.5

-0.6

-0.7
0.5
-0.8

-0.9

20

40
60
amostras

80

100

20

40
60
amostras

80

100

SEQ = 2.543722088631948e+001
R2 = 9.850469776963173e-001
Para o caso considerando fator de esquecimento igual a 0,9 a soma dos erros quadrticos
menor e o coeficiente de correlao mltipla maior. Portanto os parmetros estimados com
=0,9 so melhores.
ii)
Estimao dos parmetros usando random walk
clear all
close all
format long e
clc
load sinais.dat
u=sinais(:,1);
e=sinais(:,2);
N=length(u);
%parmetro variante b0r
for t1=1:1:100
if t1>=0 & t1<=20
b0r(t1)=2;
elseif t1>=21 & t1<=40
b0r(t1)=3;
elseif t1>=41 & t1<=60
b0r(t1)=2;
elseif t1>=61 & t1<=80
b0r(t1)=3;
else
b0r(t1)=2;

21

end
end
t1=1:1:100;
figure(7)
plot(t1,b0r),axis([0 100 1.8 3.2])
%MQR
np=2;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
Q=diag([0 0.05]); % matiz Q usada n mtodo randow walk
for t=1
y(t)=0;
a1(t)=teta(1);
b0(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=2:1:N
y(t)=0.8*y(t-1)+b0r(t)*u(t-1)+e(t);
fi=[-y(t-1);u(t-1)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(t);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p)+Q;
% matriz de covarincia
a1(t)=teta(1);
b0(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(4)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,b0(t)),title('b0'),xlabel('amostras');
-Parmetros estimados com random walk

22

a1

b0

-0.1
2.5
-0.2

-0.3

-0.4
1.5
-0.5

-0.6

-0.7
0.5
-0.8

-0.9

20

40
60
amostras

80

100

20

40
60
amostras

80

100

SEQ = 1.764611361638944e+001
R2 = 9.896269041473356e-001
Usando o random walk melhoramos os parmetros estimados, pois foi observado a diminuio
da soma dos erros quadrticos e o aumento do coeficiente de correlao mltipla em relao ao
processo de estimao usando o fator de esquecimento igual a 0,9.

23

5.9 Gerando e salvando o sinal de entrada (PRBS 1) e o rudo (mdia 0 e varincia 1)


%Gerando um PRBS com amplitude +-1
i=1;
for t1_prbs=0:0.01:9.99
u1(i)=0;
t_prbs(i)=t1_prbs;
i=i+1;
end
for t_prbs=1:1:length(u1);
if rand>0.5;
u2(t_prbs)=1;
else
u2(t_prbs)=-1;
end
u(t_prbs)=u1(t_prbs)+u2(t_prbs);
if u(t_prbs)==0;
u(t_prbs)=u2(t_prbs);
else
end
end
i_prbs=1:1000;
figure(1)
plot(i_prbs,u),axis([0 1000 -1.5 1.5])
%Gerando o rudo branco com varincia igual a 1
N=1000;
e=1*randn(N,1);
media_e=mean(e)
variancia_e=var(e)
figure(2)
plot(e)
aa=[u' e];
save sinais58.dat aa -ascii
- Sinal de entrada (PRBS)
1.5

0.5

-0.5

-1

-1.5

100

200

300

400

500

600

700

800

900

1000

24

- Rudo
3
2
1
0
-1
-2
-3
-4

100

200

300

400

500

600

700

800

900

1000

- Estimando os parmetros com o MQR padro


%Questo 5.8 do livro do Coelho
clear all
close all
format long e
clc
load sinais58.dat
u=sinais58(:,1);
e=sinais58(:,2);
N=length(u);
%MQR
np=2;
% numero de parametros
p=10*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento (para lamb=1 MQR padro)
for t=1:2
y(t)=0;
a1(t)=teta(1);
a2(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=3:1:N
y(t)=1.5*y(t-1)-0.56*y(t-2)+e(t);
fi=[-y(t-1);-y(t-2)];

25

erro(t)=y(t)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(t);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
a1(t)=teta(1);
a2(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(1)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,a2(t)),title('a2'),xlabel('amostras');
figure(2)
plot(t,y,t,yest),title('Comparao da sada estimada e real')
- Parmetros estimados usando MQR padro
a1

1.5

a2

2.5

0.5
2

0
1.5
-0.5

1
-1

0.5

-1.5

-2

200

400
600
amostras

800

1000

200

400
600
amostras

800

1000

SEQ = 1.000474433151930e+003
R2 = 9.474966798522828e-001
i)

Estimao usando o algoritmo da aproximao estocstica pelo procedimento de


sequncia ganho com aprendizado seqencial

%Questo 5.9_i do livro do Coelho


clear all

26

close all
format long e
clc
load sinais58.dat
u=sinais58(:,1);
e=sinais58(:,2);
N=length(u);
t=1:1:N;
%Algoritmo de estimao estocstica
np=2;
% numero de parametros
p=10*eye(np,np); % condies iniciais
teta=zeros(np,1); %
alfa=0.1;
% coeficientes de gama
beta=1;
%
for t=1:2
y(t)=0;
a1(t)=teta(1);
a2(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=3:1:N
y(t)=1.5*y(t-1)-0.56*y(t-2)+e(t);
fi=[-y(t-1);-y(t-2)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
gama=alfa/(beta+fi'*fi);
% ajuste de ganho
teta=teta+gama*fi*erro(t);
% vetor de parmetros
a1(t)=teta(1);
a2(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);
erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(1)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,a2(t)),title('a2'),xlabel('amostras');

27

- Para (,)=(0.1,1)
Parmetros estimados (,)=(0.1,1)
a1

0.2

0.7

-0.2

0.6

-0.4

0.5

-0.6

0.4

-0.8

0.3

-1

0.2

-1.2

0.1

-1.4

-1.6

-0.1

-1.8

200

400
600
amostras

a2

0.8

800

1000

-0.2

200

400
600
amostras

800

1000

SEQ = 1.363879528035444e+003
R2 = 9.284257536919106e-001
- Para (,)=(0.01,1)
Parmetros estimados (,)=(0.01,1)

28

a1

0.2

0.05

-0.2

-0.4

-0.05

-0.6

-0.1

-0.8

-0.15

-1

-0.2

-1.2

200

400
600
amostras

a2

0.1

800

1000

-0.25

200

400
600
amostras

800

1000

SEQ = 3.396849128627693e+003
R2 = 8.217387157691108e-001
Comparando o somatrio dos erros quadrticos ou o coeficiente de correlao mltipla
verificamos que para a estimao usando o algoritmo da aproximao estocstica de seqncia
ganho com aprendizado seqencial os melhores parmetros estimados so para =0,1 e =1. E
comparando este mtodo com o de estimao dos MQR padro verificamos que a melhor
estimativa dos parmetros so para a usando os MQR padro.
ii)

Estimao usando o algoritmo da aproximao estocstica pelo procedimento de


sequncia ganho escalar

Para =0,005
Parmetros estimados =0,005

29

a1

0.2

a2

0.6

0.4

-0.2
0.2
-0.4

-0.6

-0.8

-0.2

-1
-0.4
-1.2
-0.6

-1.4

-1.6

200

400
600
amostras

800

1000

-0.8

200

400
600
amostras

800

1000

SEQ = 1.383216070498292e+003
R2 = 9.274110024440667e-001
- Para =0,01
Parmetros estimados =0,01
a1

0.5

-0.5

0.5

-1

-1.5

-0.5

-2

200

400
600
amostras

a2

1.5

800

1000

-1

200

400
600
amostras

800

1000

SEQ = 2.595184749121822e+003

30

R2 = 8.638087978956633e-001
Comparando o somatrio dos erros quadrticos ou o coeficiente de correlao mltipla
verificamos que para a estimao usando o algoritmo da aproximao estocstica de seqncia
ganho escalar os melhores parmetros estimados so para =0,005.
iii)
Estimao usando o algoritmo da aproximao estocstica ajustando pelo vetor total de
medidas.
clear all
close all
format long e
clc
load sinais58.dat
u=sinais58(:,1);
e=sinais58(:,2);
N=length(u);
t=1:1:N;
figure(1)
plot(t,u);axis([0 N -1.2 1.2])
figure(2)
plot(e)
y(1:2)=0;
for t=3:N
y(t)=1.5*y(t-1)-0.56*y(t-2)+e(t);
end
%Algoritmo de estimao estocstica
np=2;
% numero de parametros
p=10*eye(np);
% condies iniciais
teta=zeros(np,1); %
r=zeros(np);
%
for t=1:5
a1(t)=teta(1);
a2(t)=teta(2);
erro(t)=0.0;
erroq(t)=0.0;
erro1(t)=0.0;
erroqm(t)=0.0;
end
for t=6:1:N
fi=[-y(t-1);-y(t-2)];
erro(t)=y(t)-fi'*teta;
% erro de estimao
r=r+(abs(fi)*abs(fi)');
teta=teta+inv(r)*fi*erro(t);
% vetor de parmetros
a1(t)=teta(1);
a2(t)=teta(2);
yest(t)=fi'*teta;
erroq(t)=erro(t)*erro(t);

31

erroqt(t)=erroq(t-1)+erroq(t);
ybarra=mean(y);
erro1(t)=(y(t)-ybarra);
erroqm(t)=erro1(t)*erro1(t);
erroqmt(t)=erroqm(t-1)+erroqm(t);
end
SEQ=sum(erroq)
% somatorio do erro quadratico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlaao multipla
t=1:1:N;
figure(4)
subplot(121),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(122),plot(t,a2(t)),title('a2'),xlabel('amostras');
figure(5)
plot(t,y,t,yest),title('Comparao da sada estimada e real')
Parmetros estimados ajustando pelo vetor total de medidas.

a1

a2

-0.5

-1
2
-1.5
1
-2
0
-2.5
-1
-3

-2

-3.5

-4

200

400
600
amostras

800

1000

-3

200

400
600
amostras

800

1000

SEQ = 1.063217182575651e+003
R2 = 9.445655959909940e-001
Comparando o somatrio dos erros quadrticos ou o coeficiente de correlao mltipla
verificamos que para a estimao usando o algoritmo da aproximao estocstica ajustando
pelo vetor total de medidas mostrou-se melhor que os mtodos utilizados em i) e ii), porm os
parmetros estimados pelo mtodo dos MQR padro ainda so melhores.

32

2. Identificar os parmetros de um sistema SISO, atravs dos dados do arquivo robot.dat.


Comparar as respostas estimadas com a resposta real. Mostrar a correlao cruzada entre o sinal
de entrada e o erro de previso. Determinar o coeficiente de correlao mltipla, o somatrio do
erro quadrtico quando da utilizao do MQR. Alm de variar a ordem do modelo com o uso do
MQR (de 1 6).
- Utilizando o algoritmo MQ:
clc
clear all
close all
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQ
Y=[];
Fi=[];
for j=3:1:n;
Y=[Y;y(j)];
Fi=[Fi;-y(j-1) -y(j-2) u(j-1)];
end
teta=inv(Fi'*Fi)*Fi'*Y; % vetor de parmetros estimado
a1=teta(1)
a2=teta(2)
b0=teta(3)
yest=Fi*teta;
% sada estimada
t=3:1:n;
figure(1)
plot(t,Y,'b',t,yest,'g')

- Parmetros Estimados:
a1 = -1.8063
a2 = 0.8147
b0 = 0.0531
- Comparao (Resposta Real x Estimada):

33

- Utilizando o algoritmo MQR:


clc
clear all
close all
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=3;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for j=1:2
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=3:1:n
fi=[-y(j-1);-y(j-2);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
a1(j)=teta(1);
a2(j)=teta(2);
b0(j)=teta(3);
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);

34

rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

- Comparao (Resposta Real x Estimada):

- Erro de Estimao:

35

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue = 0.0059
- Coeficiente de correlao mltipla:
R2 = 0.9925
- Somatrio do erro quadrtico:
SEQ = 0.1360
OBSERVAO: PARA ESCOLHA DA ORDEM DO MODELO MAIS ADEQUADO, COM
O USO DO MQR, VARIAR A ORDEM DOS MODELOS DE 1 6; E USAR:
(Considerar d = 0 atraso de transporte).
importante destacar que quanto menor o SEC, melhor o modelo, porm nem sempre
vantajoso utilizar o modelo com menor SEC.
- Modelo de 1 ordem nenhum zero
close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=2;
p=1000*eye(np,np);
teta=zeros(np,1);
lamb=1;

% numero de parametros
% condies iniciais
%
% fator de esquecimento

36

for j=1:2
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=3:1:n
fi=[-y(j-1);u(j)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

0.0138

37

- Coeficiente de correlao mltipla:


R2 =

0.9766

- Somatrio do erro quadrtico:


SEQ = 0.4233
- Modelo de 2 ordem 1 zero
close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=4;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for j=1:2
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=3:1:n
fi=[-y(j-1);-y(j-2);u(j);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

38

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

-0.0066

- Coeficiente de correlao mltipla:


R2 =

0.9923

- Somatrio do erro quadrtico:


SEQ = 0.1384
- Modelo de 3 ordem 1 zero
close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=5;
p=1000*eye(np,np);
teta=zeros(np,1);
lamb=1;
for j=1:3
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=4:1:n

% numero de parametros
% condies iniciais
%
% fator de esquecimento

39

fi=[-y(j-1);-y(j-2);-y(j-3);u(j);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);

end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

-0.0030

- Coeficiente de correlao mltipla:


R2 =

0.9929

- Somatrio do erro quadrtico:


SEQ = 0.1229

40

- Modelo de 4 ordem 1 zero


close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=6;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for j=1:4
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=5:1:n
fi=[-y(j-1);-y(j-2);-y(j-3);-y(j-4);u(j);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

41

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

-0.0032

- Coeficiente de correlao mltipla:


R2 =

0.9910

- Somatrio do erro quadrtico:


SEQ = 0.1511
- Modelo de 5 ordem 1 zero
close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=7;
p=1000*eye(np,np);
teta=zeros(np,1);
lamb=1;
for j=1:5
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end

% numero de parametros
% condies iniciais
%
% fator de esquecimento

42

for j=6:1:n
fi=[-y(j-1);-y(j-2);-y(j-3);-y(j-4);-y(j-5);u(j);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

-0.0032

- Coeficiente de correlao mltipla:


R2 =

0.9759

- Somatrio do erro quadrtico:


SEQ = 0.3908

43

- Modelo de 6 ordem 1 zero


close all
clear all
clc
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=8;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for j=1:6
y(j)=0;
yest(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=7:1:n
fi=[-y(j-1);-y(j-2);-y(j-3);-y(j-4);-y(j-5);-y(j-6);u(j);u(j-1)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')

44

- Correlao cruzada entre o sinal de entrada e o erro de previso:


Rue =

-0.0030

- Coeficiente de correlao mltipla:


R2 =

0.9423

- Somatrio do erro quadrtico:


SEQ = 0. 9174
3. Identificar os parmetros de um sistema de dois graus de liberdade atravs dos dados do
arquivo robot2.dat. Considerar na = 2, nb = 1, d = 1 para os dois elos do rob. Utilizar o
MQR. Comparar as respostas estimadas com as reais graficamente e mostrar as curvas dos erros
de estimao.
- Utilizando as duas primeiras colunas do arquivo robot2.dat:
clc
clear all
close all
load robo2gdl.dat
u=robo2gdl(:,1);
y=robo2gdl(:,2);
n=length(y);
%MQR
np=4;
p=1000*eye(np,np);
teta=zeros(np,1);
lamb=1;
for j=1:2
y(j)=0;
yest(j)=0;
a1(j)=0;

% numero de parametros
% condies iniciais
%
% fator de esquecimento

45

a2(j)=0;
b0(j)=0;
b1(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;

end
for j=3:1:n
fi=[-y(j-1);-y(j-2);u(j-1);u(j-2)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
a1(j)=teta(1);
a2(j)=teta(2);
b0(j)=teta(3);
b1(j)=teta(4);
yest(j)=fi'*teta;
erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);
end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')
figure(3)
subplot(221),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(222),plot(t,a2(t)),title('a2'),xlabel('amostras');
subplot(223),plot(t,a1(t)),title('b0'),xlabel('amostras');
subplot(224),plot(t,a2(t)),title('b1'),xlabel('amostras');

- Comparao (Resposta Real x Estimada):

46

- Curvas dos erros de estimao e erro de estimao:

47

- Utilizando as duas ultimas colunas do arquivo robot2.dat:


clc
clear all
close all
load robo2gdl.dat
u=robo2gdl(:,3);
y=robo2gdl(:,4);
n=length(y);
%MQR
np=4;
% numero de parametros
p=1000*eye(np,np); % condies iniciais
teta=zeros(np,1); %
lamb=1;
% fator de esquecimento
for j=1:2
y(j)=0;
yest(j)=0;
a1(j)=0;
a2(j)=0;
b0(j)=0;
b1(j)=0;
erro(j)=0.0;
erroq(j)=0.0;
erro1(j)=0.0;
erroqm(j)=0.0;
rue1(j)=0;
end
for j=3:1:n
fi=[-y(j-1);-y(j-2);u(j-1);u(j-2)];
erro(j)=y(j)-fi'*teta;
% erro de estimao
K=p*fi/(lamb+fi'*p*fi);
% ganho do estimador
teta=teta+K*erro(j);
% vetor de parmetros
p=(1/lamb)*(p-K*fi'*p);
% matriz de covarincia
a1(j)=teta(1);
a2(j)=teta(2);
b0(j)=teta(3);
b1(j)=teta(4);
yest(j)=fi'*teta;

48

erroq(j)=erro(j)*erro(j);
erroqt(j)=erroq(j-1)+erroq(j);
ybarra=mean(y);
erro1(j)=(y(j)-ybarra);
erroqm(j)=erro1(j)*erro1(j);
rue1(j)=u(j)*erro(j);

end
SEQ=sum(erroq)
% somatrio do erro quadrtico
R2=1-(SEQ/sum(erroqm))
% coeficiente de correlao
mltipla
rue=(1/n)*sum(rue1)
% correlao cruzada entre os
sinais de entrada e erro de previso
t=1:1:n;
figure(1)
plot(t,y(t),t,yest(t)),title('Comparao da sada real e a estimada')
figure(2)
plot(t,erro(t)),title('Erro de estimao')
figure(3)
subplot(221),plot(t,a1(t)),title('a1'),xlabel('amostras');
subplot(222),plot(t,a2(t)),title('a2'),xlabel('amostras');
subplot(223),plot(t,a1(t)),title('b0'),xlabel('amostras');
subplot(224),plot(t,a2(t)),title('b1'),xlabel('amostras');

- Comparao (Resposta Real x Estimada):

49

- Curvas dos erros de estimao e erro de estimao:

50

Das könnte Ihnen auch gefallen