容积卡尔曼(CKF)算法介绍_附例子和代码

article/2025/11/11 2:25:15
    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_38451800/article/details/87982400

本文,主要的目的向大家介绍容积卡尔曼(CKF)算法,包括两方面:(1)将积分形式变换成球面径向积分形式的缘故;(2)三阶球面径向准则;最后给出一个非线性系统的例子和源代码,供大家参考使用。

1.参考资料
  首先,还是给出一篇参考论文:湖南大学-段洋2018年的硕士毕业论文
链接:https://pan.baidu.com/s/18_BUWrpg4gNpZiOjUk2byA 提取码:8u89 。
(备注:其实,随便找一篇只要是没有太多错误的论文就好,只不过他这篇论文中还有:加了平方根的容积卡尔曼,即SRCKF)
  然后,推荐一篇博客,好像并没有专门并且讲的很详细的博客。

2.容积卡尔曼(CKF)算法
  容积卡尔曼滤波(Cubature Kalman filter, CKF),是由加拿大学者 Arasaratnam 和 Haykin 在 2009 年首次在硕士学位论文提出,CKF 基于三阶球面径向容积准则,并使用一组容积点来逼近具有附加高斯噪声的非线性系统的状态均值和协方差,是理论上当前最接近贝叶斯滤波的近似算法,是解决非线性系统状态估计的强有力工具。其中,将积分形式变换成球面径向积分形式三阶球面径向准则是最为重要的两个步骤。
  (1) 那**为何将积分形式变换成球面径向积分形式???**我们先来看看,原来的积分形式是啥样(如下图1):
  在这里插入图片描述
                   图1

为了解上式,我们有多少种方法呢?比如EKF是靠非线性函数线性化,泰勒级数取前几项近似,所以都不涉及到解积分方程,有人可能会问,哪里来的积分方程,那微分方程和积分方程不是一样的解法吗,况且有的时候积分方程比微分方程更容易求解;UKF是靠对非线性函数的概率密度分布进行近似,用一系列确定样本来逼近状态的后验概率密度;粒子滤波是靠频率代替概率;神经网络直接不管这些,三层结构用数据训练模型等等。然后,我们看看球面径向积形式(如下图):
在这里插入图片描述
               图 2
备注:这种形式变换的目的是什么呢?跟所有坐标变换的目的一样,即模型描述的简洁程度不同,讲深了这篇博客博主就跑偏了,哈哈哈)
(2) 高斯-厄米准则(Gass-Hermite,GH)和三阶球面径向容积准则
对图2径向式和球面积分式,分别利用Mr点的GH准则和Ms点的球面准则,可得
在这里插入图片描述
                  图3
3.权值和容积点   
  应用三阶球面径向容积准则,Mr=1,Ms=2n(n为状态向量维数),标准高斯积分可表示如下: 在这里插入图片描述 
比如n=3时,相应的容积点集为:[1,0,0,-1,1,0;
               0,1,0,0,-1,0;
               0,0,1,0,0,-1];
比如n=2时,相应的容积点集为:[1,0,-1,0;
                0,1,0,-1];

4.一个CKF例子

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  容积Kalman滤波%  状态方程:x(:,k+1) = F * x(:,k) +[sqrt(Q) * randn;0]; %  观测方程:z(k+1) = atan(0.1 * x(1,k+1)) + sqrt(R) * randn; %  编程人:a往南向北,日期:2019/02/26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clc; clear all;close all;n=501;tf = 500;                                     % 模拟长度 x=zeros(2,n);z=zeros(1,n);x(:,1) =[1;0.1];                              % 初始状态 x_ckf=zeros(2,n);% x_estimate(:,1) = [1;0.1];                  %状态的估计x_ckf(:,1)=[1;0.1];% e_x_estimate = x_estimate(:,1);             %EKF的初始估计xhat=x_ckf(:,1);x_e_error=zeros(1,n);x_c_error=zeros(1,n);z_e_error=zeros(1,n);z_c_error=zeros(1,n);Q = 0.0001;                                    % 过程状态协方差 R = 0.16;                                      % 测量噪声协方差 P =[0.0099,0;0,0.0001];                        %初始估计方差Pplus=P;F=[1,1;0,1];Gamma=[0.5;1];w=0.25;  kesi=sqrt(2)*[1,0,-1,0;0,1,0,-1];for k = 1 : tf % 模拟系统 x(:,k+1) = F * x(:,k) + Gamma * sqrt(Q) * randn;      %状态值 %x(:,k+1) = F * x(:,k) +[sqrt(Q) * randn;0]; z(k+1) = atan(0.1 * x(1,k+1)) + sqrt(R) * randn;      %观测值end;for k = 1 : tf %Cubature卡尔曼滤波器%%%%%(1)求协方差矩阵平方根S=chol(Pplus,'lower');%%%%%(2)计算求容积点rjpoint(:,1)=S*kesi(:,1)+xhat;rjpoint(:,2)=S*kesi(:,2)+xhat;rjpoint(:,3)=S*kesi(:,3)+xhat;rjpoint(:,4)=S*kesi(:,4)+xhat;%%%%%(3)传播求容积点Xminus(:,1)=F*rjpoint(:,1);                           %容积点经过非线性函数后的值Xminus(:,2)=F*rjpoint(:,2);Xminus(:,3)=F*rjpoint(:,3); Xminus(:,4)=F*rjpoint(:,4); %%%%(4)状态预测xminus=w*Xminus(:,1)+w*Xminus(:,2)+w*Xminus(:,3)+w*Xminus(:,4);%%%%(5)状态预测协方差阵Pminus=w*(Xminus(:,1)*Xminus(:,1)'+Xminus(:,2)*Xminus(:,2)'+Xminus(:,3)*Xminus(:,3)'+Xminus(:,4)*Xminus(:,4)')-xminus*xminus'+Gamma * Q* Gamma';%Pminus=w*(Xminus(:,1)*Xminus(:,1)'+Xminus(:,2)*Xminus(:,2)'+Xminus(:,3)*Xminus(:,3)'+Xminus(:,4)*Xminus(:,4)')-xminus*xminus'+[Q,0;0,0]; %%%%观测更新%%%%%(1)矩阵分解Sminus=chol(Pminus,'lower');%%%%%(2)计算求容积点rjpoint1(:,1)=Sminus*kesi(:,1)+xminus;rjpoint1(:,2)=Sminus*kesi(:,2)+xminus;rjpoint1(:,3)=Sminus*kesi(:,3)+xminus;rjpoint1(:,4)=Sminus*kesi(:,4)+xminus;%%%%%(3)传播求容积点Z(1)=atan(0.1*rjpoint1(1,1));Z(2)=atan(0.1*rjpoint1(1,2));Z(3)=atan(0.1*rjpoint1(1,3));Z(4)=atan(0.1*rjpoint1(1,4));% Z(:,4)=[atan(0.1*rjpoint1(1,4));0];%%%%%%%(4)观测预测zhat=w*(Z(1)+Z(2)+Z(3)+Z(4));%%%%(5)观测预测协方差阵%Pzminus=w*(Z(:,1)*Z(:,1)'+Z(:,2)*Z(:,2)'+Z(:,3)*Z(:,3)'+Z(:,4)*Z(:,4)')-zhat*zhat'+[R,0;0,Q];Pzminus=w*(Z(1)^2+Z(2)^2+Z(3)^2+Z(4)^2)-zhat^2+R;%%%%(6)互协方差阵Pxzminus=w*(rjpoint1(:,1)*Z(1)+rjpoint1(:,2)*Z(2)+rjpoint1(:,3)*Z(3)+rjpoint1(:,4)*Z(4))-xminus*zhat;%%%%(7)计算卡尔曼增益K=Pxzminus/Pzminus;%%%%(8)状态更新xhat=xminus+K*(z(k+1)-zhat);%%%%(9)状态协方差矩阵更新Pplus=Pminus-K*Pzminus*K';x_ckf(:,k+1)=xhat;endt = 0 : tf;figure;plot(t,x(1,:),'k.',t,x_ckf(1,:),'g');legend('真实值','CKF估计值'); 

5.输出结果
   在这里插入图片描述                  ,


http://chatgpt.dhexx.cn/article/XK5D3XQo.shtml

相关文章

KCF

转载:http://www.cnblogs.com/YiXiaoZhou/p/5925019.html KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目…

CSK与KCF算法推导(二)

本文是CSK与KCF算法推导的第二篇,主要介绍标量对向量求导、核函数、岭回归问题求解等内容。 CSK与KCF算法推导(一)——DFT、相关运算和循环卷积(本文)CSK与KCF算法推导(二)——带核函数的岭回归…

KCF跟踪算法(1):KCF跟踪demo

前言: 最近在看跟踪算法,看了下比较久远的meanshift、Lk光流算法等,感觉效果和速度都不是很满意。直到我看了KCF跟踪算法,这个算法速度快,效果好,具有很强的鲁棒性,思路清晰。此外作者在主页上…

CSK与KCF算法推导(一)

从2015年Joo F. Henriques等人提出KCF以来,网上已经有了很多相关的科普,也有博主给出了非常详细的推导,但如果想要真正理解我觉得还是得自己推导一遍,所以我在这里准备写一下自己学习过程中的一些想法。   本文是CSK与KCF算法推…

KCF算法学习笔记

背景 博主正准备往tracking方向入坑,在师兄推荐下学习KCF算法,据说是目前最流行的online visual tracking算法。 论文:J. F. Henriques, R. Caseiro, P. Martins, J. Batista, ‘High-speed tracking with kernelized correlation filters’ …

KCF目标跟踪算法

论文链接:https://link.zhihu.com/?targethttp%3A//ieeexplore.ieee.org/abstract/document/6870486/ 代码链接:http://www.robots.ox.ac.uk/~joao/ 个人认为,这篇论文是近年来跟踪界最经典的论文,没有之一。主要思想就是利用了…

目标跟踪算法----KCF进阶(基于KCF改进的算法总结)

一、前情提要 如果你对目标跟踪和KCF是什么东西还不了解的话欢迎你看前一篇博文KCF入门详解:http://blog.csdn.net/crazyice521/article/details/53525366。如果你已经对基于KCF的目标跟踪有了一定的了解,并想知道这个算法有怎么样的后续的发展的话&a…

KCF算法公式推导

1 最小二乘法求解矩阵形式推导 设训练样本集为 ( x i , y i ) (x_i,y_i) (xi​,yi​),一元(向量)线性回归可表示为: f ( x i ) w T x i ⃗ b f(x_i)w^T\vec{x_i}b f(xi​)wTxi​ ​b若把样本输入 x i ⃗ \vec{x_i} xi​ ​表示…

目标跟踪算法——KCF 进阶

一、前情提要 如果你对目标跟踪和KCF是什么东西还不了解的话欢迎你看前一篇博文KCF入门详解:http://blog.csdn.net/crazyice521/article/details/53525366。如果你已经对基于KCF的目标跟踪有了一定的了解,并想知道这个算法有怎么样的后续的发展的话&am…

追踪算法KCF体验

本文使用KCF的opencv版本实现。 对应论文:High-Speed Tracking with Kernelized Correlation Filters 编译环境:VS2015 win7 64位 相关软件下载安装 需要下载opencv3.10,opencv_contrib和cmake-gui。 图:opencv下载说明 图&…

单目标跟踪--KCF算法(核化相关滤波算法)Python实现(超详细)

Tracking-KCF Algorithm 注:本文涉及的算法的代码实践已上传至GitHub,恳求大佬们指点!^ _ ^ 1. 目标检测跟踪与算法背景概述 ​ 目标跟踪任务在许多的计算机视觉系统中都是极为关键的一个组成部分。对于任意给定的一个初始图像的Patch&…

目标跟踪算法KCF原理详解

一直以来没有很想写这个,以为这个东西比较简单,还算是比较容易理解的一个算法,但是在知乎上回答过一个问题之后就有朋友私信我一些关于细节的东西,我一直以为关于细节的东西大家可以自己去理解,大家都是想快速了解这个…

KCF算法原理笔记

KCF算法全称是Kernelized Correlation Filters,是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins, and Jorge Batista提出来的跟踪算法,这个算法不论是在跟踪效果还是跟踪速度上都有十分亮眼的表现。该算法主要使用循环矩阵对样本进行采集&am…

目标跟踪算法——KCF入门详解

一直以来没有很想写这个,以为这个东西比较简单,还算是比较容易理解的一个算法,但是在知乎上回答过一个问题之后就有朋友私信我一些关于细节的东西,我一直以为关于细节的东西大家可以自己去理解,大家都是想快速了解这个…

【KCF算法解析】High-Speed Tracking with Kernelized Correlation Filters笔记

前段时间研究了一下KCF算法,单单看论文有很多看不懂的地方。查阅参考了,很多博客和其他材料才算了解了文章的大题思路,现将个人的理解在此记录,作为笔记。 主要内容 0.1 目标跟踪的背景介绍 0.2 学习该算法需先了解的预备知识 …

前端项目如何做测试?

前端项目也叫web端项目(通俗讲就是网页上的功能)是我们能够在屏幕上看到并产生交互的体验。 前端项目如何做测试? 要讲清楚这个问题,先需要你对测试流程现有一个全局的了解,先上一张测试流程图: 接下来下…

gt2e支持升级鸿蒙,鸿蒙测试版下月发布,Mate40或率先升级

鸿蒙系统终于要来了,Mate 40或成为率先升级的机型,12月中下旬将推出开发者测试版本,网友评论称终于等到你,国产操作系统终于要来了。 前一阵子余承东说鸿蒙系统将不会在今年推出,当时这个消息说实话让很多人感到失望&a…

gt2e鸿蒙系统,华为Watch GT2e评测:轻松开启年轻人一手掌控的百变运动潮酷生活...

【TechWeb】4月23日,华为nova7发布会上,华为Watch GT系列家族新成员——华为Watch GT 2e手表也正式发布。这款手表主要面向95后Z世代年轻人群体,定位运动潮流内核,潮流的外观造型和丰富的运动功能上吸引了不少年轻人关注的目光,同时也吸引了小编尝鲜的好奇之心。 潮酷外观…

vue_test_unit_e2e常见问题npm run unit单元测试和npm run e2e集成测试问题

vue项目要进行unit和e2e常见问题 localStorage is not available for opaque origins console.error node_modules\vue\dist\vue.runtime.common.dev.js 通常根据vue init webpack myproject 生成的项目,选择了unit和e2e模块后,都会有些问题。 1.首先是…

谈谈端到端测试(End-to-End Testing)

谈谈端到端测试(End-to-End Testing) 当今的软件系统是复杂的,并且与许多子系统相互关联。如果任何子系统出现故障,整个软件系统都可能崩溃。这是一个主要的风险,可以通过端到端测试来避免。 端到端测试是一种技术&a…