
程序概述
程序演示了新息协方差匹配 (Covariance Matching) 在UKF中的有效自适应策略,能够在噪声统计未知或变化的场景下自动修正 Q Q Q与 R R R,显著提升目标跟踪稳定性与精度。相比传统固定参数 U K F UKF UKF, C M − A U K F CM-AUKF CM−AUKF无需额外外部调参,适用于无人机导航、雷达目标跟踪、移动机器人定位等动态环境下的滤波系统。
运行结果
目标轨迹对比:

位置误差对比曲线:

输出的速度(大小)误差对比曲线:

自适应曲线:

命令行输出的结果:

MATLAB源代码
部分代码如下:
% 基于新息协方差匹配的自适应UKF (CM-AUKF) vs 经典UKF对比
% 状态: 二维平面匀速运动 [x, vx, y, vy],观测: 雷达测角与测距 [r, theta]
% 作者:matlabfilter
% 2025-10-07/Ver1
clear; clc; close all;
rng(0);
%% 仿真参数设置
dt = 0.1; % 采样时间
N = 200; % 仿真步数
M = 15; % 滑动窗口长度
% 真实过程噪声和观测噪声
q_true = 0.1; % 过程噪声标准差
sigma_r = 5; % 距离测量噪声标准差
sigma_theta = 0.02; % 角度测量噪声标准差 (rad)
%% UKF参数设置
n = 4; % 状态维度
m = 2; % 观测维度
alpha = 1e-3; % UT变换参数:sigma点分布范围 (通常取0.001~1)
beta = 2; % UT变换参数:先验分布信息 (高斯分布取2)
kappa = 0; % UT变换参数:次要缩放参数 (通常取0或3-n)
lambda = alpha^2 * (n + kappa) - n;
Wm = zeros(2*n+1, 1); % 均值权重
Wc = zeros(2*n+1, 1); % 协方差权重
Wm(1) = lambda / (n + lambda);
Wc(1) = lambda / (n + lambda) + (1 - alpha^2 + beta);
for i = 2:(2*n+1)
Wm(i) = 1 / (2 * (n + lambda));
Wc(i) = 1 / (2 * (n + lambda));
end
%% 状态转移矩阵 (匀速运动模型)
F = [1, dt, 0, 0;
0, 1, 0, 0;
0, 0, 1, dt;
0, 0, 0, 1];
% 过程噪声协方差矩阵 Q
G = [dt^2/2, 0;
dt, 0;
0, dt^2/2;
0, dt];
Q_true = q_true^2 * (G * G');
% 观测噪声协方差矩阵 R
R_true = diag([sigma_r^2, sigma_theta^2]);
%% 初始化
% 真实初始状态 [x, vx, y, vy]
x_true = [1000; 50; 1000; -30];
如需完整代码,可查看专栏文章:
https://blog.csdn.net/callmeup/article/details/152741692?spm=1011.2415.3001.5331
或单独下载:
https://download.csdn.net/download/callmeup/92122513
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
294

被折叠的 条评论
为什么被折叠?



