3. 星间几何与距离计算
星间链路预算的第一步不是算天线增益,而是先回答一个几何问题:两颗卫星此刻相距多远?这个距离决定了自由空间损耗,也决定了链路是否可见。星间距离不是常数,它随轨道参数、两星相对位置和时间持续变化。本节围绕四个问题展开:轨道参数如何影响星间距离、如何判断星间可见性、如何对距离随时间变化建模,以及工程上如何在最坏情况距离与动态距离之间取舍。
一、轨道参数如何决定星间距离
先约定参照系:本节所有距离均在以地心为原点的地心惯性系(ECI)中计算,位置矢量记作 r,单位为 km。两颗卫星 A、B 的瞬时距离为 d = |r_B − r_A|。影响 d 的轨道参数主要有四个:半长轴 a(决定轨道高度与周期)、偏心率 e(决定轨道形状)、轨道倾角 i 与升交点赤经 Ω(决定轨道面朝向)、以及两星在各自轨道上的相位角 u(决定瞬时位置)。
直观上可以分三层理解。第一层是轨道高度:两颗卫星高度越接近,最小可能距离越小;高度差越大,最近距离的下限越大。第二层是轨道面夹角:同轨道面内两星距离主要由相位差决定,最近可接近到几十公里;而两个轨道面夹角为 Δi 时,即使相位对齐,两星在交点附近仍会因轨道面分离而保持一定距离。第三层是相位:在轨道面关系固定后,相位差是距离随时间变化的主导因素。
举一个教学示例(参数为合理假设,非实测):卫星 A 为 550 km 太阳同步轨道,a≈6928 km,i≈97.6°;卫星 B 为 550 km 轨道、i≈53°,两轨道面夹角约 44.6°。当两星同时经过升交点附近时,距离约为 2·a·sin(Δi/2)≈2×6928×sin(22.3°)≈5250 km。这说明轨道面夹角是决定最小距离量级的关键参数,而不是高度。
二、星间可见性判断
可见性判断要同时满足两个条件。其一是几何可见:连接两星的直线不穿过地球。设地心到该直线的最近距离为 p,地球半径为 R_e(取 6378 km),加一层大气余量 h_atm(工程上常取 80~100 km),则几何可见条件为 p ≥ R_e + h_atm。其二是天线可见:两星相对矢量必须落在对方天线波束覆盖范围内,即离轴角小于半波束宽度。
p 的计算可直接用矢量公式:p = |r_A × r_B| / |r_B − r_A|。当 p 小于门限时,链路被地球遮挡,此时无论天线增益多高都无法建立链路。工程实现中通常把可见性判断写成逐时刻的布尔序列,再与天线指向约束求交集,得到真正的可通信时间窗。
d 与 p,再判断几何可见,最后叠加天线波束与最小仰角约束。先做几何筛选可以大幅减少后续计算量。三、距离随时间变化的建模
距离随时间变化建模有三种常用粒度。第一种是解析法:对圆轨道,用两星的轨道根数直接写出 r_A(t)、r_B(t),再求模。第二种是数值递推:用 SGP4 等模型按固定步长输出两星 ECI 位置,逐点计算距离。第三种是采样拟合:在可见窗口内采样若干点,用多项式或正弦叠加拟合 d(t),便于链路预算快速调用。
下面给出一个可直接运行的最小计算片段,用于输出一个可见窗口内的距离序列:
import numpy as np
Re = 6378.0 # 地球半径 km
h_atm = 100.0 # 大气余量 km
mu = 398600.4418 # 地球引力常数 km^3/s^2
def eci_pos(a, e, i, raan, u):
# 简化圆轨道:e 取 0,u 为纬度幅角
r = a
x = r*(np.cos(raan)*np.cos(u) - np.sin(raan)*np.sin(u)*np.cos(i))
y = r*(np.sin(raan)*np.cos(u) + np.cos(raan)*np.sin(u)*np.cos(i))
z = r*(np.sin(u)*np.sin(i))
return np.array([x, y, z])
def link_geometry(rA, rB):
d = np.linalg.norm(rB - rA)
p = np.linalg.norm(np.cross(rA, rB)) / d
visible = p >= (Re + h_atm)
return d, p, visible
# 示例:两星 550 km 圆轨道,轨道面夹角约 44.6 度
a = Re + 550.0
iA, iB = np.radians(97.6), np.radians(53.0)
raanA, raanB = 0.0, 0.0
n = np.sqrt(mu / a**3) # 平均角速度 rad/s
for t in range(0, 5400, 300): # 90 分钟,步长 300 s
uA = n * t
uB = n * t + np.radians(30) # B 相对 A 相位超前 30 度
rA = eci_pos(a, 0, iA, raanA, uA)
rB = eci_pos(a, 0, iB, raanB, uB)
d, p, vis = link_geometry(rA, rB)
print(f"t={t:5d}s d={d:8.1f}km p={p:8.1f}km visible={vis}")
运行后可以观察三个量:d 在几千公里量级波动,p 在遮挡区会降到 6478 km 以下,visible 随之在 True/False 之间切换。把 d 序列画出来,就能看到距离随相位差近似周期性变化,周期与两星相对角速度有关。
四、最坏情况距离与动态距离的取舍
链路预算中,距离的取值方式直接影响设计余量。最坏情况距离法取整个任务周期内可能出现的最大 d_max,用它算一次自由空间损耗,设计简单、余量保守,但会高估损耗、浪费功率。动态距离法则按时间序列逐点使用真实 d(t),损耗更准确,但需要存储或实时计算轨道数据,复杂度更高。
工程取舍可参考以下判断:若链路只在固定窗口工作、且窗口内距离变化小于 20%,用最坏情况距离即可;若距离变化超过 2 倍(对应损耗变化约 6 dB),或系统对功率、速率敏感,则应采用动态距离,至少按窗口分段取几个代表值。一个实用的折中是“分段最坏情况”:把可见窗口按距离变化分成 3~5 段,每段取该段最大距离,既保留余量又减少计算量。
| 方法 | 输入 | 损耗精度 | 计算量 | 适用场景 |
|---|---|---|---|---|
| 最坏情况距离 | d_max | 保守偏高 | 低 | 窗口短、距离变化小 |
| 分段最坏情况 | 各段 d_max | 较准 | 中 | 距离变化 2~5 倍 |
| 动态距离 | d(t) 序列 | 准确 | 高 | 功率敏感、变速率链路 |
小结本节的关键操作链:先用轨道根数写出两星 ECI 位置,计算 d 与 p,用 p ≥ R_e + h_atm 判断几何可见,再叠加天线波束约束得到可通信窗口;最后根据距离变化幅度选择最坏情况、分段或动态距离策略。距离算得准,后面的损耗、增益和余量才有意义。