这篇文章主要是用来收集自己关于卡尔曼滤波的学习笔记
首先说一点,这仅仅是笔记,就是说是我自己的想法,所以会有理解错误的地方,想要了解卡尔曼滤波参考相关论文和维基百科
资源:维基百科,一个pdf, MATLAB youtube
笔记
如果你想快速的有一个简单的了解,可以看维基百科和MATLAB youtube上的关于卡尔曼滤波的介绍
从一系列有噪声的观察数据中用卡尔曼滤波器估计出被观察过程的内部状态 这就是卡尔曼滤波的作用
举一个简单的例子
假设一辆汽车从坐标轴0点出发,以某个速度和加速度向前运动,在某个时刻,我们通过数学模型计算得到车处在 2点位置,但是实际上小车在坐标1.95的位置,而车上有A,B两个传感器,分别测量得到车的位置为1.9和1.92,卡尔曼滤波的目的就是根据多种传感器和计算模型,使得我们能够得到尽可能接近真实状态,比如1.945,这个数据虽然还不准但是可能会更接近
卡尔曼滤波的计算过程用一句话来概述:卡尔曼滤波是一种递归的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息
卡尔曼滤波器的操作包括两个阶段:预测与更新。在预测阶段,滤波器使用上一状态的估计,做出对当前状态的估计。在更新阶段,滤波器利用对当前状态的观测值优化在预测阶段获得的预测值,以获得一个更精确的新估计值
简单计算过程
这一步先不管任何推导,把计算公式列出来,根据这些公式可以一步步的推导计算,以下均来自维基百科
一.模型定义
假设k时刻的真实状态是从(k − 1)时刻的状态演化而来,比如 小车k时刻的位置是根据k-1时刻位置和速度的函数,
时刻k,对真实状态xk的一个测量zk
二.递归计算过程
1.参数说明
2. 预测
表示根据k-1的状态的估计来计算k时刻的状态的估计
3.更新
推导过程
可以参考上面提到的博客,应该是我看到的写的最好的博客了,还有一个知乎的翻译版本
笔记
卡尔曼滤波的模型和隐马尔可夫模型,以下摘自维基百科
卡尔曼滤波建立在线性代数和隐马尔可夫模型(hidden Markov model)上。其基本动态系统可以用一个马尔可夫链表示,该马尔可夫链建立在一个被高斯噪声(即正态分布的噪声)干扰的线性算子上的。系统的状态可以用一个元素为实数的向量表示。随着离散时间的每一个增加,这个线性算子就会作用在当前状态上,产生一个新的状态,并也会带入一些噪声,同时系统的一些已知的控制器的控制信息也会被加入。同时,另一个受噪声干扰的线性算子产生出这些隐含状态的可见输出。
就拿上面小车例子,k时刻小车的状态就是由位置和速度组成的一个向量 ,计算
就是一个算子作用在k-1状态下得到k时刻状态的过程