【卡尔曼滤波】粗略模型和过滤技术在模型不确定情况下的应用研究(Matlab代码实现)

2024-01-21

???????????????? 欢迎来到本博客 ❤️❤️????????

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

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

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Matlab代码及文献


????1 概述

摘要—本文讨论了在只有粗略模型可用时系统的估计和滤波问题。基于经典正则化最小二乘问题的修改版本,提出了一种新的设计准则,考虑了测量和创新作为不确定性的可能来源。在高斯假设下,它表现为最大后验贝叶斯估计的上界。通过利用非光滑分析工具获得最优解,最优解揭示了残差空间中的一个区域,其中估计的非变化是最优的。该方法以递归形式从随机角度提供了鲁棒估计器。为了说明,导出了类似卡尔曼滤波器,并与经典的最坏情况鲁棒设计滤波器进行了比较。
索引词—估计,不确定系统,卡尔曼滤波。
一、引言
从噪声观测中估计一组未知参数的问题在科学和工程中有着广泛的应用。然而,通常情况下,数据生成的精确模型可能不为人所知,因此需要一个鲁棒的估计器。
在文献中,主要有两种主要的鲁棒状态估计方法。第一种方法是H∞估计,试图最小化输入噪声对估计误差的最坏情况能量增益,参见[1],[2]。第二种方法是所谓的保证成本估计,其中设计了一个满足上限误差的估计算法,参见[3],[4]。此外,还有一种基于确定性正则化最小二乘问题的不同方法已被探索用于设计鲁棒估计器,参见[5],[6],[7]。然而,这些方法涉及基于最坏情况的优化,如果模型和测量的不确定性相当大,解决方案中可能存在高度保守性。
为了获得针对模型不确定性的鲁棒估计器,本文采用了较少保守性的随机观点,并依赖于经典正则化最小二乘问题的修改版本[8]。这使我们能够获得最小二乘鲁棒估计和卡尔曼滤波器的更新阶段。
该立场的主要贡献是一种用于模型不确定性的静态估计器和滤波器模型,采用了一种新颖的随机建模工具。结果表明,在高斯假设下,估计准则表现为最大后验贝叶斯估计的上界。
由于模型中嵌入了由估计变化的绝对值调制的随机噪声,这种滤波器的行为在某些情况下,最佳估计仍然是先验,而不是后验,考虑到系统动态提供的先验的信心和新测量的信心之间的权衡,这在现有的鲁棒滤波的文献中是不可见的,参见[5],[6],[9],[10]。与这些不同的是,得到的滤波器增益是非线性的。

???? 2 运行结果

主函数代码:

% This Matlab code implements the numerical example presented in the paper
% M. R. Fernandes, J. B. R. do Val and R. F. Souto, "Robust Estimation and
% Filtering for Poorly Known Models" in IEEE Control Systems Letters.
% doi: 10.1109/LCSYS.2019.2951611
% https://ieeexplore.ieee.org/document/8891731

close all
clear all
clc
rng('default'); rng(0)
%% System Model
n=2; %number of states
p=1; %number of outputs
A0=[0.9802 0.0196;0 0.9802]; %Nominal Dynamic Matrix
A1=[0 0.099;0 0];
H0=[1 -1]; %Measurement Matrix
G=eye(n);
Ef=[0 5];
Eg=[0 0];
M=[0.0198;0];

%% Noise Covariances
sigma=sqrtm([1.9608 0.0195;0.0195 1.9605]);
nu=eye(p);
Q = sigma*sigma';
R = nu*nu';

%% EVIU Parameters
sigmas.x=[0 0;0 0];
sigmas.bx=0.1*eye(n);
sigmas.y=[0 0.1];
sigmas.by=[0 0.1];
sigmas.v=[0 0.1];
sigmas.bv=sigmas.v;

%% Simulation
N=1000; %time horizon
a=-1:0.1:1; % grid for uncertain parameter
H=H0; %output matrix is considered exactly
gamma=99; %gain for the Hinf Filter

%Make a grid on [-1,1] for the uncertain parameter and apply simultaneosly
%the EVIU, BDU, Hinf and Kalman filter.
for i=1:length(a)
A=A0+a(i)*A1; %define 'true' dynamic matrix
% Monte Carlo Simulation
for j=1:500
%% Initialization
clear x hx m hx2 hx_opt hx_s hx_hinf P P2 P_s P_hinf P_opt
x(:,1)=1*ones(n,1);%real states
hx(:,1)=zeros(n,1);%classic kalman states
hx_opt(:,1)=zeros(n,1);%opt states
m=zeros(n,1);
S=zeros(n,1); %beta0
hx2=hx; %eviu states
hx_s=hx; %BDU states
hx_hinf=hx; %hinf states
P=eye(n); %initial covariance
L=P;
P_s=P; %covariance for BDU filter
P2=P; %covariance for EVIU filter
Phinf=P; %covariance for Hinf filter
P_opt=P; %covariance for optimal filter
trP(1)=trace(P); %trace of KF covariance
trP2(j,1)=trP(1); %trace of EVIU covariance
trP_opt(j,1)=trP(1); %trace of Optimal covariance
trP_s(j,1)=trP(1); %trace of BDU covariance
trP_hinf(j,1)=trP(1); %trace of Hinf covariance
mse(j,1)=norm(hx(:,1)-x(:,1))^2; %KF error
mse2(j,1)=mse(j,1); % EVIU error
mse_opt(j,1)=mse(j,1); % Minimum error
mse_hinf(j,1)=mse(j,1); % Hinf error
mse_s(j,1)=mse(j,1); % BDU error
%time simulation
for k=1:N-1
%% real system
x(:,k+1)=A*x(:,k)+sigma*randn(n,1);
y(:,k+1)=H*x(:,k+1)+nu*randn(p,1);
%% Classic Kalman Filter (hx)
[hx(:,k+1),P]=kalman_filter(A0,H0,Q,R,hx(:,k),P,y(:,k+1));
trP(k+1)=trace(P);
mse(j,k+1)=norm(x(:,k+1)-hx(:,k+1))^2;
%% EVIU Filter (hx2)
[hx2(:,k+1),P2,m,L,S(:,k+1)]=eviu_filter(A0,H0,sigmas,Q,R,hx2(:,k),P2,m,L,S(:,k),y(:,k+1));
trP2(j,k+1)=trace(P2);
mse2(j,k+1)=norm(x(:,k+1)-hx2(:,k+1))^2;
%% Optimal Filter (Kalman with exactly model)
[hx_opt(:,k+1),P_opt]=kalman_filter(A,H,Q,R,hx_opt(:,k),P_opt,y(:,k+1));
trP_opt(j,k+1)=trace(P_opt);
%% BDU Filter
[hx_s(:,k+1),P_s]=BDU_filter(A0,H0,M,Ef,Eg,G,Q,R,hx_s(:,k),P_s,y(:,k+1));
trP_s(j,k+1)=trace(P_s);
mse_s(j,k+1)=norm(x(:,k+1)-hx_s(:,k+1))^2;
%% Hinf filter
[hx_hinf(:,k+1),Phinf]=hinf_filter(A0,H0,G,Q,R,hx_hinf(:,k),Phinf,y(:,k+1),eye(n),gamma);
trP_hinf(j,k+1)=trace(Phinf);
mse_hinf(j,k+1)=norm(x(:,k+1)-hx_hinf(:,k+1))^2;
end
end
mse=mean(mse); %KF
mse2=mean(mse2); %EVIU
mse_s=mean(mse_s); %BDU
trP_opt=mean(trP_opt); %Optimal
mse_hinf=mean(mse_hinf); %Hinf
mmse(i)=mean(mse); %KF
mmse2(i)=mean(mse2); %EVIU
mmse_s(i)=mean(mse_s); %BDU
mmse_hinf(i)=mean(mse_hinf); %Hinf
mmse_opt(i)=mean(trP_opt); % Optimal
fprintf('%d gain=%.3f\n',i,(1-mmse2(i)/mmse(i))*100)
end
%% Plot results
figure(1)
p1=plot(a,sqrt(mmse),'*-','linewidth',2);
hold on
p2=plot(a,sqrt(mmse2),'-','linewidth',2);
p3=plot(a,sqrt(mmse_s),'o-','linewidth',2);
p5=plot(a,sqrt(mmse_hinf),'c-','linewidth',2);
p4=plot(a,sqrt(mmse_opt),'--k','linewidth',2);
legend([p1,p2,p3,p5,p4],'KF','EVIU','BDU','$\mathcal{H}_\infty$','Optimal','Interpreter','latex')
ylabel('RMSE_{total}')
xlabel('\delta')
axis([-1 1 0 22])
grid on
figure(2)
%Worst-case (delta=1)
p1=semilogx(10*log10(mse),'-','linewidth',2);
hold on
p2=semilogx(10*log10(mse2),'linewidth',2);
p3=semilogx(10*log10(mse_s),'-','linewidth',2);
p4=semilogx(10*log10(trP_opt),'--k','linewidth',2);
p5=semilogx(10*log10(mse_hinf),'c-','linewidth',2);
ylabel('MSE(dB)')
xlabel('Tempo (k)')
grid on
legend([p1,p2,p3,p5,p4],'KF','EVIU','BDU','$\mathcal{H}_\infty$','Optimal','Interpreter','latex')

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

Marcos R. Fernandes, Joao Bosco R. do Val, Rafael. F. Souto.

???? 4 Matlab代码及文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【卡尔曼滤波】粗略模型和过滤技术在模型不确定情况下的应用研究(Matlab代码实现) 的相关文章

  • from __future__ importabsolute_import 实际上做了什么?

    I have answered https stackoverflow com a 22679558 2588818一个关于Python中绝对导入的问题 我认为我通过阅读理解了这个问题Python 2 5 变更日志 https docs p
  • 有没有办法离线将多个 Plotly HTML 文件合并/嵌入到一个页面/HTML 文件中?

    我正在尝试将多个图表合并成一个 HTML 报告来发送 问题是我真的不认为子图是最好的主意 因为图表相对不相关 不同的 X Y 轴 我所需要做的只是将图表附加到 1 个 HTML 文件中 有一个指南解释了如何使用绘图 URL 来完成此操作 但
  • python列表理解和extend() [重复]

    这个问题在这里已经有答案了 深入学习 Python 2 7 1 但未能理解这一点 几个小时 gt gt gt a 1 2 gt gt gt b 3 4 gt gt gt gt gt gt a extend b 0 gt gt gt a 1
  • MATLAB 中元胞数组的左连接

    I ve 2 cellMATLAB 中的数组 例如 A jim 4 paul 5 sean 5 rose 1 第二个 B jim paul george bill sean rose 我想做一个 SQL 左连接 这样我就可以得到 B 中的所
  • 将 KB/MB/GB 等字符串解析为数值

    为了不发明自行车 我想知道是否有任何库能够将大小字符串 MB KB TB MiB KiB 等 的各种表示形式解析为基于数字字节的值 ActiveState Receipes 有一个示例here http code activestate c
  • 如何将当前日期分配给 odoo v8 中的日期字段?

    我想将当前日期分配给以下代码中的日期字段 start date calendar obj create cr uid name rec res act ion user id rec res asgnd to id start date l
  • 如何使用增量值向 Pyspark 中的 DataFrame 添加列?

    我有一个名为 df 的 DataFrame 如下所示 Atr1 Atr2 Atr3 A A A B A A C A A 我想向其中添加一个具有增量值的新列并获取以下更新的 DataFrame Atr1 Atr2 Atr3
  • 如何在 Python 中重命名文件并保留创建日期

    我知道创建日期不存储在文件系统本身中 但是当我使用时我遇到了问题os rename 它正在更新我正在使用的文件的创建日期 是否可以重命名文件而不更改其原始创建日期 正如都铎所说 你可以使用os stat http docs python o
  • 在 Django 1.9 中使用信号

    在 Django 1 8 中 我能够使用信号执行以下操作 一切顺利 init py from signals import 信号 py receiver pre save sender Comment def process hashtag
  • Python Peeweeexecute_sql() 示例

    我使用 Peewee 模块作为我的项目的 ORM 我看了整个文档 没有明确的 有关如何处理 db execute sql 结果的示例 我跟踪代码 只能发现db execute sql 返回游标 有谁知道如何处理光标 例如迭代它并获取 返回复
  • 让垂直网格线出现在 matplotlib 的线图中

    我想在绘图上同时获得水平和垂直网格线 但默认情况下仅显示水平网格线 我正在使用一个pandas DataFrame从 python 中的 sql 查询生成 x 轴上带有日期的线图 我不知道为什么它们没有出现在日期上 我试图寻找这个问题的答案
  • 为什么删除 DataFrame 的列或部分会增加内存使用量,以及如何确保对未使用的 DataFrame 切片进行垃圾回收

    处理大型 DataFrame 时 您需要小心内存使用情况 例如 您可能想要分块下载大数据 处理这些块 然后从内存中删除所有不必要的部分 我找不到任何有关处理垃圾收集的最佳程序的资源pandas 但我尝试了以下方法并得到了令人惊讶的结果 im
  • 了解 Tensorflow 中的 while 循环

    我正在使用用于 Tensorflow 的 Python API https www tensorflow org api docs python 我正在努力实施罗森布罗克函数 https www sfu ca ssurjano rosen
  • 分别计算男女宿舍

    我想要的结果是这样的 males 1990 Q1 value Q2 value Q3 Value Q4 Value females Q1 value Q2 value Q3 Value Q4 value 如果任何值不存在则默认值 0 imp
  • 对二进制数的字符串表示进行按位运算 python 2.7

    我想对二进制数的两个字符串表示执行按位或 但我不知道如何将字符串转换为原始二进制 a 010110 b 100000 a b 应该产生 110110 然后我想计算 on 位的数量 这应该返回 4 您可以使用内置的将字符串转换为二进制int
  • python字符串包含双引号字符

    我的输入字符串由字符组成 包括双引号和单引号 和 B SS JU PQ AD DDSFD ABD E J 但是 当我从文本文件打开上述输入并打印它时 第三行中的双引号 被打印为 xe2 x80 x9d 我的目标是进行简单的字符计数 B 2
  • MATLAB 链表

    有哪些可能的方法来实现链表MATLAB http en wikipedia org wiki MATLAB 注意 我问这个问题是为了教学价值 而不是实用价值 我意识到 如果您实际上在 MATLAB 中滚动自己的链表 那么您可能做错了什么 然
  • jupyter run magic 将参数传递给笔记本

    当您在第一个 jupyter 笔记本 first ipynb 中时 您可以执行第二个 但如何传递参数呢 假设第二个有以下内容 xx 10 您可以从第一个调用第二个 如下所示 run second ipynb xx will print 10
  • 交响二阶颂歌

    我有一个简单的二阶 ODE 的齐次解 当我尝试使用 Sympy 求解初始值时 它返回相同的解 它应该替代 y 0 和 y 0 并产生一个没有常数的解 但事实并非如此 这是建立方程的代码 它是一个弹簧平衡方程 k 弹簧常数 m 质量 我在其他
  • 预提交钩子 git 错误

    我正在尝试在 python 中执行预提交 git hook 以检查文件的行长度是否小于 80 个字符 但是我收到没有此类文件 目录的错误 我在 fedora 上并设置了 usr bin python help 将不胜感激 usr bin e

随机推荐

  • 前端基础:回顾es6相关知识

    Author note 题记 ECMAscript is international standard of javascript ECMA 是 js的国际标准版语言 let and const 为什么之前用var现在需要用let cons
  • iPhone16或全系升级8GB内存,支持Wi-Fi 6E!

    随着新的一年到来 苹果下一代机型iPhone 16系列的爆料也越来越充实 越来越详细 从多个爆料中 我们甚至已经都够想象出下一代iPhone的基本雏形 海通国际技术分析师Jeff Pu 为我们带来了新的内容 这位分析师称 iPhone 16
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • ir50_32.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ir50 32
  • 【固定翼飞机】基于最优控制的固定翼飞机着陆控制器设计研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 深度好文:最全的大模型 RAG 技术概览

    本文是对检索增强生成 Retrieval Augmented Generation RAG 技术和算法的全面研究 对各种方法进行了系统性的梳理 涉及了 RAG 流程中的数据拆分 向量化 查询重写 查询路由等等 在做 RAG 的小伙伴一定知道
  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • 图解python | 基础数据类型

    1 Python变量类型 Python基本数据类型一般分为6种 数值 Numbers 字符串 String 列表 List 元组 Tuple 字典 Dictionary 集合 Set 本文详细讲解Python中变量赋值 数据类型以及数据类型
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 19年通过校招进入广州某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • [C++]:11.模拟实现vector

    模拟实现vector 二 模拟实现vector 0 看一看源码SGI 1 vector h 2 stl vector h 1 构造 2 析构函数
  • 利用 LangChain 和 Neo4j 向量索引,构建一个RAG应用程序

    Neo4j 在5 11版本中将向量搜索功能完全集成到 Neo4j AuraDB 和 Neo4j 图数据库中 随后对 Neo4j 向量检索的全面支持也被集成到了 LangChain 库中 Neo4j 向量检索已成为检索增强生成 RAG 应用程
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • Android开发中常见安全问题和解决方案

    前言 开发APP时经常有问到 APP的安全怎么保障 应用程序被PJ了怎么办 手机被人捡去了怎么办 特别在号称 安全第一 风控牛逼 的银行系统内 移动产品安全性仍被持有怀疑态度 那我们来总结下APP安全的方向和具体知识 1 应用程序安全 2
  • Android SDK开发艺术探索(五)安全与校验

    一 前言 本篇是Android SDK开发艺术探索系列的第五篇文章 介绍了一些SDK开发中安全方面的知识 包括资源完整性 存储安全 权限校验 传输安全 代码混淆等知识 通过基础的安全配置为SDK保驾护航 探索SDK开发在安全方面的最佳实践
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • 【C++入门】C++ STL中string常用函数用法总结

    目录 前言 1 string使用 2 string的常见构造 3 string类对象的访问及遍历 迭代器遍历 访问 4 string类对象的容量操作 4 1 size和length 4 2 clear empty和capacity 4 3
  • 【VUE毕业设计】基于SSM的勤工助学管理系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 2 1 系统操作流程
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 【卡尔曼滤波】粗略模型和过滤技术在模型不确定情况下的应用研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献