Kalman滤波算法介绍
本文最后更新于:2023年9月15日 下午
Kalman滤波算法介绍
卡尔曼滤波在统计学和控制理论中,也被称为线性二次估计(LQE)算法,它使用随时间推移观察到的一系列测量,包括统计噪声和其他不准确性,并通过估计每个时间段上变量的联合概率分布,产生对未知变量的估计,往往比仅基于单一测量的估计更准确。该过滤器以Rudolf E. Kálmán的名字命名,他是该理论的主要开发者之一。
总的来说,卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。Kalman filter的应用十分广泛,提供了可以真正实用的针对有限维随机系统的实时状态最优估计。它作为一种工具,主要有两方面的应用:状态估计与估计系统的性能分析。
参考文章
如何通俗并尽可能详细地解释卡尔曼滤波? - 知乎 (zhihu.com)
附件-Engineering Math常见的物理微分方程 | ShareTechnote
一、Kalman滤波器
Kalman Filter算法,是一种递推预测滤波算法,算法中涉及到滤波,也涉及到对下一时刻数据的预测。Kalman Filter由一系列递归数学公式描述。它提供了一种高效可计算的方法来估计过程的状态,并使估计均方误差最小。卡尔曼滤波器应用广泛且功能强大:它可以估计信号的过去和当前状态,甚至能估计将来的状态,即使并不知道模型的确切性质。
Kalman Filter 也可以被认为是一种数据融合算法(Data fusion algorithm),已有50多年的历史,是当今使用最重要和最常见的数据融合算法之一。Kalman Filter 的巨大成功归功于其小的计算需求,优雅的递归属性以及作为具有高斯误差统计的一维线性系统的最优估计器的状态。
Kalman Filter只能减小均值为0的测量噪声带来的影响。只要噪声期望为0,那么不管方差多大,只要迭代次数足够多,那效果都很好。反之,噪声期望不为0,那么估计值就还是与实际值有偏差。
(1)假设条件
理论上,使用kalman滤波器需要满足三个重要假设:
- 系统的动力学模型和测量模型都必须为线性。
- 动力学模型是比较准确的,符合实际系统的行为。
- 动力学模型中的噪音和观测噪音都是零均值且方差已知的白噪声。
(2)递推原理
当测量一水管的外径时,若我们采用尺子进行多次测量,然后取其平均值作为对此水管外径的精确估计,其过程可描述为:
多次测量结果 当测量次数
我们引入两个误差,一是估计误差
若
若
总结上述过程,针对一维数据应用Kalman滤波的步骤为:
Step1:计算Kalman增益
Step2:计算当前估计值
Step3:更新当前估计误差
假如水管外径真实值为
预先给定初始估计值
上述就是利用Kalman滤波的递归思想实现估计值越来越接近真实值的例子。
(3)数据融合
仍以测量水管外径为例,当存在两把尺子去测量水管外径,两把尺子的测量出来效果有所不同,第一把尺子的测量结果为
若利用
当
而现在为求
这样我们就可以求得
(2)应用举例
以质量-弹簧-阻尼系统为例:
可列出其动力学方程:
将
由上获得了质量-弹簧-阻尼系统的动力学方程,再此取测量位置和测量速度作为测量量:
动力学模型:
测量模型:
以上的动力学模型方程和测量模型方程的离散形式(状态空间方程的离散化 -
知乎 (zhihu.com))为:(其中下标表示时间采样的标记)
在实际生活中任何系统和测量工具都存在有不确定性,当我们考虑这种不确定性时,上式的两个方程则需要改写为:
其中
(3)Kalman增益
以上述的质量-弹簧-阻尼系统为例,考虑动力学模型中的过程噪声和测量模型中的测量噪声,则有:
在自然环境中,过程噪声向量一般可假设为正态分布,期望为
以二维状态向量为例计算协方差矩阵:
由
同样,测量噪声也可被假设为正态分布,期望为
考虑实际过程中的实现,重新定义动力学模型方程中的符号,若去掉过程噪声项
另外针对测量模型,若去掉测量噪声项
运用之前所介绍的数据融合思想去推导最终的估计值
令
故要寻求最优的,使得
定义后验状态误差:
最优的
进一步展开化简:
分析中间两项,由于
因为先验状态误差
定义
展开公式得:
为求得
互为转置矩阵的矩阵,其迹相等,分析
可得
对卡尔曼增益
则有:
协方差矩阵的转置等于自身,整理可得Kalman增益
当测量噪声方差
当测量噪声方差
至此获得了卡尔曼滤波中的3条重要公式:
①先验估计
②后验估计
③卡尔曼增益
(4)误差协方差矩阵
在之前的推导过程中,获得了3个重要公式,考虑实际测量计算过程,卡尔曼增益的计算表达式中还存在有不明确的值
因为
先验误差协方差需要用到上一次误差协方差,所以需要更新误差协方差,利用式
至此获得了卡尔曼滤波中另外2个重要公式:
④先验误差协方差
⑤更新误差协方差
总结Kalman滤波的内容,主要分为两个阶段,五个公式:
一是预测阶段,包括先验状态计算和先验误差协方差更新
二是校正阶段,包括卡尔曼增益更新、估计值计算以及估计误差协方差更新:
由上可以看出,Kalman滤波递推的前提是给定初值
整理上述推导过程中所用符号及其含义:
变量 | 描述 | 维度 |
---|---|---|
状态向量 | ||
输出向量 | ||
状态转移矩阵 | ||
输入变量 | ||
控制矩阵 | ||
估计不确定性 | ||
过程噪声不确定性 | ||
测量噪声不确定性 | ||
过程噪声向量 | ||
测量噪声向量 | ||
观测矩阵 | ||
卡尔曼增益 | ||
k | 离散时间步 |
维度说明:
is a number of states in a state vector is a number of measured states is a number of elements of the input variable
(5)Matlab代码实现
将卡尔曼滤波应用于估计匀速行驶小车的状态为例,取状态1为小车的位置
位置转移:
速度转移:
上述位置和速度转移方程描述的是理想的匀速行驶,而现实过程中会有各种各样的干扰,使得匀速行驶变得不那么匀速行驶,即加上过程噪声项:
可以假设过程噪声符合正态分布
考虑测量的不确定性,将测量模型修正:
所以整理出小车的状态转移方程和观测方程,以矩阵的形式呈现:
即:
根据状态转移方程和观测方程可获得状态转移矩阵
根据实际设置过程噪声协方差矩阵和测量噪声协方差矩阵,以确定
设置采样时间
给出Matlab代码如下:
1 |
|
Kalman滤波效果:
二、扩展Kalman滤波器
扩展卡尔曼滤波(Extended Kalman Filter)是卡尔曼滤波的非线性版本,在状态转移方程确定的情况下,扩展卡尔曼滤波已经成为了非线性系统状态估计的实施标准。 扩展卡尔曼滤波处理非线性问题的主要方法是泰勒展开,求非线性函数的雅可比矩阵。非线性问题一般存在于预测和观测过程,分别对这两部分求雅可比矩阵,作为卡尔曼滤波中的预测矩阵和观测矩阵。
未完待续……
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!