找回密码
 立即注册
首页 业界区 业界 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算 ...

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

杓疠? 前天 13:20
1.程序功能描述

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。
2.测试软件版本以及运行结果展示

MATLAB2022A版本运行
1.jpeg

2.jpeg

3.jpeg

4.jpeg

5.jpeg

3.核心程序
  1. .............................................................................
  2. % 绘制目标运动与传感器分布的图形,展示 IMM - UKF 算法的跟踪效果
  3. %目标运动与传感器分布
  4. figure   
  5. % 绘制目标的真实轨迹
  6. plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
  7. hold on
  8. % 循环处理每个节点
  9. for i = 1:NumberNode
  10.     % 绘制 IMM - UKF 算法的状态估计轨迹
  11.     plot(Xfstate(1,:),Xfstate(4,:),'-mo',...
  12.     'LineWidth',1,...
  13.     'MarkerSize',6,...
  14.     'MarkerEdgeColor','k',...
  15.     'MarkerFaceColor',[0.5,0.9,0.0]);
  16.     hold on
  17.     % 绘制真实节点的位置
  18.     plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
  19.     hold on
  20.     % 在节点位置旁边标注节点编号
  21.     text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
  22.     hold on
  23.     % 绘制 IMM - UKF 算法估计的节点位置
  24.     plot(pest(1,i),pest(2,i),'rs','LineWidth',1);
  25.     hold on
  26.     % 添加图例说明不同线条和标记的含义
  27.     legend('真实轨迹','IMM-UKF估计轨迹','真实节点','IMM-UKF节点');
  28.     % 设置图形标题
  29.     title('跟踪效果对比');
  30. end
  31. % 设置坐标轴为正方形,使图形比例合适
  32. axis square
  33. % 绘制目标运动与传感器分布的图形,展示 IMM - EKF 算法的跟踪效果
  34. figure   
  35. % 绘制目标的真实轨迹
  36. plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
  37. hold on
  38. % 循环处理每个节点
  39. for i = 1:NumberNode
  40.     % 绘制 IMM - EKF 算法的状态估计轨迹
  41.     plot(Xfstate2(1,:),Xfstate2(4,:),'-mo',...
  42.     'LineWidth',1,...
  43.     'MarkerSize',6,...
  44.     'MarkerEdgeColor','k',...
  45.     'MarkerFaceColor',[0.5,0.9,0.0]);
  46.     hold on
  47.     % 绘制真实节点的位置
  48.     plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
  49.     hold on
  50.     % 在节点位置旁边标注节点编号
  51.     text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
  52.     hold on
  53.     % 绘制 IMM - EKF 算法估计的节点位置
  54.     plot(pest2(1,i),pest2(2,i),'rs','LineWidth',1);
  55.     hold on
  56.     % 添加图例说明不同线条和标记的含义
  57.     legend('真实轨迹','IMM-EKF估计轨迹','真实节点','IMM-EKF节点');
  58.     % 设置图形标题
  59.     title('跟踪效果对比');
  60. end
  61. % 设置坐标轴为正方形,使图形比例合适
  62. axis square
  63. % 绘制目标运动与传感器分布的图形,展示 UKF 算法的跟踪效果
  64. figure   
  65. % 绘制目标的真实轨迹
  66. plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
  67. hold on
  68. % 循环处理每个节点
  69. for i = 1:NumberNode
  70.     % 绘制 UKF 算法的状态估计轨迹
  71.     plot(Para_sensor3(1,:),Para_sensor3(4,:),'-mo',...
  72.     'LineWidth',1,...
  73.     'MarkerSize',6,...
  74.     'MarkerEdgeColor','k',...
  75.     'MarkerFaceColor',[0.5,0.9,0.0]);
  76.     hold on
  77.     % 绘制真实节点的位置
  78.     plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);
  79.     hold on
  80.     % 在节点位置旁边标注节点编号
  81.     text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));
  82.     hold on
  83.     % 绘制 UKF 算法估计的节点位置
  84.     plot(pest3(1,i),pest3(2,i),'rs','LineWidth',1);
  85.     hold on
  86.     % 添加图例说明不同线条和标记的含义
  87.     legend('真实轨迹','UKF估计轨迹','真实节点','UKF节点');
  88.     % 设置图形标题
  89.     title('跟踪效果对比');
  90. end
  91. % 设置坐标轴为正方形,使图形比例合适
  92. axis square
  93. % 绘制不同算法的误差随时间变化的曲线
  94. figure
  95. % 绘制 IMM - UKF 算法的误差曲线
  96. plot(tms,err1(1,:),'-bs',...
  97.     'LineWidth',1,...
  98.     'MarkerSize',6,...
  99.     'MarkerEdgeColor','k',...
  100.     'MarkerFaceColor',[0.9,0.0,0.0]);
  101. hold on;
  102. % 绘制 IMM - EKF 算法的误差曲线
  103. plot(tms,err2(1,:),'-mo',...
  104.     'LineWidth',1,...
  105.     'MarkerSize',6,...
  106.     'MarkerEdgeColor','k',...
  107.     'MarkerFaceColor',[0.5,0.9,0.0]);
  108. hold on;
  109. % 绘制 UKF 算法的误差曲线
  110. plot(tms,err3(1,:),'-r>',...
  111.     'LineWidth',1,...
  112.     'MarkerSize',6,...
  113.     'MarkerEdgeColor','k',...
  114.     'MarkerFaceColor',[0.9,0.9,0.0]);
  115. hold on;
  116. % 添加图例,说明不同曲线对应的算法
  117. legend('IMM - UKF ','IMM - EKF','UKF');
  118. % 设置 x 轴标签为时间步
  119. xlabel('Time Steps')
  120. % 设置 y 轴标签为误差
  121. ylabel('error')
  122. % 绘制不同算法的平均误差柱状图
  123. figure
  124. % 绘制三个算法的平均误差柱状图
  125. bar([mean(err1(1,:)),mean(err2(1,:)),mean(err3(1,:))]);
  126. % 设置 x 轴标签,说明每个柱子对应的算法
  127. xlabel(['1:IMM - UKF, 2:IMM - EKF, 3:UKF']);
  128. % 设置 y 轴标签为误差
  129. ylabel('error')
  130. 93
复制代码
  
4.本算法原理

在许多工程实践中,往往不能直接得到所需要的状态变量的真实值。例如雷达在探测目标时,可以通过回波信号等计算出目标的距离、速度和角度等信息。但雷达探测过程中会存在干扰(系统噪声、地杂波和非目标信号等)的问题,这些干扰会导致回波信号中夹杂有随机噪声。我们要在有随机噪声的回波信号中分离目标的运动状态量,准确的得到这个状态量往往是不可能的,只能根据观测信号估计这些状态变量。卡尔曼滤波就是这种通过估计或预测降低噪声影响的一种好的方法。特别是在线性系统中,卡尔曼滤波是最优的滤波算法。
在轨迹跟踪问题中,系统状态通常随时间变化,并且受到过程噪声的影响;同时,对系统状态的观测也包含观测噪声。我们的目标是根据一系列的观测值来估计系统的真实状态。UKF 是一种用于非线性系统状态估计的滤波算法。与传统的扩展卡尔曼滤波(EKF)不同,UKF 不依赖于对非线性函数的线性化,而是通过一组确定性采样点(Sigma 点)来近似状态的概率分布,从而更准确地处理非线性问题。
在kalman滤波算法中用到了状态转移方程和量测方程,被估计量随着时间的变化,呈现的是一个动态估计。在目标跟踪中,不需要知道目标的运动模型就能实时的修正目标的状态变量(速度、距离等),具有良好的适应性。但是当目标实施机动变化(突然加、减速或急转弯等),仅仅采用基本的kalman滤波算法往往得不到理想的结果。这时就需要采用自适应算法。交互多模型(IMM)就应用而生。
  目标交互多模型kalman滤波算法在机动目标跟踪领域得到广泛应用。IMM算法使用两个或者多个模型来描述工作过程中可能出现的状态,最后通过有效的加权融合进行系统状态估计,很好的克服了单个模型估计误差较大的问题。
IMM 算法用于处理系统在不同模式下运行的情况。它假设系统存在多个可能的运行模式,每个模式对应一个不同的状态模型,通过在这些模型之间进行交互和切换,以适应系统模式的变化,从而提高状态估计的准确性。
6.png

7.png

8.png

9.png

10.png

5.完整程序

VVV
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册