機械翻訳であり、ネイティブスピーカーによる確認は行われていません。英語版が基準です。

低軌道(LEO)航法GitHub で編集ソース:docs/LEO-NAVMSG.md

LEO の航法メッセージ

leo-navmsg シナリオ種別は、低軌道(LEO)の測位・航法・時刻(PNT)衛星の放送エフェメリスとクロックのメッセージを構築し、メッセージ設計者が問う疑問に答えます:一つのメッセージでどれだけの期間をカバーできるか、パラメーターを一つ増やすごとに何が得られるか、パスの途中でメッセージが変わるとユーザーには何が見えるか、そしてセンチメートル精度で伝えるのに何ビット必要か。

システムに依存しません。任意の軌道、任意の搬送波、四つのエフェメリスモデルのいずれも、プリセットなしで実行できます。名前付きのプリセットは任意のデータです(プリセットを参照)。

同梱の例は kshana example <name> で出力し(一回の呼び出しにつき名前一つ)、kshana scenarios/<name>.toml で実行します:leo-navmsg-fit-interval-trade、leo-navmsg-model-comparison、leo-navmsg-midpass-update、leo-navmsg-encode-decode。この種別は leo-pnt-chain 種別のメッセージ段(LEO-PNT.md)でもあり、leo-focus-data-services キャンペーンの構成要素でもあります。このキャンペーンは四つのメッセージ構成を組み合わせ、それぞれのフレーム長(146、154、159、171 バイト)を報告します。

コード:src/leo_navmsg/ — elements.rs(レコードとユーザーアルゴリズム)、truth.rs(真値の軌道とクロック)、fit.rs(フィッター)、sisre.rs(信号空間距離誤差)、services.rs(電離圏と協定世界時(UTC))、codec.rs(バイナリ形式)、text.rs(Receiver Independent Exchange Format(RINEX)形式とカンマ区切り値(CSV)のエクスポート)、presets/(プリセットごとに一つのファイル)、mod.rs(種別)。

メッセージの内容#

部分 内容
補助情報 衛星識別子(SVID)、データ発行番号(IOD)、バンド識別子、信号健全性ステータス(Galileo の規約:0 正常、1 運用停止、2 拡張運用、3 試験中)
同期 週番号、送信時の週内時刻(TOW)、二次の時計多項式 af0 + af1·(t − toc) + af2·(t − toc)²
エフェメリス 下記四つのモデルのいずれか
その他のサービス Klobuchar 放送電離圏パラメーターセット、五つのストームフラグを伴う Galileo NeQuick-G 係数 ai0, ai1, ai2、システム時刻から UTC への変換パラメーター A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

エフェメリスモデル#

コード モデル パラメーター
kepler16 Galileo Open Service Signal-in-Space Interface Control Document(OS SIS ICD)のケプラー要素セット:√A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe 16
kepler-rac 上記に加えて、along-track、cross-track、radial(RAC)の補正多項式 a0…、c0…、r0…(τ = tk / tau_s を変数とする)を含みます。係数の単位はメートル、tau_s は適合区間の半分以上となる最小の 二のべき乗(送信されます)、次数は rac_degrees で設定します(既定値は 7、5、6) 既定で 16 + 21、これに時刻系を加えたもの
liu22 Liu、Su、Xie、Zhou、Qu による 22 パラメーターモデル(2025、Remote Sensing 17(16):2894、doi 10.3390/rs17162894):16 パラメーターに ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 を加えたもの 22
ecef-poly ATOMIC(Autonomous Time and Orbit Determination for Microsatellite Constellations)の「ゼロクロック」モデル:τ = (t − t_ref) / 64 s を変数とする、軸ごとの地球中心地球固定(ECEF)多項式(既定の次数は 6)。衛星の時計がシステム時刻に同期されているため、時計項はありません(InsideGNSS) 既定で 22

ユーザーアルゴリズム(elements::sat_state)は Galileo ICD の手順(ケプラー方程式、二次高調波補正、地球固定の昇交点)に従い、kepler-rac ではそのあとに、ケプラー軌道自身の座標系に沿った三つの多項式を適用します。radial は評価した位置に沿い、cross-track は補正後の軌道傾斜角と昇交点から求めた軌道面法線に沿い、along-track は残る一軸で三軸を完成させます。時計には ICD の相対論項 F·e·√A·sin E を加えます。ecef-poly では、多項式とその導関数から求める一般形 −2 r·v / c² を用います。

Liu らの項は、論文のユーザーアルゴリズム(2.2 節、式 1-7)に従います:A = A0 + ȧ·tk、n = √(μ/A0³) + Δn + ṅ·tk(0.30 より前のリリースでは、全球測位システム(GPS)の民生用航法の規約 ½·ṅ·tk を用いていたため、そこで書き出された ṅ は論文の値の二倍になります)、および半径に加える Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ(Φ は補正前の緯度引数)。ṅ のスケール規約は論文の式 1 から転記したものです。実軌道での論文との比較はこれに依存しません(ṅ に係数 ½ を掛けても、適合結果の数値はすべて変わりません)。したがって、送信される nDot の値の意味は、そこでは検証されていません。

二つの解釈は Kshana 独自のものであり、その旨を明記します:

  • RAC 座標系と τ = tk / tau_s の正規化。放送メッセージ向けの LEO 補正座標系を定義した公開文書はありません。
  • ゼロクロックメッセージの時計は全体としてゼロです。同期ループは、相対論項を含む見かけの時計をシステム時刻に保つものとみなします。

フィッター#

truth.rs は、固定ステップの四次ルンゲ・クッタ法で軌道を積分します。座標系は一回の回転 θ(t) = θ0 + Ω̇e·t で地球固定軸に変換され、これは放送ユーザーアルゴリズムが適用する単一の回転と同じです。重力は、二体問題(gravity_degree = 0)、帯状調和項 J2〜J6(2〜6)、または次数・位数 7〜70 までの Earth Gravitational Model 2008(EGM2008)場のいずれかで、このうち田球調和項が LEO の適合を難しくする短周期の特徴をもたらします。大気抵抗は任意です(静的な指数関数密度)。時計は、フリーランニング(バイアス、ドリフト、ドリフトレート、一秒のアラン偏差で指定した白色周波数雑音、および周期的な相対論項)か、同期済み(一次のガウス・マルコフ残差)のいずれかです。

fit.rs は、非特異要素(e·cos ω、e·sin ω、λ0 = M0 + ω)に対するレーベンバーグ・マルカート法でケプラー要素セットを適合します。LEO 軌道はほぼ円軌道であるため、ω と M0 は単独ではほとんど区別できません。適合は、J2 による昇交点移動率を伴う toe の接触状態から始めます。短い弧では分解できない変化率と高調波には、ゼロ中心の弱い事前分布で制約をかけます。1 cm の観測重みでは、これらはその零空間方向にしか作用しません。一方 liu22 の適合は、論文の 2.3 節の初期値と推定手法を採ります。すべての補正項をゼロから始め、事前分布を置かず(単純な最小二乗)、論文の 100 回の反復上限を維持します。終了条件は Kshana 独自のパラメーター収束規則で、全パラメーターのステップが形式標準偏差の 1e-3 未満になったときです。論文は、RMS の変化が 0.1 mm 未満になったときに終了します。そのうえで、RAC 多項式は along/cross/radial の残差に対する線形最小二乗で適合し、時計多項式は、真の時計からユーザーが後で加え戻す相対論項を引いたものに適合します。

既定値に反映された知見:最小二乗によるケプラー適合のあとの残差は、構成上、16 個のパラメーターでは張れない成分であり、そのため窓内でドリフトするのではなく振動します(各成分で零交差が複数回あります)。補正多項式がこれを除去できるのは、その次数がケプラー要素セットがすでに張る次数を上回る場合に限られます。along-track 7、cross-track 5、radial 6 の次数では、15 分間の残差がセンチメートル級から約一ミリメートルまで下がりますが、cross-track の次数がこれより低いと、ほとんど除去できません(cross-track の残差は窓の中心について奇関数です)。ケプラー部分を別の方法で導出するシステムでは、残差の形が異なり、必要な次数もそこから決まります。Celeste プリセット自身の補正次数(これらより低く、プリセットファイル src/celeste_iod.rs にのみ存在します)は、ここでは Kshana の最小二乗ベースの上で動作します。そのためこのエンジンでは cross-track 項の寄与が小さくなりますが、これは Kshana のフィッターについての記述であり、実在のどのシステムについての記述でもありません。toe と toc は、バイナリ形式がそう保持するように、整数秒です。

各メッセージは、その適合窓の中央に置いた期間にわたって使用します(最初のトレードオフ表では窓全体を使います)。信号空間距離誤差(SISRE)の数値が測るのは、メッセージと、それを適合した真値との間の表現誤差であり、スパンにわたる二乗平均平方根(RMS)と最大値で示します。実際の地上または搭載セグメントがこれに上乗せする軌道決定と軌道予測の誤差は、モデル化していません。

信号空間距離誤差#

sisre.rs は、Montenbruck、Steigenberger、Hauschild の全球平均 SISRE(2018、Advances in Space Research 61(12):3020–3038、doi 10.1016/j.asr.2018.03.041)を用います:

SISRE_orb = sqrt( w_R² R² + w_AC² (A² + C²) )
SISRE     = sqrt( (w_R R − c·dT)² + w_AC² (A² + C²) )

重みは、見える地球の球冠上に一様に分布するユーザーについての cos² η と ½ sin² η の平均で、η は衛星から見た視線のナディア角であり、軌道自身の半径と仰角マスクについて計算します。0° のマスクでは、この計算は論文の中軌道(GPS は 0.98 と 1/49、GLONASS は 1/45、Galileo は 1/61、BeiDou は 1/54)および静止軌道(0.99 と 1/126)の表を再現します。これが VALIDATED の検査です。LEO では、同じ平均から次の値が得られます

高度 w_R 1 / w_AC² 水平線のナディア角
320 km 0.384 2.35 72.2°
510 km 0.459 2.53 67.8°
550 km 0.472 2.57 67.0°
786 km 0.536 2.81 62.9°
1080 km 0.597 3.11 58.8°
1336 km 0.638 3.37 55.8°

したがって、衛星をナディアから大きく離れた方向に見る LEO のユーザーは、中軌道のユーザーよりも、along-track と cross-track の誤差をはるかに強く受けます。

解析#

analysis = [...] は四つのうち任意のものを選びます(既定はすべて)。

適合区間のトレードオフ#

[trade] は、スパン、適合区間、更新周期、モデルを設定します。scenarios/leo-navmsg-fit-interval-trade.toml(550 km、97.6°、次数 20 までの EGM2008 と大気抵抗、30 分のメッセージ)では、使用期間を適合区間に等しくした場合、次の結果になります:

モデル 適合区間 SISRE 軌道 RMS SISRE 軌道最大値 時計を含む SISRE RMS radial / along / cross RMS
kepler16 60 s 0.041 cm 0.179 cm 0.069 cm 0.09 / 0.01 / 0.00 cm
kepler16 120 s 0.032 cm 0.160 cm 0.079 cm 0.06 / 0.01 / 0.01 cm
kepler16 180 s 0.093 cm 0.540 cm 0.134 cm 0.18 / 0.06 / 0.00 cm
kepler16 300 s 0.310 cm 1.033 cm 0.329 cm 0.09 / 0.49 / 0.02 cm
kepler16 450 s 1.690 cm 7.542 cm 1.696 cm 0.72 / 2.65 / 0.04 cm
kepler16 600 s 2.875 cm 10.219 cm 2.866 cm 1.72 / 4.42 / 0.26 cm
kepler16 900 s 9.345 cm 34.032 cm 9.349 cm 6.46 / 14.14 / 0.91 cm
kepler-rac 60 s 0.000 cm 0.000 cm 0.057 cm 0.00 / 0.00 / 0.00 cm
kepler-rac 120 s 0.000 cm 0.000 cm 0.074 cm 0.00 / 0.00 / 0.00 cm
kepler-rac 180 s 0.000 cm 0.001 cm 0.090 cm 0.00 / 0.00 / 0.00 cm
kepler-rac 300 s 0.004 cm 0.014 cm 0.106 cm 0.00 / 0.00 / 0.01 cm
kepler-rac 450 s 0.037 cm 0.176 cm 0.127 cm 0.05 / 0.01 / 0.04 cm
kepler-rac 600 s 0.214 cm 0.643 cm 0.229 cm 0.28 / 0.09 / 0.26 cm
kepler-rac 900 s 1.015 cm 3.695 cm 1.062 cm 1.52 / 0.70 / 0.91 cm

さらに、300 s の適合で、新しいメッセージに切り替わる頻度を変えた場合:

モデル 更新周期 SISRE 軌道 RMS SISRE 軌道最大値
kepler16 30 秒 0.314 cm 0.850 cm
kepler16 60 s 0.288 cm 0.859 cm
kepler16 150 s 0.219 cm 0.830 cm
kepler16 300 s 0.310 cm 1.033 cm
kepler-rac 30 秒 0.004 cm 0.009 cm
kepler-rac 60 s 0.004 cm 0.009 cm
kepler-rac 150 s 0.004 cm 0.010 cm
kepler-rac 300 s 0.004 cm 0.014 cm

16 パラメーターのケプラー要素セットは、60 s での 0.04 cm から 900 s での 9.35 cm まで劣化します。一回転あたり二回の高調波を持つ一組のケプラー要素では、LEO の弧における高周波の重力項と大気抵抗に、数分を超えて追従することができず、その最小二乗残差は窓内で振動します。along/cross/radial 多項式(次数 7、5、6)は残った分を吸収し、900 s で 1.01 cm、600 s で 0.21 cm となります。最短の区間では、ケプラーの数値はサブミリメートルで、もはや厳密な順序になっていません(その場合の適合は、モデルではなく条件数で制限されます)。

モデル比較#

scenarios/leo-navmsg-model-comparison.toml は、同じ軌道について四つのモデルを 1、5、10 分で実行し、パラメーター数と、Kshana の符号化によるエフェメリスと時計のビット数を示します:

モデル 適合区間 パラメーター エフェメリス + 時計のビット数 SISRE 軌道 RMS 時計を含む SISRE RMS
kepler16 60 s 16 570 0.022 cm 0.049 cm
kepler16 300 s 16 570 0.230 cm 0.260 cm
kepler16 600 s 16 570 3.061 cm 3.071 cm
kepler-rac 60 s 37 1045 0.000 cm 0.044 cm
kepler-rac 300 s 37 1045 0.005 cm 0.120 cm
kepler-rac 600 s 37 1045 0.160 cm 0.208 cm
liu22 60 s 22 730 0.014 cm 0.046 cm
liu22 300 s 22 730 0.074 cm 0.142 cm
liu22 600 s 22 730 0.258 cm 0.290 cm
ecef-poly(ゼロクロック) 60 s 22 750 0.000 cm 28.784 cm
ecef-poly(ゼロクロック) 300 s 22 750 0.005 cm 28.784 cm
ecef-poly(ゼロクロック) 600 s 22 750 0.561 cm 28.774 cm

ゼロクロックの行は、0.24 m の残差で同期した時計(ATOMIC の数値)に対して評価し、ほかの行は、それぞれが適合したフリーランニングの時計に対して評価しています。

Liu ら 2025、高度ごとの SISRE(MODELLED)。同じシナリオで、Kshana の 22 パラメーターモデルを、論文の五つの高度について、各衛星の軌道傾斜角で、20 分の弧にわたって適合します:

衛星 高度 軌道傾斜角 Liu ら 2025 Kshana(軌道のみの RMS) 比
GRACE-A 320 km 89.00° 8.88 cm 4.25 cm 0.48
GRACE-C 475 km 89.00° 6.21 cm 2.87 cm 0.46
Sentinel-2A 786 km 98.57° 2.87 cm 2.20 cm 0.77
HY-2A 966 km 99.34° 2.11 cm 1.25 cm 0.59
Sentinel-6A 1336 km 66.04° 0.75 cm 0.51 cm 0.67

これは検証ではありません。論文は、名前を挙げた衛星の実際の精密科学軌道(完全な重力、大気抵抗、非重力の履歴を含む)を適合しました。Kshana は自身が積分した軌道を適合し、追加した六つのパラメーターを前述のとおりに評価し、独自の SISRE 重みを用います。この比較が示すのは傾向とオーダーです。論文が適合したのと同じ実軌道での比較は tests/leo_navmsg_fit_real_orbit_oracle.rs です(0.30 以降、22 パラメーター適合は、論文の日付と、ホールドアウトした八日間のいずれでも、事前登録した係数 1.5 の範囲内で一致します)。

パス途中の更新#

[midpass] はユーザーを配置し(既定は 45° N、10° E)、search_s の範囲内でマスクを上回る最高のパスを見つけ、update_period_s ごとにメッセージを割り当てます。パス内の各切り替えで、位置のジャンプ、時計のジャンプ、ユーザーの疑似距離のジャンプ(新しいメッセージ引く古いメッセージ)、可視のユーザーが見うる最大のジャンプ(ナディア円錐にわたる閉形式)、前後の距離誤差を報告し、threshold_m に対する PASS または FAIL を示します。scenarios/leo-navmsg-midpass-update.toml(300 s の適合を 150 s ごとに更新):

一日のうちの最高のパスは 43.7° に達し、455 s 続きます。その切り替えは次のとおりです:

切り替え 仰角 位置のジャンプ 時計のジャンプ ユーザー距離のジャンプ 最悪ジオメトリでのジャンプ
IOD 270 → 271 12.7° 0.07 mm 0.19 mm -0.17 mm 0.27 mm
IOD 271 → 272 37.4° 0.14 mm 0.14 mm -0.24 mm 0.27 mm
IOD 272 → 273 28.2° 0.27 mm -0.22 mm 0.35 mm 0.48 mm

ユーザー距離の最大ジャンプは 0.35 mm で、しきい値 5 cm に対して PASS です。

エンコードとデコード#

scenarios/leo-navmsg-encode-decode.toml は、三つのメッセージのうち最初のものをエンコードしてデコードし、CRC を確認し、破損させたコピーを拒否し、量子化の誤差配分を表示し、RINEX 形式のブロックと CSV 表を書き出して読み戻します:

  • フレーム:171 バイト(ペイロード 1310 ビットのうち 1045 ビットがエフェメリスと時計)、24 ビットの巡回冗長検査(CRC-24Q)0x19105F;
  • 単一フィールドによる最大の半ステップ影響:af0、0.545 mm;
  • 量子化後のメッセージ全体:正確なメッセージに対して位置は 1.126 mm 以内、時計は 0.185 mm 以内;SISRE は正確なもので 0.113 cm、デコード後で 0.129 cm;
  • 一ビットを反転させたフレームは拒否される:true;
  • RINEX 形式の往復は 5.0e-06 m 以内、CSV の往復は 0.0e+00 m 以内。

プラットフォーム非依存性#

フレームは送信される整数であるため、シナリオをどこで、どのように実行しても同じ整数でなければなりません。つまり、あらゆるオペレーティングシステム上のネイティブバイナリ、デバッグビルドとリリースビルド、そしてブラウザー上の WebAssembly(WASM)ビルドのいずれでも同じです。これを妨げる要因が三つありました。ホストの数学ライブラリの正弦、余弦、逆正接、指数関数は、正しく丸められることが求められておらず、ホットごとに最下位桁が異なります。macOS の最適化ビルドは、一つの引数の正弦と余弦をシステムの結合ルーチンから取得しますが、これは単独の正弦の値を常に返すとは限らないため、デバッグビルドとリリースビルドでも差が生じました。そして、通常の正規乱数サンプラーは、まれな分岐でホストの指数関数と対数関数を呼び出します。適合は、これほど小さな差を、異なる量子化フィールドに変えてしまいます。そこで、この種類の全体(真の軌道と時計、適合、ユーザーアルゴリズム、信号空間距離誤差(SISRE)、コーデック)は、こうした関数をすべて、src/portable_math.rs を通じて純 Rust の libm クレートで計算し、整数べきは明示的な積として、正規偏差は生成器の生の出力に対する極座標法で計算します。leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform は、後述のエンコード・デコードシナリオの 171 バイトのフレームと、エフェメリスモデルごとに一つの検査値を固定します。デバッグビルド、リリースビルド、WASM ビルドは、同梱の五つの leo-navmsg シナリオすべてについて、バイト単位で同一の結果ドキュメントを生成します。

バイナリ形式#

これは Kshana 独自の文書化された符号化です。LEO 航法メッセージについて公表されている記述が挙げる構成要素を載せており、Galileo ICD のフィールド構成に倣っています。Celeste や他のいかなるシステムのビット配置でもありません。それらは公開されていません。

フレーム:プリアンブル 0xA7(8 ビット)、バージョン 1(4)、モデル(4:1 kepler16、2 kepler-rac、3 liu22、4 ecef-poly)、ペイロード長(バイト単位、12)、バイト境界までゼロ詰めしたペイロード、先行するすべてのバイトに対する CRC-24Q(24 ビットの巡回冗長検査、24 ビット)。CRC-24Q は、Radio Technical Commission for Maritime Services の規格 RTCM 10403 と Galileo ICD の検査です(多項式 0x1864CFB、初期値 0)。このコードは、123456789 に対するカタログの検査値 0xCDE703 と、RTCM 10403 のメッセージタイプ 1005 の例のフレームの検査バイトを再現します(VALIDATED)。

Galileo ICD のステップは中軌道向けに選ばれており、センチメートル級の LEO メッセージには粗すぎます:Crs は 2⁻⁵ m(3.1 cm)刻み、Cuc は 2⁻²⁹ rad(LEO 半径で 1.3 cm)、角度は 2⁻³¹ 半周(1.0 cm)、af0 は 2⁻³⁴ s(1.7 cm)です。Kshana は ICD の単位と半周の規約を維持しつつ、すべてのフィールドの半ステップ誤差が 15 分の窓にわたって位置または距離で 1 mm を下回るようステップを細かくし、LEO の適合に必要な範囲を保つためにフィールドを広げています:

ブロック フィールド ビット ステップ 単位
補助情報と同期 SVID 8 1 -
補助情報と同期 IOD 10 1 -
補助情報と同期 Band 4 1 -
補助情報と同期 Health 2 1 -
補助情報と同期 WeekNumber 13 1 週
補助情報と同期 ToW 20 1 s
補助情報と同期 Flags 4 1 -
時計(フラグビット 0) toc 20 1 s
時計(フラグビット 0) af0 34 2^-38 s
時計(フラグビット 0) af1 28 2^-50 s/s
時計(フラグビット 0) af2 20 2^-62 s/s^2
ケプラー要素(モデル 1〜3) toe 20 1 s
ケプラー要素(モデル 1〜3) M0 36 2^-35 半周
ケプラー要素(モデル 1〜3) e 32 2^-33 -
ケプラー要素(モデル 1〜3) sqrtA 36 2^-23 m^0.5
ケプラー要素(モデル 1〜3) Omega0 36 2^-35 半周
ケプラー要素(モデル 1〜3) i0 36 2^-35 半周
ケプラー要素(モデル 1〜3) omega 36 2^-35 半周
ケプラー要素(モデル 1〜3) deltaN 29 2^-43 semicircle/s
ケプラー要素(モデル 1〜3) OmegaDot 29 2^-43 semicircle/s
ケプラー要素(モデル 1〜3) iDot 22 2^-43 semicircle/s
ケプラー要素(モデル 1〜3) Cuc 26 2^-34 rad
ケプラー要素(モデル 1〜3) Cus 26 2^-34 rad
ケプラー要素(モデル 1〜3) Crc 26 2^-10 m
ケプラー要素(モデル 1〜3) Crs 26 2^-10 m
ケプラー要素(モデル 1〜3) Cic 26 2^-34 rad
ケプラー要素(モデル 1〜3) Cis 26 2^-34 rad
along/cross/radial 補正(モデル 2) degA 3 1 -
along/cross/radial 補正(モデル 2) degC 3 1 -
along/cross/radial 補正(モデル 2) degR 3 1 -
along/cross/radial 補正(モデル 2) racTauExp 4 1 log2(s)
along/cross/radial 補正(モデル 2) a_k, c_k, r_k 22 2^-14 m
Liu ら 2025 の追加項(モデル 3) aDot 26 2^-20 m/s
Liu ら 2025 の追加項(モデル 3) nDot 30 2^-58 半周/s^2
Liu ら 2025 の追加項(モデル 3) Crs3 26 2^-10 m
Liu ら 2025 の追加項(モデル 3) Crc3 26 2^-10 m
Liu ら 2025 の追加項(モデル 3) Crs1 26 2^-10 m
Liu ら 2025 の追加項(モデル 3) Crc1 26 2^-10 m
ECEF 多項式(モデル 4) tref 20 1 s
ECEF 多項式(モデル 4) degP 4 1 -
ECEF 多項式(モデル 4) x0, y0, z0 38 2^-11 m
ECEF 多項式(モデル 4) x_k, y_k, z_k (k >= 1) 34 2^-12 m
Klobuchar(フラグビット 1) alpha0 8 2^-30 s
Klobuchar(フラグビット 1) alpha1 8 2^-27 s/semicircle
Klobuchar(フラグビット 1) alpha2 8 2^-24 s/半周^2
Klobuchar(フラグビット 1) alpha3 8 2^-24 s/半周^3
Klobuchar(フラグビット 1) beta0 8 2^11 s
Klobuchar(フラグビット 1) beta1 8 2^14 s/semicircle
Klobuchar(フラグビット 1) beta2 8 2^16 s/半周^2
Klobuchar(フラグビット 1) beta3 8 2^16 s/半周^3
NeQuick-G(フラグビット 2) ai0 11 2^-2 sfu
NeQuick-G(フラグビット 2) ai1 11 2^-8 sfu/deg
NeQuick-G(フラグビット 2) ai2 14 2^-15 sfu/deg^2
NeQuick-G(フラグビット 2) SF1-5 5 1 -
UTC(フラグビット 3) A0 32 2^-30 s
UTC(フラグビット 3) A1 24 2^-50 s/s
UTC(フラグビット 3) dtLS 8 1 s
UTC(フラグビット 3) t0t 8 3600 s
UTC(フラグビット 3) WNot 8 1 週
UTC(フラグビット 3) WNLSF 8 1 週
UTC(フラグビット 3) DN 3 1 日
UTC(フラグビット 3) dtLSF 8 1 s

フィールドの範囲外の値は、折り返されずに拒否されます。範囲は、300〜2000 km、軌道傾斜角 0°〜140°、適合区間 20 分までの適合をエンコードして確認しました:deltaN と OmegaDot が広いのは、赤道に近い軌道では昇交点が定まりにくく、適合が緯度引数の J2 ドリフトをこの両者の間で分け合うためです。aDot と nDot が広いのは、20 分にわたる 22 パラメーター適合が、軌道長半径の短周期振動の一部を吸収するためです。0.30 以降、22 パラメーター適合は事前分布のない論文どおりの単純な最小二乗であり、赤道上の 800 km の適合では nDot が約 6.3e-10 半周/s^2 必要となるため、そのスケールは 2^-60 から 2^-58 に変わりました。kepler-rac の 7 次の along-track 補正は、15 分までは 22 ビットの係数範囲に収まります。それより長い適合は範囲を超えることがあり、その場合は拒否されます。quantisation_budget は、エフェメリスと時計のすべてのフィールドについて、半ステップの変化が使用期間にわたって引き起こす位置と距離の最大変化、および量子化後のメッセージ全体の変化を報告します。

テキスト出力#

RINEX 4.02 は LEO の航法レコードを定義していません(システム文字は G、R、E、J、C、I、S です。International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4.02)。text.rs が書き出すブロックは RINEX 4 の形を借りており、> EPH のレコードヘッダー、三つの時計項を持つ衛星・エポック行、D19.12 フィールド四つ分の放送軌道行を備えますが、これは文書化された Kshana の拡張です。システム文字は L、レコードタイプは KP16、KRAC、LU22、APOL で、その旨を述べる三つのヘッダーコメントが付きます。RINEX 4 形式の航法レコードにおける LEO 軌道の先行事例:arXiv 2401.17767。

> EPH L04 KRAC
L04 yyyy mm dd hh mm ss  af0 af1 af2
     IOD      Crs      deltaN   M0
     Cuc      e        Cus      sqrtA
     toe      Cic      Omega0   Cis
     i0       Crc      omega    OmegaDot
     IDOT     Band     Week     Health
     txTOW    clock    degA     degC
     degR     tau_s    a0       a1         then the rest of a_k, c_k and r_k, four per line

CSV 表は、kepler16 と kepler-rac のメッセージを 一行に一件ずつ載せます。既定の列は Galileo ICD の名称(SVID, IOD, Band, WeekNumber, ToW, Health, toc, af0, af1, af2, toe, M0, sqrtA, e, deltaN, Omega0, OmegaDot, iDot, i0, omega, Crc, Crs, Cic, Cis, Cuc, Cus, a0…, c0…, r0…, racTau)を使い、csv_schema はその代わりにプリセットの表記を選びます。どちらの形式も読み戻せます。

電離圏と UTC#

  • Klobuchar:エンジンの L1 モデル(gnss_sim::klobuchar_delay_m、RTKLIB と照合済み)を、一次の (f_L1 / f)² の法則で搬送波に換算します。
  • NeQuick-G:係数はメッセージで運ばれ、effective_ionisation_level は修正ディップ緯度 μ に対する Az = ai0 + ai1·μ + ai2·μ² を返します。アルゴリズムの規則に従い(係数がすべてゼロの場合は 63.7 太陽フラックス単位、sfu になり、結果は [0, 400] sfu に制限されます)。Az を遅延に変える NeQuick の電子密度モデルとその斜め方向の積分は、実装していません。
  • 数百キロメートルの高度にある衛星は、電離圏の内側を飛行します。どちらの放送モデルも、衛星より上にある電子数を考慮しておらず、そのための補正も適用していません。
  • UTC:system_to_utc は、Galileo ICD §5.1.7 の三つの場合(うるう秒イベントの前、六時間以内、後)を適用します。挿入された秒は 86400 と読みます。

プリセット#

プリセットはデータであり、src/leo_navmsg/presets/ の下に出典とともに一つずつファイルとして置かれています。エンジンと、Celeste のもの以外の同梱シナリオはすべて、プリセットなしで動作します。

キー 出典 軌道 搬送波 メッセージモデル
xona-pulsar PUBLIC、arXiv 2509.19551 1080 km、53° X1 1593.3225 MHz 非公開
xona-pulsar-0 PUBLIC、arXiv 2509.19551 520 km、97° X1 非公開
iridium PUBLIC、RNTF レポート、コンステレーションの説明 781 km、86.4° 1621 MHz(1616–1626 MHz 帯) 放送なし
starlink PUBLIC、NAVIGATION 72(1)、コンステレーションの説明 550 km、53° Ku バンド、帯域中央の値(代表的) なし(機会信号)
centispace PUBLIC、Sensors 2023、Satellite Navigation 2026 700 km、55° B1 付近(出典ではマスクされており、代用として L1) 非公開
cband-generic REPRESENTATIVE 600 km、97.8° 5020 MHz(RNSS C バンドの中心) 非公開
atomic PUBLIC、InsideGNSS 500 km(代表的) L1(代表的) ecef-poly、次数 6、60 s、30 s ごとに更新、ゼロクロック、0.24 m の同期残差
celeste-iod WORKSHOPとPUBLIC 510 km、97.4° 1191.795 MHz kepler-rac、次数とレコード間隔はプリセットファイルに記載

RNSS は無線航行衛星業務(radionavigation-satellite service)、RNTF は Resilient Navigation and Timing Foundation です。

Celeste IOD。欧州宇宙機関(ESA)の Celeste 軌道上実証(IOD)プリセットは、ESA Navigation Innovation and Support Programme(NAVISP)の LEO-PNT ワークショップ(2026)で発表された資料を使用する唯一のものです。使用するのは、メッセージ構造(Galileo のケプラー要素セットに along/cross/radial の補正多項式、時計多項式、SVID、健全性、IOD、電離圏および UTC パラメーターを加えたもの)、レコード間隔、CSV の列名です。軌道(510 km、準極軌道の太陽同期)と搬送波は、ファイル内に引用した公開情報に基づきます。Celeste のビット配置は公開されておらず、再現していません。以後の Celeste のフェーズや欧州連合(EU)の LEO-PNT システムでは異なる可能性があります。ワークショップ由来の値はすべて、src/celeste_iod.rs の navmsg モジュールにあり、scenarios/leo-navmsg-celeste-iod.toml が使用します。プリセットを外す方法:エンジンのワークショップ由来の数値はすべて一つのファイル src/celeste_iod.rs にあり、build.rs はそれが存在する場合にのみコンパイルに含め、リポジトリ専用のシナリオ scenarios/*celeste-iod*.toml にもあります。このファイルとこれらのシナリオを削除すると、ソースを編集せずにプリセットを外せます。ほかのすべてのテスト、オラクル、シナリオは、それなしで動作します。README のシナリオファイル数には、外したファイルも引き続き含まれます。

検証#

行 ラベル オラクル
SISRE の重み VALIDATED Montenbruck ら 2018 の表(GPS、GLONASS、Galileo、BeiDou、静止軌道)
Galileo ICD ユーザーアルゴリズム VALIDATED 実際の Galileo 放送エフェメリス四つに対する RTKLIB の eph2pos、軸ごとに 1 mm(tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED カタログの検査値 0xCDE703、RTCM 10403 1005 の例のフレーム
フィッターと SISRE のトレードオフ MODELLED 二体問題の真値を 1 mm で復元、補正した J2–J6 の適合は 1 mm、区間とともに単調に増加
パス途中の連続性 MODELLED ジャンプの恒等式、サンプリングに対する閉形式の円錐の上限
バイナリ形式と誤差配分 MODELLED 往復変換、すべてのフィールドの半ステップが 1 mm 未満
RINEX 形式と CSV MODELLED 往復変換
Liu ら 2025 の 22 パラメーターモデルと適合 VALIDATED 四機の衛星についての TU Graz ITSG 精密軌道を、論文の表 4、5、6、8 と比較:along、cross、radial、SISRE の比は、論文の日付で 0.755 から 1.138、ホールドアウトした八日間で 0.683 から 1.186 で、1.5 倍以内(tests/leo_navmsg_fit_real_orbit_oracle.rs)
ATOMIC のゼロクロック多項式と五高度の表 MODELLED InsideGNSS による ATOMIC の事実。公表された Liu の表を Kshana の積分軌道による適合と並べて示すもので、固定はしていません
電離圏と UTC MODELLED ICD の閉形式、RTKLIB で確認した Klobuchar モデル

制限事項#

  • SISRE は表現誤差のみです。軌道決定や軌道予測の誤差は含みません。
  • 真値は Kshana の積分によるもの(第三体、太陽放射圧、潮汐は含まない)であり、実際の衛星の精密軌道ではありません。
  • バイナリ形式と RINEX 形式のブロックは Kshana 独自のものです。
  • NeQuick-G は搬送されるだけで、遅延へと積分されません。電離圏の内側にある衛星に対する補正はありません。
  • Liu らの比較は、軌道、パラメーターの解釈、重みが異なります。