Você está na página 1de 18

Universidade Federal do Pará

Instituto Tecnológico

Programa de Pós-graduação em Engenharia Elétrica

Disciplina: Modelagem e Identificação de Sistemas

Professor: Dr. Walter Barra Jr. / Dr. Carlos Tavares

Estimador de Mínimos Quadrados Recursivo com Parâmetros


Variantes no Tempo

Junho - 2009
Este roteiro tem por objetivo mostrar a implementação do algoritmo de
mínimos quadrados recursivo (MQR) no ambiente MATLAB, considerando
parâmetros de planta que variam com o tempo. (Mudança no ponto de
operação)

I – Considerações Iniciais

Seja uma função de transferência representada na forma a seguir:

Que pode ser escrito na forma de equação de diferenças como:

E representado por:

E o modelo estimado seria representado por

Onde e é o erro de estimação.

Logo, definindo-se o vetor tem-se os parâmetros estimados da planta.

No presente roteiro, pretende-se abordar o processo de identificação do


vetor de parâmetros estimados ( , levando-se em conta que os parâmetros
da planta são variantes no tempo. Dividir-se-á, então, o processo de
identificação em 4 situações distintas, que servirão para exemplificar desafios
encontrados na utilização de do estimador de MQR: quando o algoritmo não é
desenvolvido para parâmetros variantes; quando pode-se rastrear a variação
dos valores para um ensaio com curta duração; quando o rastreamento ocorre
em um processo de identificação longo; e identificação de parâmetros variantes
no tempo com duração de ensaio longa.

II - Identificação de Parâmetros Variantes no Tempo


a) Situação 1: quando o estimador de MQR não é desenvolvido
para parâmetros variantes no tempo.

Neste primeiro caso, o algoritmo é idêntico ao visto anteriormente para


MQR. Contudo, será acrescida a mudança no ponto de operação da planta
desejada.

Inicialmente, serão declaradas as condições iniciais para o processo.


Será gerado um sinal através de funções próprias do MATLAB com
características aleatórias o suficiente para servir de sinal de entrada, embora
não seja uma Seqüência Binária Pseudo-Aleatória (SBPA) como anteriormente
projetada. Além disso, já são dados os parâmetros da planta de 2ª ordem.

Para o projeto de um estimador de mínimos quadrados recursivos, deve-


se observar a seqüência de 7 passos a seguir:

1º) Medir a saída e entrada do sistema

(II.1)

2º) Atualizar o vetor de medidas φ

(II.2)

3º) Calcular a saída estimada pelo modelo

(II.3)

4º) Calcular o valor do erro de estimação

(II.4)

5º) Calcular o vetor de ganho do estimador


(II.5)

6º) Atualizar estimativa do vetor de parâmetros estimados

(II.6)

7º) Atualizar a matriz de covariância

(II.7)

que pode ser utilizada como

(II.8)

Logo, o algoritmo a ser implementado no arquivo MQRVar01.m será:

%---------------------Parte 1----------------------------
clear; %limpa o workspace
close all; %fecha todas as figuras abertas
%parâmetros da "planta";
a1o=-1.7896; a2o=0.9590; boo=0.0853; b1o=0.0841;
P=1000*eye(4,4); % valor inicial da matriz de covariância.
tamanho = 500; %comprimento dos vetores de entrada/saída/iterações
nit=tamanho; %numero de iterações
U=zeros(tamanho,1); %vetor de entrada

Y=zeros(tamanho,1); %vetor de saída "real"


Yhat=zeros(tamanho,1); %vetor de saída estimado
yhat=0; %saída estimada no instante K
PHI=zeros(4,1); %vetor de medidas
THETA=zeros(tamanho,4); %vetor de parâmetros estimados
theta_hat= zeros(4,1); %valor inicial do vetor de parâmetros (instante K=0)
K=zeros(4,1); %ganho do estimador
TRACOP=zeros(tamanho,1); %matriz traço de P

%---------------------Parte 2----------------------------
%condições iniciais do sistema (K=0)
yk=0; %saída no instante K
yk_1=0; %saída no instante (K-1)
yk_2=0; %saída no instante (K-2)
uk=0; %entrada no instante K
uk_1=0; %entrada no instante (K-1)
uk_2=0; %entrada no instante (K-2)
ek=0; %erro no instante K
a1=zeros(tamanho,1); %vetor com todos os valores de "a1" com variação
a2=zeros(tamanho,1); %vetor com todos os valores de "a2" com variação
bo=zeros(tamanho,1); %vetor com todos os valores de "bo" com variação
b1=zeros(tamanho,1); %vetor com todos os valores de "b1" com variação

%os parametros serao variados em (-20%), no intervalo de 1:tamanho


alfa=(0.2/tamanho)*[1:tamanho]; % alfa varia de 0 a 0.2 (20%)
% no intervalo de 1 a tamanho das amostras.
for i=1:tamanho;
a1(i)=a1o*(1-alfa(i));
a2(i)=a2o*(1-alfa(i));
bo(i)=boo*(1-alfa(i));
b1(i)=b1o*(1-alfa(i));
end;

%define-se um sinal de entrada com aleatoriedade suficiente para o problema


for i=1:tamanho;
if rand > 0.5
U(i)=1;
else
U(i)=-1;
end;
end;

%---------------------Parte 3----------------------------
%estimador de MQR

for t=3:nit;

% (1) : "mede" os valores de entrada e saída da planta;


uk_2=uk_1;
uk_1=uk;
uk=U(t);

yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;

% (2) : Forma o vetor de dados PHI;

PHI=[-yk_1 -yk_2 uk_1 uk_2]';

% (3) : Calcula a saída estimada pelo modelo no instante k, yhat;

yhat= PHI'*theta_hat;

Yhat(t)=yhat;
% (4) : Calcula o valo do erro de estimação no instante k;

ek=yk-yhat;

% (5) : Calcula o vetor de ganho do estimador:

denominador= 1 + PHI'*P*PHI;
K=(1/denominador)*P*PHI;

% passo 6: atualiza estiva do vetor de parâmetros theta_hat;

theta_hat= theta_hat + K*ek;

THETA(t,1)=theta_hat(1); %armazena trajetória de a1_hat.


THETA(t,2)=theta_hat(2); %armazena trajetória de a2_hat.
THETA(t,3)=theta_hat(3); %armazena trajetória de bo_hat.
THETA(t,4)=theta_hat(4); %armazena trajetória de b1_hat.

% passo 7: atualiza a matriz de covariancia;

P= P - K*(P*PHI)';
TRACOP(t)= trace(P);

end; %final do laço for principal.

Para se analisar os resultados, pode-se comparar os valores finais


“reais” dos parâmetros e aqueles estimados pelo algoritmo. Encontrou-se:

-1.4317 %MATLAB
0.7672 a1(tamanho)
a2(tamanho)
0.0682
bo(tamanho)
0.0673 b1(tamanho)
THETA(tamanho,:)
-1.6772
0.8922
0.0779
0.0723

Se for plotado, no tempo, cada um dos parâmetros “reais” e cada um dos


estimados, percebe-se claramente que o sistema não é capaz de rastrear as
variações do modelo. Para o parâmetro com os comandos a seguir, obteve-
se a Figura 1.

tempo = 0.050*[1:tamanho];
plot(tempo,a1,’b’)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')

-0.2

-0.4

-0.6
Valor do Parâmetro

-0.8

-1

-1.2

-1.4

-1.6

-1.8
0 5 10 15 20 25
Parâmetro a1 real (azul) e estimado (vermelho)

Fig. 1: Parâmetro a1 estimado e “real” após 500 amostras

Pode-se plotar gráficos semelhantes para os outros parâmetros e se


verificar o comportamento dos mesmos. Pode-se perceber que o modelo não é
válido para identificar coeficientes variantes no tempo.

O erro obtido entre a saída “real” Y e a estimada YHAT é visto na Fig.2:


0.35

0.3

0.25
Erro absoluto

0.2

0.15

0.1

0.05

0
0 50 100 150 200 250 300 350 400 450 500
Amostras

Fig. 2: Erro absoluto da identificação

Percebe-se claramente que o erro está divergindo, com o passar do


tempo, logo não se obteve um bom modelo.

plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')

b) Situação 2: estimador de MQR desenvolvido para parâmetros


variantes no tempo.

Uma forma eficaz de se garantir que a identificação acompanhará a


mudança dos parâmetros ao longo do tempo está em se atribuir uma
importância maior para as amostras mais recentes, ao mesmo tempo que os
valores mais antigos perdem importância no processo de obtenção dos
modelos.

Para realizar esta abordagem, acrescenta-se um Fator de Esquecimento


λ, que varia entre 0 e 1, no estimador de MQR. Dessa forma, as equações II.5
e II.7 podem ser re-escritas como:

(II.9)
(II.10)

O arquivo MQRVar02.m implementa esta nova estrutura. Vale lembrar


que as partes 1 e 2 do arquivo MQRVar01.m permanecem inalteradas.

%---------------------Parte 3----------------------------
%estimador de MQR

lambda = 0.95;

for t=3:nit;

% (1) : "mede" os valores de entrada e saída da planta;


uk_2=uk_1;
uk_1=uk;
uk=U(t);

yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;

% (2) : Forma o vetor de dados PHI;

PHI=[-yk_1 -yk_2 uk_1 uk_2]';

% (3) : Calcula a saída estimada pelo modelo no instante k, yhat;

yhat= PHI'*theta_hat;

Yhat(t)=yhat;

% (4) : Calcula o valo do erro de estimação no instante k;

ek=yk-yhat;

% (5) : Calcula o vetor de ganho do estimador:

denominador= lambda + PHI'*P*PHI;


K=(1/denominador)*P*PHI;

% passo 6: atualiza estiva do vetor de parâmetros theta_hat;

theta_hat= theta_hat + K*ek;

THETA(t,1)=theta_hat(1); %armazena trajetória de a1_hat.


THETA(t,2)=theta_hat(2); %armazena trajetória de a2_hat.
THETA(t,3)=theta_hat(3); %armazena trajetória de bo_hat.
THETA(t,4)=theta_hat(4); %armazena trajetória de b1_hat.

% passo 7: atualiza a matriz de covariancia;

P= (P - K*(P*PHI)') / lambda;
TRACOP(t)= trace(P);

end; %final do laço for principal.

Ao se plotar os parâmetros “reais” e estimados no tempo, pode-se


perceber que o algoritmo permite o rastreamento dos parâmetros variantes no
tempo (ver exemplo da Figura 4).

tempo = 0.050*[1:tamanho];
plot(tempo,a1,’b’)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')

-0.2

-0.4

-0.6
Valor do Parâmetro

-0.8

-1

-1.2

-1.4

-1.6

-1.8
0 5 10 15 20 25
Parâmetro a1 real (azul) e estimado (vermelho)

Fig. 4: Rastreamento de parâmetros com fator de esquecimento 0.95

Percebe-se na Fig 5 que o erro obtido entre a saída “real” Y e a estimada


YHAT aproxima-se de 0, o que mostra que o rastreamento de fato ocorre.
0.35

0.3

0.25
Erro absoluto

0.2

0.15

0.1

0.05

0
0 50 100 150 200 250 300 350 400 450 500
Amostras

Fig. 5: Erro absoluto da identificação com λ=0.95

plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')

Se for plotado o traço da matriz de covariância P (soma dos elementos


da diagonal principal), percebe-se que ele tende a 0. Isto garante que o ganho
do estimador K, e conseqüentemente, o fator de ajuste dos parâmetros
baseado no erro de medição, tendem a diminuir. Isto ocorre, pois o valor
estimado de um parâmetro deve ser próximo do valor real desejado, e
variações bruscas não são desejadas.

plot(TRACOP)
XLABEL('Amostras')
YLABEL('Traço da matriz de covariância P')
4500

4000

Traço da matriz de covariância P 3500

3000

2500

2000

1500

1000

500

0
0 50 100 150 200 250 300 350 400 450 500
Amostras

Fig.6: Traço da matriz de covariância P

Observação: se for feito λ=1.0, pode-se perceber que o sistema se


comporta como se não possuísse o fator de esquecimento. De fato, se
substituirmos este valor, ter-se-á exatamente as equações II.5 e II.7.

c) Situação 3: rastreamento com erro de parâmetros para tempos


de ensaio longos

Para esta situação, será usado o arquivo MQRVar03.m, que é


praticamente idêntico ao arquivo MQRVar02.m. A única diferença está no
tamanho da variável “tamanho” (que determina o número de amostras e
iterações). Esta variável terá valor de 20000 unidades.

Para este caso, pode-se plotar o traço da matriz P (covariância) que será
como a Fig. 7:
307
x 10
9.6872

Valor do Traço de P

-0.131

-9.9492
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Amostras 4
x 10

Fig. 7: Traço da matriz para ensaios longos

plot(TRACOP)
XLABEL('Amostras')
YLABEL('Valor do Traço de P')

Observa-se que a matriz de covariância tende a zero até um


determinado ponto, quando seus valores passam a variar bruscamente. Isto
ocorre, pois P precisa ser invertida durante a obtenção do estimador de
mínimos quadrados recursivo. Mas, como o traço tende a zero, uma
conseqüência é que o determinante da matriz de covariância tende a zero, o
que a deixa “quase-”singular. Isto gera comportamentos indesejados no
algoritmo, o qual pára de responder adequadamente a partir de algum instante
K.

Se for observado a identificação do parâmetro a1 observa-se que em um


dado momento não é mais possível obter-se valores estimados (Fig. 8).
1000

-1000
Valor do Parâmetro

-2000

-3000

-4000

-5000

-6000
0 100 200 300 400 500 600 700 800 900 1000
Parâmetro a1 real (azul) e estimado (vermelho)

Fig. 8: Parâmetro a1 estimado para traço(P) → 0. Observa-se que em


dado instante, o sistema não responde mais.

d) Situação 4: rastreamento de parâmetros para tempos de ensaio


longos

Para resolver o problema abordado na situação 3, uma saída simples


consiste em se reinicializar a matriz de covariância quando esta atingir um valor
mínimo desejado. Embora haja perdas momentâneas de desempenho, isto
garante que a matriz não atinja um estado em que se torne “quase-“singular.

O arquivo MQRVar04.m garante esta modificação, como mostrado a


seguir:

%---------------------Parte 1----------------------------
clear; %limpa o workspace
close all; %fecha todas as figuras abertas
%parâmetros da "planta";
a1o=-1.7896; a2o=0.9590; boo=0.0853; b1o=0.0841;
P=1000*eye(4,4); % valor inicial da matriz de covariância.
tamanho = 20000; %comprimento dos vetores de entrada/saída/iterações
nit=tamanho; %numero de iterações
U=zeros(tamanho,1); %vetor de entrada
Y=zeros(tamanho,1); %vetor de saída "real"
Yhat=zeros(tamanho,1); %vetor de saída estimado
yhat=0; %saída estimada no instante K
PHI=zeros(4,1); %vetor de medidas
THETA=zeros(tamanho,4); %vetor de parâmetros estimados
theta_hat= zeros(4,1); %valor inicial do vetor de parâmetros (instante K=0)
K=zeros(4,1); %ganho do estimador
TRACOP=zeros(tamanho,1); %matriz traço de P

%---------------------Parte 2----------------------------
%condições iniciais do sistema (K=0)
yk=0; %saída no instante K
yk_1=0; %saída no instante (K-1)
yk_2=0; %saída no instante (K-2)
uk=0; %entrada no instante K
uk_1=0; %entrada no instante (K-1)
uk_2=0; %entrada no instante (K-2)
ek=0; %erro no instante K

a1=zeros(tamanho,1); %vetor com todos os valores de "a1" com variação


a2=zeros(tamanho,1); %vetor com todos os valores de "a2" com variação
bo=zeros(tamanho,1); %vetor com todos os valores de "bo" com variação
b1=zeros(tamanho,1); %vetor com todos os valores de "b1" com variação

%os parametros serao variados em (-20%), no intervalo de 1:tamanho


alfa=(0.2/tamanho)*[1:tamanho]; % alfa varia de 0 a 0.2 (20%)
% no intervalo de 1 a tamanho das amostras.
for i=1:tamanho;
a1(i)=a1o*(1-alfa(i));
a2(i)=a2o*(1-alfa(i));
bo(i)=boo*(1-alfa(i));
b1(i)=b1o*(1-alfa(i));
end;

%define-se um sinal de entrada com aleatoriedade suficiente para o problema


for i=1:tamanho;
if rand > 0.5
U(i)=1;
else
U(i)=-1;
end;
end;

%---------------------Parte 3----------------------------
%estimador de MQR

lambda = 1.0;

for t=3:nit;
% (1) : "mede" os valores de entrada e saída da planta;
uk_2=uk_1;
uk_1=uk;
uk=U(t);

yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;

% (2) : Forma o vetor de dados PHI;

PHI=[-yk_1 -yk_2 uk_1 uk_2]';

% (3) : Calcula a saída estimada pelo modelo no instante k, yhat;

yhat= PHI'*theta_hat;

Yhat(t)=yhat;

% (4) : Calcula o valo do erro de estimação no instante k;

ek=yk-yhat;

% (5) : Calcula o vetor de ganho do estimador:

denominador= lambda + PHI'*P*PHI;


K=(1/denominador)*P*PHI;

% passo 6: atualiza estiva do vetor de parâmetros theta_hat;

theta_hat= theta_hat + K*ek;

THETA(t,1)=theta_hat(1); %armazena trajetória de a1_hat.


THETA(t,2)=theta_hat(2); %armazena trajetória de a2_hat.
THETA(t,3)=theta_hat(3); %armazena trajetória de bo_hat.
THETA(t,4)=theta_hat(4); %armazena trajetória de b1_hat.

% passo 7: atualiza a matriz de covariancia;

P= (P - K*(P*PHI)') / lambda;
if mod(t,100)==0 %a cada 1000 iteracoes, reinicia P
P=1000*eye(4,4); %pode-se mudar este valor
end
TRACOP(t)= trace(P);

end; %final do laço for principal.


Algumas observações. O valor de λ é unitário, o que significa que o
sistema não deveria convergir para valores desejados. Contudo,a ação de se
reiniciar P garante o rastreamento dos valores com um certo erro, desde que
este reinício seja em intervalos de tempo curtos os suficiente para impedir que
o sistema se estabilize ao redor de um valor. A utilização de um fator de
esquecimento pode atenuar ainda mais esse erro de rastreamento (Fig. 9)

-0.2

-0.4

-0.6
Valor do Parâmetro

-0.8

-1

-1.2

-1.4

-1.6

-1.8
0 100 200 300 400 500 600 700 800 900 1000
Parâmetro a1 real (azul) e estimado (vermelho)

Fig. 9: Rastreamento de parâmetros com reinicialização de P

0.35

0.3

0.25
Erro absoluto

0.2

0.15

0.1

0.05

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Amostras 4
x 10

Fig. 10: Erro de estimação com reinicialização de P

tempo = 0.050*[1:tamanho];
plot(tempo,a1)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')
plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')

Percebe-se que a reinicialização da matriz de covariância P pode ser


utilizada como forma de se reduzir o erro de estimação de um sistema.

Você também pode gostar