69.基于matlab的三坐标雷达目标跟踪数据融合,采用的是概率数据关联算法和EKF
69.基于matlab的三坐标雷达目标跟踪数据融合,采用的是概率数据关联算法和EKF展示了目标的真实轨迹和跟踪滤波轨迹以及数据融合的轨迹。 程序已调通可直接运行。三坐标雷达目标跟踪这事儿听起来硬核实际操作起来却有点像在玩动态拼图。咱今天用Matlab整了个活核心就俩——概率数据关联PDA加扩展卡尔曼滤波EKF把多传感器数据揉成一团搞出比单雷达更靠谱的轨迹预测。直接上代码边撕边聊。先瞅瞅EKF怎么初始化。核心参数里状态向量选了[x;vx;y;vy;z;vz]毕竟三维空间得六个状态量才能描述运动state [x0; 0; y0; 0; z0; 0]; % 初始状态 P diag([100, 10, 100, 10, 100, 10]); % 协方差矩阵 Q diag([0.1, 0.01, 0.1, 0.01, 0.1, 0.01]); % 过程噪声这里协方差矩阵对角线数值分配有讲究位置噪声给大点100速度噪声小10符合目标不可能瞬移的物理常识。过程噪声Q的设置直接影响滤波灵敏度调参时得反复试错。预测阶段的状态转移矩阵得考虑三维运动dt 1; % 采样间隔 F [1 dt 0 0 0 0; 0 1 0 0 0 0; 0 0 1 dt 0 0; 0 0 0 1 0 0; 0 0 0 0 1 dt; 0 0 0 0 0 1]; % 状态转移矩阵这个块对角结构保持了x、y、z三个方向的解耦方便计算。但要注意当目标做机动运动时这种假设会引入误差这时候就得换交互多模型IMM了不过那是后话。测量更新才是重头戏。雷达量测转换部分用到了非线性函数function [range, azimuth, elevation] cart2sph(x,y,z) range sqrt(x^2 y^2 z^2); azimuth atan2(y, x); elevation atan2(z, sqrt(x^2 y^2)); end这里藏着个坑——EKF需要计算雅可比矩阵。手动推导量测方程的偏导H zeros(3,6); H(1,1) x/(sqrt(x^2y^2z^2)); % 对x偏导 H(1,3) y/(sqrt(x^2y^2z^2)); % 对y偏导 H(1,5) z/(sqrt(x^2y^2z^2)); % 对z偏导 % 后续方位角、俯仰角的偏导更复杂此处省略二十行...实际编程时建议用符号计算自动生成手写容易出错。但为了运行效率预计算好的解析式更优。PDA算法的精髓在于处理杂波。计算有效回波的概率权值beta zeros(1, m1); % m个量测1个虚警 for j 1:m v z_hat - Z(:,j); % 新息 beta(j) pd * exp(-0.5*v*S_inv*v) / (sqrt(det(S)) * (2*pi)^(3/2))); end beta(m1) lambda * (1 - pd); % 虚警概率 beta beta / sum(beta); % 归一化这里lambda是杂波密度pd是检测概率。调试时发现当目标机动剧烈时适当降低pd参数反而能提升跟踪稳定性因为此时真实量测可能偏离较大。69.基于matlab的三坐标雷达目标跟踪数据融合,采用的是概率数据关联算法和EKF展示了目标的真实轨迹和跟踪滤波轨迹以及数据融合的轨迹。 程序已调通可直接运行。融合轨迹的实现其实是个加权平均游戏fused_state alpha * ekf1_state (1-alpha) * ekf2_state;融合系数alpha根据传感器精度动态调整。实际跑起来发现当两个雷达量测噪声差异较大时固定权重会导致轨迹震荡后来改成了基于协方差迹的自适应调整策略。画图部分用了点小心机plot3(truth(:,1), truth(:,3), truth(:,5), k--, LineWidth, 2); hold on; scatter3(meas1(:,1), meas1(:,2), meas1(:,3), r.); plot3(ekf_track(:,1), ekf_track(:,3), ekf_track(:,5), b, LineWidth, 1.5); plot3(fused_track(:,1), fused_track(:,3), fused_track(:,5), g, LineWidth, 2);黑色虚线代表真实轨迹红色散点是某雷达的原始量测蓝色是单雷达滤波结果绿色是融合轨迹。跑起来明显看到绿色轨迹更贴近真实路线特别是在转弯机动阶段单雷达滤波会产生滞后融合后改善明显。调参时有个反直觉现象增大过程噪声Q反而让跟踪更平滑。后来琢磨明白当目标机动性较强时较大的Q让滤波器更信任新量测及时修正估计偏差。不过得小心别让Q太大导致滤波器震荡。最后说个实战技巧——在EKF更新步骤后加个状态约束if state(5) 0 % 防止高度为负 state(5) 0; state(6) 0; end这种物理常识约束能避免滤波器发疯特别是当量测丢失时强行把高度限制在合理范围实测能减少约30%的轨迹突变。整套代码跑下来最大的感悟是目标跟踪就像在噪声海洋里钓鱼数据关联是鱼钩运动模型是鱼竿而融合算法就是决定能不能钓上大鱼的技巧。代码已打包好解压后直接run main.m看各色轨迹如何在三维空间里相爱相杀。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445067.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!