容积KF(CKF)

2023-10-21 10:50
文章标签 容积 kf ckf

本文主要是介绍容积KF(CKF),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 前言

为了克服UKF在高维情况下出现滤波精度低的问题,Arasaratnam 和Haykin基于Caubature求积分变换,提出了容积卡尔曼滤波CKF方法。后来众多学者又基于CKF,提出了很多改进版本,如平方根CKF。

对于高斯分布下的非线性滤波问题,实际上就求后验期望的积分。由于被积分函数表现为非线性后验分布与高斯概率密度的乘积,因此一般很难得到解析解。这也是线性系统下该积分可以得到解析解,即著名的卡尔曼滤波算法。
E [ x ∣ z ] = ∫ R f ( x ) exp ⁡ ( − x T x ) d x E[x|z]=\int_Rf(x)\exp(-x^\text{T}x)dx E[xz]=Rf(x)exp(xTx)dx
因此针对该非线性函数的积分问题,产生了众多基于数值积分的滤波算法。如UKF通过确定性采样来传播分布的一二阶矩(均值和方差)。而CKF作为看另一种求积分近似方法,利用球面径向规则。

CKF和UKF比较:

当取 κ = 0 \kappa=0 κ=0时, CKF 和 UKF 的估计精度相同,但鉴于 CKF 采样点少,实时性比 UKF 好,故应选用 CKF 滤波算法;

n ≤ 2 n\leq2 n2时,即低维非线性系统, UKF 的估计精度高于 CKF,应选用 UKF 滤波算法;

n = 2 n=2 n=2时的非线性系统, UKF 及 CKF 的估计精度相同,但 CKF 的实时性更好,应选用 CKF 滤波算法;

n ≥ 3 n\geq3 n3时,即高维非线性系统, CKF 的估计精度高于 UKF,应选用 CKF 滤波算法。

1 问题描述(离散时间非线性系统描述)

考虑带加性噪声的一般非线性系统模型,
x k = f ( x k − 1 ) + w k − 1 z k = h ( x k ) + v k x_k=f(x_{k-1}) +w_{k-1} \\ z_k=h(x_k)+v_k xk=f(xk1)+wk1zk=h(xk)+vk
其中 x k x_k xk k k k时刻的目标状态向量。 z k z_k zk k k k时刻观测向量(传感器数据)。这里不考虑控制器 u k u_k uk w k w_k wk v k v_k vk分别是过程噪声序列和量测噪声序列,并假设 w k w_k wk v k v_k vk为零均值高斯白噪声,其方差分别为 Q k Q_k Qk R k R_k Rk的高斯白噪声,即 w k ∼ N ( 0 , Q k ) w_k\sim N(0,Q_k) wkN(0,Qk), v k ∼ N ( 0 , R k ) v_k\sim N(0,R_k) vkN(0,Rk),且满足如下关系(线性高斯假设)为:
E [ w i v j T ] = 0 E [ w i w j T ] = 0 i ≠ j E [ v i v j T ] = 0 i ≠ j \begin{aligned} E[w_iv_j^\text{T}] &=0\\ E[w_iw_j^\text{T}] &=0\quad i\neq j \\ E[v_iv_j^\text{T}] &=0\quad i\neq j \end{aligned} E[wivjT]E[wiwjT]E[vivjT]=0=0i=j=0i=j

2 带加性噪声的容积卡尔曼滤波算法CKF

(1) 初始化

步骤一:给定 k − 1 k−1 k1时刻的状态估计和协方差矩阵
x ^ k − 1 ∣ k − 1 , P k − 1 ∣ k − 1 , Q k − 1 , R k − 1 \hat{x}_{k-1|k-1},P_{k-1|k-1},Q_{k-1},R_{k-1} x^k1∣k1,Pk1∣k1,Qk1,Rk1
当为 k = 0 k=0 k=0时刻时,假设 x 0 ∼ N ( x ˉ 0 , P 0 ) , Q 0 , R 0 x_0\sim N(\bar{x}_0, P_0),Q_{0},R_{0} x0N(xˉ0,P0),Q0,R0,则滤波器最优初始化为
x ^ 0 ∣ 0 = E ( x 0 ) = x ˉ 0 P 0 ∣ 0 = E ( x 0 − x ^ 0 ∣ 0 ) ( x 0 − x ^ 0 ∣ 0 ) T = P 0 \hat{x}_{0|0}=E(x_0)=\bar{x}_0\\P_{0|0}=E(x_0-\hat{x}_{0|0})(x_0-\hat{x}_{0|0})^\text{T} =P_0 x^0∣0=E(x0)=xˉ0P0∣0=E(x0x^0∣0)(x0x^0∣0)T=P0

(2) 状态预测

步骤二:根据 k − 1 k−1 k1时刻的估计 x ^ k − 1 ∣ k − 1 \hat{x}_{k-1|k-1} x^k1∣k1和方差 P k − 1 ∣ k − 1 P_{k-1|k-1} Pk1∣k1,产生容积点
P k − 1 ∣ k − 1 = S k − 1 ∣ k − 1 S k − ∣ k − 1 T P_{k-1|k-1}=S_{k-1|k-1}S_{k-|k-1}^\text{T} Pk1∣k1=Sk1∣k1Skk1T

ξ i = m 2 [ 1 ] i , i = 1 , 2 , ⋯ , m = 2 n \xi_i=\sqrt{\frac{m}{2}}[\mathbf{1}]_i, i=1,2,\cdots,m=2n ξi=2m [1]i,i=1,2,,m=2n

[ 1 ] [\mathbf{1}] [1]表示 n n n n n n维状态) 维空间的点集,即 [ 1 ] = [ I n × n − I n × n ] [\mathbf{1}]=[I_{n\times n} \ \ \ \ -I_{n\times n}] [1]=[In×n    In×n].
S k − 1 ∣ k − 1 = P k − 1 ∣ k − 1 X k − 1 ∣ k − 1 i = x ^ k − 1 ∣ k − 1 + S k − 1 ∣ k − 1 ξ i \begin{aligned} &S_{k-1|k-1}=\sqrt{P_{k-1|k-1}}\\ &\mathcal{X}^i_{k-1|k-1}=\hat{x}_{k-1|k-1}+S_{k-1|k-1}\xi_i \end{aligned} Sk1∣k1=Pk1∣k1 Xk1∣k1i=x^k1∣k1+Sk1∣k1ξi
步骤三: 根据非线性模型进行容积点的非线性传播
X k ∣ k − 1 i = f ( X k − 1 ∣ k − 1 i ) , i = 1 , 2 , ⋯ , m \mathcal{X}^i_{k|k-1}=f(\mathcal{X}^i_{k-1|k-1}),i=1,2,\cdots,m Xkk1i=f(Xk1∣k1i)i=1,2,,m
步骤四: 状态一步预测和预测方差
x ^ k ∣ k − 1 = 1 m ∑ i = 1 m X k ∣ k − 1 i P k ∣ k − 1 = 1 m ∑ i = 0 m ( X k ∣ k − 1 i − x ^ k ∣ k − 1 ) ( X k ∣ k − 1 i − x ^ k ∣ k − 1 ) T + Q k \begin{aligned} &\hat{x}_{k|k-1}=\frac{1}{m}\sum_{i=1}^{m}\mathcal{X}^i_{k|k-1}\\ &P_{k|k-1}=\frac{1}{m}\sum_{i=0}^{m}(\mathcal{X}^i_{k|k-1}-\hat{x}_{k|k-1})(\mathcal{X}^i_{k|k-1}-\hat{x}_{k|k-1})^\text{T}+Q_k \end{aligned} x^kk1=m1i=1mXkk1iPkk1=m1i=0m(Xkk1ix^kk1)(Xkk1ix^kk1)T+Qk

(3) 测量更新

步骤五: 根据 k k k时刻的估计 x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^kk1和方差 P k ∣ k − 1 P_{k|k-1} Pkk1,计算容积点
S k ∣ k − 1 = P k ∣ k − 1 ζ k ∣ k − 1 i = x ^ k ∣ k − 1 + S k ∣ k − 1 ξ i \begin{aligned} &S_{k|k-1}=\sqrt{P_{k|k-1}}\\ &\zeta^i_{k|k-1}=\hat{x}_{k|k-1}+S_{k|k-1}\xi_i \end{aligned} Skk1=Pkk1 ζkk1i=x^kk1+Skk1ξi
步骤六: ζ k ∣ k − 1 i \zeta^i_{k|k-1} ζkk1i点通过量测方程传播,
Z k ∣ k − 1 i = h ( ζ k ∣ k − 1 i ) , i = 1 , 2 , ⋯ , m \mathcal{Z}^i_{k|k-1}=h(\zeta^i_{k|k-1}),i=1,2,\cdots,m Zkk1i=h(ζkk1i)i=1,2,,m
步骤七: 观测的预测,观测的预测误差方差(新息方差),状态与量测互协方差,增益
z ^ k ∣ k − 1 = 1 m ∑ i = 1 m Z k ∣ k − 1 i S k = 1 m ∑ i = 1 m ( Z k ∣ k − 1 i − z ^ k ∣ k − 1 ) ( Z k ∣ k − 1 i − z ^ k ∣ k − 1 ) T + R k C k = 1 m ∑ i = 1 m ( X k ∣ k − 1 i − x ^ k ∣ k − 1 ) ( Z k ∣ k − 1 i − z ^ k ∣ k − 1 ) T K k = C k S k − 1 \begin{aligned} &\hat{z}_{k|k-1}=\frac{1}{m}\sum_{i=1}^{m}\mathcal{Z}^i_{k|k-1}\\ &\mathcal{S}_{k}=\frac{1}{m}\sum_{i=1}^{m}(\mathcal{Z}^i_{k|k-1}-\hat{z}_{k|k-1})(\mathcal{Z}^i_{k|k-1}-\hat{z}_{k|k-1})^\text{T} +R_k\\ &C_{k}=\frac{1}{m}\sum_{i=1}^{m}(\mathcal{X}^i_{k|k-1}-\hat{x}_{k|k-1})(\mathcal{Z}^i_{k|k-1}-\hat{z}_{k|k-1})^\text{T} \\ &K_k=C_{k}\mathcal{S}_{k}^{-1} \end{aligned} z^kk1=m1i=1mZkk1iSk=m1i=1m(Zkk1iz^kk1)(Zkk1iz^kk1)T+RkCk=m1i=1m(Xkk1ix^kk1)(Zkk1iz^kk1)TKk=CkSk1
步骤八:
x ^ k ∣ k = E [ x k ∣ Z k ] = x ^ k ∣ k − 1 + K z ( z k − z ^ k ∣ k − 1 ) P k ∣ k = cov ( x ~ k ∣ k ) = P k ∣ k − 1 − K k S k K k T \begin{aligned} \hat{x}_{k|k}&=E\left[ x_k\mid Z^{k}\right ]=\hat{x}_{k|k-1}+K_z\left(z_k-\hat{z}_{k|k-1}\right)\\ P_{k\mid k}&=\text{cov}\left(\widetilde{x}_{k\mid k}\right)=P_{k\mid k-1}-K_k\mathcal{S}_kK_k^\text{T} \end{aligned} x^kkPkk=E[xkZk]=x^kk1+Kz(zkz^kk1)=cov(x kk)=Pkk1KkSkKkT
这里 x ~ k ∣ k = x k − x ^ k ∣ k \widetilde{x}_{k\mid k}=x_k-\hat{x}_{k|k} x kk=xkx^kk为估计误差, Z k Z^{k} Zk表示前 k k k时刻的所有观测,即 { z k , z k − 1 , ⋯ , z 1 } \{z_k,z_{k-1},\cdots,z_1 \} {zk,zk1,,z1}

参考:从贝叶斯滤波理论到容积卡尔曼滤波算法(CKF)详细推导及编程实现常转弯率模型估计

下面这个更清楚

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于容积KF(CKF)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253898

相关文章

【逐行注释】容积卡尔曼滤波的MATLAB例程(三维CKF),无需下载,可直接复制代码到MATLAB上运行

文章目录 CKF完整源代码与注释程序运行结果绘图部分误差的统计特性计算与输出部分 CKF CKF全称为容积卡尔曼滤波,相比于UKF(无迹卡尔曼滤波),拥有更合理的理论推导和鲁棒性,且在理论上比UKF的精度更高。 另有: 与EKF的对比程序:https://blog.csdn.net/callmeup/article/details/136147833 完整源代码与注释

自适应Q的容积卡尔曼滤波MATLAB例程|完整代码

前言 给出自适应容积卡尔曼滤波(ACKF)的MATLAB代码。 主要思想 通过自适应状态协方差Q来实现,得到了比传统方法更低的估计误差。适用于Q无法获取、估计不准、变化不定的情况,只有一个M文件,方便运行,保运行成功,不包讲解。 运行截图 三轴状态的估计曲线: 状态误差的曲线如下: 因为未滤波的误差太大了,将中间红色和黄色部分放大一点,得到下图: 能明显看出来ACKF的误差更小

自适应容积卡尔曼滤波|(自适应CKF)的MATLAB源代码

介绍 容积卡尔曼滤波在理论上拥有比UKF更高的精度和稳定性,本自适应算法通过对观测残差的计算,在观测协方差R不准确或无法获得时,对R进行调节,以起到降低估计误差的作用。 模型 使用的是三维的非线性模型,经过适当修改,可用于组合导航等领域。 三轴滤波结果如下: 代码组成部分 只有一个m文件,方便运行。由以下几个部分组成: 运行结果 单轴的误差对比: 未滤波>CKF>ACKF(A是

EKF+CKF对比程序

三维滤波,非线性系统状态与非线性观测,使用EKF和CKF进行滤波,输出滤波值曲线与误差对比,MATLAB程序如下: % EKF+CKF效果对比% author:Evand% 作者联系方式:evandjiang@qq.com(除前期达成一致外,付费咨询)% date: 2023-12-05% Ver1clear;clc;close all;%% 滤波模型初始化t = 1:1:1000

Single-Head ViT;Faster Whisper;Transformer KF;Pick-and-Draw

本文首发于公众号:机器感知 Single-Head ViT;Faster Whisper;Transformer KF;Pick-and-Draw SHViT: Single-Head Vision Transformer with Memory Efficient Macro Design Recently, efficient Vision Transformers have s

Leetcode|460. LFU 缓存(KV+KF+FK哈希链表+minFreq)

相关题目 《Leetcode|146. LRU 缓存机制(key2node哈希链表)》 《Leetcode|460. LFU 缓存(KV+KF+FK哈希链表+minFreq)》 解题逻辑 这道题虽然不难,但是逻辑较多,第一次手撕时由于漏掉2个逻辑没有AC,后来花了些时间debug完才AC,对于这种逻辑较多但不难的题,想要一次写对,还是不要偷懒。先不要着急写代码,把大致逻辑图画出来,这样

卡尔曼滤波(KF)和增广卡尔曼滤波(EKF)实现

卡尔曼滤波(KF) python实现: import numpy as npF = np.array([[1, 1], [0, 1]]) # 状态转移矩阵 X(k+1)=[[1, Δt], [0, 1]]*X(k) Δt=1Q = 0.1 * np.eye(2, 2) # 过程噪声协方差矩阵R = 0.1 * np.eye(2, 2) # 观测噪声协方

构建和应用卡尔曼滤波器 (KF)--扩展卡尔曼滤波器 (EKF)

作为一名数据科学家,我们偶尔会遇到需要对趋势进行建模以预测未来值的情况。虽然人们倾向于关注基于统计或机器学习的算法,但我在这里提出一个不同的选择:卡尔曼滤波器(KF)。 1960 年代初期,Rudolf E. Kalman 彻底改变了使用 KF 建模复杂系统的方式。从引导飞机或航天器到达目的地,到让您的智能手机找到它在这个世界上的位置,该算法融合了数据和数学,以令人难以置信的准确性提供对未来状态

卡尔曼滤波(Kalman Filter,KF)基础推导及其实例

文章目录 卡尔曼滤波(Kalman Filter,KF)涉及到的主要知识卡尔曼滤波中涉及的几个常用概念卡尔曼滤波中最重要的五个公式卡尔曼增益的推导后验估计表达式的推导误差协方差矩阵的推导卡尔曼滤波在控制领域应用的推导 卡尔曼增益详解卡尔曼增益的计算方式卡尔曼增益的解读 卡尔曼滤波的应用普通应用中的一般流程实例说明应用实例(matlab):预测实际硬币的直径 卡尔曼滤波(Kalma

温度场有限容积法程序入门之三:2D温度场显式迭代计算(暂不考虑潜热)

我们首先介绍温度场的求解吧,假设边界条件和初始条件已经设定。在贴代码之前,我们先谈谈这个类需要什么属性和行为:节点数组用于存储计算变量、网格大小、维度定义、计算函数,也就这么多了。如何计算某节点的温度?计算其东南西北方位相接节点对该节点的穿导热之和即可,读者这里可以考虑一下如何添加源相和对流换热进去。 package Soong.Solver{public class TS