Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

Nawigacja na niskiej orbicie okołoziemskiej (LEO)Edytuj na GitHubieŹródło: docs/LEO-NAVMSG.md

Komunikat nawigacyjny LEO

Rodzaj scenariusza leo-navmsg buduje transmitowany komunikat efemeryd i zegara satelity pozycjonowania, nawigacji i czasu (PNT) na niskiej orbicie okołoziemskiej (LEO) i odpowiada na pytania, które zadaje projektant komunikatu: jak długo może obowiązywać jeden komunikat, co daje każdy dodatkowy parametr, co widzi użytkownik, gdy komunikat zmienia się w środku przelotu, i ile bitów potrzeba, by przenieść go z dokładnością do centymetra.

Jest niezależny od systemu. Dowolna orbita, dowolna nośna i dowolny z czterech modeli efemeryd działają bez żadnego presetu; nazwane presety są danymi opcjonalnymi (zob. Presety).

Wydrukuj dołączony przykład poleceniem kshana example <name> (jedna nazwa na wywołanie) i uruchom go poleceniem kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update i leo-navmsg-encode-decode. Ten rodzaj jest też etapem komunikatu w rodzaju leo-pnt-chain (LEO-PNT.md) oraz członkiem kampanii leo-focus-data-services, która składa cztery konfiguracje komunikatu i raportuje długość ramki każdej z nich (146, 154, 159 i 171 bajtów).

Kod: src/leo_navmsg/ — elements.rs (rekordy i algorytm użytkownika), truth.rs (orbita i zegar wzorcowy), fit.rs (dopasowanie), sisre.rs (błąd odległości sygnału w przestrzeni), services.rs (jonosfera i uniwersalny czas koordynowany (UTC)), codec.rs (format binarny), text.rs (eksporty w stylu Receiver Independent Exchange Format (RINEX) i w wartościach rozdzielanych przecinkami (CSV)), presets/ (jeden plik na preset), mod.rs (rodzaj).

Co niesie komunikat#

Część Zawartość
Pomocnicze identyfikator pojazdu kosmicznego (SVID), wydanie danych (IOD), identyfikator pasma, status zdrowia sygnału (konwencja Galileo: 0 sprawny, 1 niesprawny, 2 praca rozszerzona, 3 w teście)
Synchronizacja numer tygodnia, czas tygodnia (TOW) nadawania oraz wielomian zegara drugiego rzędu af0 + af1·(t − toc) + af2·(t − toc)²
Efemerydy jeden z czterech modeli poniżej
Inne usługi zestaw transmitowanych parametrów jonosferycznych Klobuchara, współczynniki Galileo NeQuick-G ai0, ai1, ai2 z pięcioma flagami burzy oraz parametry czasu systemowego do UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

Modele efemeryd#

Kod Model Parametry
kepler16 zestaw keplerowski z dokumentu kontroli interfejsu sygnału w przestrzeni Galileo Open Service (OS SIS ICD): √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe 16
kepler-rac to samo, plus wielomiany korekcji wzdłuż toru, poprzecznej i radialnej (RAC) a0…, c0…, r0… w τ = tk / tau_s, współczynniki w metrach, tau_s to potęga dwójki równa co najmniej połowie przedziału dopasowania lub większa od niej (transmitowana), stopnie ustalane przez rac_degrees (domyślnie 7, 5, 6) domyślnie 16 + 21, plus skala czasu
liu22 model 22-parametrowy Liu, Su, Xie, Zhou i Qu (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): 16 plus ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 22
ecef-poly model „zerowego zegara” ATOMIC (Autonomous Time and Orbit Determination for Microsatellite Constellations): wielomian w układzie związanym z Ziemią o początku w jej środku (ECEF) dla każdej osi w τ = (t − t_ref) / 64 s (domyślnie stopień 6), bez składników zegara, ponieważ zegar satelity jest sterowany do czasu systemowego (InsideGNSS) domyślnie 22

Algorytm użytkownika (elements::sat_state) to sekwencja z ICD Galileo (równanie Keplera, poprawki drugiej harmonicznej, węzeł w układzie związanym z Ziemią), po której dla kepler-rac następują trzy wielomiany w układzie własnym orbity keplerowskiej: radialny wzdłuż obliczonego położenia, poprzeczny wzdłuż normalnej orbity z poprawionej inklinacji i węzła, wzdłuż toru dopełniający trójkę. Zegar dodaje relatywistyczny człon z ICD F·e·√A·sin E; dla ecef-poly jest to postać ogólna −2 r·v / c² z wielomianu i jego pochodnej.

Człony Liu i in. wynikają z algorytmu użytkownika z artykułu (sekcja 2,2, równ. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (wydania przed 0,30 stosowały konwencję cywilnej nawigacji Global Positioning System (GPS) ½·ṅ·tk, więc zapisane przez nie ṅ jest dwukrotnością wartości z artykułu), oraz Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ dodane do promienia, Φ to nieskorygowany argument szerokości. Konwencja skali ṅ jest przepisana z równ. 1 artykułu; porównanie z artykułem na rzeczywistych orbitach od niej nie zależy (czynnik ½ przy ṅ nie zmienia żadnej dopasowanej wartości), więc znaczenie transmitowanej wartości nDot nie jest tam sprawdzone względem niezależnego wzorca zewnętrznego.

Dwa odczytania są własne dla Kshana i tak je podano:

  • Układ RAC i normalizacja τ = tk / tau_s. Żaden publiczny dokument nie definiuje układu korekcji LEO dla komunikatu transmitowanego.
  • Zegar komunikatu zerowego zegara jest w sumie równy zeru: przyjmuje się, że pętla sterowania utrzymuje pozorny zegar, łącznie z członem relatywistycznym, na czasie systemowym.

Dopasowanie#

truth.rs całkuje orbitę czterostopniową metodą Rungego–Kutty o stałym kroku w układzie, który przechodzi w osie związane z Ziemią jednym obrotem, θ(t) = θ0 + Ω̇e·t, tym samym pojedynczym obrotem, który stosuje transmitowany algorytm użytkownika. Grawitacja to dwa ciała (gravity_degree = 0), harmoniczne zonalne od J2 do J6 (od 2 do 6) albo pole Earth Gravitational Model 2008 (EGM2008) do stopnia i rzędu od 7 do 70, którego człony tesseralne niosą sygnaturę krótkookresową utrudniającą dopasowanie LEO. Opór jest opcjonalny (statyczna gęstość wykładnicza). Zegar jest swobodnie biegnący (bias, dryf, tempo dryfu i biały szum częstotliwości przy podanym odchyleniu Allana dla jednej sekundy, plus okresowy człon relatywistyczny) lub sterowany (resztka Gaussa–Markowa pierwszego rzędu).

fit.rs dopasowuje zestaw keplerowski metodą Levenberga–Marquardta na elementach niesingularnych (e·cos ω, e·sin ω, λ0 = M0 + ω): orbita LEO jest prawie kołowa, więc same ω i M0 są niemal nierozróżnialne. Zaczyna od stanu oskulacyjnego w toe z tempem węzła od J2. Słabe priory wyśrodkowane na zerze ograniczają tempa i harmoniczne, których krótki łuk nie może rozdzielić; przy wadze obserwacji 1 cm działają one tylko w tych kierunkach zerowych. Dopasowanie liu22 przyjmuje natomiast start i estymator z sekcji 2,3 artykułu: zaczyna od zerowych wszystkich członów korekcji, nie ma priorów (zwykłe najmniejsze kwadraty) i zachowuje limit 100 iteracji z artykułu. Kończy się według własnej reguły zbieżności parametrów Kshana, gdy każdy krok parametru jest mniejszy niż 1e-3 jego formalnego odchylenia standardowego; artykuł kończy natomiast, gdy RMS zmienia się o mniej niż 0,1 mm. Wielomiany RAC są następnie dopasowywane do reszt wzdłuż toru/poprzecznych/radialnych metodą liniowych najmniejszych kwadratów, a wielomian zegara do zegara wzorcowego pomniejszonego o człon relatywistyczny, który użytkownik doda z powrotem.

Wniosek zapisany w wartościach domyślnych: po dopasowaniu keplerowskim metodą najmniejszych kwadratów reszta jest z konstrukcji tym, czego 16 parametrów nie może objąć, więc oscyluje w oknie (kilka przejść przez zero w każdej składowej), zamiast dryfować. Wielomian korekcji usuwa ją tylko wtedy, gdy jego stopień przekracza to, co zestaw keplerowski już obejmuje: wzdłuż toru 7, poprzecznie 5 i radialnie 6 sprowadzają 15-minutową resztę z centymetrów do około milimetra, podczas gdy niższe stopnie poprzeczne nie usuwają prawie nic (reszta poprzeczna jest nieparzysta względem środka okna). System, który część keplerowską wyznacza inaczej, zostawia resztę o innym kształcie, a potrzebne stopnie z niej wynikają. Własne stopnie korekcji presetu Celeste (niższe niż te; istnieją tylko w pliku presetu, src/celeste_iod.rs) działają tutaj na bazie najmniejszych kwadratów Kshana, dlatego jego człony poprzeczne wnoszą w tym silniku niewiele: to stwierdzenie o dopasowaniu Kshana, a nie o jakimkolwiek rzeczywistym systemie. toe i toc są całkowitymi sekundami, tak jak niesie je format binarny.

Każdy komunikat jest używany przez okres wyśrodkowany w jego oknie dopasowania (pierwsza tabela kompromisu używa całego okna). Wartości błędu odległości sygnału w przestrzeni (SISRE) mierzą błąd reprezentacji komunikatu względem wzorca, do którego został dopasowany, jako pierwiastek ze średniej kwadratowej (RMS) i maksimum na przedziale. Błąd wyznaczania i predykcji orbity, który rzeczywisty segment naziemny lub pokładowy dodaje na wierzch, nie jest modelowany.

Błąd odległości sygnału w przestrzeni#

sisre.rs używa globalnie uśrednionego SISRE z pracy Montenbrucka, Steigenbergera i Hauschilda (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²) )

Wagi są średnimi dla użytkowników rozłożonych równomiernie na widocznej czaszy Ziemi z cos² η i ½ sin² η, gdzie η jest kątem nadirowym linii widzenia przy satelicie, obliczonym dla promienia orbity i maski elewacji. Przy masce 0° obliczenie odtwarza tabelę z artykułu dla średniej orbity okołoziemskiej (GPS 0,98 i 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) i orbity geostacjonarnej (0,99 i 1/126): to jest kontrola VALIDATED. Na LEO to samo uśrednienie daje

Wysokość w_R 1 / w_AC² kąt nadirowy horyzontu
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°

więc użytkownik LEO, który widzi satelitę daleko od nadiru, odczuwa błędy wzdłuż toru i poprzeczne znacznie silniej niż użytkownik orbity średniej.

Analizy#

analysis = [...] wybiera dowolne z czterech (domyślnie wszystkie).

Kompromis przedziału dopasowania#

[trade] ustawia przedział, przedziały dopasowania, okresy aktualizacji i modele. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 do stopnia 20 i opór, 30 minut komunikatów) daje, przy okresie użycia równym przedziałowi dopasowania:

Model Przedział dopasowania RMS SISRE orbity Maks. SISRE orbity RMS SISRE z zegarem RMS radialny / wzdłuż toru / poprzeczny
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

A przy dopasowaniu 300 s, przy zmiennej częstości przejmowania przez nowy komunikat:

Model Okres aktualizacji RMS SISRE orbity Maks. SISRE orbity
kepler16 30 s 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 s 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-parametrowy zestaw keplerowski pogarsza się z 0,04 cm przy 60 s do 9,35 cm przy 900 s: jeden zestaw keplerowski z harmonicznymi dwa razy na obieg nie może przez dłużej niż kilka minut nadążać za grawitacyjnymi członami o wyższej częstotliwości i oporem łuku LEO, a jego reszta z najmniejszych kwadratów oscyluje w oknie. Wielomiany wzdłuż toru/poprzeczne/radialne (stopnie 7, 5, 6) pochłaniają to, co zostaje: 1,01 cm przy 900 s, 0,21 cm przy 600 s. Przy najkrótszych przedziałach wartości keplerowskie są poniżej milimetra i nie są już ściśle uporządkowane (dopasowanie jest wtedy ograniczone uwarunkowaniem, a nie modelem).

Porównanie modeli#

scenarios/leo-navmsg-model-comparison.toml uruchamia cztery modele przy 1, 5 i 10 minutach na tej samej orbicie, z liczbą parametrów i bitami efemerydy i zegara w kodowaniu Kshana:

Model Przedział dopasowania Parametry Bity efemerydy + zegara RMS SISRE orbity RMS SISRE z zegarem
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 (zerowy zegar) 60 s 22 750 0,000 cm 28,784 cm
ecef-poly (zerowy zegar) 300 s 22 750 0,005 cm 28,784 cm
ecef-poly (zerowy zegar) 600 s 22 750 0,561 cm 28,774 cm

Wiersz zerowego zegara jest oceniany względem zegara sterowanego z resztą 0,24 m (wartość ATOMIC), pozostałe względem swobodnie biegnącego zegara, który dopasowują.

Liu i in. 2025, SISRE w funkcji wysokości (MODELLED). Ten sam scenariusz dopasowuje 22-parametrowy model Kshana na 20-minutowych łukach dla pięciu wysokości z artykułu, przy inklinacji każdego satelity:

Satelita Wysokość Inklinacja Liu i in. 2025 Kshana (RMS tylko orbity) stosunek
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

To nie jest sprawdzenie względem niezależnego wzorca zewnętrznego. Artykuł dopasowywał rzeczywiste precyzyjne orbity naukowe wymienionych satelitów (z pełną historią grawitacji, oporu i sił niegrawitacyjnych); Kshana dopasowuje własną scałkowaną orbitę, oblicza sześć dodanych parametrów w opisany wyżej sposób i używa własnych wag SISRE. Porównanie pokazuje trend i rząd wielkości. Porównanie na tych samych rzeczywistych orbitach, które dopasowywał artykuł, to tests/leo_navmsg_fit_real_orbit_oracle.rs (od 0,30 dopasowanie 22-parametrowe zgadza się tam w ramach ustalonego z góry czynnika 1,5, na dniach z artykułu i na ośmiu dniach wstrzymanych).

Aktualizacja w środku przelotu#

[midpass] umieszcza użytkownika (domyślnie 45° N, 10° E), znajduje najwyższy przelot nad maską w granicach search_s i planuje komunikaty co update_period_s. Przy każdym przełączeniu w trakcie przelotu raportuje skok położenia, skok zegara, skok pseudoodległości użytkownika (nowy komunikat minus stary), największy skok, jaki mógłby zobaczyć dowolny widoczny użytkownik (postać zamknięta po stożku nadirowym), błąd odległości przed i po oraz PASS lub FAIL względem threshold_m. scenarios/leo-navmsg-midpass-update.toml (dopasowania 300 s aktualizowane co 150 s):

Najwyższy przelot w ciągu doby sięga 43,7° i trwa 455 s. Jego przełączenia:

Przełączenie Elewacja Skok pozycji Skok zegara Skok odległości użytkownika Skok w najgorszej geometrii
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

Największy skok odległości użytkownika 0,35 mm wobec progu 5 cm: PASS.

Kodowanie i dekodowanie#

scenarios/leo-navmsg-encode-decode.toml koduje pierwszy z trzech komunikatów, dekoduje go, sprawdza CRC i odrzuca uszkodzoną kopię, wypisuje budżet kwantyzacji oraz zapisuje i odczytuje z powrotem blok w stylu RINEX i tabelę CSV:

  • ramka: 171 bajtów (1310 bitów ładunku, z czego 1045 to efemerydy i zegar), 24-bitowa cykliczna kontrola nadmiarowa (CRC-24Q) 0x19105F;
  • największy efekt półkroku dla pojedynczego pola: af0, 0,545 mm;
  • cały komunikat po kwantyzacji: pozycja w granicach 1,126 mm i zegar w granicach 0,185 mm od komunikatu dokładnego; SISRE 0,113 cm dla komunikatu dokładnego, 0,129 cm dla zdekodowanego;
  • ramka z jednym odwróconym bitem zostaje odrzucona: true;
  • pełny obieg w stylu RINEX w granicach 5.0e-06 m, pełny obieg CSV w granicach 0.0e+00 m.

Niezależność od platformy#

Ramka to przesyłane liczby całkowite, więc muszą to być te same liczby niezależnie od tego, gdzie i jak scenariusz jest uruchamiany: natywny plik binarny w dowolnym systemie operacyjnym, kompilacja debug lub release oraz kompilacja WebAssembly (WASM) w przeglądarce. Przeszkadziły trzy rzeczy. Sinus, cosinus, arcus tangens i funkcja wykładnicza z biblioteki matematycznej hosta nie muszą być poprawnie zaokrąglane i różnią się między hostami na ostatnim miejscu. Zoptymalizowana kompilacja w systemie macOS pobiera sinus i cosinus tego samego argumentu z łącznej procedury systemowej, która nie zawsze zwraca wartość samego sinusa, więc różniły się także kompilacje debug i release. A zwykły generator rozkładu normalnego wywołuje wykładniczą i logarytm hosta w swoich rzadkich gałęziach. Dopasowanie zamienia tak małą różnicę w inne skwantowane pola. Cały rodzaj (orbita i zegar prawdziwy, dopasowanie, algorytm użytkownika, błąd odległości w sygnale w przestrzeni (SISRE), kodek) oblicza więc każdą taką funkcję za pomocą czysto rustowego crate'a libm przez src/portable_math.rs, potęgi całkowite jako jawne iloczyny, a odchylenia normalne metodą biegunową na surowym wyjściu generatora. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform przypina 171-bajtową ramkę scenariusza kodowania i dekodowania poniżej oraz jedną wartość kontrolną na model efemeryd; kompilacja debug, kompilacja release i kompilacja WASM dają bajt w bajt identyczne dokumenty wyników dla wszystkich pięciu dołączonych scenariuszy leo-navmsg.

Format binarny#

To jest własne, udokumentowane kodowanie Kshana. Przenosi składniki, które wymieniają opublikowane opisy komunikatów nawigacyjnych LEO, zbudowane na wzór zestawu pól Galileo ICD. To nie jest układ bitów Celeste ani żadnego innego systemu: żaden nie jest publiczny.

Ramka: preambuła 0xA7 (8 bitów), wersja 1 (4), model (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), długość ładunku w bajtach (12), ładunek dopełniony zerami do pełnego bajtu, CRC-24Q (24-bitowa cykliczna kontrola nadmiarowa, 24 bity) z każdego poprzedzającego bajtu. CRC-24Q to kontrola ze standardu RTCM 10403 Radio Technical Commission for Maritime Services oraz z Galileo ICD (wielomian 0x1864CFB, wartość początkowa 0); kod odtwarza katalogową wartość kontrolną 0xCDE703 dla 123456789 oraz bajty kontrolne przykładowej ramki RTCM 10403 typu komunikatu 1005 (VALIDATED).

Kroki z Galileo ICD dobrano dla średniej orbity okołoziemskiej i są zbyt zgrubne dla komunikatu LEO o centymetrowej dokładności: Crs w krokach co 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm przy promieniu orbity LEO), kąty 2⁻³¹ półkola (1,0 cm) i af0 2⁻³⁴ s (1,7 cm). Kshana zachowuje jednostki ICD i konwencję półkola, zmniejsza kroki tak, by błąd półkroku każdego pola pozostawał poniżej 1 mm pozycji lub odległości w oknie 15 minut, i poszerza pola, aby zachować zakresy potrzebne dopasowaniu LEO:

Blok Pole Bity Krok Jednostka
pomocnicze i synchronizacyjne SVID 8 1 -
pomocnicze i synchronizacyjne IOD 10 1 -
pomocnicze i synchronizacyjne Band 4 1 -
pomocnicze i synchronizacyjne Health 2 1 -
pomocnicze i synchronizacyjne WeekNumber 13 1 tydzień
pomocnicze i synchronizacyjne ToW 20 1 s
pomocnicze i synchronizacyjne Flags 4 1 -
zegar (bit flagi 0) toc 20 1 s
zegar (bit flagi 0) af0 34 2^-38 s
zegar (bit flagi 0) af1 28 2^-50 s/s
zegar (bit flagi 0) af2 20 2^-62 s/s^2
keplerowskie (modele 1-3) toe 20 1 s
keplerowskie (modele 1-3) M0 36 2^-35 półkole
keplerowskie (modele 1-3) e 32 2^-33 -
keplerowskie (modele 1-3) sqrtA 36 2^-23 m^0,5
keplerowskie (modele 1-3) Omega0 36 2^-35 półkole
keplerowskie (modele 1-3) i0 36 2^-35 półkole
keplerowskie (modele 1-3) omega 36 2^-35 półkole
keplerowskie (modele 1-3) deltaN 29 2^-43 semicircle/s
keplerowskie (modele 1-3) OmegaDot 29 2^-43 semicircle/s
keplerowskie (modele 1-3) iDot 22 2^-43 semicircle/s
keplerowskie (modele 1-3) Cuc 26 2^-34 rad
keplerowskie (modele 1-3) Cus 26 2^-34 rad
keplerowskie (modele 1-3) Crc 26 2^-10 m
keplerowskie (modele 1-3) Crs 26 2^-10 m
keplerowskie (modele 1-3) Cic 26 2^-34 rad
keplerowskie (modele 1-3) Cis 26 2^-34 rad
poprawki wzdłuż toru/poprzeczne/promieniowe (model 2) degA 3 1 -
poprawki wzdłuż toru/poprzeczne/promieniowe (model 2) degC 3 1 -
poprawki wzdłuż toru/poprzeczne/promieniowe (model 2) degR 3 1 -
poprawki wzdłuż toru/poprzeczne/promieniowe (model 2) racTauExp 4 1 log2(s)
poprawki wzdłuż toru/poprzeczne/promieniowe (model 2) a_k, c_k, r_k 22 2^-14 m
dodatki Liu et al. 2025 (model 3) aDot 26 2^-20 m/s
dodatki Liu et al. 2025 (model 3) nDot 30 2^-58 półkole/s^2
dodatki Liu et al. 2025 (model 3) Crs3 26 2^-10 m
dodatki Liu et al. 2025 (model 3) Crc3 26 2^-10 m
dodatki Liu et al. 2025 (model 3) Crs1 26 2^-10 m
dodatki Liu et al. 2025 (model 3) Crc1 26 2^-10 m
wielomian ECEF (model 4) tref 20 1 s
wielomian ECEF (model 4) degP 4 1 -
wielomian ECEF (model 4) x0, y0, z0 38 2^-11 m
wielomian ECEF (model 4) x_k, y_k, z_k (k >= 1) 34 2^-12 m
Klobuchar (bit flagi 1) alpha0 8 2^-30 s
Klobuchar (bit flagi 1) alpha1 8 2^-27 s/semicircle
Klobuchar (bit flagi 1) alpha2 8 2^-24 s/półkole^2
Klobuchar (bit flagi 1) alpha3 8 2^-24 s/półkole^3
Klobuchar (bit flagi 1) beta0 8 2^11 s
Klobuchar (bit flagi 1) beta1 8 2^14 s/semicircle
Klobuchar (bit flagi 1) beta2 8 2^16 s/półkole^2
Klobuchar (bit flagi 1) beta3 8 2^16 s/półkole^3
NeQuick-G (bit flagi 2) ai0 11 2^-2 sfu
NeQuick-G (bit flagi 2) ai1 11 2^-8 sfu/deg
NeQuick-G (bit flagi 2) ai2 14 2^-15 sfu/deg^2
NeQuick-G (bit flagi 2) SF1-5 5 1 -
UTC (bit flagi 3) A0 32 2^-30 s
UTC (bit flagi 3) A1 24 2^-50 s/s
UTC (bit flagi 3) dtLS 8 1 s
UTC (bit flagi 3) t0t 8 3600 s
UTC (bit flagi 3) WNot 8 1 tydzień
UTC (bit flagi 3) WNLSF 8 1 tydzień
UTC (bit flagi 3) DN 3 1 doba
UTC (bit flagi 3) dtLSF 8 1 s

Wartość spoza zakresu pola jest odrzucana, a nie zawijana. Zakresy sprawdzono, kodując dopasowania dla 300 do 2000 km, nachyleń od 0° do 140° i przedziałów dopasowania do 20 minut: deltaN i OmegaDot są szerokie, ponieważ na orbicie prawie równikowej węzeł jest słabo określony, a dopasowanie dzieli między nie dryf J2 argumentu szerokości, natomiast aDot i nDot dlatego, że 22-parametrowe dopasowanie w ciągu 20 minut pochłania część krótkookresowych oscylacji wielkiej półosi. Od wersji 0,30 22-parametrowe dopasowanie to zwykła metoda najmniejszych kwadratów z pracy, bez rozkładów a priori, a równikowe dopasowanie dla 800 km wymaga wtedy nDot około 6.3e-10 półkola/s^2, więc jego skala zmieniła się z 2^-60 na 2^-58. Poprawki wzdłuż toru stopnia 7 dla kepler-rac mieszczą się w 22-bitowym zakresie współczynników do 15 minut; dłuższe dopasowanie może go przekroczyć i wtedy jest odrzucane. quantisation_budget podaje dla każdego pola efemeryd i zegara największą zmianę pozycji i odległości, jaką powoduje zmiana o półkrok w okresie użytkowania, oraz zmianę całego komunikatu po kwantyzacji.

Eksporty tekstowe#

RINEX 4,02 nie definiuje rekordów nawigacyjnych LEO (jego litery systemów to G, R, E, J, C, I i S; International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4,02). Blok zapisywany przez text.rs zapożycza kształt RINEX 4 — nagłówek rekordu > EPH, wiersz satelity i epoki z trzema składnikami zegara, wiersze orbity rozgłaszanej z czterema polami D19.12 — i jest udokumentowanym rozszerzeniem Kshana: litera systemu L, typy rekordów KP16, KRAC, LU22, APOL oraz trzy komentarze nagłówka, które o tym mówią. Wcześniejsze prace o orbitach LEO w rekordach nawigacyjnych w stylu 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

Tabela CSV zawiera komunikaty kepler16 i kepler-rac, po jednym w wierszu. Domyślne kolumny używają nazw z 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 wybiera zamiast tego zapis z gotowego ustawienia. Oba formaty można odczytać z powrotem.

Jonosfera i UTC#

  • Klobuchar: model L1 silnika (gnss_sim::klobuchar_delay_m, sprawdzony względem RTKLIB) skalowany do nośnej prawem pierwszego rzędu (f_L1 / f)².
  • NeQuick-G: współczynniki są przesyłane w komunikacie, a effective_ionisation_level zwraca Az = ai0 + ai1·μ + ai2·μ² dla zmodyfikowanej szerokości inklinacji magnetycznej μ, z regułami algorytmu (współczynniki równe zeru dają 63,7 jednostek strumienia słonecznego, sfu; wynik jest obcinany do [0, 400] sfu). Model gęstości elektronowej NeQuick i jego całkowanie wzdłuż drogi sygnału, które zamieniają Az na opóźnienie, nie są zaimplementowane.
  • Satelita na wysokości kilkuset kilometrów leci wewnątrz jonosfery. Żaden z modeli rozgłaszanych nie uwzględnia zawartości elektronów nad satelitą i nie stosuje się dla niej żadnej poprawki.
  • UTC: system_to_utc stosuje trzy przypadki z Galileo ICD §5.1.7 (przed zdarzeniem sekundy przestępnej, w ciągu sześciu godzin od niego i po nim); wstawiona sekunda ma wartość 86400.

Gotowe ustawienia#

Gotowe ustawienia to dane, po jednym pliku w src/leo_navmsg/presets/, wraz ze źródłami. Silnik i każdy dołączony scenariusz poza scenariuszem Celeste działają bez nich.

Klucz Źródło Orbita Nośna Model komunikatu
xona-pulsar PUBLIC, arXiv 2509,19551 1080 km, 53° X1 1593,3225 MHz nieopublikowany
xona-pulsar-0 PUBLIC, arXiv 2509,19551 520 km, 97° X1 nieopublikowany
iridium PUBLIC, raport RNTF, opis konstelacji 781 km, 86,4° 1621 MHz (pasmo 1616–1626 MHz) brak rozgłaszania
starlink PUBLIC, NAVIGATION 72(1), opis konstelacji 550 km, 53° pasmo Ku, wartość ze środka pasma (reprezentatywne) brak (sygnały okazji)
centispace PUBLIC, Sensors 2023, Satellite Navigation 2026 700 km, 55° w pobliżu B1 (zamaskowane w źródle; L1 jako zastępnik) nieopublikowany
cband-generic REPRESENTATIVE 600 km, 97,8° 5020 MHz (środek pasma C RNSS) nieopublikowany
atomic PUBLIC, InsideGNSS 500 km (reprezentatywne) L1 (reprezentatywne) ecef-poly, stopień 6, 60 s, odświeżany co 30 s, zerowy zegar, 0,24 m reszty sterowania
celeste-iod WORKSHOP i PUBLIC 510 km, 97,4° 1191,795 MHz kepler-rac, stopnie i odstęp rekordów w pliku gotowego ustawienia

RNSS to służba nawigacji radiowej przez satelity (radionavigation-satellite service); RNTF to Resilient Navigation and Timing Foundation.

Celeste IOD. Gotowe ustawienie demonstracji na orbicie (IOD) Celeste Europejskiej Agencji Kosmicznej (ESA) jest jedynym, które wykorzystuje materiały przedstawione na warsztatach LEO-PNT programu ESA Navigation Innovation and Support Programme (NAVISP), 2026: strukturę komunikatu (zestaw keplerowski Galileo plus wielomiany poprawek wzdłuż toru/poprzecznych/promieniowych, wielomian zegara, SVID, stan zdrowia, IOD, parametry jonosferyczne i UTC), odstęp rekordów oraz nazwy kolumn CSV. Orbita (510 km, prawie biegunowa, heliosynchroniczna) i nośna pochodzą z publicznych źródeł podanych w pliku. Układ bitów Celeste nie jest publiczny i nie jest odtwarzany; późniejsze fazy Celeste i system LEO-PNT Unii Europejskiej (UE) mogą się różnić. Każda wartość pochodząca z warsztatów znajduje się w module navmsg w src/celeste_iod.rs, używanym przez scenarios/leo-navmsg-celeste-iod.toml. Jak to ustawienie jest wyłączane: każda liczba silnika pochodząca z warsztatów mieści się w jednym pliku, src/celeste_iod.rs, który build.rs kompiluje tylko wtedy, gdy istnieje, oraz w scenariuszach dostępnych tylko w repozytorium scenarios/*celeste-iod*.toml. Usunięcie tego pliku i tych scenariuszy wyłącza gotowe ustawienie bez zmian w kodzie źródłowym; każdy inny test, każda wyrocznia i każdy scenariusz działają bez niego, a liczba plików scenariuszy w README nadal liczy pliki wyłączone.

Weryfikacja#

Wiersz Etykieta Wyrocznia
Wagi SISRE VALIDATED tabela Montenbruck et al. 2018 (GPS, GLONASS, Galileo, BeiDou, geostacjonarne)
algorytm użytkownika Galileo ICD VALIDATED RTKLIB eph2pos dla czterech rzeczywistych efemeryd rozgłaszanych Galileo, 1 mm na oś (tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED katalogowa wartość kontrolna 0xCDE703; przykładowa ramka RTCM 10403 1005
Dopasowanie i kompromis SISRE MODELLED prawdziwy ruch dwóch ciał odtworzony z dokładnością 1 mm; poprawione dopasowanie J2–J6 do 1 mm; monotoniczny wzrost wraz z przedziałem
Ciągłość w środku przejścia MODELLED tożsamość skoku; granica stożka w postaci zamkniętej wobec próbkowania
Format binarny i budżet MODELLED pełne obiegi; półkrok każdego pola poniżej 1 mm
W stylu RINEX i CSV MODELLED pełne obiegi
22-parametrowy model i dopasowanie Liu et al. 2025 VALIDATED precyzyjne orbity TU Graz ITSG czterech satelitów wobec tabel 4, 5, 6 i 8 z pracy: stosunki wzdłuż toru, poprzeczne, promieniowe i SISRE od 0,755 do 1,138 w dniach z pracy oraz od 0,683 do 1,186 w ośmiu dniach wstrzymanych, w granicach 1.5x (tests/leo_navmsg_fit_real_orbit_oracle.rs)
wielomian zerowego zegara ATOMIC i tabela pięciu wysokości MODELLED fakty ATOMIC z InsideGNSS; opublikowana tabela Liu wydrukowana obok dopasowania orbity scałkowanej przez Kshana, nieprzypięta
Jonosfera i UTC MODELLED postacie zamknięte z ICD; model Klobuchar sprawdzony względem RTKLIB

Ograniczenia#

  • SISRE to wyłącznie błąd reprezentacji: bez błędu wyznaczania orbity ani predykcji.
  • Wzorcem prawdy jest całkowanie Kshana (bez trzeciego ciała, ciśnienia promieniowania słonecznego i pływów), a nie precyzyjna orbita rzeczywistego satelity.
  • Format binarny i blok w stylu RINEX są własnością Kshana.
  • NeQuick-G jest przenoszony, a nie całkowany do opóźnienia; brak poprawki dla satelity wewnątrz jonosfery.
  • Porównanie z Liu et al. różni się orbitami, odczytem parametrów i wagami.