2. 卫星轨道与链路几何建模

链路预算的第一步不是算功率,而是先回答一个几何问题:某一时刻卫星在哪里、地面站看它是哪个方向、两者相距多远、相对速度带来多大的频率偏移。这四个量分别对应轨道参数、仰角/方位角、星地距离和多普勒频移,它们共同构成动态几何场景的骨架。本节以 Python 与 STK 两条实现路径为主线,把参数定义、计算过程和结果判读串起来。

一、轨道参数:从六根数到瞬时位置

描述卫星轨道最常用的是开普勒六根数:半长轴 a、偏心率 e、轨道倾角 i、升交点赤经 Ω、近地点幅角 ω、真近点角 ν。前五个决定轨道形状与空间朝向,ν 决定卫星在轨道上的瞬时位置。对于圆轨道(e≈0),近地点幅角失去意义,常用“纬度幅角 u = ω + ν”替代。工程上更常直接给出轨道高度 h 与倾角 i,例如 LEO 遥感卫星 h=550 km、i=97.6°(太阳同步),GEO 通信卫星 h=35786 km、i≈0°。

由 a = Re + h(Re=6378.137 km)可得平均角速度 n = √(μ/a³),μ=398600.4418 km³/s²。以 550 km 轨道为例,a=6928.137 km,n≈1.106×10⁻³ rad/s,对应周期 T=2π/n≈5681 s≈94.7 min。这个周期决定了单站可见窗口的长度量级,是后续仰角计算的输入。

在 Python 中可用 skyfield 或 poliastro 直接由 TLE/根数生成 ECI 位置速度;在 STK 中则通过 Satellite 对象的 Keplerian 传播器录入六根数,并设置场景历元(如 2025-01-01 00:00:00 UTC)。两者都需要明确坐标系:ECI(J2000 惯性系)用于轨道动力学,ECEF(地固系)用于星下点与地面几何。

二、星下点轨迹:把三维轨道投影到地面

星下点是卫星与地心连线与地球表面的交点,其经纬度由 ECEF 位置矢量直接得到:纬度 φ = arcsin(z/r),经度 λ = atan2(y, x)。由于地球自转,惯性系下的轨道在 ECEF 中表现为星下点轨迹持续西移。对 550 km、i=97.6° 的太阳同步轨道,星下点轨迹近似南北向、每圈西移约 24.6°(360°×T/86400),相邻轨迹间距约 2700 km(赤道处)。

星下点轨迹的价值在于判断覆盖:地面站是否落在轨迹带内、单圈可见弧段有多长、重访周期是多少。在 STK 中可用 Ground Track 报告或 2D 地图窗口直接观察;在 Python 中把 ECEF 经纬度序列画到 cartopy 底图上即可。需要注意,星下点轨迹只反映垂直投影,不等于可见范围——真正的可见性由仰角门限决定。

地球(Re = 6378.137 km) 地心 O 卫星 S 轨道(ECI) 星地距离 d 星下点 P 地面站 G 视线 LOS θ 仰角 正北 N φ 方位角 多普勒频移 f_d = −(v_r / c) · f_c v_r:径向速度(接近为负) f_c:载波频率 c = 299792.458 km/s 示例:v_r=7 km/s, f_c=12 GHz 轨道六根数 a 半长轴 e 偏心率 i 倾角 Ω 升交点赤经 ω 近地点幅角 ν 真近点角(或 u 纬度幅角) 示例:h=550 km, i=97.6°

三、仰角与方位角:地面站视角的几何计算

仰角 θ 是视线与当地水平面的夹角,方位角 φ 是视线在水平面上的投影相对正北的顺时针夹角。计算前必须先约定坐标系:本文采用站心 ENU(东-北-天)坐标系,方位角从正北起算、顺时针为正,仰角向上为正。设地面站 ECEF 位置为 rg,卫星 ECEF 位置为 rs,则站心矢量 ρ = rs − rg,再经旋转矩阵转到 ENU:

E = -sinλ·Δx + cosλ·Δy
N = -sinφ·cosλ·Δx - sinφ·sinλ·Δy + cosφ·Δz
U =  cosφ·cosλ·Δx + cosφ·sinλ·Δy + sinφ·Δz

仰角 θ = atan2(U, sqrt(E² + N²))
方位角 φ = atan2(E, N)   # 结果归一到 [0°, 360°)
距离   d = sqrt(E² + N² + U²)

以地面站北京(39.9°N, 116.4°E)跟踪 550 km 太阳同步卫星为例,当卫星星下点位于站南约 800 km 时,仰角约 30°;当卫星接近地平线时仰角趋近 0°,此时距离约 2400 km。工程上通常设 5° 或 10° 仰角门限,低于门限即判定不可见,这直接决定可见窗口的起止时刻。

在 STK 中,通过 Access 计算即可得到地面站对卫星的可见弧段,并输出 Elevation、Azimuth、Range 报告;在 Python 中可用 skyfield 的 altaz() 方法直接得到仰角方位角,或用上述公式自行实现。两种方式都应校验同一时刻结果一致,偏差应小于 0.1°。

四、星地距离与多普勒频移

星地距离 d 由站心矢量模长直接得到。对 550 km 轨道,仰角 90° 时 d≈550 km,仰角 5° 时 d≈2400 km,变化范围接近 4 倍。距离变化率(径向速度 vr)由相邻时刻距离差分得到,典型 LEO 最大径向速度约 ±7 km/s,GEO 则接近 0。

多普勒频移 fd = −(vr/c)·fc。以 fc=12 GHz、vr=7 km/s 为例,fd≈−280 kHz;卫星接近时为正、远离时为负,过顶时刻 vr≈0、fd≈0。对 QPSK 信号,若符号率为 1 Msps,280 kHz 偏移约占符号率的 28%,接收机必须做多普勒预补偿或使用宽捕获范围。

在 STK 中可通过 Doppler 报告或 Range Rate 数据计算;在 Python 中则对距离序列做数值微分,再代入公式。建议把仰角、距离、多普勒三条曲线画在同一时间轴上,观察它们的相位关系:仰角最大时距离最小、多普勒过零,这是判断几何模型是否正确的最直接依据。

建模时务必统一时间系统与坐标系:STK 场景历元、TLE 历元、Python 中 Time 对象应一致;ECI 与 ECEF 转换需使用同一岁差-章动模型,否则星下点轨迹会出现明显漂移。

五、动态几何场景的建立与校验

一个可复用的动态几何场景应包含:卫星对象(根数或 TLE)、地面站对象(经纬高)、时间范围与步长、可见性约束(仰角门限)、输出量(仰角、方位角、距离、距离变化率、多普勒)。在 STK 中按此顺序建立后,用 Access 得到可见弧段表;在 Python 中则用循环或向量化计算生成时间序列。

校验方法有三条:其一,检查星下点轨迹是否连续、无跳变;其二,检查仰角曲线是否在可见窗口内单调上升后下降;其三,检查多普勒在过顶时刻是否过零。若三者不一致,优先排查坐标系定义和历元设置,而不是怀疑公式本身。

下表给出一组教学示例参数(非实测),可用于快速搭建场景并验证计算链路:

参数示例值说明
轨道高度 h550 km太阳同步 LEO
轨道倾角 i97.6°近极地轨道
地面站39.9°N, 116.4°E, 50 m北京
仰角门限5°可见性判据
载波频率 fc12 GHzKu 频段
仿真步长10 s兼顾精度与速度
仿真时长24 h覆盖多圈重访

把上述参数代入后,预期可观察到:单圈可见窗口约 8~12 min,最大仰角约 80°~90°,最大多普勒约 ±280 kHz,距离在 550~2400 km 之间变化。若结果偏离这一量级,应检查单位(km 与 m)、角度制(度与弧度)以及地球自转是否已计入 ECEF 转换。

多普勒频移的符号约定必须与接收机实现一致:本文定义卫星接近时 vr 为负、fd 为正。若接收机采用相反约定,补偿方向会完全相反,导致捕获失败。

完成本节后,你应当能够独立完成:由轨道根数生成 ECI/ECEF 位置、计算星下点轨迹、由站心矢量求仰角方位角与距离、由距离变化率求多普勒频移,并在 Python 与 STK 中交叉验证。这套几何链路是后续链路预算、天线指向和频率补偿的共同基础。