【13】MATLAB仿真 双星TDOA/FDOA无源定位方法仿真,包含GDOP对比,有参考文档。 主要参考文档: 1.双星TDOA/FDOA无源定位方法分析,航天电子对抗 2. 双星时差频差联合定位方法及其误差分析,宇航学报 3. Geolocation of a known altitude object from TDOA and FDOA measurements, in IEEE Transactions on Aerospace and Electronic Systems 主要供文档方法的学习 非全文复现。
双星定位这玩意儿听起来像科幻片里的黑科技,但其实原理就是靠俩卫星听目标发出的信号。今天咱们用MATLAB撸个仿真,重点看看TDOA(到达时间差)和FDOA(到达频率差)怎么配合干活,顺便盘盘GDOP(几何精度因子)这个性能指标。
先扔个卫星运动模型热热身。假设两颗卫星在近地轨道画圈圈,目标在地面某个旮旯猫着:
% 卫星轨道参数 omega = 7.292115e-5; % 地球自转角速度 t = 0:60:600; % 10分钟间隔 sat1_pos = [7000*cos(omega*t); 7000*sin(omega*t); zeros(1,11)]; % 卫星1东向 sat2_pos = [7000*cos(omega*t + pi/6); 7000*sin(omega*t + pi/6); 500*ones(1,11)]; % 卫星2带相位差这里给卫星2加了个500米的高度差,故意制造轨道不对称,后面算GDOP的时候效果更明显。
测量值生成是关键戏码。TDOA计算得考虑信号传播路径:
c = 3e8; % 光速 target_pos = [2000; 1500; 0]; % 目标坐标 % 计算真实TDOA/FDOA range1 = vecnorm(sat1_pos - target_pos, 2, 1); range2 = vecnorm(sat2_pos - target_pos, 2, 1); tdoa_true = (range2 - range1)/c; % 时间差 sat_vel1 = gradient(sat1_pos, 60); % 数值微分求卫星速度 sat_vel2 = gradient(sat2_pos, 60); fdoa_true = dot((sat_vel2./range2 - sat_vel1./range1), (sat2_pos - sat1_pos)/c); % 频率差注意这里用数值微分代替了卫星速度解析解,实际工程中得用轨道动力学模型算精确值,咱们仿真就偷个懒。
【13】MATLAB仿真 双星TDOA/FDOA无源定位方法仿真,包含GDOP对比,有参考文档。 主要参考文档: 1.双星TDOA/FDOA无源定位方法分析,航天电子对抗 2. 双星时差频差联合定位方法及其误差分析,宇航学报 3. Geolocation of a known altitude object from TDOA and FDOA measurements, in IEEE Transactions on Aerospace and Electronic Systems 主要供文档方法的学习 非全文复现。
定位算法最带劲的部分来了——牛顿迭代法解非线性方程。先摆出观测方程:
function F = equations(x, tdoa_meas, fdoa_meas, sat1, sat2) r1 = norm(x - sat1.pos); r2 = norm(x - sat2.pos); F = [ (r2 - r1)/c - tdoa_meas; (dot(x - sat2.pos, sat2.vel)/r2 - dot(x - sat1.pos, sat1.vel)/r1)/c - fdoa_meas; ]; end雅可比矩阵的构建直接关系到收敛速度,这里用数值Jacobian代替解析式,方便修改:
J = zeros(2,3); h = 1e-3; % 扰动步长 for k = 1:3 x_pert = x; x_pert(k) = x_pert(k) + h; J(:,k) = (equations(x_pert, tdoa, fdoa, sat1, sat2) - F0)/h; end实测发现高程约束(已知目标高度)能显著提升收敛性,所以在迭代时固定z轴坐标为0,把三维问题降维成二维。
GDOP等高线图是装X神器,展示不同卫星几何布局的定位精度差异:
[X,Y] = meshgrid(-1000:100:1000); gdop_map = zeros(size(X)); for i = 1:size(X,1) for j = 1:size(X,2) H = calc_jacobian([X(i,j);Y(i,j);0], sat1, sat2); % 计算雅可比矩阵 gdop_map(i,j) = sqrt(trace(inv(H'*H))); % GDOP计算公式 end end contourf(X,Y,gdop_map,20);运行结果明显看到,当两颗卫星与目标形成等腰三角形时,GDOP值最小(颜色越蓝越好)。如果卫星跑到目标同侧,等高线立马变红,精度断崖式下跌。
最后给个避坑指南:实测发现FDOA测量误差对高程估计影响巨大。当目标高度未知时,建议先用TDOA单独定位再上FDOA修正,比联合定位更稳。另外卫星速度方向与基线夹角小于30度时,系统可能病态,这时候加点正则化项能救命。
仿真代码里藏了个彩蛋:修改卫星2的初始相位参数,能看到GDOP分布像万花筒一样旋转变化。这直观验证了卫星星座几何布局对定位精度的决定性作用——搞卫星排班的大佬们可都是玩几何的高手。