Sage-Husa自适应滤波

本文介绍了一种改进的卡尔曼滤波算法——Sage-Husa自适应滤波器,该滤波器能够实时估计和修正系统噪声和观测噪声的统计特性,以降低系统模型误差并提高滤波精度。文章详细介绍了Sage-Husa滤波器的计算步骤,并给出了一个基于极大似然准则的自适应滤波方法。
摘要由CSDN通过智能技术生成

Sage-Husa自适应卡尔曼滤波

Sage-Husa 自适应滤波是在利用观测数据递推滤波时,实时估计和修正系统噪声和观测噪声的统计特性,从而降低系统模型误差,提高滤波精度。

首先列出系统方程如下

x k = A x k − 1 + B u k + C w k x_{k}=Ax_{k-1}+ B u_{k}+ C w_{k} xk=Axk1+Buk+Cwk

y k = H x k + v k y_{k}=H x_{k}+v_{k} yk=Hxk+vk

其中, x k , y k , u k x_{k},y_{k},u_{k} xk,yk,uk 分别表示状态量,输出量,输入量。 w k , v k w_{k},v_{k} wk,vk 为噪声

E [ w k ] = q k E\left[ w_{k} \right]=q_{k} E[wk]=qk

E [ w k w j T ] = Q k δ k j E\left[ w_{k} w _{j}^{T}\right]=Q_{k}\delta_ {kj} E[wkwjT]=Qkδkj

E [ v k ] = r k E\left[ v_{k} \right]=r_{k} E[vk]=rk

E [ v k v j T ] = R k δ k j E\left[ v_{k} v _{j}^{T}\right]=R_{k}\delta_ {kj} E[vkvjT]=Rkδkj

E [ w k v j T ] = 0 E\left[ w_{k} v _{j}^{T}\right]=0 E[wkvjT]=0

Q k , R k , q k , r k Q_{k},R_{k},q_{k},r_{k} Qk,Rk,qk,rk 将在后续进行更新,这也是区别于卡尔曼滤波的最主要的地方。

那么,Sage-Husa滤波器的公式如下。

1)计算一步预测方程

x ^ k , k − 1 = A x ^ k − 1 + B u k − 1 + C q ^ k − 1 \hat{x}_{k,k-1}=A \hat{x}_{k-1}+ B u_{k-1}+ C \hat{q}_{k-1} x^k,k1=Ax^k1+Buk1+Cq^k1

这里的 x ^ k , k − 1 , q ^ k − 1 \hat{x}_{k,k-1},\hat{q}_{k-1} x^k,k1,q^k1 的上标表示为估计值。卡尔曼滤波器的对应公式为,即 q q q为0。

x ^ k , k − 1 = A x ^ k − 1 + B u k − 1 \hat{x}_{k,k-1}=A \hat{x}_{k-1}+ B u_{k-1} x^k,k1=Ax^k1+Buk1

2)一步预测均方误差方程

P k , k − 1 = A P k − 1 A T + C Q ^ k − 1 C T P_{k,k-1}=A P_{k-1} A^{T}+ C \hat{Q}_{k-1} C^{T} Pk,k1=APk1AT+CQ^k1CT

卡尔曼滤波器的对应公式为,也就是 Q Q Q 为常数

P k , k − 1 = A P k − 1 A T + C Q C T P_{k,k-1}=A P_{k-1} A^{T}+ CQ C^{T} Pk,k1=APk1AT+CQCT

3)更新滤波增益方程

K k = P k , k − 1 H T [ H P k , k − 1 H T + R ^ k − 1 ] − 1 K_{k}=P_{k,k-1} H^{T}\left[ H P_{k,k-1} H^{T} +\hat{R}_{k-1}\right]^{-1} Kk=Pk,k1HT[HPk,k1HT+R^k1]1

卡尔曼滤波器的对应公式为,也就是 R R R 常数

K k = P k , k − 1 H T [ H P k , k − 1 H T + R ] − 1 K_{k}=P_{k,k-1} H^{T}\left[ H P_{k,k-1} H^{T} +R\right]^{-1} Kk=Pk,k1HT[HPk,k1HT+R]1

4)计算残差

ε k = y k − H x ^ k , k − 1 − r ^ k − 1 \varepsilon_{k}=y_{k}-H\hat{x}_{k,k-1}-\hat{r}_{k-1} εk=ykHx^k,k1r^k1

卡尔曼滤波器的对应公式为,也就是 r r r 为0

ε k = y k − H x ^ k , k − 1 \varepsilon_{k}=y_{k}-H\hat{x}_{k,k-1} εk=ykHx^k,k1

5)k时刻的状态估计

x ^ k = x ^ k , k − 1 + K k ε k \hat{x}_{k}=\hat{x}_{k,k-1}+K_{k}\varepsilon_{k} x^k=x^k,k1+Kkεk

卡尔曼滤波器的对应公式是一样的。

6)k时刻的均方误差方程

P k = [ I − K k H ] P k , k − 1 P_{k}=\left[ I-K_{k} H \right]P_{k,k-1} Pk=[IKkH]Pk,k1

卡尔曼滤波器的对应公式是一样的。

接下来开始更新 q ^ k , Q ^ k , r ^ k , R ^ k \hat{q}_{k},\hat{Q}_{k},\hat{r}_{k},\hat{R}_{k} q^k,Q^k,r^k,R^k以下部分卡尔曼滤波器是没有的。

7)计算加权系数

d k = 1 − b 1 − b k + 1 , 0 < b < 1 d_{k}=\frac{1-b}{1-b^{k+1}},0<b<1 dk=1bk+11b,0<b<1

在这里插入图片描述

从中以及下面的公式可知,随着时间的推移, 1 − d k 1-d_{k} 1dk 趋近于 b b b

还有一种加权系数形式为 d k = 1 k d_{k}=\frac{1}{k} dk=k1

在这里插入图片描述

从中以及下面的公式可知,随着时间的推移, 1 − d k 1-d_{k} 1dk 趋近于1。如果令 d k = 0 d_{k} =0 dk=0 ,则还原为普通卡尔曼滤波器了,也就是说采用这种形式的 d k d_{k} dk,随着时间的推移,还原为普通卡尔曼滤波器了。

8)更新 q ^ k , Q ^ k , r ^ k , R ^ k \hat{q}_{k},\hat{Q}_{k},\hat{r}_{k},\hat{R}_{k} q^k,Q^k,r^k,R^k

q ^ k = ( 1 − d k − 1 ) q ^ k − 1 + d k − 1 ( x ^ k − A x ^ k − 1 ) \hat{q}_{k}=\left( 1-d_{k-1}\right)\hat{q}_{k-1}+d_{k-1} \left( \hat{x}_{k} -A \hat{x}_{k-1}\right) q^k=(1dk1)q^k1+dk1(x^kAx^k1)

Q ^ k = ( 1 − d k − 1 ) Q ^ k − 1 + d k − 1 ( K k ε k ε k T K k T + P k − A P k − 1 A T ) \hat{Q}_{k}=\left( 1-d_{k-1} \right)\hat{Q}_{k-1}+d_{k-1}\left( K_{k}\varepsilon_{k} \varepsilon_{k} ^{T}K_{k}^{T}+P_k-AP_{k-1}A^{T}\right) Q^k=(1dk1)Q^k1+dk1(KkεkεkTKkT+PkAPk1AT)

r ^ k = ( 1 − d k − 1 ) r ^ k − 1 + d k − 1 ( y k − H x ^ k , k − 1 ) \hat{r}_{k}=\left( 1-d_{k-1} \right)\hat{r}_{k-1}+d_{k-1} \left( y_{k}- H\hat{x}_{k,k-1} \right) r^k=(1dk1)r^k1+dk1(ykHx^k,k1)

R ^ k = ( 1 − d k − 1 ) R ^ k − 1 + d k − 1 ( ε k ε k T − H P k , k − 1 H T ) \hat{R}_{k}=\left( 1-d_{k-1} \right)\hat{R}_{k-1}+d_{k-1}\left( \varepsilon_{k} \varepsilon_{k} ^{T}-HP_{k,k-1}H^{T} \right) R^k=(1dk1)R^k1+dk1(εkεkTHPk,k1HT)

如果系统维数较高,而 Sage-Husa自适应滤波算法中增加对系统噪声统计特性的计算,计算量将增加,实时性将难以保证。此外,对于阶次较高的系统,算法中R和Q的在线估计有时会由于计算发散失去半正定性和正定性而出现滤波发散现象,此时滤波算法的稳定性和收敛性不能完全保证。

代码如下,供大家参考。

clc
clear
a=randn(1,5000)*sqrt(0.1);
y=zeros(1,5000);
y(1)=a(1);
y(2)=a(2)-0.575*a(1);
for k=3:5000
y(k)=0.0673*y(k-1)+0.1553*y(k-2)+a(k)-0.575*a(k-1);
end
y = y+sqrt(0.05)*randn(1,length(y));
figure(1)
subplot(2,1,1)
plot(a),title('a');
subplot(2,1,2)
plot(y),title('y');
b=0;
% inlitial Kalman Filter
F = [0.0673 0.1553; 1 0];
G = [1 -0.575 ; 0 0];
H = [1 0];
s=1*eye(2);
Q0=diag([0.1,0.1]);
R0 = 0.5;
P0=eye(2)*10000;
X0=[0;0];
[X,e,P]=Sage_HusaKF(F,G,H,Q0,R0,X0,y,P0,b,s);
% [X,e,P]=StdKF2(F,G,H,Q0,R0,X0,y,P0);
% plot kalman
figure(2)
t=1:length(X);
subplot(2,1,1)
plot(t,X(1,:));%yk
subplot(2,1,2)
plot(t,X(2,:));%yk-1
figure(3)
plot(t,y);
hold on
plot(t,y,'r',t,X(1,:),'b');
hold off

%% 
function [X,e,P]=Sage_HusaKF(F,G,H,Q0,R0,X0,Z,P0,b,s);
% X   是指得到的k状态下的最优的估算值
% e   残差epsilon(k)
% P   是指更新的k状态下X对应的协方差

% F   系统参数,对于多模型系统,它们为矩阵
% G   系统参数,对于多模型系统,它们为矩阵
% H   表示协方差的转换系数
% Q0  表示系统过程的协方差初值
% R0  表示某种不确定性(传感器噪声)的协方差初值
% X0  是最优的估算值初值  
% Z   表示k 时刻状态下的观测值。
% P0  是X对应的协方差初值
% b   sage-Husa更新时用到,未用到默认
% s   2*2的单位矩阵,初值

% Sage-Husa adeptive KF

N=length(Z);
M=length(X0);
X=zeros(M,N);
X(:,1)=X0;
s=1*eye(2);
P=P0;
q0 = zeros(M,1);
r0 = 0;
q = q0;
r = r0;
Q = Q0;
R = R0;
for k=2:N
    X_est=F*X(:,k-1)+q;                  %计算一步预测估计:X(k/k-1)
    P_pre=F*P*F'+G*Q*G';               %一步预测估计的均方误差P(k/k-1)
    e(:,k)=Z(:,k)-H*X_est-r;           %计算残差epsilon(k)
    K=P_pre*H'*inv((H*P_pre*H')+R);    %k时刻的增益阵
    X(:,k)=X_est+K*e(:,k);           %k时刻的状态估计X(k)
    P = (eye(M)-K*H)*P_pre;%*(eye(M)-K*H)'+K*R*K';  %均方误差矩阵P(k)
    
% %     sage-Husa更新Q,R,q,r
%     d = (1-b)/(1-b^(k));
%     r = (1-d)*r +d*(Z(:,k)-H*X_est);
%     q = (1-d)*q +d*(X(:,k)-F*X(:,k-1));
%     R = (1-d)*R +d*(Z(:,k)*Z(:,k)'-H*P*H');
%     Q = (1-d)*Q +d*(K*e(:,k)*e(:,k)'*K'+P-F*P*F');
%    
      r = 1/k*((k-1)*r +Z(:,k)-H*X_est);
    
      q = 1/k*((k-1)*q+X(:,k)-F*X(:,k-1));
    
      R = 1/k*((k-1)*R+Z(:,k)*Z(:,k)'-H*P*H');
     
      Q = 1/k*((k-1)*Q+K*e(:,k)*e(:,k)'*K'+P-F*P*F');
%     
end
end

基于极大似然准则的自适应滤波

基于极大似然准则的自适应滤波,通过系统状态方差阵和量测噪声方差阵 实时估计系统噪声统计特性的变化,以保证滤波器更好地适应这种变化。极大似然估计从系统观测值出现概率最大的角度估计,其特点是不仅考虑新息的变化,而且考虑新息协方差矩阵的变化。
R ^ k = C v k − H P k , k − 1 H T \hat{R}_k={C}_{vk}-HP_{k,k-1}H^T R^k=CvkHPk,k1HT
Q ^ k = 1 N ∑ i = k − N + 1 k Δ x i Δ x i T + P k − A T P k − 1 A \hat{Q}_k=\frac{1}{N}\sum_{i=k-N+1}^k{\Delta x_i\Delta x_{i}^{T}}+P_k-A^TP_{k-1}A Q^k=N1i=kN+1kΔxiΔxiT+PkATPk1A
Δ x k = x ^ k − x ^ k , k − 1 = K k v k \Delta x_k=\hat{x}_k-\hat{x}_{k,k-1}=K_kv_k Δxk=x^kx^k,k1=Kkvk
C v k = 1 N ∑ i = k − N + 1 k v i v i T C_{vk}=\frac{1}{N}\sum_{i=k-N+1}^k{v_iv_{i}^{T}} Cvk=N1i=kN+1kviviT
式中​ v k = y k − y ^ k , k − 1 v_k=y_k-\hat{y}_{k,k-1} vk=yky^k,k1 N N N 为平滑窗口宽度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值