机器翻译,未经母语人士审校。以英文版为准。

入门在GitHub上编辑来源:docs/tutorials/README.md

教程

动手实践的实例演练,带你从“运行一个自带场景”走到“量化并为一个结果辩护”。三个教程中引用的每个数字都是引擎的真实输出,锚定于外部(非循环)的权威参考基准(oracle),并由一项集成测试固定(tests/tutorials.rs),因此教程绝不会悄悄偏离引擎的实际行为。如果教程说光钟守时6600 s,那么这一点哪天不再成立,测试就会使构建失败。

Kshana是一款定位、导航与授时(PNT)仿真器。教程还用到几个缩写,各自在首次出现处给出全称:GNSS(全球导航卫星系统)、GPS(全球定位系统)、CLI(命令行界面)和TOML(Tom's Obvious Minimal Language,场景文件格式)。

刚接触本项目?请先阅读概念入门和术语表,再回到这里。

三个实例演练#

# 教程 你将学到 场景类型 难度 约需时间
1 我的第一条轨道:GPS卫星在哪里 外推一个真实的GPS星座,读取可用性、位置精度因子(PDOP)和位置精度,并导出卫星的实际位置(SP3精密轨道格式) orbit 入门 15分钟
2 时钟守时:能滑行多久 运行一次GNSS拒止下的时钟守时,读取授时性能指标,并理解其背后的 √(q_wf·T) 增长规律 clock 入门 20分钟
3 量子与经典GNSS韧性对比 压轴篇:欺骗干扰检测器(spoof)和完整的融合PNT套件(hybrid),以及如何把安全性、完好性与航位推算放在一起解读 spoof + hybrid 中级 35分钟

Notebook#

可运行的Jupyter笔记本,使用合成数据和仅保存在仓库中的公开星历根数集,位于notebooks/:

笔记本 你将学到
船舶信任度与训练 生成带有脚本化事件的合成桥楼NMEA数据流,再用船舶信任度监测器对其评分(咨询性,不是经型式认可的导航设备)
干扰地图与航线暴露 导航数据在何处显得劣化,以及它波及航线的多大部分
compliance映射与test bench导出 一组运行为哪些公开框架条目提供证据支持(绝不表示某个框架已达到要求),以及把场景的运动和事件导出为文本,供实验室GNSS模拟器使用(不写出任何信号)
量子与经典GDOP对比 同一星座几何构型下,分别搭配量子与经典传感器,按精度因子比较
天际线下的天空几何 某站点在街道或码头天际线下看到的卫星、其DOP与误差椭圆、由星历根数集得到的带日期的天空,以及对照协方差的带随机种子蒙特卡罗(MODELLED)

如何运行教程#

每个教程都以三种方式运行同一个场景;选择适合你的即可。它们调用的都是同一个引擎,因此数字完全一致(对应README的用法一节)。

命令行。CLI根据场景的kind字段分派,并在输入文件旁写出<scenario>.result.json、<scenario>.chart.svg、<scenario>.report.html和<scenario>.report.json(JSON即JavaScript Object Notation,SVG即Scalable Vector Graphics,HTML即HyperText Markup Language)。少数类型还会把可复现性表发布为<scenario>.table.csv(逗号分隔值):realtime-frame-eop、lunar-time-budget、lunar-jamming、leo-navmsg、telecom-timing,以及设置了导出站点时的moonlight-service-volume。这三个教程都不属于其中,因此你在这里不会看到该文件。

cargo run -- scenarios/orbit-sgp4-gps.toml

cargo run --从当前检出的代码构建CLI。使用已安装的二进制文件(cargo install kshana)时,同一命令为kshana scenarios/orbit-sgp4-gps.toml。没有检出代码时,大多数自带场景都打包在二进制文件中:kshana example会列出它们(并说明少数未打包的场景及原因),kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml则写出其中一个:即该二进制文件构建时所用的scenarios/orbit-sgp4-gps.toml副本。

Python。在已激活的虚拟环境中,用maturin从当前检出的代码构建一次扩展,然后调用kshana.run:

pip install maturin
maturin develop --features python
import json, kshana
result = json.loads(kshana.run(open("scenarios/orbit-sgp4-gps.toml").read()))
print(result["geometry"]["best_pdop"])

pip install kshana则改为安装已发布的wheel。它可能落后于当前检出的代码:json.loads(kshana.list_kinds())会告诉你你的构建包含哪些场景类型。

浏览器playground。零安装:打开Studio,选择一个场景,编辑参数,查看结果。不会上传任何内容;引擎以WebAssembly形式在客户端运行。

教程引用的是CLI,但每条命令在上述Python和playground中都有等价形式。每个结果都可由scenario + seed + engine version复现:运行两次,得到逐位相同的输出。

带注释的教学场景#

每个能力领域都有一个注释详尽的.toml,位于scenarios/之下:它是某个规范场景的教学副本,每个字段都有行内说明,点明所引用的参考基准(oracle),并把预期的单行摘要记录为一条# expected:注释。字段取值与仓库顶层scenarios/目录中的原场景完全相同(tests/tutorials.rs会比较解析后的TOML),因此文档中的输出始终成立。黄金哈希也不受影响:注释绝不会改变场景哈希。

领域 教学文件 类别 派生自
时钟守时(holdover) scenarios/clock.toml clock scenarios/clock-holdover.toml
轨道与几何 scenarios/orbit.toml orbit scenarios/orbit-sgp4-gps.toml
完好性(RAIM,接收机自主完好性监测) scenarios/integrity.toml integrity scenarios/integrity-raim.toml
安全性(欺骗干扰) scenarios/security.toml spoof scenarios/spoof-attack.toml
混合PNT scenarios/hybrid.toml hybrid scenarios/hybrid-pnt.toml
惯性航位推算 scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
时间传递 scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
GNSS测量域 scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

安全性的教学文件内部使用kind = "spoof":安全性性能指标(1 − P_md,即1减去漏检概率)由欺骗干扰包产生。文件名遵循能力(安全性),而kind遵循包(spoof)。该文件的头部对此有说明。

完整的场景类型目录#

引擎根据场景的kind分派。下表列出最常用的类型(上述八个教程领域及其最相近的类型)。它不是完整集合:src/api.rs::list_scenario_kinds()返回全部92种内置类型。该函数(在Python和WebAssembly(WASM)绑定中以list_kinds()提供,在命令行中以kshana kinds --json提供)是权威且始终最新的目录,而SCENARIOS.md是其生成的枚举,每种类型一节,列出必需和可选的TOML字段。tests/tutorials.rs::tutorial_scenarios_use_real_kinds强制要求教程中记载的每个类型都是真实的分派类型,因此本表不会列出不存在的类型。

类别 作用
clock 时钟守时与规格对比;可选的蒙特卡罗集合(runs > 1)。
inertial GNSS中断期间的1-DOF(一个自由度)惯性航位推算。
orbit 由星座(Walker / 两行根数 / RINEX,即与接收机无关的交换格式)得出的GNSS可用性与精度因子(DOP)。
integrity 快照 / 解分离 / ARAIM(先进RAIM),含水平与垂直保护级(HPL/VPL)及Stanford图。
lunar-integrity 月球南极ARAIM保护级过境,对照一组LunaNet中继。
timetransfer 光学与射频(RF)双向时间/频率传递的对比。
hybrid 混合PNT压轴篇:时钟 + 惯性测量单元(IMU)+ 时间传递辅助。
fusion 基于同一组混合输入的联合卡尔曼传感器融合PNT。
gnss-ins 松耦合与紧耦合GNSS/INS(惯性导航系统)误差状态扩展卡尔曼滤波器。
gnss-sim 测量域伪距仿真(Klobuchar电离层、Saastamoinen/Niell对流层)+ RAIM。
jamming 链路预算压制干扰(jamming):干信比(J/S)→ 有效载噪比(C/N₀)→ 失锁。
spoof 随机时间欺骗干扰检测器(Neyman–Pearson / χ²₁),含蒙特卡罗虚警与漏检概率(P_fa/P_md)。
sweep 针对时钟包参数的1-D权衡研究扫描。
sweep-nd 通过点分TOML键/JSON指标路径,对任意包进行的通用N维扫描。

超越教程:较新的能力#

三个教程停留在经典的时钟、轨道和安全性包上。引擎已远远超出这些范围。下表每一行都是一个自带场景,可按原样运行(cargo run -- <file>或kshana <file>);摘要是kshana 0.35.0于2026-10-10为其输出的第一行。与教程中的数字不同,这些行只是某一次运行的记录,不由tests/tutorials.rs固定:请重新运行场景以获得当前值。结果会说明各自的适用范围(大多数带有label),而验证矩阵则说明哪些能力是VALIDATED(对照外部参考基准(oracle))、哪些是MODELLED。

能力 场景 类别 摘要的第一行 阅读更多
L波段频谱与压制干扰(jamming)瀑布图 scenarios/l-band-waterfall-jamming.toml spectrum scenario spectrum | 5 bands | 3 jammers | noise floor -202.0 dBW/Hz | worst band gps-l1ca min C/N0 3.2 dB-Hz (J/S 60.2 dB) SPECTRUM.md
某一历元的太阳系 scenarios/solar-system-tour.toml solar-system Solar system at 2026-09-28T00:00:00 (JD 2461311.50080 TDB), 18 bodies, observer Earth SCENARIOS.md
绕另一天体的定位 scenarios/europa-surface-pnt.toml body-pnt Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs SCENARIOS.md
大规模星座设计 scenarios/constellation-multi-gnss-coverage.toml constellation-design constellation-design: 102 satellites (GPS, Galileo, BeiDou, GLONASS) around the Earth; availability 100.00% (PDOP <= 6 at 10 deg mask), … CONSTELLATION-DESIGN.md
活动:在同一条时间线上串联的各类型 scenarios/campaign-jam-spoof-holdover-integrity.toml campaign campaign f87a4a0e0bab | Jamming, spoofing, holdover and integrity: a chained mission | chain: 6 phases over 4570 s, … CAMPAIGNS.md
端到端的一套LEO-PNT系统 scenarios/leo-pnt-end-to-end.toml leo-pnt-chain LEO-PNT end to end, generic 1080 km constellation LEO-PNT.md
MEO与LEO融合定位 scenarios/meo-leo-fused-pvt.toml leo-pvt LEO PVT (joint) at 40.42, -3.70 over 1800 s LEO-PNT-FUSION.md
LEO信号、过境与导航电文 scenarios/leo-band-trade.toml, scenarios/leo-pass-iridium.toml, scenarios/leo-navmsg-encode-decode.toml leo-signal, leo-pass, leo-navmsg LEO pass link budget, air user at 50.00, -30.00; 1 LEO satellite(s), 900 s window(过境) LEO-SIGNAL.md、LEO-PASS.md、LEO-NAVMSG.md
带LEO层的PPP收敛;5G定位 scenarios/leo-ppp-convergence.toml, scenarios/ntn-5g-positioning.toml leo-ppp, ntn-positioning PPP convergence to 0.10 m horizontal / 0.10 m vertical, 12 runs per case, 96 GNSS satellites SCENARIOS.md
韧性:GNSS被压制,LEO带领用户度过 scenarios/leo-resilience-gnss-jammed-leo-carries.toml campaign campaign 248395b851cc | GNSS jammed, LEO-PNT carries the user, integrity maintained | chain: 3 phases over 2100 s, … RESILIENCE-CROSSWALK.md
垂直行业:铁路、海事、电信、车辆、北极 scenarios/leo-vertical-rail-maritime.toml(以及其他leo-vertical-*文件) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
对照ITU-T(国际电信联盟电信标准化部门)G.8272时钟限值的电信守时(holdover) scenarios/telecom-prtc-holdover-24h.toml telecom-timing telecom-timing: max|TE| 603.2 ns over 90000 s; eprtc-a-holdover FAIL, prtc-a FAIL; 100 ns budget exceeded after 8206 s (MODELLED) TELECOM-TIMING.md

LEO指低地球轨道,MEO指中地球轨道;PVT指位置、速度与时间;PPP指精密单点定位;5G指第五代移动通信标准;TDB指质心力学时;JD指儒略日;TE指钟差(时间误差)。

CLI在任何一次运行之上还增加三种输出:

  • 报告。每次运行都会写出<scenario>.report.html和<scenario>.report.json(见REPORTS.md)。kshana --study <suite.toml>把一套场景运行为一份.study.json和.study.html,例如kshana --study scenarios/quantum-pnt-demonstrator.suite.toml。
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all>渲染该次运行的时间序列,例如在scenarios/orbit-sgp4-gps.toml上使用--animate html会写出orbit-sgp4-gps.animation.html。没有采样时间轴的类型(如solar-system)会被拒绝并报错;见ANIMATION.md。
  • 互操作导出。 --export <czml|kml|geojson|stk|sigmf|all|list>把结果写出,供其他工具使用:CZML(Cesium Language)、KML(Keyhole Markup Language,用于Google Earth)、GeoJSON(地理JSON)、STK(Systems Tool Kit)星历,或SigMF(Signal Metadata Format)录制文件。--export list会说明哪些格式适用于某个场景;SigMF仅适用于spectrum。轨道包还可导出--export-sp3、--export-omm和--export-oem(CCSDS,即空间数据系统咨询委员会,轨道电文)。见INTEROP.md。

分级练习#

沿着这条阶梯逐级练习。每一级都比上一级更难、更站得住脚;参考解答位于exercises/。

层级 目标 你要做什么 参考解答
第1级——运行并解读 原样运行一个自带场景,并读取一个性能指标 运行scenarios/clock-holdover.toml;输出量子与经典的holdover_s。可用CLI、playground,或一行Python调用。 exercises/tier1_run.py
第2级——修改并扫描 改变一个参数,观察单调的影响 收紧时钟规格(threshold_ns)或延长中断时间,观察守时下降;也可以用kind = "sweep"/"sweep-nd"把结果列成表。 exercises/tier2_sweep.py
第3级——量化并为结论辩护 蒙特卡罗、置信区间、可复现性,以及保护级 运行一个时钟集合(runs = N),读取 [p05–p95] 区间,确认两次运行给出相同的scenario_hash,并解读一个完好性 / Stanford图结果。 exercises/tier3_montecarlo.py

参考解答使用Python扩展(先运行maturin develop --features python)。在仓库根目录运行tier2_sweep.py,会输出芯片级原子钟的守时从20 ns规格下的2610 s下降到5 ns规格下的1140 s。

想要最新数据?#

这些教程中的核心数字完全由仓库中已有的场景运行得出。不会获取任何外部数据,这正是它们可复现、并且可以安全地在持续集成(CI)中运行的原因。对于“扩展练习”,你可以拉取实时数据:

  • GPS两行根数(TLE)(刷新轨道星座):https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle,纯文本的3行根数集(名称 + 第1行 + 第2行)。辅助脚本:scripts/fetch_tles.sh。开放数据(美国太空军第18太空防御中队目录,由Celestrak再分发,Dr T. S. Kelso)。
  • SGP4(Simplified General Perturbations 4)验证参考基准(oracle)(已内置,无需重新获取):AIAA(美国航空航天学会)2006-6753“Revisiting Spacetrack Report #3”测试向量,https://celestrak.org/publications/AIAA/2006-6753/,由tests/sgp4_verification.rs使用;见docs/SGP4-VALIDATION.md。
  • 时钟稳定度关系的参考基准(oracle):NIST(美国国家标准与技术研究院)特别出版物1065(Riley,Handbook of Frequency Stability Analysis),https://tf.nist.gov/general/pdf/2220.pdf,即教程2背后的 σ_y(τ)↔相位关系。