4.6 KiB
单位与坐标约定
English | 简体中文
本文件记录跨层的单位与坐标约定。单个 crate 的内部约定见其模块文档;这里只 记录跨层边界必须一致的部分,因为边界处的单位不一致是本仓库最容易引入 也最难发现的错误。
长度的两种单位
仓库同时使用千米与米,边界在 orbit 层与 physics 层之间:
| 层 / crate | 长度单位 |
|---|---|
apsis-kepler、apsis-sgp4、apsis-tle |
千米 |
apsis-ephemeris |
千米 |
apsis-maneuver |
千米 |
apsis-constellation、apsis-coverage、apsis-access、apsis-isl |
千米 |
apsis-topology、apsis-routing、apsis-mesh |
长度仅在 apsis-isl 计算,边的 cost 是调用方定义的无量纲值 |
apsis-handover |
不涉及长度;quality 为调用方定义,时间用秒 |
apsis-coord(Eci、Ecef) |
米 |
apsis-geodesy(Geodetic 高度、椭球半轴、笛卡尔位置) |
米 |
apsis-frames |
无量纲(角度与旋转) |
apsis-rf、apsis-antenna、apsis-atmosphere、apsis-noise、apsis-doppler、apsis-interference、apsis-link |
米、赫兹 |
选择千米还是米并非任意:卫星轨道用千米表达更自然(apsis-sgp4 输出的量级
是几千),射频链路用米表达更自然(波长与距离用米,与 ITU-R 建议书一致)。
代价是边界处必须显式换算。
边界处的换算
从 orbit 层进入 physics 层时乘以 1000.0,返回时除以 1000.0:
// orbit 层的千米位置转 physics 层的米位置。
let position_km = satellite.propagate_minutes(0.0)?.position; // 千米
let ecef = Ecef::new(position_km * 1_000.0); // 米
漏掉这一步会把卫星放到地球内部,而且数值仍然"看起来合理",不会立刻报错。
integrate_network 示例对这一边界做了断言:换算后的半径必须与传播器报告
的半径一致,这是唯一能自动发现漏乘或漏除的检查。
角度
所有计算用角度一律为弧度。纬度、经度、倾角、升交点赤经、近地点幅角、 真近点角、仰角、方位角、天线方向图角都是弧度。
唯一的例外是两线元素集:apsis-tle::TwoLineElement 的原始字段按 TLE 格式
用度与每日圈数,因为那是文件的编码。apsis-sgp4 在初始化时换算为弧度与
弧度每分钟。
时间
时间统一用秒表示,原点由调用方选择:
- ops 与 sim 层:从场景原点(scenario epoch)起算的秒数。
- orbit 层:
apsis-sgp4用"距元素历元的分钟数",apsis-ephemeris与 其余 crate 用秒。 - 日历时间:
apsis-time的Epoch存 TAI 儒略日;UTC 换算经apsis-leap的闰秒表。
Orbit::sample_ephemeris 是两种时间表示的边界:入参是距元素历元的分钟,
返回的星历内部用秒,换算在方法内完成。
坐标框架
| 框架 | 类型 | 说明 |
|---|---|---|
| TEME | apsis_sgp4::State |
SGP4 定义的真赤道平春分点框架 |
| ECI | apsis_coord::Eci |
惯性笛卡尔坐标 |
| ECEF | apsis_coord::Ecef |
地固笛卡尔坐标 |
| 大地坐标 | apsis_geodesy::Geodetic |
纬度、经度、大地高 |
| 地面点 | apsis_coverage::GroundPoint |
大地坐标加仰角遮蔽 |
TEME 到 ECEF 需要地球自转角(apsis-frames::EarthRotationAngle)加上岁差
章动;apsis-coord 提供变换,apsis-frames 提供角。TEME 与 ECI 的差别是
分点方程,量级低于千分之一度;integrate_network 示例中直接把它当作惯性
系处理,并注明这是该示例的近似。
其它量
- 引力参数:
apsis-kepler::GravityParameter,单位 km³/s²。WGS 72 对应 SGP4,WGS 84 对应其余用途;选错会使密切半长轴偏约百万分之一。门面apsis-orbit::Orbit把引力参数与传播器绑定,避免这一错误。 - 速度:与长度同层,km/s 或 m/s。
- 功率用瓦、频率用赫兹、温度用开尔文;分贝为功率比,
dBi相对各向同性、dBd相对半波偶极子(相差 2.15 dB)。 - 相对量一律无量纲:偏心率、填充率、利用率、信噪比的分贝值。
检查
单位边界没有类型系统保护,靠测试与文档:
- 各层测试覆盖层内换算。
integrate_network断言千米与米的边界换算保持半径。integrate_ops、integrate_sim覆盖 ops 与 sim 层的时间轴约定。cargo run --release -p apsis-rs --features full --example bench覆盖 各层热点路径,任一层的接口变更导致编译失败都会在此暴露。