在这里插入图片描述

C V CV CV C A CA CA双模型,二维,基于粒子滤波的 I M M IMM IMM(交互式多模型)
原创代码,包运行成功,可联系我获取讲解和一对一定制,请勿翻卖

代码介绍

算法简介

本程序为IMM-PF(交互多模型粒子滤波)。其核心思想是不再依赖单一运动模型,而是同时引入**匀速(CV)匀加速(CA)**两种模型,对目标运动进行并行建模与估计。

在每个时刻,算法根据观测数据自动评估两种模型的可信度,并进行加权融合,从而实现对不同运动状态的自适应切换。

核心特点

  • 多模型协同:同时跟踪多种运动模式
  • 自适应切换:根据数据自动调整模型权重
  • 粒子滤波驱动:适用于非线性、非高斯场景
  • 统一融合输出:保证轨迹平滑且稳定

效果总结

相比单一模型方法,该算法在运动状态发生变化(如加速、减速)时表现更加稳定,整体跟踪精度更高,是一种兼顾灵活性与鲁棒性的目标跟踪方案。

运行结果

运行代码后,即可得到下面的结果:
运动轨迹示意图:
在这里插入图片描述

各轴估计的误差曲线:
在这里插入图片描述

各轴RMSE:
在这里插入图片描述

各模型概率曲线:
在这里插入图片描述
与实际仿真的运动模型更替相匹配:
在这里插入图片描述

命令行截图:

在这里插入图片描述

MATLAB源代码

部分代码如下:

% CV和CA模型组成的IMM,PF,二维
% 2026-03-29/Ver1

clear; clc; close all;
rng(0); % 固定随机种子
%% 建模与初始化
N  = 600; % 仿真时间步
T  = 1;   % 采样间隔
x0 = [100;1;0;100;1;0]; % 初始状态 [x位置, x速度, x加速度, y位置, y速度, y加速度]
xA = [];  % 真实状态存储

%% 粒子滤波参数
Np = 5000;          % 粒子数量
resample_thresh = 0.9; % 重采样阈值(有效粒子数 < Np*此值时重采样)

%% 模型定义
% CV 匀速运动模型(4维状态:位置+速度)
Q1 = 4 * diag([1,1]);
fCV = @(x, w) [x(1) + T*x(2) + T^2/2*w(1);
               x(2) +           T*w(1);
               x(3) + T*x(4) + T^2/2*w(2);
               x(4) +           T*w(2)];

% CA 匀加速运动模型(6维状态:位置+速度+加速度)
Q2 = 4 * diag([1,1]);
fCA = @(x, w) [x(1) + T*x(2) + T^2/2*x(3) + T^3/6*w(1);
               x(2) + T*x(3)              + T^2/2*w(1);
               x(3)                       + T*w(1);
               x(4) + T*x(5) + T^2/2*x(6) + T^3/6*w(2);
               x(5) + T*x(6)              + T^2/2*w(2);
               x(6)                       + T*w(2)];

%% 生成真实轨迹
x = x0;
for k = 1:150  % 匀速直线段
    w = chol(Q1,'lower') * randn(2,1);
    x_cv = fCV(x([1,2,4,5]), w);  % 使用CV模型
    x([1,2,4,5]) = x_cv;
    x([3,6]) = 0;  % 加速度为0
    xA = [xA, x];
end
for k = 1:120  % 匀加速段(设置恒定加速度)
    if k == 1
        x(3) = 0.1;   % x方向加速度 0.5 m/s²
        x(6) = 0.2;   % y方向加速度 0.3 m/s²
    end
    w = chol(Q2,'lower') * randn(2,1);
    x = fCA(x, w);
    xA = [xA, x];
end
for k = 1:N-270  % 匀速直线段
    w = chol(Q1,'lower') * randn(2,1);
    x_cv = fCV(x([1,2,4,5]), w);
    x([1,2,4,5]) = x_cv;
    x([3,6]) = 0;  % 加速度回到0
    xA = [xA, x];
end

%% 观测参数
H_cv = [1,0,0,0; 0,0,1,0];         % CV模型观测矩阵(仅观测位置)
H_ca = [1,0,0,0,0,0; 0,0,0,1,0,0]; % CA模型观测矩阵(仅观测位置)
R = 10 * diag([1,1]);
t = 1:N;

%% 蒙特卡罗

代码下载链接:
https://download.csdn.net/download/callmeup/92769614

如需帮助,或有导航、定位滤波相关的代码定制需求,可点击下方卡片联系作者

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐