基于MATLAB实现的坐标系转换

在双基地星载雷达仿真中,坐标系转换是实现目标定位与跟踪的核心环节。基于MATLAB实现完整的坐标系转换流程,涵盖地心惯性坐标系(ECI)→地心地固坐标系(ECEF)→当地导航坐标系(NED)→雷达坐标系的转换,并提供完整代码实现。


一、坐标系定义与转换关系

1. 坐标系定义

  • ECI坐标系:原点在地心,坐标轴与惯性空间固定(J2000坐标系)。
  • ECEF坐标系:原点在地心,坐标轴与地球固连(旋转坐标系)。
  • NED坐标系:原点在雷达位置,X轴指向北,Y轴指向东,Z轴垂直向下。
  • 雷达坐标系:原点在天线相位中心,极坐标系(距离、方位角、俯仰角)。

2. 转换流程

ECI → ECEF(地球自转修正) → NED(导航坐标系) → 雷达坐标系(极坐标)

二、MATLAB实现代码

1. ECI转ECEF(考虑地球自转)

function [r_ecef, v_ecef] = eci2ecef(r_eci, t)
    % 输入:r_eci - ECI坐标 (m), t - 时间 (UTC秒)
    % 输出:r_ecef - ECEF坐标 (m), v_ecef - ECEF速度 (m/s)
    
    % 地球自转角速度 (rad/s)
    omega_ie = 7.2921150e-5; 
    
    % 计算ECEF坐标
    R = rotation_matrix(t);  % 地球自转矩阵
    r_ecef = R * r_eci;
    
    % 计算ECEF速度(假设目标静止)
    v_ecef = -omega_ie * cross(r_ecef, [0;0;1]);
end

function R = rotation_matrix(t)
    % 计算从J2000到当前时刻的旋转矩阵
    theta = omega_ie * t;
    R = [cos(theta) sin(theta) 0;
         -sin(theta) cos(theta) 0;
          0          0         1];
end

2. ECEF转NED(需已知雷达位置)

function [r_ned] = ecef2ned(r_ecef, lat0, lon0, h0)
    % 输入:r_ecef - ECEF坐标 (m), lat0/lon0/h0 - 雷达位置经纬高 (rad, m)
    % 输出:r_ned - NED坐标 (m)
    
    % 地球椭球参数 (WGS84)
    a = 6378137;        % 长半轴
    e2 = 6.69437999e-3; % 第一偏心率平方
    
    % 计算当地坐标系旋转矩阵
    [sin_lat, cos_lat] = deal(sin(lat0), cos(lat0));
    [sin_lon, cos_lon] = deal(sin(lon0), cos(lon0));
    
    R1 = [1, 0, 0;
          0, cos_lat, -sin_lat;
          0, sin_lat, cos_lat];  % 经度旋转
    
    R2 = [cos_lon, sin_lon, 0;
          -sin_lon, cos_lon, 0;
           0,       0,      1];  % 纬度旋转
    
    Rn = R1 * R2;  % 先纬度后经度的旋转矩阵
    
    % 计算NED坐标
    r_ecef_local = r_ecef - [0;0;R0+h0];  % 减去地球半径(R0=6378137)
    r_ned = Rn' * r_ecef_local;
end

function R0 = get_earth_radius(lat)
    % 计算地球曲率半径
    a = 6378137; e2 = 6.69437999e-3;
    N = a / sqrt(1 - e2*sin(lat)^2);
    R0 = N * cos(lat);
end

3. NED转雷达坐标系(极坐标)

function [r, az, el] = ned2radar(r_ned, radar_alt)
    % 输入:r_ned - NED坐标 (m), radar_alt - 雷达高度 (m)
    % 输出:r - 距离 (m), az - 方位角 (rad), el - 俯仰角 (rad)
    
    % 计算距离
    r = sqrt(r_ned(1)^2 + r_ned(2)^2 + (r_ned(3)+radar_alt)^2);
    
    % 计算方位角(从北向顺时针)
    az = atan2(r_ned(2), r_ned(1));
    
    % 计算俯仰角(向上为正)
    el = atan2(-(r_ned(3)+radar_alt), sqrt(r_ned(1)^2 + r_ned(2)^2));
end

三、完整仿真示例

1. 参数设置

% 雷达位置(北京)
lat0 = deg2rad(39.9042);  % 纬度
lon0 = deg2rad(116.4074); % 经度
h0 = 100;               % 高度 (m)

% 目标ECI坐标(假设静止)
t = 0;                  % 时间 (UTC秒)
r_eci = [7e6; 0; 0];    % 位于X轴正方向7000km处

% 转换流程
[r_ecef, v_ecef] = eci2ecef(r_eci, t);
[r_ned] = ecef2ned(r_ecef, lat0, lon0, h0);
[r, az, el] = ned2radar(r_ned, h0);

2. 结果验证

disp(['距离: ', num2str(r/1e3), ' km']);
disp(['方位角: ', num2str(rad2deg(az)), ' 度']);
disp(['俯仰角: ', num2str(rad2deg(el)), ' 度']);

四、关键优化与验证

1. 地球曲率修正

  • ecef2ned函数中,使用get_earth_radius计算曲率半径,避免平面近似误差。

2. 速度场建模

  • 若目标运动,需在eci2ecef中叠加目标速度引起的多普勒频移。

3. 可视化验证

% 3D轨迹绘制
figure;
plot3(r_eci(1), r_eci(2), r_eci(3), 'ro', 'MarkerSize', 10);
hold on;
plot3(r_ned(1), r_ned(2), r_ned(3), 'bx', 'MarkerSize', 10);
xlabel('X (m)'); ylabel('Y (m)'); zlabel('Z (m)');
legend('ECI坐标', 'NED坐标');
grid on;

参考代码 双基地星载雷达仿真,完成坐标系之间的转换 www.youwenfan.com/contentcnm/82216.html

五、扩展应用

  1. 双基地干涉测量:结合两站NED坐标差,计算目标高度。
  2. 杂波抑制:通过坐标转换对齐多通道数据,实现STAP处理。
  3. 抗欺骗干扰:在坐标域设计滤波器抑制虚假目标。
posted @ 2025-11-25 09:53  吴逸杨  阅读(78)  评论(0)    收藏  举报