参考:b站Dr_can的视频讲解
卡尔曼滤波器可以描述为:一种最优化、递归、数字处理的算法
主要解决各种不确定性问题:
1.不存在完美的数学模型
2.系统的扰动不可控
3.传感器本身也存在一定误差
因而我们需要利用一定的理论,来对数据进行融合处理,得到最优估计值
可概括为:
当前的估计值=上一次的估计值+系数*(当前测量值-上一次估计值)
这个系数我们常称为:卡尔曼增益,它是我们进行卡尔曼滤波的核心
两个误差:估计误差、测量误差;可以利用这两个误差求算卡尔曼增益
在视频中,举了一个多次测量硬币的案例,来初探递归算法的原理,假设硬币的真实直径是50mm,经历了数次观测后,估计真实厚度
已知条件:真实直径50mm,随便设一个初始估计值为40mm,设观测值z是一个围绕50上下波动不超过3mm的值,估计误差为5,观测误差为3,根据理论估计的步骤可概括如下:

博主是用excel做的,我这里根据原理利用matlab重新做了一次
代码如下:
clear all;clc;close all;
iters=300;
z=(6*rand(iters,1)-3)+50;
eMEA=3;
eEST=5;
X=zeros(iters,1);
X_real=50*ones(1,iters);
X(1)=40;
for i=2:iters
K=eEST/(eMEA+eEST);
X(i)=X(i-1)+K*(z(i)-X(i-1));
eEST=(1-K)*eEST;
end
t=1:iters;
figure(1);
plot(t,X,"LineWidth",2);xlabel("迭代次数");ylabel("测量值");axis([0 iters 40 55]);
hold on;plot(t,X_real,"LineWidth",1);legend("测量值","真实值");title("初探迭代算法");
其实很简单,就完全跟着上一张图片列出的步骤编写就可以,最终绘制出一张效果图,如下:

效果是不是蛮不错的,随着迭代次数的增加,它真的是收敛到了我们预设的真实值~
又介绍了数据融合的例子,这也是卡尔曼滤波器最核心的本质

接着进行了长篇幅复杂而严密的推导,得到了卡尔曼滤波的五个核心公式

最后,举了一个人在匀速运动时的一个例子,我们对其进行了二维卡尔曼滤波

接下来,我们用matlab仿真实现这一例子
excel中的datareal数据如下:

本文深入探讨卡尔曼滤波器的基本概念与应用,通过实例演示如何使用MATLAB实现卡尔曼滤波,包括一维与二维场景下的数据融合与状态估计。
&spm=1001.2101.3001.5002&articleId=127721110&d=1&t=3&u=4988ae6ec41e4ee1bb18b38d533a492f)
3740

被折叠的 条评论
为什么被折叠?



