卡尔曼滤波(二)
数据融合
有两个测量设备,分别有:
测量值:Z1 = 30 ,测量误差 σ1 = 2
测量值:Z2 = 32,测量误差 σ2 = 4
服从正态分布:
如果将设备编号1、2视为测量次数,那么:
按照卡尔曼滤波的算法:
估计值 Z^ = Z1 + K(Z2 - Z1),K:卡尔曼增益
K∈ [ 0, 1 ](K在0~1之间)
若:
1. K = 0 , Z^ = Z1 ,(换句话说,没有增益,那么就只相信上一次测的)
2. K = 1, Z^ = Z2 ,(换句话说,只相信这次测的)
* K就很像一个概率,或者相信度之类的东西。
如何求K?
K有一个原则,要使得【估计值误差,或叫标准差( σZ^)】 最小。
σZ^最小 ,等价于 Var(Z^) , Var()就是求方差的函数。 (σZ^)2 = Var(Z^)
Var(Z^) = Var(Z1 + K(Z2 - Z1))
相互独立,使用误差传播:
要使得【估计值误差,或叫标准差( σZ^)】 最小,那么就是对K求导,使得导数为0得极值:
代入,得:
Z^ = Z1 + K(Z2 - Z1)= 30 .4
(σZ^)2 = (1 - k )2 * σ12 + k2 * σ22 = 3.2
画图:
结论:
1. 按照上一篇:卡尔曼滤波(一) - 耀礼士多德 - 博客园 (cnblogs.com)
K的初始值,可以在测量到第二个数据的时候,得到。
2. 经过计算 Z^ ,发现的Z^ 误差σZ^,都要较前两次测量的要小。
两条公式放在一起看:
1.
2.
模型误差的初始值、经验值是不是可以用测量误差近似估计???
协方差矩阵
普通版计算协方差
矩阵版计算协方差
卡尔曼滤波入门
理论上:
Xk=AXk-1+BUk+Wk-1 ......(1)
Zk=HXk+Vk ......(2)
(之所以叫理论上,就像三角形的内角和理论上等于180°,实际上测量值如果代入理论公式,那么等号不成立 )
以房间温度为研究对象。
Xk:是k时刻的系统状态。 在此处,为第k时刻的房间温度。(当k=0时,Xk 可以看做凭经验瞎猜的温度)
A:是系统参数、【状态转移矩阵】。假设温度是随着时间变化的,那么A矩阵中,就有K的存在(可能叫Ak比较合适吧?);如果温度是恒定的,那么A就是1,或单位矩阵。
Uk : 是k时刻对系统的控制量、【控制矩阵】。可不可以理解为加常数?类似于光照对温度的影响之类?由于系统中一般不太有控制量,所以B这个参数一般为0,也就是没有U(K)。
Wk:过程噪声。被假设成高斯白噪声。协方差分别是【Q】。(暂时无法理解过程噪声)
Zk:是k时刻的测量值。在此处,为第k时刻,用温度计测量房间的温度值。(Zk是有可能是多种测量值,写为列矩阵)
H:是测量系统的系数矩阵。在此处,因为Zk 和Xk都是温度,那么H=1。如果Xk 假设是汽车的里程,而Zk是轮胎圈数,那么H就有一个转换关系了。
Vk :是测量误差。协方差为【R】。
以小车运动为研究对象。
Xt = [Pt,Vt]T
Pt:小车的里程。
Vt:小车的速度。
在第K时刻,小车的状态:
Pt = Pt-1 + Vt-1 * Δt + 1 / 2 * Ut * Δt2 .......Ut为t时刻的加速度
Vt = Vt-1 + Ut * Δt
(暂时忽略Wk)
形如:Xk=AXk-1+BUk
以房间温度为研究对象:
卡尔曼滤波,就是以Xt-1(Xt-1已经是优化过的,不是单纯从X0直接按式子去推,稍后再看),去预测Xt。
1. 假设屋子里的温度是恒定的。解读:那么A就变为单位矩阵,也就是,理论上:Xt = Xt-1 + Wt。(Wt 更多是一个象征意义,在计算的时候更加关注Wt 的协方差Q)
2. 假设温度X0(或者Xt-1)为23,假设噪声为3。
(t-1时刻,【最优温度偏差p(k-1|k-1) 】= 32,协方差矩阵)
4. 现在,假设 t = 2,X( t |t -1)= Xt + BUt = 23 ,假设噪声为4,也就是Q = 42。
(X( t |t -1)代表由 t -1 预测 t 时刻的值,之所以不用Xt,代表这个值还不是最优预测,否则就用Xt 或者【X(t|t)】代表【最优估计】,不加Wt 是因为它只是一个象征,不可知,只能知道其噪声)
5. 计算 P(k|k-1)=A*P(k-1|k-1)A' + Q ,在此处为 3*3 + 4*4 = 5*5。
(P(t|t-1)代表由 t -1 预测 t 时刻的 温度偏差,因为还不是最优的,否则就用否则就用Pt 或者P(t|t)代表【最优温度偏差】)
6. 然后,在温度计那里,读取温度值 Zk = 25,同时R = 42
(相当于厂家标称温度计误差为)
7. 计算【卡尔曼增益】Kk2=P(k|k-1) * H' / ( H * P(k|k-1) * H ' + R ) ,此处:Kk 2= 5^2 / ( 5^2 + 4^2 )
8. 计算【最优估计】X(k|k) = X(k|k-1) + Kk* (Zk - H * X (k|k-1) ),此处:23 + 0.78 * (25-23)=24.56
9. 计算【最优偏差】P(k|k)=( I - Kk *H ) * P(k|k-1),留给下一次测量时用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现