卡尔曼滤波器是一种最优递归数据处理算法,它更像是一种观测器,而不是一般意义上的滤波器。卡曼滤波器的应用非常广泛,尤其是在导航当中。它的广泛应用是因为我们生活的世界中存在着大量的不确定性,当我们去描述一个系统的时候,这个不确定性主要体现在三个方面
- 不存在完美的数学模型。
- 系统的扰动往往是不可控的,也很难建模的。
- 测量的传感器本身存在着误差。
在进行硬币直径的测量实验中,我们用 来表示第 次的测量结果。由于每位测量者的操作差异以及测量工具本身的误差,每次测量得到的数据都可能有所不同。例如,测量者 第一次测量得到的结果是 50.1 毫米,测量者 的结果是 50.4 毫米,而测量者 的结果是 50.2 毫米。面对这些不同的测量结果,一个直观的方法是计算这些测量值的平均数,以此来估计硬币直径的真实值。
即
随着k的增加,测量的结果趋于稳定。
将写为
表示:当前的估计值=上一次的估计值+系救×(当前测量值-上次的估计值),其中,系数即为Kalman Gain,卡尔曼增益/因数
这种思想体现了递归算法的特点,而这也是卡尔曼滤波器的一个显著优势:它不需要回溯并处理很久以前的数据,仅需依赖于上一次的估计结果。在卡尔曼滤波器的实现中,这一点尤为重要,因为它允许算法在每次迭代中仅利用最新的观测数据和前一步的状态估计,从而有效降低了计算复杂度和存储需求。
关于卡尔曼因数,这里引入两个参数,一个是估计误差,也就是估计值和真实值的差距,这里用来表示,e表示误差,est表示估计,一个是测量误差,也就是测量值和真实值的差距,这里用来表示,MEA 就是 measurement 测量。
这个公式实际是卡尔曼滤波器的核心公式,会在后面的文章当中去详细的讲解它是怎么被推导出来的。
当的时候,此时卡尔曼因数接近1,第k次的估计值接近测量值
当的时候,此时卡尔曼因数接近0,第k次的估计值接近上一次估计值
下面看一个用卡尔曼滤波思想解决问题的例子
Step1:计算Kalman Gain
Step2:计算
Step3:更新
对于Step3,后续解释推导过程。即增加测量值后,分别更新估计值和卡尔曼因数。
还是估计物体长度测量的过程中,假设物体的实际长度为50毫米,而我们第一次的估计值为40毫米,这是一个随机给出的估计值。在此基础上,我们定义第一次的估计误差为5毫米,这个值也是人为设定的,用于量化我们估计值与实际值之间的偏差。
对于测量来说,比如说第一次的测量值是 51 毫米,然后测量误差我们知道有 3 毫米,也就是说它测出来是 51 毫米,所以它有可能是在 48 到 54 毫米之间的一个值,然后使用同样的一个测量工具,所以它第几次的测量误差都是 3 毫米。
蓝色代表测量结果,而红色代表估计结果。初始估计值设定为40,这是我们的起始点。通过卡尔曼滤波器的迭代过程,我们可以看到,经过一步、两步、三步、四步、五步的更新后,估计值逐渐接近至49mm。值得注意的是,物体的实际长度为50mm。随着更多数据的不断输入和迭代过程的持续进行,估计值越来越接近实际值。
这一过程体现了卡尔曼滤波器的递归特性。随着新数据的不断加入和更新,估计值逐步逼近真实值。这是一个简单而直观的例子,展示了如何利用卡尔曼滤波器的递归思想来进行状态估计。通过这种递归迭代的方式,卡尔曼滤波器能够有效地融合先验估计和新的测量数据,以实现对系统状态的准确估计。
参考资料
【卡尔曼滤波器】1_递归算法_Recursive Processing