Машинний переклад, не перевірений носієм мови. Еталоном є англійська версія.

Навігація на низькій навколоземній орбіті (LEO)Редагувати на GitHubДжерело: docs/LEO-NAVMSG.md

Навігаційне повідомлення LEO

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

Він не залежить від системи. Будь-яка орбіта, будь-яка несівна та будь-яка з чотирьох моделей ефемерид працюють без жодного пресета; іменовані пресети є необов'язковими даними (див. Пресети).

Виведіть вбудований приклад командою 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 те саме, плюс поліноми поправок уздовж траєкторії, поперек траєкторії та радіальної (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 см вони діють лише в цих нульових напрямках. Підгонка liu22 натомість бере початок і оцінювач зі статті, розділ 2,3: починає з нульових поправкових членів, не має апріорних обмежень (звичайні найменші квадрати) і зберігає обмеження статті в 100 ітерацій. Вона зупиняється за власним правилом збіжності параметрів Kshana, коли кожен крок параметра менший за 1e-3 його формального стандартного відхилення; стаття ж зупиняється, коли RMS змінюється менш ніж на 0,1 мм. Потім поліноми 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, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) і геостаціонарної орбіти (0,99 і 1/126): це перевірка рівня VALIDATED. На LEO те саме усереднення дає

Висота w_R 1 / w_AC² надирний кут горизонту
320 км 0.384 2.35 72.2°
510 км 0.459 2.53 67.8°
550 км 0.472 2.57 67.0°
786 км 0.536 2.81 62.9°
1080 км 0.597 3.11 58.8°
1336 км 0.638 3.37 55.8°

тож користувач LEO, який бачить супутник далеко від надиру, значно сильніше відчуває похибки вздовж і поперек траєкторії, ніж користувач на середній орбіті.

Аналізи#

analysis = [...] вибирає будь-яку з чотирьох (типово всі).

Компроміс за інтервалом підгонки#

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

Модель Інтервал підгонки RMS SISRE орбіти Максимум SISRE орбіти RMS SISRE з годинником RMS радіально / уздовж / поперек
kepler16 60 с 0,041 см 0,179 см 0,069 см 0,09 / 0,01 / 0,00 см
kepler16 120 с 0,032 см 0,160 см 0,079 см 0,06 / 0,01 / 0,01 см
kepler16 180 с 0,093 см 0,540 см 0,134 см 0,18 / 0,06 / 0,00 см
kepler16 300 с 0,310 см 1,033 см 0,329 см 0,09 / 0,49 / 0,02 см
kepler16 450 с 1,690 см 7,542 см 1,696 см 0,72 / 2,65 / 0,04 см
kepler16 600 с 2,875 см 10,219 см 2,866 см 1,72 / 4,42 / 0,26 см
kepler16 900 с 9,345 см 34,032 см 9,349 см 6,46 / 14,14 / 0,91 см
kepler-rac 60 с 0,000 см 0,000 см 0,057 см 0,00 / 0,00 / 0,00 см
kepler-rac 120 с 0,000 см 0,000 см 0,074 см 0,00 / 0,00 / 0,00 см
kepler-rac 180 с 0,000 см 0,001 см 0,090 см 0,00 / 0,00 / 0,00 см
kepler-rac 300 с 0,004 см 0,014 см 0,106 см 0,00 / 0,00 / 0,01 см
kepler-rac 450 с 0,037 см 0,176 см 0,127 см 0,05 / 0,01 / 0,04 см
kepler-rac 600 с 0,214 см 0,643 см 0,229 см 0,28 / 0,09 / 0,26 см
kepler-rac 900 с 1,015 см 3,695 см 1,062 см 1,52 / 0,70 / 0,91 см

А з підгонкою 300 с, змінюючи, як часто нове повідомлення перебирає на себе роботу:

Модель Період оновлення RMS SISRE орбіти Максимум SISRE орбіти
kepler16 30 с 0,314 см 0,850 см
kepler16 60 с 0,288 см 0,859 см
kepler16 150 с 0,219 см 0,830 см
kepler16 300 с 0,310 см 1,033 см
kepler-rac 30 с 0,004 см 0,009 см
kepler-rac 60 с 0,004 см 0,009 см
kepler-rac 150 с 0,004 см 0,010 см
kepler-rac 300 с 0,004 см 0,014 см

16-параметровий кеплерів набір погіршується від 0,04 см за 60 с до 9,35 см за 900 с: один кеплерів набір з гармоніками двічі на оберт не може довше за кілька хвилин простежувати гравітаційні члени вищої частоти та опір на дузі LEO, а його залишок за найменшими квадратами коливається по вікну. Поліноми вздовж/поперек/радіально (ступені 7, 5, 6) поглинають те, що лишилося: 1,01 см за 900 с, 0,21 см за 600 с. На найкоротших інтервалах кеплерові показники субміліметрові й більше не впорядковані строго (підгонка тоді обмежена обумовленістю, а не моделлю).

Порівняння моделей#

scenarios/leo-navmsg-model-comparison.toml запускає чотири моделі на 1, 5 і 10 хвилинах на тій самій орбіті, з кількістю параметрів і бітами ефемерид та годинника в кодуванні Kshana:

Модель Інтервал підгонки Параметри Біти ефемерид + годинника RMS SISRE орбіти RMS SISRE з годинником
kepler16 60 с 16 570 0,022 см 0,049 см
kepler16 300 с 16 570 0,230 см 0,260 см
kepler16 600 с 16 570 3,061 см 3,071 см
kepler-rac 60 с 37 1045 0,000 см 0,044 см
kepler-rac 300 с 37 1045 0,005 см 0,120 см
kepler-rac 600 с 37 1045 0,160 см 0,208 см
liu22 60 с 22 730 0,014 см 0,046 см
liu22 300 с 22 730 0,074 см 0,142 см
liu22 600 с 22 730 0,258 см 0,290 см
ecef-poly (нульовий годинник) 60 с 22 750 0,000 см 28,784 см
ecef-poly (нульовий годинник) 300 с 22 750 0,005 см 28,784 см
ecef-poly (нульовий годинник) 600 с 22 750 0,561 см 28,774 см

Рядок із нульовим годинником оцінюється відносно годинника, підлаштованого із залишком 0,24 м (показник ATOMIC), решта — відносно вільно біжучого годинника, до якого їх підігнано.

Liu та ін. 2025, SISRE залежно від висоти (MODELLED). Той самий сценарій підганяє 22-параметрову модель Kshana на 20-хвилинних дугах на п'яти висотах зі статті, з нахилом кожного супутника:

Супутник Висота Нахил Liu та ін. 2025 Kshana (RMS лише орбіти) відношення
GRACE-A 320 км 89.00° 8,88 см 4,25 см 0.48
GRACE-C 475 км 89.00° 6,21 см 2,87 см 0.46
Sentinel-2A 786 км 98.57° 2,87 см 2,20 см 0.77
HY-2A 966 км 99.34° 2,11 см 1,25 см 0.59
Sentinel-6A 1336 км 66.04° 0,75 см 0,51 см 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 с, оновлювані кожні 150 с):

Найвищий проліт за добу сягає 43,7° і триває 455 с. Його перемикання:

Перемикання Висота Стрибок положення Стрибок годинника Стрибок дальності користувача Стрибок за найгіршої геометрії
IOD 270 → 271 12.7° 0,07 мм 0,19 мм -0.17 мм 0,27 мм
IOD 271 → 272 37.4° 0,14 мм 0,14 мм -0.24 мм 0,27 мм
IOD 272 → 273 28.2° 0,27 мм -0.22 мм 0,35 мм 0,48 мм

Найбільший стрибок дальності користувача 0,35 мм проти порога 5 см: PASS.

Кодування та декодування#

scenarios/leo-navmsg-encode-decode.toml кодує перше з трьох повідомлень, декодує його, перевіряє CRC і відхиляє пошкоджену копію, виводить бюджет квантування, а також записує й зчитує назад блок у стилі RINEX і таблицю CSV:

  • кадр: 171 байтів (1310 бітів корисного навантаження, з яких 1045 — ефемериди та годинник), 24-бітна циклічна перевірка надлишковості (CRC-24Q) 0x19105F;
  • найбільший ефект півкроку будь-якого окремого поля: af0, 0,545 мм;
  • ціле повідомлення після квантування: положення в межах 1,126 мм і годинник у межах 0,185 мм від точного повідомлення; SISRE 0,113 см точно, 0,129 см декодовано;
  • кадр з одним переверненим бітом відхиляється: true;
  • круговий обхід RINEX-стилю в межах 5.0e-06 м, круговий обхід CSV у межах 0.0e+00 м.

Незалежність від платформи#

Кадр — це передані цілі числа, тож це мають бути ті самі цілі числа, де б і як би не виконувався сценарій: рідний двійковий файл на будь-якій операційній системі, налагоджувальна або випускна збірка та збірка 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, за зразком набору полів 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); код відтворює каталожне контрольне значення 0xCDE703 для 123456789 і контрольні байти прикладу кадру типу повідомлення 1005 RTCM 10403 (VALIDATED).

Кроки Galileo ICD обрано для середньої навколоземної орбіти, і вони надто грубі для сантиметрового повідомлення LEO: Crs кроками 2⁻⁵ м (3,1 см), Cuc 2⁻²⁹ рад (1,3 см на радіусі LEO), кути 2⁻³¹ піввідкол (1,0 см) і af0 2⁻³⁴ с (1,7 см). Kshana зберігає одиниці ICD і конвенцію піввідколу, уточнює кроки так, щоб похибка півкроку кожного поля лишалася нижчою за 1 мм положення чи дальності на 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 с/с^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 м^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 піввідкол/с^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 с/піввідкол^2
Klobuchar (біт-прапорець 1) alpha3 8 2^-24 с/піввідкол^3
Klobuchar (біт-прапорець 1) beta0 8 2^11 s
Klobuchar (біт-прапорець 1) beta1 8 2^14 s/semicircle
Klobuchar (біт-прапорець 1) beta2 8 2^16 с/піввідкол^2
Klobuchar (біт-прапорець 1) beta3 8 2^16 с/піввідкол^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/град^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 км, нахилах від 0° до 140° та інтервалах підгонки до 20 хвилин: deltaN і OmegaDot широкі, бо на майже екваторіальній орбіті вузол визначений погано, і підгонка ділить між ними дрейф аргумента широти за J2, а aDot і nDot — бо 22-параметрова підгонка на 20 хвилин поглинає частину короткоперіодичного коливання великої півосі. Починаючи з 0,30, 22-параметрова підгонка — це звичайні найменші квадрати зі статті без апріорних обмежень, і екваторіальна підгонка на 800 км тоді потребує nDot близько 6.3e-10 піввідкола/с^2, тож її масштаб змінився з 2^-60 на 2^-58. Поліноми поправок вздовж траєкторії 7-го ступеня для kepler-rac вкладаються в 22-бітний діапазон коефіцієнтів до 15 хвилин; довша підгонка може його перевищити й тоді відхиляється. quantisation_budget повідомляє для кожного поля ефемерид і годинника найбільшу зміну положення та дальності від зміни на півкроку за період використання та зміну всього повідомлення після квантування.

Текстові експорти#

RINEX 4,02 не визначає навігаційних записів LEO (його літери систем — G, R, E, J, C, I і S; RINEX 4,02 Міжнародної служби GNSS (IGS)). Блок, який записує 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 по одному в рядку. Типові стовпці використовують назви з 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). Модель електронної густини NeQuick та її похиле інтегрування, які перетворюють Az на затримку, не реалізовано.
  • Супутник на кількох сотнях кілометрів летить усередині іоносфери. Жодна з широкомовних моделей не враховує електронний вміст над супутником, і поправка на нього не застосовується.
  • UTC: system_to_utc застосовує три випадки з Galileo ICD §5.1.7 (до події високосної секунди, протягом шести годин від неї та після неї); вставлена секунда читається як 86400.

Пресети#

Пресети — це дані, по одному файлу під src/leo_navmsg/presets/, із джерелами. Рушій і кожен вбудований сценарій, окрім сценарію Celeste, працюють без них.

Ключ Джерело Орбіта Несівна Модель повідомлення
xona-pulsar PUBLIC, arXiv 2509,19551 1080 км, 53° X1 1593,3225 МГц не опубліковано
xona-pulsar-0 PUBLIC, arXiv 2509,19551 520 км, 97° X1 не опубліковано
iridium PUBLIC, звіт RNTF, опис орбітального угруповання 781 км, 86,4° 1621 МГц (діапазон 1616–1626 МГц) не передається
starlink PUBLIC, NAVIGATION 72(1), опис орбітального угруповання 550 км, 53° діапазон Ku, значення середини діапазону (репрезентативне) немає (сигнали нагоди)
centispace PUBLIC, Sensors 2023, Satellite Navigation 2026 700 км, 55° поблизу B1 (у джерелі замасковано; L1 як замінник) не опубліковано
cband-generic REPRESENTATIVE 600 км, 97,8° 5020 МГц (центр C-діапазону RNSS) не опубліковано
atomic PUBLIC, InsideGNSS 500 км (репрезентативне) L1 (репрезентативне) ecef-poly, ступінь 6, 60 с, оновлюється кожні 30 с, нульовий годинник, залишок підлаштування 0,24 м
celeste-iod WORKSHOP і PUBLIC 510 км, 97,4° 1191,795 МГц kepler-rac, ступені та крок записів у файлі пресета

RNSS — це радіонавігаційна супутникова служба; RNTF — Resilient Navigation and Timing Foundation.

Celeste IOD. Пресет демонстрації на орбіті (IOD) Celeste Європейського космічного агентства (ESA) — єдиний, що використовує матеріали, представлені на семінарі LEO-PNT програми ESA Navigation Innovation and Support Programme (NAVISP), 2026: структуру повідомлення (кеплерів набір Galileo плюс поліноми поправок вздовж/поперек/радіально, поліном годинника, SVID, справність, IOD, параметри іоносфери та UTC), крок записів і назви стовпців CSV. Орбіта (510 км, майже полярна сонячно-синхронна) і несівна походять із публічних джерел, указаних у файлі. Бітова розкладка 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, GLONASS, Galileo, BeiDou, геостаціонарна)
Алгоритм користувача Galileo ICD VALIDATED RTKLIB eph2pos на чотирьох реальних широкомовних ефемеридах Galileo, 1 мм на вісь (tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED каталожне контрольне значення 0xCDE703; приклад кадру RTCM 10403 1005
Підгонка та компроміс SISRE MODELLED двотільну істину відновлено до 1 мм; скоригована підгонка J2–J6 до 1 мм; монотонне зростання з інтервалом
Безперервність посеред прольоту MODELLED тотожність стрибка; межа замкненої форми для конуса проти вибірки
Двійковий формат і бюджет MODELLED круговий обхід; півкрок кожного поля менший за 1 мм
Стиль 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 та ін. відрізняється орбітами, тлумаченням параметрів і вагами.