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 序列画出来,就能看到距离随相位差近似周期性变化,周期与两星相对角速度有关。

星间距离与可见性随时间变化(示例) 时间 t(分钟) 距离 d(km) 0 15 30 45 60 0 3000 6000 9000 11000 遮挡门限参考 可见窗口 可见窗口 瞬时距离 d(t) 几何可见门限 可通信时段

四、最坏情况距离与动态距离的取舍

链路预算中,距离的取值方式直接影响设计余量。最坏情况距离法取整个任务周期内可能出现的最大 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 判断几何可见,再叠加天线波束约束得到可通信窗口;最后根据距离变化幅度选择最坏情况、分段或动态距离策略。距离算得准,后面的损耗、增益和余量才有意义。