LEO-navigationsbesked
Scenarietypen leo-navmsg bygger den udsendte efemeride- og urmeddelelse for en PNT-satellit (positionering, navigation og tidssynkronisering) i lav jordbane (LEO) og besvarer de spørgsmål, en meddelelsesudformer stiller: hvor længe kan én meddelelse dække, hvad køber hver ekstra parameter, hvad ser en bruger, når meddelelsen skifter midt i en passage, og hvor mange bits kræver det at bære den til centimeteren.
Den er systemuafhængig. Enhver bane, enhver bærebølge og enhver af fire efemeridemodeller kører helt uden forudindstilling; de navngivne forudindstillinger er valgfrie data (se Presets).
Udskriv et medfølgende eksempel med kshana example <name> (ét navn pr. kald) og kør det med kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update og leo-navmsg-encode-decode. Typen er også meddelelsestrinnet i typen leo-pnt-chain (LEO-PNT.md) og medlem af kampagnen leo-focus-data-services, som sammensætter fire meddelelseskonfigurationer og rapporterer hver ens rammelængde (146, 154, 159 og 171 bytes).
Kode: src/leo_navmsg/ — elements.rs (poster og brugeralgoritme), truth.rs (sand bane og sandt ur), fit.rs (tilpasningsrutine), sisre.rs (afstandsfejl for signal i rummet), services.rs (ionosfære og Coordinated Universal Time (UTC)), codec.rs (binært format), text.rs (eksport i Receiver Independent Exchange Format (RINEX)-stil og kommasepareret (CSV) form), presets/ (én fil pr. forudindstilling), mod.rs (selve typen).
Hvad en meddelelse indeholder#
| Del | Indhold |
|---|---|
| Hjælpedata | rumfartøjsidentifikator (SVID), dataudgave (IOD), båndidentifikator, signalets sundhedsstatus (Galileo-konvention: 0 OK, 1 ude af drift, 2 udvidet drift, 3 under test) |
| Synkronisering | ugenummer, ugetid (TOW) for afsendelsen og et andenordens urpolynomium af0 + af1·(t − toc) + af2·(t − toc)² |
| Efemeride | én af de fire modeller nedenfor |
| Andre tjenester | et udsendt Klobuchar-ionosfærisk sæt, Galileo NeQuick-G-koefficienter ai0, ai1, ai2 med fem stormflag og parametre fra systemtid til UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF |
Efemeridemodeller#
| Kode | Model | Parametre |
|---|---|---|
kepler16 |
Galileo Open Service Signal-in-Space Interface Control Document (OS SIS ICD) Keplerske sæt: √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe |
16 |
kepler-rac |
det samme plus polynomier for korrektion langs banen, på tværs af banen og radialt (RAC) a0…, c0…, r0… i τ = tk / tau_s, koefficienter i meter, tau_s toerpotensen ved eller over halvdelen af tilpasningsintervallet (udsendt), grader fastsat af rac_degrees (standard 7, 5, 6) |
16 + 21 som standard, plus tidsskalaen |
liu22 |
22-parametermodellen af Liu, Su, Xie, Zhou og 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 "nul-ur": et jordcentreret jordfast (ECEF) polynomium pr. akse i τ = (t − t_ref) / 64 s (standardgrad 6), ingen urled, fordi satellitens ur styres mod systemtid (InsideGNSS) |
22 som standard |
Brugeralgoritmen (elements::sat_state) er Galileo-ICD-sekvensen (Keplers ligning, andenharmoniske korrektioner, jordfast knude) efterfulgt, for kepler-rac, af de tre polynomier langs den Keplerske banes eget system: radialt langs den evaluerede position, på tværs af banen langs banenormalen ud fra den korrigerede inklinering og knude, langs banen, så triaden fuldføres. Uret tilføjer ICD'ets relativistiske led F·e·√A·sin E; for ecef-poly er det den generelle form −2 r·v / c² ud fra polynomiet og dets afledede.
Leddene fra Liu et al. følger artiklens brugeralgoritme (Section 2,2, Eq. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (udgivelser før 0,30 brugte konventionen for Global Positioning System (GPS) civil navigation ½·ṅ·tk, så en ṅ, de skrev, er det dobbelte af artiklens), og Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ lagt til radius, Φ det ukorrigerede breddegradsargument. Skalakonventionen for ṅ er afskrevet fra artiklens Eq. 1; sammenligningen med artiklen på reelle baner afhænger ikke af den (en faktor ½ på ṅ lader alle tilpassede tal være uændrede), så betydningen af en udsendt nDot-værdi er ikke valideret dér.
To aflæsninger er Kshanas egne og angives som sådan:
- RAC-systemet og normaliseringen
τ = tk / tau_s. Intet offentligt dokument definerer et korrektionssystem for LEO til en udsendt meddelelse. - Et nul-urs meddelelse har i alt nul ur: styresløjfen antages at holde det tilsyneladende ur, relativistisk led inklusive, på systemtid.
Tilpasningsrutinen#
truth.rs integrerer banen med en fjerdeordens Runge–Kutta med fast trin i et system, der drejes over i jordfaste akser ved én rotation, θ(t) = θ0 + Ω̇e·t, den samme enkelte rotation, som en udsendt brugeralgoritme anvender. Tyngdekraften er tolegeme (gravity_degree = 0), de zonale harmoniske J2 til J6 (2 til 6), eller feltet Earth Gravitational Model 2008 (EGM2008) til grad og orden 7 til 70, hvis tesserale led bærer det kortperiodiske aftryk, der gør en LEO-tilpasning svær. Luftmodstand er valgfri (statisk eksponentiel massefylde). Uret er frit løbende (bias, drift, driftrate og hvid frekvensstøj ved en angiven Allan-deviation på ét sekund, plus det periodiske relativistiske led) eller styret (en førsteordens Gauss–Markov-residual).
fit.rs tilpasser det Keplerske sæt med Levenberg–Marquardt på ikke-singulære elementer (e·cos ω, e·sin ω, λ0 = M0 + ω): en LEO-bane er næsten cirkulær, så ω og M0 hver for sig er næsten umulige at skelne. Den starter fra den oskulerende tilstand ved toe med J2-knuderaten. Svage nul-centrerede apriorier begrænser de rater og harmoniske, som en kort bue ikke kan opløse; med en observationsvægt på 1 cm virker de kun i disse nulretninger. Tilpasningen liu22 tager i stedet artiklens Section 2,3 start og estimator: den starter med alle korrektionsled lig nul, har ingen apriorier (almindelig mindste kvadraters metode) og beholder artiklens loft på 100 iterationer. Den stopper efter Kshanas egen konvergensregel for parametre, når hvert parametertrin er under 1e-3 af dets formelle standardafvigelse; artiklen stopper i stedet, når RMS ændrer sig med mindre end 0,1 mm. RAC-polynomierne tilpasses derefter til residualerne langs/på tværs/radialt med lineær mindste kvadraters metode, og urpolynomiet til det sande ur minus det relativistiske led, som brugeren lægger til igen.
Et fund, som standardværdierne afspejler: efter en Keplersk tilpasning med mindste kvadrater er residualen pr. konstruktion det, som de 16 parametre ikke kan spænde over, så den svinger hen over vinduet (flere nulgennemgange i hver komponent) frem for at drive. Et korrektionspolynomium fjerner den kun, når dets grad overstiger det, det Keplerske sæt allerede spænder over: langs banen 7, på tværs af banen 5 og radialt 6 bringer en 15-minutters residual fra centimeter til omkring en millimeter, mens lavere grader på tværs af banen fjerner næsten intet (residualen på tværs af banen er ulige om vinduets midte). Et system, der udleder sin Keplerske del på anden vis, efterlader en residual af en anden form, og de grader, det kræver, følger heraf. Forudindstillingen Celestes egne korrektionsgrader (lavere end disse; de findes kun i forudindstillingsfilen, src/celeste_iod.rs) kører her på Kshanas mindste-kvadraters-grundlag, hvorfor dens led på tværs af banen bidrager lidt i denne motor: en udtalelse om Kshanas tilpasningsrutine, ikke om noget reelt system. toe og toc er hele sekunder, som det binære format bærer dem.
Hver meddelelse bruges over en periode centreret i sit tilpasningsvindue (den første afvejningstabel bruger hele vinduet). Det, tallene for signal-i-rummet-afstandsfejl (SISRE) måler, er meddelelsens repræsentationsfejl mod den sandhed, den blev tilpasset til, som root mean square (RMS) og et maksimum over spændet. Fejlen ved banebestemmelse og baneprædiktion, som et reelt jord- eller ombordsegment tilføjer ovenpå, er ikke modelleret.
Afstandsfejl for signal i rummet#
sisre.rs bruger den globale gennemsnitlige SISRE fra Montenbruck, Steigenberger og 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²) )
Vægtene er gennemsnittene over brugere jævnt fordelt på den synlige jordkalot af cos² η og ½ sin² η, hvor η er synslinjens nadirvinkel ved satellitten, beregnet for banens egen radius og elevationsmaske. Ved en maske på 0° gengiver beregningen artiklens tabel for mellemhøj jordbane (GPS 0,98 og 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) og geostationær bane (0,99 og 1/126): det er den VALIDATED kontrol. I LEO giver det samme gennemsnit
| Højde | w_R |
1 / w_AC² |
nadirvinkel ved 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-bruger, der ser satellitten langt fra nadir, mærker fejl langs og på tværs af banen langt mere end en bruger i mellemhøj bane.
Analyser#
analysis = [...] vælger en hvilken som helst af de fire (standard alle).
Afvejning af tilpasningsinterval#
[trade] angiver spændet, tilpasningsintervallerne, opdateringsperioderne og modellerne. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 til grad 20 og luftmodstand, 30 minutters meddelelser) giver, med brugsperioden lig tilpasningsintervallet:
| Model | Tilpasningsinterval | SISRE bane-RMS | SISRE bane-maks. | SISRE med ur-RMS | radial / langs / på 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 |
Og med en tilpasning på 300 s, idet det varieres, hvor ofte en ny meddelelse overtager:
| Model | Opdateringsperiode | SISRE bane-RMS | SISRE bane-maks. |
|---|---|---|---|
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 |
Det Keplerske sæt med 16 parametre forringes fra 0,04 cm ved 60 s til 9,35 cm ved 900 s: ét Kepler-sæt med harmoniske to gange pr. omløb kan ikke følge tyngdekraftens højfrekvente led og luftmodstanden på en LEO-bue i mere end nogle få minutter, og dets residual efter mindste kvadrater svinger hen over vinduet. Polynomierne langs/på tværs/radialt (grader 7, 5, 6) optager det, der er tilbage: 1,01 cm ved 900 s, 0,21 cm ved 600 s. Ved de korteste intervaller er de Keplerske tal under en millimeter og ikke længere strengt ordnede (tilpasningen er da begrænset af kondition, ikke af modellen).
Modelsammenligning#
scenarios/leo-navmsg-model-comparison.toml kører de fire modeller ved 1, 5 og 10 minutter på samme bane, med antallet af parametre og efemeride- og urbits i Kshanas kodning:
| Model | Tilpasningsinterval | Parametre | Efemeride- og urbits | SISRE bane-RMS | SISRE med ur-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 (nul-ur) |
60 s | 22 | 750 | 0,000 cm | 28,784 cm |
ecef-poly (nul-ur) |
300 s | 22 | 750 | 0,005 cm | 28,784 cm |
ecef-poly (nul-ur) |
600 s | 22 | 750 | 0,561 cm | 28,774 cm |
Rækken med nul-ur bedømmes mod et ur styret med en residual på 0,24 m (ATOMIC-tallet), de øvrige mod det frit løbende ur, de tilpasser.
Liu et al. 2025, SISRE som funktion af højde (MODELLED). Det samme scenarie tilpasser Kshanas 22-parametermodel over 20-minutters buer i artiklens fem højder, ved hver satellits inklinering:
| Satellit | Højde | Inklinering | Liu et al. 2025 | Kshana (kun bane-RMS) | forhold |
|---|---|---|---|---|---|
| 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 |
Dette er ikke en validering. Artiklen tilpassede reelle præcise videnskabelige baner for de nævnte satellitter (med deres fulde tyngde-, luftmodstands- og ikke-gravitationelle historik); Kshana tilpasser sin egen integrerede bane, evaluerer de seks tilføjede parametre som beskrevet ovenfor og bruger sine egne SISRE-vægte. Sammenligningen viser tendensen og størrelsesordenen. Sammenligningen på de samme reelle baner, som artiklen tilpassede, er tests/leo_navmsg_fit_real_orbit_oracle.rs (siden 0,30 stemmer 22-parametertilpasningen dér inden for den på forhånd fastsatte faktor 1,5, på artiklens dage og på otte tilbageholdte dage).
Opdatering midt i passagen#
[midpass] placerer en bruger (standard 45° N, 10° E), finder den højeste passage over masken inden for search_s og planlægger meddelelser hver update_period_s. Ved hvert skift inden i passagen rapporterer den positionsspringet, urspringet, brugerens pseudoafstandsspring (ny meddelelse minus gammel), det største spring, en synlig bruger kunne se (lukket form over nadirkeglen), afstandsfejlen før og efter, og PASS eller FAIL mod threshold_m. scenarios/leo-navmsg-midpass-update.toml (300 s tilpasninger opdateret hver 150 s):
Den højeste passage på et døgn når 43,7° og varer 455 s. Dens skift:
| Skift | Elevation | Positionsspring | Urspring | Spring i brugerafstand | Spring ved dårligste 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ørste spring i brugerafstand 0,35 mm mod en tærskel på 5 cm: PASS.
Kodning og afkodning#
scenarios/leo-navmsg-encode-decode.toml koder den første af tre meddelelser, afkoder den, kontrollerer CRC'en og afviser en beskadiget kopi, udskriver kvantiseringsbudgettet og skriver og indlæser igen RINEX-lignende blok og CSV-tabel:
- ramme: 171 bytes (1310 nyttelastbits, heraf 1045 efemeride og ur), 24-bit cyklisk redundanskontrol (CRC-24Q)
0x19105F; - største halvtrinseffekt for et enkelt felt:
af0, 0,545 mm; - hele meddelelsen efter kvantisering: position inden for 1,126 mm og ur inden for 0,185 mm af den nøjagtige meddelelse; SISRE 0,113 cm nøjagtig, 0,129 cm afkodet;
- en ramme med én vendt bit afvises: sandt;
- RINEX-lignende rundtur inden for 5.0e-06 m, CSV-rundtur inden for 0.0e+00 m.
Platformsuafhængighed#
En ramme er transmitterede heltal, så den skal være de samme heltal, uanset hvor og hvordan scenariet køres: den native binære fil på ethvert operativsystem, et debug- eller et release-build og WebAssembly-buildet (WASM) i en browser. Tre ting stod i vejen. Sinus, cosinus, arcustangens og eksponentialfunktion i en værts matematikbibliotek skal ikke være korrekt afrundede og afviger mellem værter i sidste decimal. Et optimeret build på macOS henter sinus og cosinus af ét argument fra systemets kombinerede rutine, som ikke altid returnerer samme værdi som den enkelte sinus, så et debug- og et release-build afveg også fra hinanden. Og den sædvanlige normalfordelingssampler kalder værtens eksponential- og logaritmefunktion i sine sjældne grene. Tilpasningen gør en så lille forskel til forskellige kvantiserede felter. Hele typen (sand bane og sandt ur, tilpasning, brugeralgoritme, signal-i-rummet-afstandsfejl (SISRE), kodek) beregner derfor alle sådanne funktioner med den rene Rust-kasse libm via src/portable_math.rs, heltalspotenser som eksplicitte produkter og normalfordelte afvigelser med polarmetoden på generatorens rå output. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform fastlåser rammen på 171 bytes fra scenariet med kodning og afkodning nedenfor og én kontrolværdi pr. efemeridemodel; et debug-build, et release-build og WASM-buildet giver byte-identiske resultatdokumenter for alle fem medfølgende leo-navmsg-scenarier.
Binært format#
Dette er Kshanas egen dokumenterede kodning. Den bærer de komponenter, som de offentliggjorte beskrivelser af LEO-navigationsmeddelelser nævner, modelleret efter Galileo ICD's feltsæt. Den er ikke bitlayoutet for Celeste eller noget andet system: ingen er offentlige.
Ramme: præambel 0xA7 (8 bits), version 1 (4), model (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), nyttelastlængde i bytes (12), nyttelast udfyldt med nuller til en hel byte, CRC-24Q (en 24-bit cyklisk redundanskontrol, 24 bits) over alle foregående bytes. CRC-24Q er kontrollen i standarden RTCM 10403 fra Radio Technical Commission for Maritime Services og i Galileo ICD (polynomium 0x1864CFB, startværdi 0); koden gengiver katalogets kontrolværdi 0xCDE703 for 123456789 og kontrolbytes i eksempelrammen af RTCM 10403 meddelelsestype 1005 (VALIDATED).
Galileo ICD's trin blev valgt til middelhøj jordbane og er for grove til en LEO-meddelelse på centimeterniveau: Crs i trin på 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm ved LEO-radius), vinklerne 2⁻³¹ halvcirkler (1,0 cm) og af0 2⁻³⁴ s (1,7 cm). Kshana beholder ICD-enhederne og halvcirkelkonventionen, forfiner trinnene, så hvert felts halvtrinsfejl holdes under 1 mm i position eller afstand over et 15-minutters vindue, og udvider felterne, så de dækker de intervaller, en LEO-tilpasning har brug for:
| Blok | Felt | Bits | Trin | Enhed |
|---|---|---|---|---|
| hjælpe- og synkroniseringsdata | SVID |
8 | 1 | - |
| hjælpe- og synkroniseringsdata | IOD |
10 | 1 | - |
| hjælpe- og synkroniseringsdata | Band |
4 | 1 | - |
| hjælpe- og synkroniseringsdata | Health |
2 | 1 | - |
| hjælpe- og synkroniseringsdata | WeekNumber |
13 | 1 | uge |
| hjælpe- og synkroniseringsdata | ToW |
20 | 1 | s |
| hjælpe- og synkroniseringsdata | Flags |
4 | 1 | - |
| ur (flagbit 0) | toc |
20 | 1 | s |
| ur (flagbit 0) | af0 |
34 | 2^-38 | s |
| ur (flagbit 0) | af1 |
28 | 2^-50 | s/s |
| ur (flagbit 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 |
| langs-/tværs-/radiale korrektioner (model 2) | degA |
3 | 1 | - |
| langs-/tværs-/radiale korrektioner (model 2) | degC |
3 | 1 | - |
| langs-/tværs-/radiale korrektioner (model 2) | degR |
3 | 1 | - |
| langs-/tværs-/radiale korrektioner (model 2) | racTauExp |
4 | 1 | log2(s) |
| langs-/tværs-/radiale korrektioner (model 2) | a_k, c_k, r_k |
22 | 2^-14 | m |
| Liu et al. 2025 ekstra led (model 3) | aDot |
26 | 2^-20 | m/s |
| Liu et al. 2025 ekstra led (model 3) | nDot |
30 | 2^-58 | halvcirkel/s^2 |
| Liu et al. 2025 ekstra led (model 3) | Crs3 |
26 | 2^-10 | m |
| Liu et al. 2025 ekstra led (model 3) | Crc3 |
26 | 2^-10 | m |
| Liu et al. 2025 ekstra led (model 3) | Crs1 |
26 | 2^-10 | m |
| Liu et al. 2025 ekstra led (model 3) | Crc1 |
26 | 2^-10 | m |
| ECEF-polynomium (model 4) | tref |
20 | 1 | s |
| ECEF-polynomium (model 4) | degP |
4 | 1 | - |
| ECEF-polynomium (model 4) | x0, y0, z0 |
38 | 2^-11 | m |
| ECEF-polynomium (model 4) | x_k, y_k, z_k (k >= 1) |
34 | 2^-12 | m |
| Klobuchar (flagbit 1) | alpha0 |
8 | 2^-30 | s |
| Klobuchar (flagbit 1) | alpha1 |
8 | 2^-27 | s/semicircle |
| Klobuchar (flagbit 1) | alpha2 |
8 | 2^-24 | s/halvcirkel^2 |
| Klobuchar (flagbit 1) | alpha3 |
8 | 2^-24 | s/halvcirkel^3 |
| Klobuchar (flagbit 1) | beta0 |
8 | 2^11 | s |
| Klobuchar (flagbit 1) | beta1 |
8 | 2^14 | s/semicircle |
| Klobuchar (flagbit 1) | beta2 |
8 | 2^16 | s/halvcirkel^2 |
| Klobuchar (flagbit 1) | beta3 |
8 | 2^16 | s/halvcirkel^3 |
| NeQuick-G (flagbit 2) | ai0 |
11 | 2^-2 | sfu |
| NeQuick-G (flagbit 2) | ai1 |
11 | 2^-8 | sfu/deg |
| NeQuick-G (flagbit 2) | ai2 |
14 | 2^-15 | sfu/deg^2 |
| NeQuick-G (flagbit 2) | SF1-5 |
5 | 1 | - |
| UTC (flagbit 3) | A0 |
32 | 2^-30 | s |
| UTC (flagbit 3) | A1 |
24 | 2^-50 | s/s |
| UTC (flagbit 3) | dtLS |
8 | 1 | s |
| UTC (flagbit 3) | t0t |
8 | 3600 | s |
| UTC (flagbit 3) | WNot |
8 | 1 | uge |
| UTC (flagbit 3) | WNLSF |
8 | 1 | uge |
| UTC (flagbit 3) | DN |
3 | 1 | day |
| UTC (flagbit 3) | dtLSF |
8 | 1 | s |
En værdi uden for sit felts interval afvises og ombrydes ikke. Intervallerne blev kontrolleret ved at kode tilpasninger ved 300 til 2000 km, banehældninger fra 0° til 140° og tilpasningsintervaller op til 20 minutter: deltaN og OmegaDot er brede, fordi knuden er dårligt defineret på en næsten ækvatorial bane, og tilpasningen fordeler argumentets J2-drift for breddevinklen mellem dem, og aDot og nDot er det, fordi 22-parametertilpasningen over 20 minutter optager en del af den kortperiodiske svingning i den halve storakse. Siden 0,30 er 22-parametertilpasningen artiklens almindelige mindste kvadraters metode uden apriori-værdier, og en ækvatorial tilpasning ved 800 km har da brug for nDot på omkring 6.3e-10 halvcirkel/s^2, så dens skala gik fra 2^-60 til 2^-58. De langsgående korrektioner af grad 7 for kepler-rac passer i koefficientintervallet på 22 bit op til 15 minutter; en længere tilpasning kan overskride det og afvises da. quantisation_budget rapporterer for hvert efemeride- og urfelt den største ændring i position og afstand, som en ændring på et halvt trin giver over brugsperioden, samt ændringen i hele meddelelsen efter kvantisering.
Teksteksport#
RINEX 4,02 definerer ingen LEO-navigationsposter (dets systembogstaver er G, R, E, J, C, I og S; International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4,02). Blokken, som text.rs skriver, låner formen fra RINEX 4 — en postoverskrift > EPH, en linje med satellit og epoke med tre urled, broadcast-banelinjer med fire D19.12-felter — og er en dokumenteret Kshana-udvidelse: systembogstav L, posttyper KP16, KRAC, LU22, APOL og tre overskriftskommentarer, der siger det. Tidligere arbejde om LEO-baner i navigationsposter 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ærer kepler16- og kepler-rac-meddelelser, én pr. række. Standardkolonnerne bruger Galileo ICD's navne (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ælger i stedet en forudindstillings stavemåde. Begge formater kan læses tilbage.
Ionosfære og UTC#
- Klobuchar: motorens L1-model (
gnss_sim::klobuchar_delay_m, kontrolleret mod RTKLIB) skaleret til bærebølgen med førsteordens-loven(f_L1 / f)². - NeQuick-G: koefficienterne følger med i meddelelsen, og
effective_ionisation_levelreturnererAz = ai0 + ai1·μ + ai2·μ²for en modificeret dip-breddegradμefter algoritmens regler (koefficienter, der alle er nul, giver 63,7 solar flux units, sfu; resultatet begrænses til [0, 400] sfu). NeQuick-elektrontæthedsmodellen og dens integration langs skråvejen, som omsætterAztil en forsinkelse, er ikke implementeret. - En satellit i nogle hundrede kilometers højde flyver inde i ionosfæren. Ingen af de to broadcast-modeller tager højde for elektronindholdet over satellitten, og der anvendes ingen korrektion for det.
- UTC:
system_to_utcanvender de tre tilfælde i Galileo ICD §5.1.7 (før, inden for seks timer af og efter en skudsekundshændelse); et indskudt sekund læses som 86400.
Forudindstillinger#
Forudindstillinger er data, én fil hver under src/leo_navmsg/presets/, med deres kilder. Motoren og alle medfølgende scenarier undtagen Celeste-scenariet kører uden dem.
| Nøgle | Kilde | Bane | Bærebølge | Meddelelsesmodel |
|---|---|---|---|---|
xona-pulsar |
PUBLIC, arXiv 2509,19551 | 1080 km, 53° | X1 1593,3225 MHz | ikke offentliggjort |
xona-pulsar-0 |
PUBLIC, arXiv 2509,19551 | 520 km, 97° | X1 | ikke offentliggjort |
iridium |
PUBLIC, RNTF-rapport, beskrivelse af konstellationen | 781 km, 86,4° | 1621 MHz (1616–1626 MHz-bånd) | ingen udsendes |
starlink |
PUBLIC, NAVIGATION 72(1), beskrivelse af konstellationen | 550 km, 53° | Ku-bånd, værdi midt i båndet (repræsentativ) | ingen (opportunistiske signaler) |
centispace |
PUBLIC, Sensors 2023, Satellite Navigation 2026 | 700 km, 55° | nær B1 (skjult i kilden; L1 som stedfortræder) | ikke offentliggjort |
cband-generic |
REPRESENTATIVE | 600 km, 97,8° | 5020 MHz (RNSS C-bånds centrum) | ikke offentliggjort |
atomic |
PUBLIC, InsideGNSS | 500 km (repræsentativ) | L1 (repræsentativ) | ecef-poly, grad 6, 60 s, opdateret hvert 30 s, intet ur, 0,24 m styringsresidual |
celeste-iod |
WORKSHOP og PUBLIC | 510 km, 97,4° | 1191,795 MHz | kepler-rac, grader og postafstand i forudindstillingsfilen |
RNSS er radionavigationssatellittjenesten; RNTF er Resilient Navigation and Timing Foundation.
Celeste IOD. Forudindstillingen for Den Europæiske Rumorganisations (ESA's) Celeste-demonstration i kredsløb (IOD) er den eneste, der bruger materiale fremlagt på ESA Navigation Innovation and Support Programme (NAVISP) LEO-PNT-workshoppen, 2026: meddelelsesstrukturen (Galileos Kepler-sæt plus korrektionspolynomier langs/på tværs/radialt, urpolynomium, SVID, helbred, IOD, ionosfære- og UTC-parametre), postafstanden og CSV-kolonnenavnene. Banen (510 km, næsten polær solsynkron) og bærebølgen stammer fra offentlige kilder, der er nævnt i filen. Celestes bitlayout er ikke offentligt og gengives ikke; senere Celeste-faser og Den Europæiske Unions (EU's) LEO-PNT-system kan afvige. Hver værdi afledt af workshoppen findes i modulet navmsg i src/celeste_iod.rs, som bruges af scenarios/leo-navmsg-celeste-iod.toml. Sådan holdes forudindstillingen tilbage: hvert tal i motoren, der stammer fra workshoppen, ligger i én fil, src/celeste_iod.rs, som build.rs kun kompilerer med, når den findes, og i de scenarier, der kun findes i repositoriet, scenarios/*celeste-iod*.toml. Sletter man den fil og de scenarier, holdes forudindstillingen tilbage uden nogen ændring af kildekoden; alle andre tests, uafhængige referencer og scenarier kører uden den, og READMEs antal scenariefiler tæller stadig de tilbageholdte filer med.
Verifikation#
| Række | Mærkat | Uafhængig reference |
|---|---|---|
| SISRE-vægte | VALIDATED | Montenbruck et al. 2018 tabel (GPS, GLONASS, Galileo, BeiDou, geostationær) |
| Galileo ICD's brugeralgoritme | VALIDATED | RTKLIB eph2pos på fire virkelige Galileo-broadcast-efemerider, 1 mm pr. akse (tests/leo_navmsg_reference.rs) |
| CRC-24Q | VALIDATED | katalogets kontrolværdi 0xCDE703; eksempelramme RTCM 10403 1005 |
| Tilpasning og SISRE-afvejning | MODELLED | totlegemesreference genfundet til 1 mm; korrigeret J2–J6-tilpasning til 1 mm; monoton vækst med intervallet |
| Kontinuitet midt i passagen | MODELLED | springidentitet; lukket kegleformel som grænse mod stikprøvetagning |
| Binært format og budget | MODELLED | rundture; hvert felts halve trin under 1 mm |
| RINEX-lignende og CSV | MODELLED | rundture |
| Liu et al. 2025 22-parametermodel og tilpasning | VALIDATED | Præcise TU Graz ITSG-baner for fire satellitter mod artiklens tabeller 4, 5, 6 og 8: forhold for langs, på tværs, radialt og SISRE fra 0,755 til 1,138 på artiklens dage og fra 0,683 til 1,186 på otte tilbageholdte dage, inden for 1,5x (tests/leo_navmsg_fit_real_orbit_oracle.rs) |
| ATOMIC-polynomium uden ur og tabellen med fem højder | MODELLED | ATOMIC-fakta fra InsideGNSS; den offentliggjorte Liu-tabel trykt ved siden af Kshanas tilpasning til integreret bane, ikke fastlåst |
| Ionosfære og UTC | MODELLED | ICD's lukkede formler; den mod RTKLIB kontrollerede Klobuchar-model |
Begrænsninger#
- SISRE er kun repræsentationsfejl: ingen fejl fra banebestemmelse eller prædiktion.
- Referencen er en Kshana-integration (uden tredjelegeme, solstrålingstryk eller tidevand), ikke en virkelig satellits præcise bane.
- Det binære format og den RINEX-lignende blok er Kshanas egne.
- NeQuick-G bæres med, men integreres ikke til en forsinkelse; ingen korrektion for en satellit inde i ionosfæren.
- Sammenligningen med Liu et al. afviger i baner, parameterlæsning og vægte.