Maskinöversättning, inte granskad av en modersmålstalare. Engelska är referensen.

Navigering i låg omloppsbana (LEO)Redigera på GitHubKälla: docs/LEO-NAVMSG.md

LEO-navigeringsmeddelande

Scenariotypen leo-navmsg bygger sändningsefemeriden och klockmeddelandet för en satellit för positionering, navigering och tidssynkronisering (PNT) i låg omloppsbana (LEO) och besvarar de frågor som den som utformar ett meddelande ställer: hur länge kan ett meddelande gälla, vad ger varje extra parameter, vad ser en användare när meddelandet byts mitt i en passage, och hur många bitar krävs för att bära det med centimeternoggrannhet.

Den är systemoberoende. Valfri bana, valfri bärvåg och någon av fyra efemeridmodeller körs helt utan förinställning; de namngivna förinställningarna är valfria data (se Förinställningar).

Skriv ut ett medföljande exempel med kshana example <name> (ett namn per anrop) och kör det med kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update och leo-navmsg-encode-decode. Typen är också meddelandesteget i typen leo-pnt-chain (LEO-PNT.md) och en del av kampanjen leo-focus-data-services, som sätter ihop fyra meddelandekonfigurationer och redovisar ramlängden för var och en (146, 154, 159 och 171 bytes).

Kod: src/leo_navmsg/ — elements.rs (poster och användaralgoritm), truth.rs (referensbana och referensklocka), fit.rs (anpassning), sisre.rs (avståndsfel i signalen i rymden), services.rs (jonosfär och Coordinated Universal Time (UTC)), codec.rs (binärt format), text.rs (exporter i stil med Receiver Independent Exchange Format (RINEX) och kommaseparerade värden (CSV)), presets/ (en fil per förinställning), mod.rs (typen).

Vad ett meddelande innehåller#

Del Innehåll
Hjälpdata satellitidentifierare (SVID), dataversion (IOD), bandidentifierare, signalens hälsostatus (Galileo-konvention: 0 OK, 1 ur drift, 2 utökad drift, 3 under test)
Synkronisering veckonummer, veckotid (TOW) för sändningen och ett klockpolynom av andra ordningen af0 + af1·(t − toc) + af2·(t − toc)²
Efemerid en av de fyra modellerna nedan
Övriga tjänster en Klobuchar-uppsättning för sänd jonosfärskorrektion, Galileo NeQuick-G-koefficienter ai0, ai1, ai2 med fem stormflaggor, samt parametrar för systemtid till UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

Efemeridmodeller#

Kod Modell Parametrar
kepler16 den keplerska uppsättningen i 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 samma, plus korrektionspolynom längs banan, tvärs banan och radiellt (RAC) a0…, c0…, r0… i τ = tk / tau_s, koefficienter i meter, tau_s den tvåpotens som ligger vid eller över halva anpassningsintervallet (sänds), gradtal som anges av rac_degrees (standard 7, 5, 6) som standard 16 + 21, plus tidsskalan
liu22 22-parametersmodellen av Liu, Su, Xie, Zhou och Qu (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): de 16 plus ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 22
ecef-poly ATOMIC-modellen (Autonomous Time and Orbit Determination for Microsatellite Constellations) med "nollklocka": ett jordcentrerat jordfast (ECEF) polynom per axel i τ = (t − t_ref) / 64 s (standardgrad 6), inga klocktermer eftersom satellitklockan styrs mot systemtid (InsideGNSS) som standard 22

Användaralgoritmen (elements::sat_state) är Galileo ICD:s sekvens (Keplers ekvation, korrektioner av andra övertonen, jordfast nod) följd, för kepler-rac, av de tre polynomen längs den keplerska banans eget system: radiellt längs den beräknade positionen, tvärs banan längs banans normal utifrån korrigerad inklination och nod, och längs banan som fullbordar triaden. Klockan lägger till ICD:s relativistiska term F·e·√A·sin E; för ecef-poly är det den allmänna formen −2 r·v / c² från polynomet och dess derivata.

Termerna enligt Liu m.fl. följer artikelns användaralgoritm (avsnitt 2,2, ekv. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (utgåvor före 0,30 använde konventionen för Global Positioning System (GPS) civil navigering ½·ṅ·tk, så en ṅ som de skrev är dubbelt så stor som artikelns), och Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ adderat till radien, där Φ är det okorrigerade breddargumentet. Skalkonventionen för ṅ är hämtad från artikelns ekv. 1; jämförelsen med artikeln på verkliga banor beror inte på den (en faktor ½ på ṅ lämnar varje anpassad storhet oförändrad), så innebörden av ett sänt nDot-värde är inte validerad där.

Två tolkningar är Kshanas egna och anges som sådana:

  • RAC-systemet och normaliseringen τ = tk / tau_s. Inget offentligt dokument definierar ett LEO-korrektionssystem för ett sänt meddelande.
  • Klockan i ett meddelande med nollklocka är noll totalt: styrslingan antas hålla den skenbara klockan, inklusive den relativistiska termen, vid systemtid.

Anpassningen#

truth.rs integrerar banan med en Runge–Kutta av fjärde ordningen med fast steg i ett system som övergår i jordfasta axlar genom en rotation, θ(t) = θ0 + Ω̇e·t, samma enda rotation som en sänd användaralgoritm tillämpar. Gravitationen är tvåkropps (gravity_degree = 0), de zonala övertonerna J2 till J6 (2 till 6) eller fältet Earth Gravitational Model 2008 (EGM2008) till grad och ordning 7 till 70, vars tesserala termer bär den kortperiodiska signatur som gör en LEO-anpassning svår. Luftmotstånd är valfritt (statisk exponentiell täthet). Klockan är antingen fritt gående (bias, drift, driftändring och vitt frekvensbrus vid en angiven Allan-deviation på en sekund, plus den periodiska relativistiska termen) eller styrd (en residual av Gauss–Markov av första ordningen).

fit.rs anpassar den keplerska uppsättningen med Levenberg–Marquardt på icke-singulära element (e·cos ω, e·sin ω, λ0 = M0 + ω): en LEO-bana är nästan cirkulär, så ω och M0 är var för sig nästan omöjliga att skilja åt. Den startar från det oskulerande tillståndet vid toe med J2-nodhastigheten. Svaga nollcentrerade a priori-villkor begränsar de hastigheter och övertoner som en kort båge inte kan lösa upp; med en observationsvikt på 1 cm verkar de bara i just de nollriktningarna. Anpassningen liu22 utgår i stället från artikelns start och skattare i avsnitt 2,3: den börjar med alla korrektionstermer lika med noll, har inga a priori-villkor (vanlig minstakvadratmetod) och behåller artikelns tak på 100 iterationer. Den stoppar enligt Kshanas egen konvergensregel för parametrar, när varje parametersteg är mindre än 1e-3 av dess formella standardavvikelse; artikeln stoppar i stället när RMS ändras med mindre än 0,1 mm. RAC-polynomen anpassas därefter till residualerna längs/tvärs/radiellt med linjär minstakvadratmetod, och klockpolynomet till referensklockan minus den relativistiska term som användaren lägger tillbaka.

Ett fynd som standardvärdena speglar: efter en keplersk minstakvadratanpassning är residualen per konstruktion det som de 16 parametrarna inte kan spänna upp, så den svänger över fönstret (flera nollgenomgångar i varje komponent) i stället för att driva. Ett korrektionspolynom tar bort den först när dess grad överstiger vad den keplerska uppsättningen redan spänner upp: längs banan 7, tvärs banan 5 och radiellt 6 tar en residual på centimeter över 15 minuter ner till ungefär en millimeter, medan lägre grad tvärs banan tar bort nästan ingenting (residualen tvärs banan är udda kring fönstrets mitt). Ett system som härleder sin keplerska del på något annat sätt lämnar en residual med annan form, och de grader det behöver följer av den. Förinställningen Celestes egna korrektionsgrader (lägre än dessa; de finns bara i förinställningsfilen, src/celeste_iod.rs) körs här på Kshanas minstakvadratbas, vilket är anledningen till att dess tvärbanetermer bidrar lite i den här motorn: ett påstående om Kshanas anpassning, inte om något verkligt system. toe och toc är hela sekunder, eftersom det binära formatet bär dem så.

Varje meddelande används under en period centrerad i sitt anpassningsfönster (den första avvägningstabellen använder hela fönstret). Det som siffrorna för avståndsfel i signalen i rymden (SISRE) mäter är meddelandets representationsfel mot den referens det anpassades till, som ett kvadratiskt medelvärde (RMS) och ett maximum över intervallet. Felet vid banbestämning och banprediktion, som ett verkligt mark- eller ombordsegment lägger till ovanpå, modelleras inte.

Avståndsfel i signalen i rymden#

sisre.rs använder det globala genomsnittliga SISRE från Montenbruck, Steigenberger och 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²) )

Vikterna är medelvärdena över användare jämnt utspridda på den synliga jordkalotten av cos² η och ½ sin² η, där η är nadirvinkeln för siktlinjen vid satelliten, beräknad för banans egen radie och elevationsmask. Vid en mask på 0° återger beräkningen artikelns tabell för medelhög jordbana (GPS 0,98 och 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) och geostationär bana (0,99 och 1/126): det är kontrollen som är VALIDATED. I LEO ger samma medelvärde

Höjd w_R 1 / w_AC² nadirvinkel vid horisonten
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°

så en LEO-användare, som ser satelliten långt från nadir, känner av fel längs och tvärs banan mycket mer än en användare i medelhög bana.

Analyser#

analysis = [...] väljer vilken som helst av de fyra (standard alla).

Avvägning av anpassningsintervall#

[trade] anger intervallet, anpassningsintervallen, uppdateringsperioderna och modellerna. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 till grad 20 och luftmotstånd, 30 minuter av meddelanden) ger, med användningsperioden lika med anpassningsintervallet:

Modell Anpassningsintervall SISRE bana RMS SISRE bana max SISRE med klocka RMS radiellt / längs / tvärs 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

Och med en anpassning på 300 s, med varierande hur ofta ett nytt meddelande tar över:

Modell Uppdateringsperiod SISRE bana RMS SISRE bana max
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

Den keplerska uppsättningen med 16 parametrar försämras från 0,04 cm vid 60 s till 9,35 cm vid 900 s: en keplersk uppsättning med övertoner två gånger per varv kan inte följa de högfrekventa gravitationstermerna och luftmotståndet i en LEO-båge i mer än några minuter, och dess minstakvadratresidual svänger över fönstret. Polynomen längs/tvärs/radiellt (grader 7, 5, 6) tar hand om det som återstår: 1,01 cm vid 900 s, 0,21 cm vid 600 s. Vid de kortaste intervallen ligger de keplerska siffrorna under en millimeter och är inte längre strikt ordnade (anpassningen begränsas då av konditioneringen, inte av modellen).

Modelljämförelse#

scenarios/leo-navmsg-model-comparison.toml kör de fyra modellerna vid 1, 5 och 10 minuter på samma bana, med antalet parametrar och efemerid- och klockbitarna i Kshanas kodning:

Modell Anpassningsintervall Parametrar Efemerid- + klockbitar SISRE bana RMS SISRE med klocka 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 (nollklocka) 60 s 22 750 0,000 cm 28,784 cm
ecef-poly (nollklocka) 300 s 22 750 0,005 cm 28,784 cm
ecef-poly (nollklocka) 600 s 22 750 0,561 cm 28,774 cm

Raden med nollklocka bedöms mot en klocka som styrs med en residual på 0,24 m (ATOMIC-värdet), de övriga mot den fritt gående klocka de anpassar.

Liu m.fl. 2025, SISRE mot höjd (MODELLED). Samma scenario anpassar Kshanas 22-parametersmodell över bågar på 20 minuter vid artikelns fem höjder, med varje satellits inklination:

Satellit Höjd Inklination Liu m.fl. 2025 Kshana (RMS endast bana) kvot
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

Detta är inte en validering. Artikeln anpassade verkliga precisa vetenskapliga banor för de namngivna satelliterna (med deras fulla gravitations-, luftmotstånds- och icke-gravitationshistorik); Kshana anpassar sin egen integrerade bana, beräknar de sex tillagda parametrarna som beskrivits ovan och använder sina egna SISRE-vikter. Jämförelsen visar trenden och storleksordningen. Jämförelsen på de verkliga banor som artikeln anpassade är tests/leo_navmsg_fit_real_orbit_oracle.rs (sedan 0,30 stämmer 22-parametersanpassningen där överens inom den i förväg fastställda faktorn 1,5, på artikelns dagar och på åtta undanhållna dagar).

Uppdatering mitt i passagen#

[midpass] placerar en användare (standard 45° N, 10° E), hittar den högsta passagen över masken inom search_s och schemalägger meddelanden var update_period_s. Vid varje byte inom passagen redovisas positionshoppet, klockhoppet, användarens pseudoavståndshopp (nytt minus gammalt meddelande), det största hopp någon synlig användare kunde se (sluten form över nadirkonen), avståndsfelet före och efter, samt PASS eller FAIL mot threshold_m. scenarios/leo-navmsg-midpass-update.toml (anpassningar på 300 s som uppdateras var 150 s):

Den högsta passagen under ett dygn når 43,7° och varar 455 s. Dess byten:

Byte Elevation Positionshopp Klockhopp Avståndshopp för användaren Hopp vid sämsta geometri
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

Största avståndshopp för användaren 0,35 mm mot en tröskel på 5 cm: PASS.

Koda och avkoda#

scenarios/leo-navmsg-encode-decode.toml kodar det första av tre meddelanden, avkodar det, kontrollerar CRC och avvisar en skadad kopia, skriver ut kvantiseringsbudgeten, samt skriver och läser tillbaka RINEX-blocket och CSV-tabellen:

  • ram: 171 bytes (1310 nyttolastbitar, varav 1045 är efemerid och klocka), 24-bitars cyklisk redundanskontroll (CRC-24Q) 0x19105F;
  • största effekt av ett halvt steg för något enskilt fält: af0, 0,545 mm;
  • hela meddelandet efter kvantisering: position inom 1,126 mm och klocka inom 0,185 mm från det exakta meddelandet; SISRE 0,113 cm exakt, 0,129 cm avkodat;
  • en ram med en omvänd bit avvisas: true;
  • RINEX-rundtur inom 5.0e-06 m, CSV-rundtur inom 0.0e+00 m.

Plattformsoberoende#

En ram består av sända heltal, så den måste vara samma heltal oavsett var och hur scenariot körs: den inbyggda binären på vilket operativsystem som helst, en debug- eller release-bygge, och WebAssembly-bygget (WASM) i en webbläsare. Tre saker stod i vägen. Sinus, cosinus, arcustangens och exponentialfunktion i en värds matematikbibliotek måste inte vara korrekt avrundade och skiljer sig mellan värdar i sista siffran. Ett optimerat bygge på macOS hämtar sinus och cosinus för ett argument från systemets kombinerade rutin, som inte alltid returnerar samma värde som den ensamma sinusen, så ett debug- och ett release-bygge skilde sig också åt. Och den vanliga normalfördelningsgeneratorn anropar värdens exponential och logaritm i sina sällsynta grenar. Anpassningen förvandlar en så liten skillnad till olika kvantiserade fält. Hela typen (referensbana och referensklocka, anpassning, användaralgoritm, avståndsfel i signalen i rymden (SISRE), kodek) beräknar därför varje sådan funktion med Rust-biblioteket libm genom src/portable_math.rs, heltalspotenser som uttryckliga produkter och normalfördelade värden med polarmetoden på generatorns råa utdata. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform fastställer den 171 bytes långa ramen i scenariot för kodning och avkodning nedan och ett kontrollvärde per efemeridmodell; ett debug-bygge, ett release-bygge och WASM-bygget ger byteidentiska resultatdokument för alla fem medföljande leo-navmsg-scenarier.

Binärt format#

Detta är Kshanas egen dokumenterade kodning. Den bär de komponenter som de publicerade beskrivningarna av LEO-navigeringsmeddelanden nämner, modellerad efter Galileo ICD:s fältuppsättning. Den är inte bitlayouten för Celeste eller något annat system: ingen sådan är offentlig.

Ram: preamble 0xA7 (8 bitar), version 1 (4), modell (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), nyttolastlängd i bytes (12), nyttolast nollfylld till en byte, CRC-24Q (en 24-bitars cyklisk redundanskontroll, 24 bitar) över varje föregående byte. CRC-24Q är kontrollen i standarden RTCM 10403 från Radio Technical Commission for Maritime Services och i Galileo ICD (polynom 0x1864CFB, startvärde 0); koden återger katalogens kontrollvärde 0xCDE703 för 123456789 och kontrollbytena i exempelramen för RTCM 10403 meddelandetyp 1005 (VALIDATED).

Stegen i Galileo ICD valdes för medelhög jordbana och är för grova för ett LEO-meddelande på centimeternivå: Crs i steg om 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm vid LEO-radie), vinklarna 2⁻³¹ halvcirklar (1,0 cm) och af0 2⁻³⁴ s (1,7 cm). Kshana behåller ICD:s enheter och halvcirkelkonventionen, förfinar stegen så att varje fälts fel för ett halvt steg stannar under 1 mm i position eller avstånd över ett fönster på 15 minuter, och vidgar fälten för att rymma de intervall som en LEO-anpassning behöver:

Block Fält Bitar Steg Enhet
hjälpdata och synkronisering SVID 8 1 -
hjälpdata och synkronisering IOD 10 1 -
hjälpdata och synkronisering Band 4 1 -
hjälpdata och synkronisering Health 2 1 -
hjälpdata och synkronisering WeekNumber 13 1 vecka
hjälpdata och synkronisering ToW 20 1 s
hjälpdata och synkronisering Flags 4 1 -
klocka (flaggbit 0) toc 20 1 s
klocka (flaggbit 0) af0 34 2^-38 s
klocka (flaggbit 0) af1 28 2^-50 s/s
klocka (flaggbit 0) af2 20 2^-62 s/s^2
Kepler (modeller 1-3) toe 20 1 s
Kepler (modeller 1-3) M0 36 2^-35 halvcirkel
Kepler (modeller 1-3) e 32 2^-33 -
Kepler (modeller 1-3) sqrtA 36 2^-23 m^0,5
Kepler (modeller 1-3) Omega0 36 2^-35 halvcirkel
Kepler (modeller 1-3) i0 36 2^-35 halvcirkel
Kepler (modeller 1-3) omega 36 2^-35 halvcirkel
Kepler (modeller 1-3) deltaN 29 2^-43 semicircle/s
Kepler (modeller 1-3) OmegaDot 29 2^-43 semicircle/s
Kepler (modeller 1-3) iDot 22 2^-43 semicircle/s
Kepler (modeller 1-3) Cuc 26 2^-34 rad
Kepler (modeller 1-3) Cus 26 2^-34 rad
Kepler (modeller 1-3) Crc 26 2^-10 m
Kepler (modeller 1-3) Crs 26 2^-10 m
Kepler (modeller 1-3) Cic 26 2^-34 rad
Kepler (modeller 1-3) Cis 26 2^-34 rad
korrektioner längs/tvärs/radiellt (modell 2) degA 3 1 -
korrektioner längs/tvärs/radiellt (modell 2) degC 3 1 -
korrektioner längs/tvärs/radiellt (modell 2) degR 3 1 -
korrektioner längs/tvärs/radiellt (modell 2) racTauExp 4 1 log2(s)
korrektioner längs/tvärs/radiellt (modell 2) a_k, c_k, r_k 22 2^-14 m
tillägg enligt Liu m.fl. 2025 (modell 3) aDot 26 2^-20 m/s
tillägg enligt Liu m.fl. 2025 (modell 3) nDot 30 2^-58 halvcirkel/s^2
tillägg enligt Liu m.fl. 2025 (modell 3) Crs3 26 2^-10 m
tillägg enligt Liu m.fl. 2025 (modell 3) Crc3 26 2^-10 m
tillägg enligt Liu m.fl. 2025 (modell 3) Crs1 26 2^-10 m
tillägg enligt Liu m.fl. 2025 (modell 3) Crc1 26 2^-10 m
ECEF-polynom (modell 4) tref 20 1 s
ECEF-polynom (modell 4) degP 4 1 -
ECEF-polynom (modell 4) x0, y0, z0 38 2^-11 m
ECEF-polynom (modell 4) x_k, y_k, z_k (k >= 1) 34 2^-12 m
Klobuchar (flaggbit 1) alpha0 8 2^-30 s
Klobuchar (flaggbit 1) alpha1 8 2^-27 s/semicircle
Klobuchar (flaggbit 1) alpha2 8 2^-24 s/halvcirkel^2
Klobuchar (flaggbit 1) alpha3 8 2^-24 s/halvcirkel^3
Klobuchar (flaggbit 1) beta0 8 2^11 s
Klobuchar (flaggbit 1) beta1 8 2^14 s/semicircle
Klobuchar (flaggbit 1) beta2 8 2^16 s/halvcirkel^2
Klobuchar (flaggbit 1) beta3 8 2^16 s/halvcirkel^3
NeQuick-G (flaggbit 2) ai0 11 2^-2 sfu
NeQuick-G (flaggbit 2) ai1 11 2^-8 sfu/deg
NeQuick-G (flaggbit 2) ai2 14 2^-15 sfu/deg^2
NeQuick-G (flaggbit 2) SF1-5 5 1 -
UTC (flaggbit 3) A0 32 2^-30 s
UTC (flaggbit 3) A1 24 2^-50 s/s
UTC (flaggbit 3) dtLS 8 1 s
UTC (flaggbit 3) t0t 8 3600 s
UTC (flaggbit 3) WNot 8 1 vecka
UTC (flaggbit 3) WNLSF 8 1 vecka
UTC (flaggbit 3) DN 3 1 dygn
UTC (flaggbit 3) dtLSF 8 1 s

Ett värde utanför fältets intervall avvisas, det lindas inte runt. Intervallen kontrollerades genom att koda anpassningar vid 300 till 2000 km, inklinationer från 0° till 140° och anpassningsintervall upp till 20 minuter: deltaN och OmegaDot är breda eftersom noden är dåligt definierad i en bana nära ekvatorn och anpassningen fördelar J2-driften i breddargumentet mellan dem, och aDot och nDot eftersom 22-parametersanpassningen över 20 minuter tar upp en del av den kortperiodiska svängningen i halva storaxeln. Sedan 0,30 är 22-parametersanpassningen artikelns vanliga minstakvadratmetod utan a priori-villkor, och en anpassning vid 800 km nära ekvatorn behöver då nDot på ungefär 6.3e-10 halvcirkel/s^2, så dess skala gick från 2^-60 till 2^-58. Korrektionerna längs banan av grad 7 som kepler-rac använder ryms i koefficientintervallet på 22 bitar upp till 15 minuter; en längre anpassning kan överskrida det och avvisas då. quantisation_budget redovisar, för varje efemerid- och klockfält, den största positions- och avståndsändring som en ändring med ett halvt steg ger över användningsperioden, samt ändringen av hela meddelandet efter kvantisering.

Textexporter#

RINEX 4,02 definierar inga LEO-navigeringsposter (dess systembokstäver är G, R, E, J, C, I och S; International GNSS Service (IGS) RINEX 4,02). Blocket som text.rs skriver lånar formen från RINEX 4 — ett postrubrik > EPH, en rad med satellit och epok med tre klocktermer, sända banrader med fyra D19.12-fält — och är ett dokumenterat Kshana-tillägg: systembokstav L, posttyper KP16, KRAC, LU22, APOL, och tre rubrikkommentarer som säger det. Tidigare arbete om LEO-banor i navigeringsposter i RINEX-4-stil: 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-tabellen bär meddelandena kepler16 och kepler-rac, ett per rad. Standardkolumnerna använder namnen i 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 väljer i stället en förinställnings stavning. Båda formaten kan läsas tillbaka.

Jonosfär och UTC#

  • Klobuchar: motorns L1-modell (gnss_sim::klobuchar_delay_m, kontrollerad mot RTKLIB) skalad till bärvågen med förstaordningslagen (f_L1 / f)².
  • NeQuick-G: koefficienterna sänds i meddelandet och effective_ionisation_level returnerar Az = ai0 + ai1·μ + ai2·μ² för en modifierad dip-latitud μ, med algoritmens regler (koefficienter som alla är noll ger 63,7 solar flux units, sfu; resultatet begränsas till [0, 400] sfu). Elektrontäthetsmodellen NeQuick och dess integrering längs signalvägen, som omvandlar Az till en fördröjning, är inte implementerade.
  • En satellit på några hundra kilometers höjd flyger inuti jonosfären. Ingen av de sända modellerna tar hänsyn till elektroninnehållet ovanför satelliten, och ingen korrektion för det tillämpas.
  • UTC: system_to_utc tillämpar de tre fallen i Galileo ICD §5.1.7 (före, inom sex timmar från och efter en skottsekundshändelse); en inskjuten sekund läses som 86400.

Förinställningar#

Förinställningar är data, en fil vardera under src/leo_navmsg/presets/, med sina källor. Motorn och alla medföljande scenarier utom Celeste-scenariot körs utan dem.

Nyckel Källa Bana Bärvåg Meddelandemodell
xona-pulsar PUBLIC, arXiv 2509,19551 1080 km, 53° X1 1593,3225 MHz inte publicerad
xona-pulsar-0 PUBLIC, arXiv 2509,19551 520 km, 97° X1 inte publicerad
iridium PUBLIC, RNTF-rapport, konstellationsbeskrivning 781 km, 86,4° 1621 MHz (bandet 1616–1626 MHz) ingen sänds
starlink PUBLIC, NAVIGATION 72(1), konstellationsbeskrivning 550 km, 53° Ku-band, värde i mitten av bandet (representativt) ingen (opportunistiska signaler)
centispace PUBLIC, Sensors 2023, Satellite Navigation 2026 700 km, 55° nära B1 (maskerad i källan; L1 som ersättning) inte publicerad
cband-generic REPRESENTATIVE 600 km, 97,8° 5020 MHz (mitten av RNSS C-bandet) inte publicerad
atomic PUBLIC, InsideGNSS 500 km (representativt) L1 (representativt) ecef-poly, grad 6, 60 s, uppdaterad var 30 s, nollklocka, 0,24 m styrresidual
celeste-iod WORKSHOP och PUBLIC 510 km, 97,4° 1191,795 MHz kepler-rac, gradtal och postavstånd i förinställningsfilen

RNSS är radionavigeringssatellittjänsten; RNTF är Resilient Navigation and Timing Foundation.

Celeste IOD. Förinställningen för Europeiska rymdorganisationens (ESA) Celeste-demonstration i omloppsbana (IOD) är den enda som använder material som presenterades vid ESA:s LEO-PNT-workshop inom Navigation Innovation and Support Programme (NAVISP), 2026: meddelandestrukturen (Galileos keplerska uppsättning plus korrektionspolynom längs/tvärs/radiellt, klockpolynom, SVID, hälsa, IOD, jonosfärs- och UTC-parametrar), postavståndet och CSV-kolumnnamnen. Banan (510 km, nästan polär solsynkron) och bärvågen kommer från offentliga källor som anges i filen. Bitlayouten för Celeste är inte offentlig och återges inte; senare Celeste-faser och Europeiska unionens (EU) LEO-PNT-system kan skilja sig åt. Varje värde som härrör från workshopen finns i modulen navmsg i src/celeste_iod.rs, som används av scenarios/leo-navmsg-celeste-iod.toml. Så hålls förinställningen undan: varje tal från workshopen i motorn finns i en enda fil, src/celeste_iod.rs, som build.rs bara kompilerar in när den finns, och i de scenarier som bara finns i förrådet scenarios/*celeste-iod*.toml. Om man tar bort den filen och de scenarierna hålls förinställningen undan utan någon källkodsändring; alla andra tester, referenser och scenarier körs utan den, och antalet scenariofiler i README räknar fortfarande med de undanhållna filerna.

Verifiering#

Rad Etikett Oberoende referens
SISRE-vikter VALIDATED tabellen i Montenbruck m.fl. 2018 (GPS, GLONASS, Galileo, BeiDou, geostationär)
Användaralgoritmen i Galileo ICD VALIDATED RTKLIB eph2pos på fyra verkliga sända Galileo-efemerider, 1 mm per axel (tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED katalogens kontrollvärde 0xCDE703; exempelramen RTCM 10403 1005
Anpassning och SISRE-avvägning MODELLED tvåkroppsreferens återfunnen inom 1 mm; korrigerad J2–J6-anpassning inom 1 mm; monoton tillväxt med intervallet
Kontinuitet mitt i passagen MODELLED hoppidentitet; konbegränsning i sluten form mot sampling
Binärt format och budget MODELLED rundturer; varje fälts halva steg under 1 mm
RINEX-stil och CSV MODELLED rundturer
22-parametersmodellen och anpassningen enligt Liu m.fl. 2025 VALIDATED Precisa banor från TU Graz ITSG för fyra satelliter mot artikelns tabeller 4, 5, 6 och 8: kvoterna för längs, tvärs, radiellt och SISRE 0,755 till 1,138 på artikelns dagar och 0,683 till 1,186 på åtta undanhållna dagar, inom 1.5x (tests/leo_navmsg_fit_real_orbit_oracle.rs)
ATOMIC-polynomet med nollklocka och tabellen för fem höjder MODELLED ATOMIC-uppgifter från InsideGNSS; den publicerade Liu-tabellen återgiven bredvid Kshanas anpassning på integrerad bana, inte fastställd
Jonosfär och UTC MODELLED ICD:s slutna former; Klobuchar-modellen kontrollerad mot RTKLIB

Begränsningar#

  • SISRE är bara representationsfel: inget fel vid banbestämning eller banprediktion.
  • Referensen är en integration i Kshana (ingen tredje kropp, strålningstryck från solen eller tidvatten), inte en verklig satellits precisa bana.
  • Det binära formatet och RINEX-blocket är Kshanas egna.
  • NeQuick-G sänds men integreras inte till en fördröjning; ingen korrektion för en satellit inuti jonosfären.
  • Jämförelsen med Liu m.fl. skiljer sig i banor, tolkning av parametrar och vikter.