基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

5.完整程序


1.程序功能描述

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。

2.测试软件版本以及运行结果展示

MATLAB2022A版本运行

3.核心程序

.............................................................................
% 绘制目标运动与传感器分布的图形,展示 IMM - UKF 算法的跟踪效果
%目标运动与传感器分布
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode
    % 绘制 IMM - UKF 算法的状态估计轨迹
    plot(Xfstate(1,:),Xfstate(4,:),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
    hold on
    % 绘制真实节点的位置
    plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
    hold on
    % 在节点位置旁边标注节点编号
    text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
    hold on
    % 绘制 IMM - UKF 算法估计的节点位置
    plot(pest(1,i),pest(2,i),'rs','LineWidth',1);
    hold on
    % 添加图例说明不同线条和标记的含义
    legend('真实轨迹','IMM-UKF估计轨迹','真实节点','IMM-UKF节点');
    % 设置图形标题
    title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square

% 绘制目标运动与传感器分布的图形,展示 IMM - EKF 算法的跟踪效果
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode
    % 绘制 IMM - EKF 算法的状态估计轨迹
    plot(Xfstate2(1,:),Xfstate2(4,:),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
    hold on
    % 绘制真实节点的位置
    plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
    hold on
    % 在节点位置旁边标注节点编号
    text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
    hold on
    % 绘制 IMM - EKF 算法估计的节点位置
    plot(pest2(1,i),pest2(2,i),'rs','LineWidth',1);
    hold on
    % 添加图例说明不同线条和标记的含义
    legend('真实轨迹','IMM-EKF估计轨迹','真实节点','IMM-EKF节点');
    % 设置图形标题
    title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square

% 绘制目标运动与传感器分布的图形,展示 UKF 算法的跟踪效果
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode
    % 绘制 UKF 算法的状态估计轨迹
    plot(Para_sensor3(1,:),Para_sensor3(4,:),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
    hold on
    % 绘制真实节点的位置
    plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
    hold on
    % 在节点位置旁边标注节点编号
    text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
    hold on
    % 绘制 UKF 算法估计的节点位置
    plot(pest3(1,i),pest3(2,i),'rs','LineWidth',1);
    hold on
    % 添加图例说明不同线条和标记的含义
    legend('真实轨迹','UKF估计轨迹','真实节点','UKF节点');
    % 设置图形标题
    title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square

% 绘制不同算法的误差随时间变化的曲线
figure
% 绘制 IMM - UKF 算法的误差曲线
plot(tms,err1(1,:),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
% 绘制 IMM - EKF 算法的误差曲线
plot(tms,err2(1,:),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
% 绘制 UKF 算法的误差曲线
plot(tms,err3(1,:),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;
% 添加图例,说明不同曲线对应的算法
legend('IMM - UKF ','IMM - EKF','UKF');
% 设置 x 轴标签为时间步
xlabel('Time Steps')
% 设置 y 轴标签为误差
ylabel('error')

% 绘制不同算法的平均误差柱状图
figure
% 绘制三个算法的平均误差柱状图
bar([mean(err1(1,:)),mean(err2(1,:)),mean(err3(1,:))]);
% 设置 x 轴标签,说明每个柱子对应的算法
xlabel(['1:IMM - UKF, 2:IMM - EKF, 3:UKF']);
% 设置 y 轴标签为误差
ylabel('error')
93

4.本算法原理

       在许多工程实践中,往往不能直接得到所需要的状态变量的真实值。例如雷达在探测目标时,可以通过回波信号等计算出目标的距离、速度和角度等信息。但雷达探测过程中会存在干扰(系统噪声、地杂波和非目标信号等)的问题,这些干扰会导致回波信号中夹杂有随机噪声。我们要在有随机噪声的回波信号中分离目标的运动状态量,准确的得到这个状态量往往是不可能的,只能根据观测信号估计这些状态变量。卡尔曼滤波就是这种通过估计或预测降低噪声影响的一种好的方法。特别是在线性系统中,卡尔曼滤波是最优的滤波算法。

       在轨迹跟踪问题中,系统状态通常随时间变化,并且受到过程噪声的影响;同时,对系统状态的观测也包含观测噪声。我们的目标是根据一系列的观测值来估计系统的真实状态。UKF 是一种用于非线性系统状态估计的滤波算法。与传统的扩展卡尔曼滤波(EKF)不同,UKF 不依赖于对非线性函数的线性化,而是通过一组确定性采样点(Sigma 点)来近似状态的概率分布,从而更准确地处理非线性问题。

       在kalman滤波算法中用到了状态转移方程和量测方程,被估计量随着时间的变化,呈现的是一个动态估计。在目标跟踪中,不需要知道目标的运动模型就能实时的修正目标的状态变量(速度、距离等),具有良好的适应性。但是当目标实施机动变化(突然加、减速或急转弯等),仅仅采用基本的kalman滤波算法往往得不到理想的结果。这时就需要采用自适应算法。交互多模型(IMM)就应用而生。

  目标交互多模型kalman滤波算法在机动目标跟踪领域得到广泛应用。IMM算法使用两个或者多个模型来描述工作过程中可能出现的状态,最后通过有效的加权融合进行系统状态估计,很好的克服了单个模型估计误差较大的问题。

       IMM 算法用于处理系统在不同模式下运行的情况。它假设系统存在多个可能的运行模式,每个模式对应一个不同的状态模型,通过在这些模型之间进行交互和切换,以适应系统模式的变化,从而提高状态估计的准确性。

5.完整程序

VVV

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

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

相关文章

学习笔记 ---- 平衡树 总结

文章目录 平衡树的含义二叉搜索树 t r e a p treap treap S p l a y Splay Splay(延伸树)优化思想 S p l a y Splay Splay 的定义核心操作文艺平衡树(序列操作)练习题平衡树维护序列平衡树维护数集 F H Q t r e a p FHQ \ treap F…

Windows基础

一. Windows防火墙与Defender 介绍:Windows防火墙与Defender是Windows操作系统中两大重要的安全组件,它们共同工作以保护计算机免受各种网络威胁和病毒攻击。 Windows防火墙:Windows防火墙是一种软件防火墙,旨在监控和控制进出计…

(1)Linux高级命令简介

Linux高级命令简介 在安装好linux环境以后第一件事情就是去学习一些linux的基本指令,我在这里用的是CentOS7作演示。 首先在VirtualBox上装好Linux以后,启动我们的linux,输入账号密码以后学习第一个指令 简介 Linux高级命令简介ip addrtou…

人工智能|基本概念|人工智能相关重要概念---AI定义以及模型相关知识

一、 前言: 最近deepseek(深度求索)公司的开源自然语言处理模型非常火爆。 本人很早就对人工智能比较感兴趣,但由于种种原因没有过多的深入此领域,仅仅是做了一点初步的了解,借着这个deepseek&#xff0…

【疑海破局】一个注解引发的线上事故

【疑海破局】一个注解引发的线上事故 1、问题背景 在不久前一个阳光明媚的上午,我的思绪正在代码中游走、双手正在键盘上飞舞。突然,公司内部通讯工具上,我被拉进了一个临时工作群,只见群中产品、运营、运维、测试等关键人员全部严阵以待,我就知道大的可能要来了。果不其…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.1 NumPy高级索引:布尔型与花式索引的底层原理

2.1 NumPy高级索引:布尔型与花式索引的底层原理 目录 #mermaid-svg-NpcC75NxxU2mkB3V {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NpcC75NxxU2mkB3V .error-icon{fill:#552222;}#mermaid-svg-NpcC75…

如何在 ACP 中建模复合罐

概括 本篇博文介绍了 ANSYS Composite PrepPost (ACP) 缠绕向导。此工具允许仅使用几个条目自动定义高压罐中常见的悬垂复合结构。 ACP 绕线向导 将必要的信息输入到绕组向导中。重要的是要注意“参考半径”,它代表圆柱截面的半径,以及“轴向”&#x…

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程: 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…

【算法-位运算】求数字的补数

文章目录 1. 题目2. 思路3. 代码4. 小结 1. 题目 476. 数字的补数 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 “101” &…

DeepSeek能下围棋吗?(续)

休息了一下,接着琢磨围棋,其实前面一篇里的规则有个漏洞的,就是邻居关系定义有问题,先回顾一下游戏规则: 游戏规则 定义: 1.数字对,是指两个1到9之间的整数组成的有序集合。可与记为(m,n)&…

[Collection与数据结构] B树与B+树

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

origin如何在已经画好的图上修改数据且不改变原图像的画风和格式

例如我现在的.opju文件长这样 现在我换了数据集,我想修改这两个图表里对应的算法里的数据,但是我还想保留这图像现在的形式,可以尝试像下面这样做: 右击第一个图,出现下面,选择Book[sheet1] 选择工作簿 出…

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下,热源 (q) 不是通…

Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能

开篇 Midjourney中有3个图片“微调”,它们分别为: 强变化;弱变化;局部重绘; 在Discord里分别都是用命令唤出的,但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中,我们发觉这样的逆天…

嵌入式知识点总结 ARM体系与架构 专题提升(三)-中断与异常

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.中断与异常有何区别? 2.中断与DMA有何区别? 3.中断能不能睡眠,为什么?下半部能不能睡眠? 4.中断的响应执行流程是什么&#…

Leetcode:541

1,题目 2,思路 用List集合来装字符串其中每k个为一个元素单位我们根据题目意思就可以明白list中偶数位需要反转reverse,奇数保持原样再全部拼接一块最后return tostring 3,代码 import java.util.ArrayList; import java.util.…

CSS 背景与边框:从基础到高级应用

CSS 背景与边框:从基础到高级应用 1. CSS 背景样式1.1 背景颜色示例代码:设置背景颜色 1.2 背景图像示例代码:设置背景图像 1.3 控制背景平铺行为示例代码:控制背景平铺 1.4 调整背景图像大小示例代码:调整背景图像大小…

【机器学习】自定义数据集使用框架的线性回归方法对其进行拟合

一、使用框架的线性回归方法 1. 基础原理 在自求导线性回归中,我们需要先自定义参数,并且需要通过数学公式来对w和b进行求导,然后在反向传播过程中通过梯度下降的方式来更新参数,从而降低损失值。 2. 实现步骤 ① 散点输入 有一…

DeepSeekMoE:迈向混合专家语言模型的终极专业化

一、结论写在前面 论文提出了MoE语言模型的DeepSeekMoE架构,目的是实现终极的专家专业化(expert specialization)。通过细粒度的专家分割和共享专家隔离,DeepSeekMoE相比主流的MoE架构实现了显著更高的专家专业化和性能。从较小的2B参数规模开始&#x…

【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程

1. 简介 UDP协议(User Datagram Protocol),全称用户数据报协议,它是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接, 不管对方状态就直接发送。至于对方是否可以接收到这些数据内…