欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【问题总结】****:卡尔曼滤波器的原理以及在MATLAB中的实现

程序员文章站 2022-07-12 09:49:47
...
一、先看视频

转载地址:https://blog.csdn.net/revolver/article/details/37830675

运行环境:win7 旗舰版 matlab R2018a

视频来源@山猫小队长

优酷:http://v.youku.com/v_show/id_XNzQwMTMwOTQ0.html;

B站:https://www.bilibili.com/video/av4356232/;

youtube:https://www.youtube.com/watch?v=2-lu3GNbXM8;

二、视频代码
clc
clear
close

Z=(1:100); %观测值  
noise=randn(1,100); %方差为1的高斯噪声  
Z=Z+noise;  
  
X=[0; 0]; %k-1时刻的状态  
P=[1 0; 0 1]; %k-1时刻的状态协方差矩阵  
F=[1 1; 0 1]; %状态转移矩阵  
Q=[0.0001 0; 0.0001 0]; %状态转移协方差矩阵  
H=[1 0]; %观测矩阵  
R=1; %观测噪声方差  
  
figure;  
hold on;  
  
for i=1:100  
  X_ = F*X;    %没有控制矩阵  
  P_ = F*P*F'+Q;  
  K = P_*H'/(H*P_*H'+R);  
  X = X_+K*(Z(i)-H*X_);  
  P = (eye(2)-K*H)*P_;    %eye(2)生成二阶单位矩阵
  plot(X(1),X(2),'.r'); %画点,横轴表示位置,纵轴表示速度,'.r'表示红点
end  
三、问题总结

原视频是在Octave上面演示的,一直不显示,后来才发现是plot函数的用法不够严谨,加上'.r'就好了