⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gxfkalman.m

📁 今天好心情
💻 M
字号:
clear
%初始化
x0=[10;1]; % x(0|0), 0时刻估计值,也是0时刻的状态值x(0)
p0=[100,0;0,10];% p(0|0), 0时刻的滤波估计误差协方差阵

Fai=[1,2;0,1];  %转移阵,从一个时刻状态转移到另一个时刻的状态
Q=[1,0;0,1];    %状态过程的方差
H=[1,0];        %观测阵
R=[10];         %观测过程的方差
Gama = eye(2);  %干扰阵
I = eye(2);     %单位阵 

x1k=[];
x2k=[];
x3k=[];
x4k=[];
for k=1:100
     w = normrnd(0,10,2,1);            %系统噪声 w(k)     
     v = normrnd(0,10,1,1);            %观测噪声 v(k) 
     
  if  k ==1
      x_y1 = Fai * x0 + Gama * w;      %由状态方程得出第一时刻的状态x(1) 
      z_y1 = H * x_y1 + v;           % 第1时刻的观测值                               

     x_yc1 = Fai * x0;             %对第一时刻的状态值的预测。由于w是零均值白噪声,故在预测值中噪声部分是0 
     p_yc1 = Fai * p0 * Fai' + Gama * Q * Gama';  %对第一时刻的预测误差协方差的预测
     z_yc1 = H * x_yc1;           %由第1时刻的状态预测值通过观测阵得到第1时刻的预测测量值
                                           %由于w是零均值白噪声,故在预测值中噪声部分是0 
      Kg1 =  p_yc1 * H' * inv( H * p_yc1 * H'+ R );      %增益阵        
      x_gj1 = x_yc1 + Kg1 * (z_y1 - z_yc1);     %通过第1时刻的观测值对第1时刻的预测状态值进行修正,得到第1时刻的估计值
      p_gj1 = (I - Kg1 * H) *  p_yc1;             %滤波估计误差协方差
      x_yk=x_y1
      x_gjk=x_gj1
      p_gjk=p_gj1
  else
    x_yk = Fai * x_yk + Gama * w;
    z_yk = H * x_yk + v; 
    x_yck = Fai * x_gjk;    %  x(k|k-1); 
    p_yck = Fai * p_gjk * Fai' + Gama * Q * Gama';      %  p(k|k-1);
    z_yck = H * x_yck;
    Kgk=p_yck * H' * inv(H * p_yck * H'+ R);
    x_gjk = x_yck + Kgk *(z_yk - z_yck);   %  x(k|k);
    p_gjk = (I - Kgk * H) * p_yck;         %  p(k|k); 
    x1k=[x1k x_yk];
    x2k=[x2k x_yck];
    x3k=[x3k x_gjk];
    x4k=[x4k p_gjk];
  end
end
 %估计值和预测值的比较
e_gj = x1k - x3k; %估计误差
e_yc = x1k - x2k; %预测误差
figure
plot(e_gj(2,:),'b-')                                                      
hold on
plot(e_yc(2,:),'r-')
legend('速度滤波估计误差','速度预测估计误差')
title('速度误差比较')
hold off

%状态值与估计值的比较
figure
hold on
plot(x1k(2,:),'b-')
plot(x3k(2,:),'r-')
legend('状态值','状态估计值')
title('状态值与估计值的比较')
hold off

%估计误差协方差
figure
plot(x4k(2,:),'b-')
title('估计误差协方差')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -