Машинный перевод, не проверенный носителем языка. Эталоном служит английская версия.

Навигация на низкой околоземной орбите (LEO)Править на GitHubИсточник: docs/LEO-NAVMSG.md

Навигационное сообщение LEO

Вид сценария leo-navmsg строит передаваемое сообщение с эфемеридами и часами навигационного спутника (позиционирование, навигация и время, PNT) на низкой околоземной орбите (LEO) и отвечает на вопросы разработчика сообщения: на какой срок хватает одного сообщения, что даёт каждый дополнительный параметр, что видит пользователь, когда сообщение меняется посреди пролёта, и сколько бит нужно, чтобы передать его с точностью до сантиметра.

Он не привязан к конкретной системе. Любая орбита, любая несущая и любая из четырёх моделей эфемерид работают вообще без предустановки; именованные предустановки — необязательные данные (см. Presets).

Выведите встроенный пример командой 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 (экспорт в стиле RINEX (Receiver Independent Exchange Format) и в формате значений, разделённых запятыми (CSV)), presets/ (по одному файлу на предустановку), mod.rs (сам вид).

Что содержит сообщение#

Часть Содержимое
Вспомогательные данные идентификатор космического аппарата (SVID), номер выпуска данных (IOD), идентификатор диапазона, состояние исправности сигнала (соглашение Galileo: 0 — исправен, 1 — не обслуживается, 2 — расширенная эксплуатация, 3 — на испытаниях)
Синхронизация номер недели, время недели (TOW) передачи и полином часов второго порядка af0 + af1·(t − toc) + af2·(t − toc)²
Эфемериды одна из четырёх моделей ниже
Другие службы широковещательный ионосферный набор Klobuchar, коэффициенты NeQuick-G системы Galileo ai0, ai1, ai2 с пятью флагами бурь и параметры перехода от системного времени к UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

Модели эфемерид#

Код Модель Параметры
kepler16 кеплеров набор из документа управления интерфейсом сигнала в пространстве Galileo Open Service (OS SIS ICD): √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe 16
kepler-rac то же плюс полиномы поправок вдоль трассы, поперёк трассы и радиальных (RAC) a0…, c0…, r0… по τ = tk / tau_s, коэффициенты в метрах, tau_s — степень двойки не ниже половины интервала подгонки (передаётся), степени задаются rac_degrees (по умолчанию 7, 5, 6) по умолчанию 16 + 21, плюс шкала времени
liu22 22-параметрическая модель Liu, Su, Xie, Zhou и Qu (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): полином в земной системе координат ECEF по каждой оси от τ = (t − t_ref) / 64 s (степень по умолчанию 6), без членов часов, так как часы спутника привязаны к системному времени (InsideGNSS) по умолчанию 22

Алгоритм пользователя (elements::sat_state) — это последовательность из ICD Galileo (уравнение Кеплера, поправки второй гармоники, земной узел), после которой для kepler-rac применяются три полинома вдоль собственной системы координат кеплеровой орбиты: радиальный — вдоль вычисленного положения, поперёк трассы — вдоль нормали к орбите по исправленным наклонению и узлу, вдоль трассы — дополняющий тройку. Часы добавляют релятивистский член из 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 использовали соглашение гражданской навигации Global Positioning System (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) или поле модели Earth Gravitational Model 2008 (EGM2008) до степени и порядка от 7 до 70, тессеральные члены которой несут короткопериодическую сигнатуру, из-за которой подгонка на LEO затруднена. Сопротивление необязательно (статическая экспоненциальная плотность). Часы либо свободные (смещение, дрейф, скорость дрейфа и белый частотный шум с заданной девиацией Аллана за одну секунду, плюс периодический релятивистский член), либо привязанные (остаток Гаусса — Маркова первого порядка).

fit.rs подгоняет кеплеров набор методом Левенберга — Марквардта по неособым элементам (e·cos ω, e·sin ω, λ0 = M0 + ω): орбита LEO почти круговая, поэтому ω и M0 по отдельности почти неразличимы. Подгонка начинается с оскулирующего состояния в toe со скоростью узла от J2. Слабые априорные значения с нулевым центром ограничивают скорости и гармоники, которые короткая дуга разрешить не может; при весе наблюдений 1 cm они действуют только в этих нулевых направлениях. Подгонка liu22 вместо этого берёт начало и оценщик из раздела 2,3 статьи: она начинается с нулевых членов поправок, без априорных значений (обычный метод наименьших квадратов) и сохраняет предел статьи в 100 итераций. Она останавливается по собственному правилу сходимости параметров Kshana, когда каждый шаг параметра меньше 1e-3 его формального стандартного отклонения; статья же останавливается, когда RMS меняется менее чем на 0,1 mm. Затем полиномы RAC подгоняются к остаткам вдоль трассы, поперёк трассы и радиальным линейным методом наименьших квадратов, а полином часов — к истинным часам за вычетом релятивистского члена, который пользователь добавит обратно.

Вывод, закодированный в значениях по умолчанию: после подгонки кеплерова набора методом наименьших квадратов остаток по построению — это то, что 16 параметров охватить не могут, поэтому он колеблется по всему окну (несколько пересечений нуля в каждой компоненте), а не дрейфует. Полином поправок убирает его только тогда, когда его степень превышает то, что уже охватывает кеплеров набор: вдоль трассы 7, поперёк трассы 5 и радиальная 6 сводят 15-минутный остаток с сантиметров примерно к миллиметру, тогда как меньшие степени поперёк трассы почти ничего не убирают (остаток поперёк трассы нечётен относительно центра окна). Система, которая выводит кеплерову часть иным способом, оставляет остаток другой формы, и нужные ей степени определяются им. Собственные степени поправок предустановки Celeste (они ниже указанных; они есть только в файле предустановки, src/celeste_iod.rs) выполняются здесь на основе наименьших квадратов Kshana, поэтому её члены поперёк трассы в этом движке вносят мало: это утверждение о подгонке Kshana, а не о какой-либо реальной системе. toe и toc — целые секунды, так как их так передаёт двоичный формат.

Каждое сообщение используется в течение периода, центрированного в окне его подгонки (первая таблица сопоставления использует всё окно). Величины ошибки дальности сигнала в космосе (SISRE) измеряют ошибку представления сообщения относительно истины, к которой оно подогнано, как среднеквадратичное значение (RMS) и максимум на интервале. Ошибка определения и прогнозирования орбиты, которую реальный наземный или бортовой сегмент добавляет сверху, не моделируется.

Ошибка дальности сигнала в космосе#

sisre.rs использует глобальное среднее SISRE по Montenbruck, Steigenberger и Hauschild (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, ГЛОНАСС 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, который видит спутник далеко от надира, ощущает ошибки вдоль трассы и поперёк трассы гораздо сильнее, чем пользователь на средней орбите.

Анализы#

analysis = [...] выбирает любой из четырёх (по умолчанию все).

Сопоставление интервалов подгонки#

[trade] задаёт интервал, интервалы подгонки, периоды обновления и модели. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 до степени 20 и сопротивление, 30 минут сообщений) при периоде использования, равном интервалу подгонки, даёт:

Модель Интервал подгонки SISRE по орбите, RMS SISRE по орбите, максимум SISRE с часами, RMS радиальная / вдоль трассы / поперёк трассы, 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-параметрический кеплеров набор ухудшается с 0,04 cm при 60 s до 9,35 cm при 900 s: один кеплеров набор с двукратными за оборот гармониками не может следовать более высокочастотным гравитационным членам и сопротивлению дуги LEO дольше нескольких минут, а его остаток по методу наименьших квадратов колеблется по всему окну. Полиномы вдоль трассы, поперёк трассы и радиальный (степени 7, 5, 6) поглощают оставшееся: 1,01 cm при 900 s, 0,21 cm при 600 s. На самых коротких интервалах кеплеровы величины составляют доли миллиметра и уже не строго упорядочены (подгонка тогда ограничена обусловленностью, а не моделью).

Сравнение моделей#

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). Тот же сценарий подгоняет 22-параметрическую модель Kshana на 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° с. ш., 10° в. д.), находит самый высокий пролёт над маской в пределах search_s и планирует сообщения каждые update_period_s. При каждом переключении внутри пролёта он сообщает скачок положения, скачок часов, скачок псевдодальности пользователя (новое сообщение минус старое), наибольший скачок, который мог бы увидеть любой видимый пользователь (замкнутая форма по конусу надира), ошибку дальности до и после, а также PASS или FAIL относительно threshold_m. 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), кодек) вычисляет каждую такую функцию чистым Rust-крейтом libm через src/portable_math.rs, целые степени — явными произведениями, а нормальные отклонения — полярным методом по сырому выводу генератора. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform фиксирует 171-байтовый кадр сценария кодирования и декодирования, приведённого ниже, и одно контрольное значение на каждую модель эфемерид; отладочная сборка, релизная сборка и сборка WASM дают побайтово одинаковые документы результата для всех пяти встроенных сценариев leo-navmsg.

Двоичный формат#

Это собственное документированное кодирование Kshana. Оно несёт компоненты, которые называют опубликованные описания навигационных сообщений LEO, и построено по образцу набора полей ICD Galileo. Оно не является раскладкой битов 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 и ICD Galileo (полином 0x1864CFB, начальное значение 0); код воспроизводит каталожное контрольное значение 0xCDE703 для 123456789 и контрольные байты примера кадра RTCM 10403 типа сообщения 1005 (VALIDATED).

Шаги ICD Galileo выбраны для средней околоземной орбиты и слишком грубы для сообщения LEO с сантиметровой точностью: Crs с шагом 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ рад (1,3 cm при радиусе LEO), углы 2⁻³¹ полуокружности (1,0 cm) и af0 2⁻³⁴ s (1,7 cm). Kshana сохраняет единицы ICD и соглашение о полуокружности, уточняет шаги так, чтобы ошибка половины шага каждого поля оставалась ниже 1 mm положения или дальности на 15-минутном окне, и расширяет поля, чтобы сохранить диапазоны, нужные подгонке 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 рад
кеплеровы (модели 1-3) Cus 26 2^-34 рад
кеплеровы (модели 1-3) Crc 26 2^-10 m
кеплеровы (модели 1-3) Crs 26 2^-10 m
кеплеровы (модели 1-3) Cic 26 2^-34 рад
кеплеровы (модели 1-3) Cis 26 2^-34 рад
поправки вдоль трассы, поперёк трассы и радиальные (модель 2) degA 3 1 -
поправки вдоль трассы, поперёк трассы и радиальные (модель 2) degC 3 1 -
поправки вдоль трассы, поперёк трассы и радиальные (модель 2) degR 3 1 -
поправки вдоль трассы, поперёк трассы и радиальные (модель 2) racTauExp 4 1 log2(s)
поправки вдоль трассы, поперёк трассы и радиальные (модель 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 — потому что 22-параметрическая подгонка на 20 минут поглощает часть короткопериодических колебаний большой полуоси. Начиная с 0,30 22-параметрическая подгонка — это обычный метод наименьших квадратов статьи без априорных значений, и экваториальная подгонка на 800 km тогда требует nDot около 6.3e-10 полуокружности/s^2, поэтому её масштаб изменился с 2^-60 на 2^-58. Поправки вдоль трассы степени 7 из kepler-rac укладываются в диапазон 22-битных коэффициентов до 15 минут; более длинная подгонка может его превысить и тогда отвергается. quantisation_budget сообщает для каждого поля эфемерид и часов наибольшее изменение положения и дальности от изменения на половину шага за период использования, а также изменение всего сообщения после квантования.

Текстовый экспорт#

RINEX 4,02 не определяет навигационных записей LEO (его системные буквы: G, R, E, J, C, I и S; Международная служба GNSS (IGS), RINEX 4,02). Блок, который записывает text.rs, заимствует форму RINEX 4 — заголовок записи > EPH, строку спутника и эпохи с тремя членами часов, строки широковещательной орбиты из четырёх полей D19.12 — и является документированным расширением Kshana: системная буква L, типы записей KP16, KRAC, LU22, APOL и три комментария заголовка, которые об этом говорят. Предшествующая работа по орбитам LEO в навигационных записях в стиле RINEX 4: 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 по одному в строке. Столбцы по умолчанию используют названия из ICD Galileo (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). Модель электронной плотности NeQuick и её интегрирование по наклонной трассе, превращающие Az в задержку, не реализованы.
  • Спутник на высоте в несколько сотен километров летает внутри ионосферы. Ни одна из широковещательных моделей не учитывает электронное содержание выше спутника, и поправка на него не применяется.
  • UTC: system_to_utc применяет три случая из ICD Galileo, § 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 (центр диапазона C для RNSS) не опубликовано
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 — радионавигационная спутниковая служба; RNTF — Resilient Navigation and Timing Foundation.

Celeste IOD. Предустановка Celeste in-orbit demonstration (IOD) Европейского космического агентства (ESA) — единственная, использующая материалы, представленные на семинаре по LEO-PNT программы ESA Navigation Innovation and Support Programme (NAVISP) в 2026 году: структуру сообщения (кеплеров набор Galileo плюс полиномы поправок вдоль трассы, поперёк трассы и радиальных, полином часов, SVID, исправность, IOD, ионосферные параметры и параметры UTC), интервал записей и имена столбцов CSV. Орбита (510 km, околополярная солнечно-синхронная) и несущая взяты из открытых источников, указанных в файле. Раскладка битов Celeste не является открытой и не воспроизводится; поздние фазы Celeste и система LEO-PNT Европейского союза (ЕС) могут отличаться. Каждое значение, полученное с семинара, находится в модуле navmsg файла src/celeste_iod.rs, используемом scenarios/leo-navmsg-celeste-iod.toml. Как предустановка удерживается: каждое число движка, полученное с семинара, находится в одном файле, src/celeste_iod.rs, который build.rs включает в сборку только при его наличии, и в сценариях только для репозитория scenarios/*celeste-iod*.toml. Удаление этого файла и этих сценариев удерживает предустановку без правки исходного кода; любые другие тесты, оракулы и сценарии работают без неё, а число файлов сценариев в README по-прежнему включает удержанные файлы.

Верификация#

Строка Метка Оракул
Веса SISRE VALIDATED таблица Montenbruck и др., 2018 (GPS, ГЛОНАСС, Galileo, BeiDou, геостационарная орбита)
Алгоритм пользователя из ICD Galileo VALIDATED RTKLIB eph2pos на четырёх реальных широковещательных эфемеридах Galileo, 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 круговые преобразования
22-параметрическая модель Liu и др., 2025 и подгонка VALIDATED прецизионные орбиты TU Graz ITSG четырёх спутников против таблиц 4, 5, 6 и 8 статьи: отношения для вдоль трассы, поперёк трассы, радиального и SISRE от 0,755 до 1,138 на днях из статьи и от 0,683 до 1,186 на восьми отложенных днях, в пределах 1.5x (tests/leo_navmsg_fit_real_orbit_oracle.rs)
полином нулевых часов ATOMIC и таблица для пяти высот MODELLED факты ATOMIC из InsideGNSS; опубликованная таблица Liu приведена рядом с подгонкой Kshana по интегрированной орбите, без закрепления проверкой
Ионосфера и UTC MODELLED замкнутые формы ICD; модель Klobuchar, проверенная по RTKLIB

Ограничения#

  • SISRE — это только ошибка представления: без ошибки определения или прогнозирования орбиты.
  • Истина — это интегрирование Kshana (без третьего тела, давления солнечного излучения и приливов), а не прецизионная орбита реального спутника.
  • Двоичный формат и блок в стиле RINEX — собственные для Kshana.
  • NeQuick-G передаётся, но не интегрируется в задержку; поправки для спутника внутри ионосферы нет.
  • Сравнение с Liu и др. отличается орбитами, прочтением параметров и весами.