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_levelreturnerarAz = 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 omvandlarAztill 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_utctillä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.