Bayesian Filter
Created 2021.05.16 by William Yu; Last modified: 2022.07.12-V1.2.2
Contact: windmillyucong@163.com
Copyleft! 2022 William Yu. Some rights reserved.
Kalman Filter
卡尔曼滤波(Kalman filter)1960.
refitem:
- paper https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
- blog https://zhuanlan.zhihu.com/p/39912633
- blog https://longaspire.github.io/blog/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2/
- blog https://zhuanlan.zhihu.com/p/48876718
- blog 关于协方差矩阵 https://zhuanlan.zhihu.com/p/338335181
Basic Concepts
- (ˇ.) 表示先验
-
(ˆ.) 表示后验(即最佳估计值)
- 高斯白噪声
- 符合高斯分布
- 基本模型
- 马尔科夫链
- 基本过程,包括两个阶段:
- 预测阶段
- 使用上一状态的估计,做出对当前状态的估计
- 更新阶段
- 使用对当前状态的观测值优化之前在预测阶段获得的预测值,获得更精确的估计值
- 预测阶段
- 特点
- 适合不断变化的系统,时变系统
- 内存占用较小(只需保留前一个状态)
- 速度快
状态方程
→xk:(→p,→v)- 状态 →x 由两部分组成
- →x 的实际值并不知
- 卡尔曼滤波假设每个变量(在我们的例子里是位置和速度)都应该是随机的,而且符合高斯分布。每个变量都有一个均值 μ ,它是随机分布的中心;有一个方差σ2
- 这些输入信息可能是相关的,也可能不是相关的
- 协方差矩阵
Model
1.1 运动方程(状态转移方程)
系统的状态转移方程(运动方程),线性方程 xk=A⋅xk−1+B⋅uk+wk
- where:
- xk : k时刻的运动模型预估的系统状态
- uk :k时刻对系统的控制量
- A :转移矩阵,运动模型
- B:系统参数
- wk:过程激励噪声
1.2 观测方程
zk=H⋅xk+vk-
where:
- zk:k时刻的观测值
- H:观测系统的参数
- vk:观测过程的噪声
1.3 噪声
p(w)∼N(0,Q)p(v)∼N(0,R)- 随机信号 w(k) 和 v(k) 分别表示运动噪声和观测噪声
- 假设它们为相互独立,正态分布的白色噪声
- 实际系统中,这QR可能会随着每次迭代计算而发生变化,但此处假设他们是常量
Process
1. Init
2. Predict
状态转移:由运动方程做先验估计 x−k=A⋅xk−1+B⋅uk 协方差转移 P−k=A⋅Pk−1⋅AT+Q
3. Update
计算卡尔曼增益(中间量) Kk=P−kHT(HP−kHT+R)−1 状态更新 xk:=x−k+Kk(zk−Hx−k⏟measure⏟error) 协方差更新 Pk:=(I−KkH)P−k
Process
Tips
-
Kalman filter defines every state with Guissian (η,σ2).
Kalman filter predicts and updates not only η, but also σ.
While Bayesian filter only offer a η
-
What is K for? 卡尔曼增益是干啥用的?
// todo(congyu)
EKF
Extended Kalman filter(扩展卡尔曼滤波,EKF)
refitem:
- introductory paper https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
Model
1. Similarities with KF
- 状态量服从正态分布
- 观测量服从正态分布
- 过程噪声服从均值为 0 的正态分布
- 观测噪声服从均值为 0 的正态分布
2. Difference between KF
- EKF中 状态转移函数和(或)观测函数为非线性函数
- 在卡尔曼滤波的前提假设中,认为状态方程中的状态转移函数
以及观测方程中的测函数
均为线性函数。
- 基于这种线性假设,存在常数或常矩阵
,使得
可以写成卡尔曼滤波中的线性形式,存在常数或常矩阵
,使得
也可以写成卡尔曼滤波中的线性形式。
- 不同于标准卡尔曼滤波,扩展卡尔曼滤波处理的是非线性系统,假设系统的状态转移函数和(或)观测函数为非线性函数。
- 在卡尔曼滤波的前提假设中,认为状态方程中的状态转移函数
扩展卡尔曼滤波的处理方法非常简单:将非线性方程一阶泰勒展开成线性方程:
1.1 运动方程
xk=f(xk−1,uk)+wk非线性方程线性化 x−k=f(xk−1,uk,0)Fk−1=∂f(xk−1,uk,wk)∂xk−1|xk−1,uk,0
1.2 观测方程
zk=h(xk)+vk非线性方程线性化 zk=h(xk,0)Hk=∂h(xk,vk)∂xk|xk,0
Process
Notice: 图中箭头所指的非线性函数!是与卡尔曼滤波的区别,图中的g即本文档中的f.