卡尔曼滤波增益推导

该文章主要是记录温习卡尔曼滤波算法理论时的一些理解,重点讲解卡尔曼增益的推导过程。其中忽略了部分基础知识和详细的推导过程,阅读该文章需要本身已具备卡尔曼滤波基础。文章内容摘取自网络博客的部分内容,因为原文章的逻辑不是很通顺,所以这里根据自己的理解进行整理。

前置概念:

1)正态分布

2)期望:对随机变量可能取值的加权平均值,其中权重是取值的概率。用期望去理解均值的计算就是均值计算中可能取值的概率均为1。

3)服从正态分布的随机变量,其期望为均值。

4)服从正态分布的随机变量,其方差为

5)先验估计:根据上一时刻的最优估计(先验值)得到当前时刻的估计值。

6)后验估计:根据先验估计,当前时刻的测量值,卡尔曼增益计算当前最优估计值。

7)协方差矩阵:用来度量估计值的不确定性,代表这个估计值的误差。其对角线是单个变量的方差。先验估计和后验估计都对应一个协方差矩阵。

首先通过数据融合的例子来理解卡尔曼增益:设目标真实值为Z,GPS测量值为 Z1 ,加速度计测量值为 Z2。两传感器都受噪声的影响,不失一般性,让两个测量信号的误差都服从正态分布:

通过组合两个测量值来得到真实值的最优估计:

其中K是需确定的权重因子,为求得最优K,尝试最小化估计误差的方差。

真实值为z ,那么估计误差为:

估计误差的方差为:

展开方差:

最小化方差,我们对K求导数并令其等于零:

得到最优K值:

最后通过最优K值计算得到最优估计值。当K=0时表示只相信GPS的测量值,当K=1时表示加速度计测量值。对应到卡尔曼滤波中,卡尔曼增益就是预测值与观测值之间的权重因子,卡尔曼滤波的原理就是利用卡尔曼增益和测量值来修正预测值,使其逼近真实值。

根据上面的例子来考虑线性卡尔曼滤波增益的推导。先回顾一下卡尔曼滤波的整体步骤,总体有两步(预测和校正),具体的步骤如下图:

类比上面叙述的数据融合的思想将预测值和测量值表示出来。预测值为:

(1)

其中k表示当前时刻,k-1表示上一时刻。这个式子的意义就是利用上一时刻的最优估计预测当前时刻的状态量。测量值为:

(2)

H矩阵是将预测向量与测量向量的转换矩阵,这个式子代表的意思是将当前时刻的测量值转成状态空间的状态向量。

融合两个数据计算当前最优估计值:

G是权重因子,取值在[0, 1]之间,要想得到最优估计,只需要找到最优G值。

为方便计算引入卡尔曼增益K:

则K的取值为:

将K代入上式以消除H逆矩阵:

(3)

所以要想求得最优估计,则需要找到最优K值。思路是通过构建最优估计误差方程,将K引入误差方程,然后求误差方程的协方差矩阵,对协方差矩阵求K的偏导,偏导等于0时即表示误差最小,此时导数方程含有K值,即可求得最优K值。具体如下:

1)引入测量噪声并计算估计误差

上面对于预测值和测量值的表示没有引入误差,实际中测量值和预测值均存在噪声。

将式子(2)变换到测量空间并引入测量噪声得到新的测量方程:

(4)

求得最优估计即表示最优估计与真实值的误差最小,即后验估计误差最小,如下:

(5)

同理先验估计误差为:

(6)

其中Xk表示当前时刻的真实值(这个是不知道的),表示当前最优估计(后验估计)。

2)消除误差方程中的中间值,得到误差传递方程,计算误差的协方差矩阵

将式子(3)代入式子(5)中消除,接着继续将式子(4)代入其中消除Zk,得到后验估计误差方程:

(7)

该方程是误差传递方程,根据该方程可以得到其后验估计误差的协方差矩阵:

(8)

其中R是测量噪声的协方差矩阵。该协方差矩阵表示后验估计误差的不确定性。

3)求协方差矩阵的迹

考虑后验估计误差的协方差矩阵的迹,如下:

(9)

其等于后验估计状态变量的各个元素方程的和,所以它的值就表示了后验估计的准确性,其值越小表示后验估计误差越小。那么求解目标就变成了寻找最优的卡尔曼增益K从而使得(9)最小。式子(9)的展开式为:

4)求K的偏导,得到K的表达式

求K的偏导,得到目标函数J:

令J=0得到卡尔曼增益:

参考文章:

卡尔曼滤波:基本原理、算法推导、实践应用与前沿进展 - 知乎

相关推荐
lili-felicity5 分钟前
指针与数组:深入C语言的内存操作艺术
c语言·开发语言·数据结构·算法·青少年编程·c#
PengFly1237 分钟前
题解:[ABC294G] Distance Queries on a Tree
算法·lca·树状数组·dfs序
月亮邮递使light10 分钟前
代码随想录算法训练营第五十八天 | 拓扑排序精讲 dijkstra(朴素版)精讲
算法
野風_1996020123 分钟前
代码随想录第59天
算法
HappyAcmen31 分钟前
青训营-豆包MarsCode技术训练营试题解析四十八
开发语言·python·算法
码农老起38 分钟前
插入排序解析:时间复杂度、空间复杂度与优化策略
数据结构·算法·排序算法
俎树振1 小时前
深入理解与优化Java二维数组:从定义到性能提升的全面指南
java·算法
DARLING Zero two♡1 小时前
【优选算法】Sliding-Chakra:滑动窗口的算法流(上)
java·开发语言·数据结构·c++·算法
❦丿多像灬笑话、℡1 小时前
leetcode 热题100(208. 实现 Trie (前缀树))数组模拟c++
算法·leetcode·c#
hjxxlsx1 小时前
二维数组综合
c++·算法