【MATLAB例程】三维CV和CT双模型的IMM,使用自适应EKF滤波(基于Sage-Husa算法实时估计噪声协方差)。附完整例程可下载
·

代码实现三维空间下的自适应交互多模型(Adaptive Interacting Multiple Model, AIMM)算法,用于目标跟踪和状态估计。该算法结合了CV(恒定速度)模型和CT(恒定转弯率)模型,通过Sage-Husa自适应滤波技术,实现了对复杂机动目标的高精度跟踪。
完整代码,可直接下载,包运行成功
程序详解
核心特性
- 多模型融合
- CV模型:适用于目标匀速直线运动
- CT模型:适用于目标匀角速度转弯运动
- IMM框架:智能切换和融合两种模型
- 自适应能力
- 观测噪声自适应:基于Sage-Husa算法实时估计观测噪声协方差R
- 过程噪声自适应:动态调整过程噪声协方差Q
- 模型转移概率自适应:根据运动模式自动调整模型切换概率
- 三维空间扩展
- 状态向量:
[x, vx, y, vy, z, vz]6维状态 - 观测向量:
[x, y, z]三维位置观测 - 完整的三维运动建模
算法原理
Sage-Husa自适应滤波
通过以下公式实时估计噪声统计特性:
观测噪声自适应:
R(k) = α·R(k-1) + (1-α)·v(k)·v(k)ᵀ
过程噪声自适应:
Q(k) = β·Q(k-1) + (1-β)·q(k)·q(k)ᵀ
其中:
v(k)是观测残差q(k)是过程残差α, β是衰减因子
仿真场景
代码模拟了三段不同的运动模式:
| 时间段 | 运动模式 | 时长 | 说明 |
|---|---|---|---|
| 1-150 | CV(直线) | 150s | 匀速直线运动 |
| 151-270 | CT(转弯) | 120s | 匀角速度转弯(1°/s) |
| 271-600 | CV(直线) | 330s | 匀速直线运动 |
性能评估指标
误差指标
- 位置误差:X、Y、Z三个方向
- RMSE:均方根误差
- CDF:累积分布函数
- 最大误差、平均误差、标准差
改进效果
- 相对CV模型的改进百分比
- 相对CT模型的改进百分比
- 总体RMSE改进
蒙特卡罗仿真
调整以下数字:
MC = 10; % 设置蒙特卡罗次数(默认为1)
运行结果
轨迹真值与各方法估计值如下:
各轴误差曲线与CDF曲线(CDF曲线越靠近左上角表示误差越低):
10次蒙特卡洛后,各轴RMSE如下:
命令行输出:
MATLAB源代码
部分代码如下:
% 自适应IMM算法(CV/CT模型),三维空间
% 观测噪声自适应,使用Sage-Husa EKF作为滤波主体,带误差统计特性输出
% 作者:matlabfilter
% 2026-03-07/Ver1
%% 初始化
clear;clc;close all; %初始化
rng(0); %固定随机种子,让每次运行得到的结果相同
N = 600; %定义仿真时间为600
T = 1; %定义采样间隔为1s
% 修改状态向量定义:[x, vx, y, vy, z, vz] - 6维状态
x0 = [1000,10,1000,10,1000,5]'; %状态初始化,六项分别为x轴位置、速度、y轴位置、速度、z轴位置、速度
xA = []; %预定义输出的状态
%% 建模
% CV匀速运动模型(三维)
% CT匀角速度转弯模型(三维)
完整代码:https://download.csdn.net/download/callmeup/92712027
或:如需一对一讲解、代码定制,请通过下方卡片联系作者
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)