卡尔曼滤波算法的matlab实现

卡尔曼滤波算法的matlab实现

figure;
hold on;

Z=(1:1:100);  %观测值:第一秒观测1m 第二秒观测两米  匀速运动, 每秒1m,  最后拟合的也是速度 1m/s

plot(Z);
plot([0,100], [1,1]);

noise=randn(1,100)*0.5;  %生成方差为1的高斯噪声
Z=Z+noise;  % 加入噪声

plot(Z);

X=[0;0];  %初始状态 随意设置; 经过几次迭代后,接近真实的状态
P=[1 0;0 1];  %状态协方差矩阵 :随意设置;   经过几次迭代后,接近真实的状态
F=[1 1;0 1];  %状态转移矩阵, \Delta{t} 为 1, 每 秒采样一次
Q=[0.0001, 0;0 0.0001];  % 状态转移协方差矩阵:因为相信状态转移矩阵不会出错, 因此 Q方差 很小
H=[1 0];  % 观测矩阵
R=cov(noise);  % 观测矩阵协方差, 与加入的方差为1的高斯噪声相对应;

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),'x');
    scatter(Z(i), X(1),'.');  % 画点, 横轴表示位置, 纵轴表示速度
    scatter(Z(i), X(2),'.');  % 画点, 横轴表示位置, 纵轴表示速度
    
end

%plot(Z, Z)

实验结果图:

在这里插入图片描述

相关推荐

  1. 滤波

    2024-06-08 16:20:07       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 16:20:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 16:20:07       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 16:20:07       82 阅读
  4. Python语言-面向对象

    2024-06-08 16:20:07       91 阅读

热门阅读

  1. 源代码防泄密

    2024-06-08 16:20:07       28 阅读
  2. ES6中的难点

    2024-06-08 16:20:07       29 阅读
  3. Torrent、Magnet链

    2024-06-08 16:20:07       33 阅读
  4. 算法:70. 爬楼梯

    2024-06-08 16:20:07       27 阅读
  5. Ubuntu 22.04安装和配置Prometheus

    2024-06-08 16:20:07       29 阅读
  6. QT 信号和槽 解除关联示例 disconnect

    2024-06-08 16:20:07       35 阅读
  7. github搭建个人博客

    2024-06-08 16:20:07       36 阅读
  8. python系列:FASTAPI系列 09-POST请求BODY校验添加Field

    2024-06-08 16:20:07       32 阅读
  9. Web前端心得:深入探索与成长的旅程

    2024-06-08 16:20:07       29 阅读
  10. 链表逆序用哨兵位头节点

    2024-06-08 16:20:07       33 阅读