【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

news2024/11/19 6:42:07

 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文献


💥1 概述

文献来源:

 本文研究了变分贝叶斯方法在线性状态空间模型中动态状态和时变测量噪声参数联合递归估计中的应用。所提出的自适应卡尔曼滤波方法基于对各时间步上状态和噪声参数的联合后验分布分别形成可分离变分近似。结果是一个递归算法,其中每一步都用卡尔曼滤波器估计状态,并通过定点迭代估计噪声方差的足够统计数据。通过仿真数据演示了该算法的性能。

原文摘要:

Abstract:

This article considers the application of variational Bayesian methods to joint recursive estimation of the dynamic state and the time-varying measurement noise parameters in linear state space models. The proposed adaptive Kalman filtering method is based on forming a separable variational approximation to the joint posterior distribution of states and noise parameters on each time step separately. The result is a recursive algorithm, where on each step the state is estimated with Kalman filter and the sufficient statistics of the noise variances are estimated with a fixed-point iteration. The performance of the algorithm is demonstrated with simulated data.

卡尔曼滤波器 (KF) [1] 考虑了估计问题类中噪声测量的动态状态估计,其中动态和测量过程可以通过线性高斯状态空间模型近似。扩展卡尔曼滤波器(EKF)和无迹卡尔曼滤波器(UKF)通过形成后验状态分布的高斯近似[2]–[5],将该方法扩展到非线性动态和测量模型。这些滤波器的一个严重限制是,它们假定完全了解测量和动态模型参数,包括噪声统计。参数的确切知识,特别是噪声统计,在许多实际情况中并不是一个合理的假设。这种应用的例子是低成本的集成GPS/INS定位系统和容错系统(例如,见[6]、[7]及其中的参考资料)。

解决不确定参数问题的经典方法(参见[8],[9])是使用自适应滤波器,其中模型参数或噪声统计与动态状态一起估计。经典的噪声自适应滤波方法可分为贝叶斯、最大似然、相关和协方差匹配方法[8]。贝叶斯方法是其中最通用的,其他方法通常可以解释为贝叶斯方法的近似值。贝叶斯噪声自适应滤波方法的例子是基于状态增强的方法[10],[11],多模型方法,如交互多模型(IMM)算法[3],[9]和粒子方法[12]-[15]。

变分贝叶斯(VB)方法已被开发用于各种模型,与采样方法相比,以较低的计算成本执行近似后验推理(有关VB方法的回顾,请参阅例如[16]-[18])。 这些方法假设后部采用更简单、易于分析的形式。两种主要方法是推导因式自由形式分布(对于共轭指数类中的模型),或者假设固定形式的后验分布(例如,多元高斯,可能具有模型的适当参数化)。

Smidl和Quinn[19]提出了VB近似的理论框架,特别强调了递归贝叶斯推理和信号处理应用。与本工作相关,还考虑了具有未知方差的AR模型的VB近似,但未考虑具有未知时变方差的一般线性状态空间模型。卡尔曼平滑器的通用变分版本在[20]中已经开发出来,利用共轭指数框架,但具有平稳噪声。时变方差模型已在 [21] 中使用固定形式方法解决。

我们提出的方法通过分解的自由形式分布来近似状态的联合后验分布和噪声方差。该近似在每个时间步上分别形成,结果是一个递归算法,其中在每个步骤上,状态和噪声方差的足够统计数据都是通过卡尔曼滤波器的定点迭代估计的。我们还提出了方差的启发式动力学模型,可用于对噪声的时间行为进行建模,同时仍保留近似后验分布的功能形式。

📚2 运行结果

部分代码:

for t = 2:Tn
        %%%%True noise covariance matrices
        Q = (1+0.5*cos(pi*t/Tn))*Q0;
        R = (1+0.6*cos(pi*t/Tn))*R0;
        %%%%Square-root of noise covariance matrices
        SQ = utchol(Q);
        SR = utchol(R);
        %%%%Simulate true state and measurement
        x = F*x+SQ*randn(nx,1);
        z = H*x+SR*randn(nz,1);
        X(:,t) = x;
        %%%%Filtering
        [x1,P_Const,Ppf] = kf(x1,P_Const,F,H,z,Q0,R0*times_Of_R);
        [x2,P_True,Pptf] = kf(x2,P_True,F,H,z,Q,R);
        [x3,P_VB,alfa,beta,mk] = vbkf(x3,P_VB,alfa,beta,mk,F,H,z,Q0,N);
        %%%%Save data
        XKF_Const(:,t) = x1;
        XKF_True(:,t) = x2;
        XKF_VB(:,t) = x3;
    end
    %%%%MSE calculation
    mse_Kf_1(:,k) = (X(1,:)-XKF_Const(1,:)).^2+(X(2,:)-XKF_Const(2,:)).^2;
    mse_Kf_2(:,k) = (X(3,:)-XKF_Const(3,:)).^2+(X(4,:)-XKF_Const(4,:)).^2;

    mse_Ktf_1(:,k) = (X(1,:)-XKF_True(1,:)).^2+(X(2,:)-XKF_True(2,:)).^2;
    mse_Ktf_2(:,k) = (X(3,:)-XKF_True(3,:)).^2+(X(4,:)-XKF_True(4,:)).^2;

    mse_VB_1(:,k) = (X(1,:)-XKF_VB(1,:)).^2+(X(2,:)-XKF_VB(2,:)).^2;
    mse_VB_2(:,k) = (X(3,:)-XKF_VB(3,:)).^2+(X(4,:)-XKF_VB(4,:)).^2;
end

%%%%%%%%%RMSE calculation
rmse_Kf_1 = sqrt(mean(mse_Kf_1,2));
rmse_Kf_2 = sqrt(mean(mse_Kf_2,2));
rmse_Ktf_1 = sqrt(mean(mse_Ktf_1,2));
rmse_Ktf_2 = sqrt(mean(mse_Ktf_2,2));

rmse_VB_1 = sqrt(mean(mse_VB_1,2));
rmse_VB_2 = sqrt(mean(mse_VB_2,2));
%%%%%%%RMSE curves
figure;
j = 2:L;
subplot(2,1,1)
plot(j*T,rmse_Kf_1(2:end),'-b',j*T,rmse_Ktf_1(2:end),'-g',j*T,rmse_VB_1(2:end),'--r','linewidth',2);
ylabel('RMSE_{pos} (m)');
subplot(2,1,2)
plot(j*T,rmse_Kf_2(2:end),'-b',j*T,rmse_Ktf_2(2:end),'-g',j*T,rmse_VB_2(2:end),'--r','linewidth',2);
xlabel('Time (s)');
ylabel('RMSE_{vel} (m/s)');
legend('KF1','KF2','The VBKF');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]S. Sarkka and A. Nummenmaa, "Recursive Noise Adaptive Kalman Filtering by Variational Bayesian Approximations," in IEEE Transactions on Automatic Control, vol. 54, no. 3, pp. 596-600, March 2009, doi: 10.1109/TAC.2008.2008348.

🌈4 Matlab代码及文献

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring框架】第一个Spring(创建和使用)

目录 Spring创建和使用创建创建一个Maven项目添加Spring框架支持(spring-context、spring-beans)添加启动类 存储Bean对象创建Bean将Bean注册到容器读取并使用Bean对象经典面试题:ApplicationContext和BeanFactory的区别是什么? Spring创建和使用 创建 …

SpringBoot-【回顾】

第一个SpringBoot程序 自动装配原理 Springboot的自动装配实际上就是为了从Spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器来帮我们进行管理 启动器:以starter为标记 EnableAuto…

C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

题目: 从键盘输入两个数,求这两个数的最大公约数。 思路一:普通方法 总体思路: (一). 生成相关变量; 从键盘输入两个数; 再使用 三目操作符(条件操作符) 找出…

树——“数据结构与算法”

各位CSDN的uu们好久不见呀,好久没有更新我的数据结构与算法专栏啦,现在,我要开始重拾丢下的知识啦,这次,小雅兰要给uu们介绍一个全新的数据结构,下面,就让我们进入树的世界吧!&#…

Flutter 环境配置

Flutter 环境配置 电脑上面安装配置JDK 1.下载安装JDK 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 2.配置JDK 2.1、系统变量 里面新增JAVA_HOME,设置值为java sdk 根目录: 2.2 …

OpenGl之纹理坐标及纹理映射

文章目录 纹理坐标纹理映射代码 纹理坐标 为了实现纹理贴图我们需要做三件事:将一张贴图加载到OpenGL中,提供纹理坐标和顶点(将纹理对应匹配到顶点上),并使用纹理坐标从纹理中进行取样操作取得像素颜色。由于三角形会被…

Vue源码解析--更新中

【尚硅谷】Vue源码解析之虚拟DOM和diff算法 【Vue源码】图解 diff算法 与 虚拟DOM-snabbdom-最小量更新原理解析-手写源码-updateChildren] 文章目录 2. snabbdom 简介 及 准备工作2.1 简介2.2 搭建初始环境1. 安装snabbdom2. 安装webpack5并配置3. 复制官方demo Example 3. …

如何把歌曲里的伴奏音乐提取出来,分享几个方法给大家!

对于一首歌,我们都知道,它有两部分组成:背景音乐人声。这两者合在一起,便是我们经常听的歌。部分用户想要直接获取歌曲伴奏,那么可以在UU伴奏网上下载。 操作方法比较简单,直接搜索想要的歌曲名称就可以了…

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下: 可用性:可用性是分…

C++14中binary literals的使用

一个形如42的值被称作字面值常量(literal),这样的值一望而知。每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。 我们可以将整型字面值写作十进制(基数为10)、八进制(基数为8)或十六进制(基数为16)数的形式。以0开头的整数代表八进制数&…

Dijkstra算法求最短路

Dijkstra算法是单源最短路算法,是用来求一个点到其他所有点点最短距离,使用小根堆优化后时间复杂度大概为 O m l o g n Omlogn Omlogn 注意:不可以解决存在负权边的问题 【模板】单源最短路径(标准版) 链接&#xff1…

使用CRM系统通过四点快速收集客户信息

CRM是客户关系管理的缩写,它可以帮助企业管理销售、营销和客户服务,提升管理能力,获得更多收益。 那么,在CRM系统中客户是什么?如何快速收集客户信息呢?下面我们来说一说。 一、CRM中的客户是什么&#xf…

Java012——String引用数据类型的简单学习

回顾Java数据类型 本次要学习的是Java引用数据类型String 一、对String类简单说明 说明:String是Java中的一个类 二、String类的作用 作用:主要用来创建和操作字符串。 三、使用String类 3.1、创建字符串 注意: 1、字符串使用双引号&qu…

shell脚本:文本三剑客awk

awk-命令讲解: awk-命令讲解 一、awk:1.定义:2.格式:3.工作过程:4.工作原理:5.常用选项: 二、内置函数:1.getline的工作过程:2.打印:3.文件内容匹配过滤打印…

软考A计划-系统架构师-学习笔记-第四弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

信道编码的基本概念

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道编码信道编码的…

[迁移学习]预训练和微调

一、概述 一般的有监督迁移学习分为以下三种: ①将训练好的模型作为特征抽取模块(例如以resnet进行特征提取) ②在一个相关的任务中训练后直接后直接使用(例如gpt) ③在训练好的模型基础上进行微调 此外还有无监督学习的方式 zero-shot&#…

jmeter004:察看结果树

元件添加路径:线程组>监听器>察看结果树 取样器结果: ps:取样器是可以显示变量所对应的值的 Thread Name:线程组名称 Sample Start:运行的开始时间 Load time:加载的时间、持续的时间 Connect Time&a…

从零玩转系列之微信支付开篇

一、前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端) 二、演示 微信支付Native案例 微信支付JSAPI案…

【MySQL】数据表的基本操作

目录 1. 创建表 2. 创建表案例 2.1 创建一个users表 2.2 查看表结构 2.3 修改表 3. 删除表 MySQL🌷 1. 创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…