Escolar Documentos
Profissional Documentos
Cultura Documentos
&
FILTRO DE KALMAN
19 de maio de 2004
onde:
– x0 ∼ N(x̄0 , Σ0 );
2
FILTRO DE KALMAN
e
CP(k)C0 + DRD0 , se j = 0
cov(yk , yk− j ) = (2)
CA j P(k − j)C0 , se j = 1, . . . , k
e
E[xk ] := x̄k satisfaz x̄k+1 = Ax̄k , x̄0 = E[x0 ] (3)
PROVA : (3) trivial, (1): Definindo x̃k := xk − x̄k , ỹk = yk − ȳk , ȳk = E[yk ] podemos
concluir que
0 j
E[x̃k x̃k− j ] = A P(k − j)
3
FILTRO DE KALMAN
e
cov(xk+1 ) = P(k + 1) = E[(Ax̃k + Fek )(Ax̃k + Fek )0
= AP(k)A0 + FQF 0
FILTRO DE KALMAN
Assuma adicionalmente que DD0 > 0. Isso implica que ` ≥ r. Senão, terı́amos
um vetor λ tal que λ0 D = 0, o que leva à
λ0 yk = λ0Cxk
e portanto,
p(xk+1 |xk , uk ) ∼ N(Axk + Buk , FQF 0 )
p(yk |xk ) ∼ N(Cxk , DRD0 )
4
FILTRO DE KALMAN
Note que uk não altera a covariância, qualquer que seja {uk }, a condicional
p(xk+1 |xk , uk ) é sempre gaussiana.
Qual é a probabilidade de transição em múltiplos estágios:
então,
onde
m−1
∑A
m−1−t
Σk+m|k = cov Fek+t
t=0
m−2
∑A
m−1−t
= cov Fek+t + Fek+m−1
t=0
hm−2
= cov A ∑ A
i
m−2−t
Fek+t + Fek+m−1
t=0
Observações:
5
FILTRO DE KALMAN
Em resumo, se
xk+1 = Axk + Fek
y = Cx + Dν
k k k
x̄k+m = Am x̄k
Covariância:
E[(xk+m − x̄k+m )(xk+m − x̄k+m )0 ] := Σk+m
como
m−1
m
(xk+m − x̄k+m ) = A (xk − x̄k ) + ∑ Am−1−t Fek+t
t=0
então
m−1
m
Σk+m = A Σk A + m0
∑ Am−1−t FQF 0(Am−1−t )0
t=0
6
FILTRO DE KALMAN
e também:
E[(yk+m − ȳk+m )(yk − ȳk )0 ] := CAm ΣkC0
xk+1 = Ak xk + Fk ek
y = C x + D ν
k k k k k
x0 , w0 , w1 , . . . , ν0 , ν1 , . . . independentes
x0 ∼ N(x̄0 , Σ0 ) ek ∼ N(0, Q) νk ∼ N(0, R)
Sistema Linear Gaussiano variante no tempo k → (Ak , Fk ,Ck , Dk ) seqüências de
matrizes conhecidas.
Já vimos que:
y Σyx
cov(x|y) = Σx − Σxy Σ−1
7
FILTRO DE KALMAN
F ILTRO DE K ALMAN
Notação:
Então
x̃k+1|k = xk+1 − x̂k+1|k
= Ak xk + Fk ek − Ak x̂k|k = Ak x̃k|k + Fk ek
e portanto
Σk+1|k = Ak Σk|k A0k + Fk QFk0 (covariância do erro)
8
FILTRO DE KALMAN
ỹk|k−1 = yk − yk|k−1
= Ck xk + Dk νk −Ck x̂k|k−1 = Ck x̃k|k−1 + Dk νk
e portanto,
y
cov(ỹk|k−1 ) = Σk|k−1 = Ck Σk|k−1Ck0 + Dk RD0k
então
−1
y
cov(x̃k|k ) = cov(x̃k|k−1 ) − E[xk ỹ0k|k−1 ] Σk|k−1 E[xk ỹ0k|k−1 ]0
9
FILTRO DE KALMAN
o que leva a:
−1
Σk|k = Σk|k−1 − Σk|k−1Ck0 Ck Σk|k−1Ck + Dk RDk
0 0
Ck Σk|k−1
e
Σk+1|k = Ak Σk|k A0k + Fk QFk0 (7)
= Ak Σk|k−1 A0k −
−1
Ak Σk|k−1Ck Ck Σk|k−1Ck + Dk RDk
0 0 0
Ck Σk|k−1 A0k +
10
FILTRO DE KALMAN
11
FILTRO DE KALMAN
sys = ss(A,B,C,D,-1);
for i=1:length(t)
% Measurement update
Mn = P*C’/(C*P*C’+R);
x = x + Mn*(yv(i)-C*x); % x[n|n]
P = (eye(3)-Mn*C)*P;
ye(i) = C*x;
errcov(i) = C*P*C’;
12
FILTRO DE KALMAN
% Time update
x = A*x + B*u(i); % x[n+1|n]
P = A*P*A’ + B*Q*B’;
end
% Let’s see how this filter works by generating some data and
% comparing the filtered response with the true plant response.
PSfrag replacements
ek νk
”
eal
“id
uk + + yk
yk
+
Planta
+
x̂k
Filtro
13
FILTRO DE KALMAN
2
Output
−2
−4
−6
0 10 20 30 40 50 60 70 80 90 100
No. of samples
14
FILTRO DE KALMAN
figure, plot(t,y-yv,’g’,t,y-ye,’r--’),
legend(’erro de y = ruido v’,’erro de estimacao de y’)
xlabel(’No. of samples’), ylabel(’Error’)
5
erro de y = ruido v
erro de estimacao de y
4
1
Error
−1
−2
−3
−4
0 10 20 30 40 50 60 70 80 90 100
No. of samples
15
FILTRO DE KALMAN
0.6
0.55
0.5
0.45
0.4
Error Covar
0.35
0.3
0.25
0.2
0.15
0.1
0 10 20 30 40 50 60 70 80 90 100
% From the covariance plot we see that the output covariance did
% indeed reach a steady state in about 5 samples. From then on,
% our time varying filter has the same performance as the steady
% state version.
% Compare covariance errors
MeasErr = y-yv;
MeasErrCov = sum(MeasErr.*MeasErr)/length(MeasErr);
EstErr = y-ye;
EstErrCov = sum(EstErr.*EstErr)/length(EstErr);
16