卡尔曼滤波算法(Kalman Filter, KF)深入推导

卡尔曼滤波是一种基于贝叶斯估计最小均方误差(MMSE)的最优状态估计算法。它适用于线性高斯系统,其核心思想是对状态进行递归估计,在预测和测量之间动态调整,最小化估计误差。


1. 线性系统建模

考虑离散时间线性动态系统:

x k = F k − 1 x k − 1 + B k − 1 u k − 1 + w k − 1 \mathbf{x}_k = \mathbf{F}_{k-1} \mathbf{x}_{k-1} + \mathbf{B}_{k-1} \mathbf{u}_{k-1} + \mathbf{w}_{k-1} xk=Fk1xk1+Bk1uk1+wk1

z k = H k x k + v k \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k zk=Hkxk+vk

其中:

  • x k ∈ R n \mathbf{x}_k \in \mathbb{R}^n xkRn 是系统的状态向量(例如物体位置、速度等)。
  • F k \mathbf{F}_k Fk状态转移矩阵,描述状态如何从 k − 1 k-1 k1 时刻演化到 k k k 时刻。
  • B k \mathbf{B}_k Bk控制矩阵,映射外部控制输入 u k \mathbf{u}_k uk 到状态空间。
  • w k ∼ N ( 0 , Q k ) \mathbf{w}_k \sim \mathcal{N}(0, \mathbf{Q}_k) wkN(0,Qk)过程噪声,其协方差矩阵为 Q k \mathbf{Q}_k Qk
  • z k ∈ R m \mathbf{z}_k \in \mathbb{R}^m zkRm测量值,通过测量矩阵 H k \mathbf{H}_k Hk 从状态 x k \mathbf{x}_k xk 映射而来。
  • v k ∼ N ( 0 , R k ) \mathbf{v}_k \sim \mathcal{N}(0, \mathbf{R}_k) vkN(0,Rk)测量噪声,其协方差矩阵为 R k \mathbf{R}_k Rk

假设:

  1. 状态噪声 w k \mathbf{w}_k wk 和测量噪声 v k \mathbf{v}_k vk 互不相关
    E [ w i v j T ] = 0 , ∀ i , j \mathbb{E}[\mathbf{w}_i \mathbf{v}_j^T] = 0, \quad \forall i,j E[wivjT]=0,i,j
  2. 初始状态 x 0 \mathbf{x}_0 x0 服从高斯分布:
    x 0 ∼ N ( x ^ 0 , P 0 ) \mathbf{x}_0 \sim \mathcal{N}(\hat{\mathbf{x}}_0, \mathbf{P}_0) x0N(x^0,P0)

2. 预测步骤(先验估计)

我们希望根据 k − 1 k-1 k1 时刻的状态估计 x ^ k − 1 \hat{\mathbf{x}}_{k-1} x^k1 和协方差 P k − 1 \mathbf{P}_{k-1} Pk1,预测当前状态 x k \mathbf{x}_k xk 的分布。

状态预测(State Prediction)

x ^ k ∣ k − 1 = F k − 1 x ^ k − 1 + B k − 1 u k − 1 \hat{\mathbf{x}}_{k|k-1} = \mathbf{F}_{k-1} \hat{\mathbf{x}}_{k-1} + \mathbf{B}_{k-1} \mathbf{u}_{k-1} x^kk1=Fk1x^k1+Bk1uk1

协方差预测(Covariance Prediction)

P k ∣ k − 1 = F k − 1 P k − 1 F k − 1 T + Q k − 1 \mathbf{P}_{k|k-1} = \mathbf{F}_{k-1} \mathbf{P}_{k-1} \mathbf{F}_{k-1}^T + \mathbf{Q}_{k-1} Pkk1=Fk1Pk1Fk1T+Qk1


3. 更新步骤(后验估计)

当新的测量 z k \mathbf{z}_k zk 到来后,我们需要结合预测值 x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1 和测量值 z k \mathbf{z}_k zk 进行修正,使最终估计更加准确。

计算创新(Innovation)

y ~ k = z k − H k x ^ k ∣ k − 1 \tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1} y~k=zkHkx^kk1

计算创新协方差(Innovation Covariance)

S k = H k P k ∣ k − 1 H k T + R k \mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k|k-1} \mathbf{H}_k^T + \mathbf{R}_k Sk=HkPkk1HkT+Rk

计算卡尔曼增益(Kalman Gain)

K k = P k ∣ k − 1 H k T S k − 1 \mathbf{K}_k = \mathbf{P}_{k|k-1} \mathbf{H}_k^T \mathbf{S}_k^{-1} Kk=Pkk1HkTSk1

更新状态估计

x ^ k = x ^ k ∣ k − 1 + K k y ~ k \hat{\mathbf{x}}_k = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k \tilde{\mathbf{y}}_k x^k=x^kk1+Kky~k

更新协方差估计

P k = ( I − K k H k ) P k ∣ k − 1 \mathbf{P}_k = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1} Pk=(IKkHk)Pkk1

3.1 卡尔曼增益的推导过程

  1. 创新(创新):
    创新是观测值与预测值之间的差异,表示为:
    y k = z k − H k x ^ k − \mathbf{y}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}^-_k yk=zkHkx^k
    创新反映了新观测对当前估计的修正。

  2. 后验协方差的计算:
    后验协方差矩阵 ( P k ) (\mathbf{P}_k) (Pk)是基于预测协方差矩阵 ( P k − ) (\mathbf{P}^-_k) (Pk)、卡尔曼增益 ( K k ) (\mathbf{K}_k) (Kk) 和观测模型 ( H k ) (\mathbf{H}_k) (Hk) 计算的。根据误差传递公式,后验协方差矩阵为:
    P k = ( I − K k H k ) P k − \mathbf{P}_k = (I - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}^-_k Pk=(IKkHk)Pk

  3. 卡尔曼增益的推导:
    为了最小化后验误差的协方差,我们要求 ( P k ) (\mathbf{P}_k) (Pk) 最小化,因此需要对卡尔曼增益进行选择。通过最小化估计误差协方差,可以得到最优的卡尔曼增益 ( K k ) (\mathbf{K}_k) (Kk)

    从最小化后验估计误差协方差的角度出发,我们要解决以下优化问题:
    K k = arg ⁡ min ⁡ K k E [ ( x k − x ^ k ) ( x k − x ^ k ) ⊤ ] \mathbf{K}_k = \arg\min_{\mathbf{K}_k} \mathbb{E}[(\mathbf{x}_k - \hat{\mathbf{x}}_k)(\mathbf{x}_k - \hat{\mathbf{x}}_k)^\top] Kk=argKkminE[(xkx^k)(xkx^k)]
    经过推导,卡尔曼增益的表达式为:
    K k = P k − H k ⊤ ( H k P k − H k ⊤ + R k ) − 1 \mathbf{K}_k = \mathbf{P}^-_k \mathbf{H}_k^\top (\mathbf{H}_k \mathbf{P}^-_k \mathbf{H}_k^\top + \mathbf{R}_k)^{-1} Kk=PkHk(HkPkHk+Rk)1

3.2. 卡尔曼增益的含义

  • ( P k − ) (\mathbf{P}^-_k) (Pk) 预测的协方差矩阵,表示了预测状态的不确定性。
  • ( H k ) (\mathbf{H}_k) (Hk) 观测矩阵,表示如何从状态向量生成观测值。
  • ( R k ) (\mathbf{R}_k) (Rk) 观测噪声的协方差矩阵,表示观测噪声的大小。

卡尔曼增益 ( K k ) (\mathbf{K}_k) (Kk) 的作用是平衡预测误差和观测误差的贡献。在更新过程中,卡尔曼增益越大,表明观测对状态估计的修正作用越大;反之,卡尔曼增益越小,则表示系统对预测的依赖越强。


4. Python 实现示例

以下是一个一维位置估计的卡尔曼滤波示例:

import numpy as np

# 初始化变量
x = 0  # 初始状态
P = 1  # 初始不确定性
F = 1  # 状态转移矩阵
H = 1  # 观测矩阵
R = 1  # 观测噪声
Q = 0.1  # 过程噪声

# 测量值
measurements = [1, 2, 3]

for z in measurements:
    # 预测
    x = F * x
    P = F * P * F + Q
    
    # 计算卡尔曼增益
    K = P * H / (H * P * H + R)
    
    # 更新
    x = x + K * (z - H * x)
    P = (1 - K * H) * P
    
    print(f'Updated State: {x}, Updated Covariance: {P}')

5. 卡尔曼滤波的优缺点

5.1 优点

  • 最优性: 在满足线性系统模型和高斯噪声假设时,卡尔曼滤波可以提供最优的状态估计。
  • 实时性: 卡尔曼滤波是一种递推算法,能够实时更新估计,不需要存储所有历史数据。
  • 计算效率高: 卡尔曼滤波不需要复杂的计算,且可以通过简单的矩阵运算实现。

5.2 缺点

  • 线性假设: 卡尔曼滤波假设系统是线性的,无法直接应用于非线性系统。如果系统具有非线性特征,需要使用扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)。
  • 高斯噪声假设: 卡尔曼滤波假设噪声是高斯分布的,在实际应用中,噪声可能不符合该假设,导致滤波效果不理想。
  • 参数选择: 卡尔曼滤波的性能对过程噪声
  • ( Q ) (\mathbf{Q}) (Q) 和观测噪声 ( R ) (\mathbf{R}) (R) 的选择非常敏感,需要根据具体问题进行调节。

6. 卡尔曼滤波的应用

卡尔曼滤波在实际中有广泛的应用,尤其是在动态系统、自动控制和传感器融合等领域:

  • 导航与定位: 在航天、汽车导航中,卡尔曼滤波用于GPS与惯性测量单元(IMU)融合,提供精确的位置信息。
  • 自动驾驶: 在自动驾驶系统中,卡尔曼滤波常用于多传感器融合(如雷达、激光雷达和摄像头),实现精确的物体检测与路径规划。
  • 机器人定位与路径规划: 卡尔曼滤波用于机器人中的定位、地图构建和自主导航。
  • 金融工程: 在金融市场中,卡尔曼滤波用于时间序列预测和模型估计,处理金融数据中的噪声和不确定性。

7. 扩展卡尔曼滤波(EKF)与无迹卡尔曼滤波(UKF)

7.1 扩展卡尔曼滤波(EKF)

对于非线性系统,扩展卡尔曼滤波(EKF)通过对非线性系统进行泰勒展开,将系统线性化,从而应用卡尔曼滤波方法。EKF的核心在于计算系统状态和观测方程的雅可比矩阵。

7.2 无迹卡尔曼滤波(UKF)

无迹卡尔曼滤波(UKF)是一种更为精确的卡尔曼滤波扩展方法,不需要对非线性方程进行线性化,而是通过采样点(Sigma Points)来传播状态的不确定性,从而提高估计精度。

通过这些方法,卡尔曼滤波能够在复杂的动态系统中提供有效的状态估计,尤其是在系统模型和观测数据具有非线性特征时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch系列教程:编写高效模型训练流程

当使用PyTorch开发机器学习模型时,建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件,并演示如何构建一个精细的训练循环流程,有效地处理数据处理,向前和向后…

PX4中的DroneCAN的实现库Libuavcan及基础功能示例

简介 Libuavcan是一个用C编写的可移植的跨平台库,对C标准库的依赖小。它可以由几乎任何符合标准的C编译器编译,并且可以在几乎任何体系结构/OS上使用。 在 DroneCAN 中,Libuavcan 有一个 DSDL 编译器,将 DSDL 文件转换为 hpp 头…

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号,也即MAC地址,也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 (每一个数可以用四个…

PCA(主成分分析)核心原理

一、PCA(主成分分析)核心原理 即主成分分析技术,又称主分量分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标。在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换…

SpringBoot-模拟SSE对话交互

SpringBoot-模拟SSE对话交互 后端使用SSE进行会话,前端使用Html模拟大模型的问答交互->【前端】【后端】 1-学习目的 本项目代码仓库:https://gitee.com/enzoism/springboot_sse 1-核心知识点 1)什么是SSE协议->客户端发起一次请求&am…

2025DNS二级域名分发PHP网站源码

安装教程 1.程序必须使用PHP8.1 2.将扩展ixed.8.1.lin放入/www/server/php/81/lib/php/extensions/no-debug-non-zts-20210902 3.打开宝塔→软件商店→PHP8.1→配置文件 4.放入:extensionixed.8.1.lin 5.重启PHP8.1 6.新建站点(mysql5.6-5.7andPHP8.1&a…

Matlab实现车牌识别

车牌识别技术作为现代智能交通系统、安防监控以及诸多车辆管理应用场景中的关键环节,正发挥着日益重要的作用,它能够自动、快速且精准地从车辆图像或视频流中提取车牌信息,实现车辆身份的智能化识别。 技术原理 车牌识别主要依托于图像处理、…

C语言——链表

大神文献:https://blog.csdn.net/weixin_73588765/article/details/128356985 目录 一、链表概念 1. 什么是链表? 1.1 链表的构成 2. 链表和数组的区别 数组的特点: 链表的特点: 二者对比: 二…

国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡

基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3…

【网络】HTTP协议、HTTPS协议

HTTP与HTTPS HTTP协议概述 HTTP(超文本传输协议):工作在OSI顶层应用层,用于客户端(浏览器)与服务器之间的通信,B/S模式 无状态:每次请求独立,服务器不保存客户端状态(通过Cookie/Session扩展状态管理)。基于TCP:默认端口80(HTTP)、443(HTTPS),保证可靠传输。请…

设计AI芯片架构的入门 研究生入行数字芯片设计、验证的项目 opentitan

前言 这几年芯片设计行业在国内像坐过山车。时而高亢,时而低潮。最近又因为AI的热潮开始high起来。到底芯片行业的规律是如何? 我谈谈自己观点:芯片设计是“劳动密集型”行业。 “EDA和工具高度标准化和代工厂的工艺标准化之后,芯…

K8S学习之基础十七:k8s的蓝绿部署

蓝绿部署概述 ​ 蓝绿部署中,一共有两套系统,一套是正在提供服务的系统,一套是准备发布的系统。两套系统都是功能完善、正在运行的系统,只是版本和对外服务情况不同。 ​ 开发新版本,要用新版本替换线上的旧版本&…

STM32之I2C硬件外设

注意:硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数…

Linux基础--用户管理

目录 查看用户 使用命令: id 创建用户 使用命令: useradd ​编辑 为用户设置密码 使用命令: passwd ​编辑 删除用户 使用命令: userdel 创建用户组 使用命令: groupadd 删除用户组 使用命令: groupdel 用户设置 使用命令: usermod 将用户从组中去除 使用…

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

本地YARN集群部署

请先完成HDFS的前置部署,部署方式可查看:本地部署HDFS集群https://blog.csdn.net/m0_73641796/article/details/145998092?spm1001.2014.3001.5502 部署说明 组件配置文件启动进程备注Hadoop HDFS需修改 需启动: NameNode作为主节点 DataNode作为从节点 Secondary…

每日一练之移除链表元素

题目: 画图解析: 方法:双指针 解答代码(注:解答代码带解析): //题目给的结构体 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* }…

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…

【GPT入门】第8课 大语言模型的自洽性

【GPT入门】第8课 大语言模型的自洽性 1.自洽性概念2.代码(观察执行结果)3.自洽性核心思想 1.自洽性概念 大模型的自洽性(self - consistency)是指在推理阶段,大模型通过生成多个答案并选择出现频率最高的那个&#x…

深度学习(斋藤康毅)学习笔记(六)反向传播3

上一篇文章介绍了反向传播的自动化,但也存在一些问题,本章用于说明这些问题,并修改原有框架,使其支持复杂计算图的运行: 问题一:重复使用一个变量,梯度不会累计 也就是说,反向传播时…