LEO-navigatiebericht
De scenariosoort leo-navmsg bouwt het broadcast-efemeride- en klokbericht van een PNT-satelliet (positiebepaling, navigatie en tijdsynchronisatie) in een lage aardbaan (LEO) en beantwoordt de vragen die een berichtontwerper stelt: hoe lang kan één bericht dekken, wat levert elke extra parameter op, wat ziet een gebruiker wanneer het bericht halverwege een passage wijzigt, en hoeveel bits kost het om het tot op de centimeter te dragen.
Het is systeemonafhankelijk. Elke baan, elke draaggolf en elk van de vier efemeridemodellen draait zonder enige voorinstelling; de benoemde voorinstellingen zijn optionele gegevens (zie Voorinstellingen).
Druk een meegeleverd voorbeeld af met kshana example <name> (één naam per aanroep) en voer het uit met kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update en leo-navmsg-encode-decode. De soort is ook de berichtfase van de soort leo-pnt-chain (LEO-PNT.md) en het lid van de campagne leo-focus-data-services, die vier berichtconfiguraties samenstelt en de framelengte van elk rapporteert (146, 154, 159 en 171 bytes).
Code: src/leo_navmsg/ — elements.rs (records en gebruikersalgoritme), truth.rs (referentiebaan en -klok), fit.rs (fitter), sisre.rs (afstandsfout van het signaal in de ruimte), services.rs (ionosfeer en Coordinated Universal Time (UTC)), codec.rs (binair formaat), text.rs (exports in Receiver Independent Exchange Format (RINEX)-stijl en als door komma's gescheiden waarden (CSV)), presets/ (één bestand per voorinstelling), mod.rs (de soort).
Wat een bericht bevat#
| Onderdeel | Inhoud |
|---|---|
| Hulpgegevens | identificatie van het ruimtevoertuig (SVID), issue of data (IOD), bandidentificatie, gezondheidsstatus van het signaal (Galileo-conventie: 0 OK, 1 buiten dienst, 2 uitgebreide operaties, 3 in test) |
| Synchronisatie | weeknummer, tijd van de week (TOW) van uitzending en een klokpolynoom van de tweede orde af0 + af1·(t − toc) + af2·(t − toc)² |
| Efemeride | een van de vier onderstaande modellen |
| Overige diensten | een Klobuchar-broadcast-ionosfeerset, Galileo NeQuick-G-coëfficiënten ai0, ai1, ai2 met vijf stormvlaggen, en parameters voor systeemtijd naar UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF |
Efemeridemodellen#
| Code | Model | Parameters |
|---|---|---|
kepler16 |
de Kepler-set uit het 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 |
hetzelfde, plus correctiepolynomen langs de baan, dwars op de baan en radiaal (RAC) a0…, c0…, r0… in τ = tk / tau_s, coëfficiënten in meters, tau_s de macht van twee op of boven de helft van het fitinterval (uitgezonden), graden ingesteld door rac_degrees (standaard 7, 5, 6) |
standaard 16 + 21, plus de tijdschaal |
liu22 |
het model met 22 parameters van Liu, Su, Xie, Zhou en Qu (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): de 16 plus ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 |
22 |
ecef-poly |
het ATOMIC-model (Autonomous Time and Orbit Determination for Microsatellite Constellations) met “nulklok”: een aardvast (ECEF) polynoom per as in τ = (t − t_ref) / 64 s (standaardgraad 6), zonder klokterm omdat de satellietklok op systeemtijd wordt gestuurd (InsideGNSS) |
standaard 22 |
Het gebruikersalgoritme (elements::sat_state) is de reeks uit het Galileo-ICD (vergelijking van Kepler, correcties van de tweede harmonische, aardvaste knoop), gevolgd, voor kepler-rac, door de drie polynomen in het eigen stelsel van de Kepler-baan: radiaal langs de geëvalueerde positie, dwars op de baan langs de baannormaal uit de gecorrigeerde inclinatie en knoop, langs de baan om de driehoek te voltooien. De klok voegt de relativistische ICD-term F·e·√A·sin E toe; voor ecef-poly is dat de algemene vorm −2 r·v / c² uit het polynoom en zijn afgeleide.
De termen van Liu et al. volgen het gebruikersalgoritme van het artikel (Section 2,2, Eq. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (releases vóór 0,30 gebruikten de conventie voor civiele navigatie van het Global Positioning System (GPS) ½·ṅ·tk, zodat een ṅ die zij schreven tweemaal die van het artikel is), en Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ opgeteld bij de straal, Φ het ongecorrigeerde argument van de breedte. De schaalconventie van ṅ is overgenomen uit Eq. 1 van het artikel; de vergelijking met het artikel op echte banen hangt daar niet van af (een factor ½ op ṅ laat elke gefitte waarde ongewijzigd), dus de betekenis van een uitgezonden waarde van nDot is daar niet getoetst aan een onafhankelijke externe referentie.
Twee interpretaties zijn die van Kshana zelf en worden als zodanig vermeld:
- Het RAC-stelsel en de normalisatie
τ = tk / tau_s. Geen enkel openbaar document definieert een correctiestelsel voor LEO in een broadcast-bericht. - De klok van een bericht met nulklok is in totaal nul: de stuurlus wordt geacht de schijnbare klok, inclusief de relativistische term, op systeemtijd te houden.
De fitter#
truth.rs integreert de baan met een Runge–Kutta van de vierde orde met vaste stap in een stelsel dat met één rotatie overgaat in aardvaste assen, θ(t) = θ0 + Ω̇e·t, dezelfde enkele rotatie die een broadcast-gebruikersalgoritme toepast. De zwaartekracht is tweelichamen (gravity_degree = 0), de zonale harmonischen J2 tot J6 (2 tot 6), of het veld van het Earth Gravitational Model 2008 (EGM2008) tot graad en orde 7 tot 70, waarvan de tesserale termen de kortperiodieke signatuur dragen die een LEO-fit moeilijk maakt. Luchtweerstand is optioneel (statische exponentiële dichtheid). De klok is vrijlopend (bias, drift, driftsnelheid en witte frequentieruis bij een opgegeven Allan-deviatie van één seconde, plus de periodieke relativistische term) of gestuurd (een Gauss–Markov-residu van de eerste orde).
fit.rs fit de Kepler-set met Levenberg–Marquardt op niet-singuliere elementen (e·cos ω, e·sin ω, λ0 = M0 + ω): een LEO-baan is vrijwel cirkelvormig, dus ω en M0 zijn alleen vrijwel niet van elkaar te onderscheiden. Hij start vanuit de osculerende toestand bij toe met de J2-knoopsnelheid. Zwakke priors gecentreerd op nul begrenzen de snelheden en harmonischen die een korte boog niet kan oplossen; met een waarnemingsgewicht van 1 cm werken zij alleen in die nulrichtingen. De fit liu22 neemt daarentegen de start en schatter uit Section 2,3 van het artikel over: hij start met elke correctieterm op nul, heeft geen priors (gewone kleinste kwadraten) en behoudt de limiet van 100 iteraties van het artikel. Hij stopt volgens de eigen parameterconvergentieregel van Kshana, wanneer elke parameterstap kleiner is dan 1e-3 van de formele standaarddeviatie; het artikel stopt in plaats daarvan wanneer de RMS met minder dan 0,1 mm verandert. De RAC-polynomen worden vervolgens met lineaire kleinste kwadraten gefit op de residuen langs/dwars/radiaal, en het klokpolynoom op de referentieklok min de relativistische term die de gebruiker weer optelt.
Een bevinding die de standaardwaarden vastleggen: na een Kepler-fit met kleinste kwadraten is het residu per constructie wat de 16 parameters niet kunnen overspannen, dus het oscilleert over het venster (meerdere nuldoorgangen in elke component) in plaats van te driften. Een correctiepolynoom verwijdert het alleen wanneer zijn graad groter is dan wat de Kepler-set al overspant: langs de baan 7, dwars op de baan 5 en radiaal 6 brengen een residu van 15 minuten van centimeters terug tot ongeveer een millimeter, terwijl lagere graden dwars op de baan vrijwel niets verwijderen (het residu dwars op de baan is oneven om het midden van het venster). Een systeem dat zijn Kepler-deel op een andere manier afleidt, laat een residu van een andere vorm achter, en de benodigde graden volgen daaruit. De eigen correctiegraden van de Celeste-voorinstelling (lager dan deze; ze staan alleen in het voorinstellingsbestand, src/celeste_iod.rs) draaien hier op de kleinste-kwadratenbasis van Kshana, en daarom dragen de termen dwars op de baan in deze engine weinig bij: een uitspraak over de fitter van Kshana, niet over enig echt systeem. toe en toc zijn hele seconden, zoals het binaire formaat ze draagt.
Elk bericht wordt gebruikt over een periode die in zijn fitvenster is gecentreerd (de eerste afwegingstabel gebruikt het hele venster). Wat de cijfers voor de afstandsfout van het signaal in de ruimte (SISRE) meten, is de representatiefout van het bericht ten opzichte van de referentie waarop het is gefit, als root mean square (RMS) en als maximum over de overspanning. De fout van baanbepaling en baanvoorspelling, die een echt grond- of boordsegment daar bovenop toevoegt, wordt niet gemodelleerd.
Afstandsfout van het signaal in de ruimte#
sisre.rs gebruikt de wereldgemiddelde SISRE van Montenbruck, Steigenberger en 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²) )
De gewichten zijn de gemiddelden over gebruikers die gelijkmatig zijn verdeeld over de zichtbare aardkap van cos² η en ½ sin² η, met η de nadirhoek van de zichtlijn bij de satelliet, berekend voor de eigen straal en elevatiemasker van de baan. Bij een masker van 0° reproduceert de berekening de tabel van het artikel voor de gemiddelde aardbaan (GPS 0,98 en 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) en de geostationaire baan (0,99 en 1/126): dat is de VALIDATED controle. Bij LEO geeft hetzelfde gemiddelde
| Hoogte | w_R |
1 / w_AC² |
nadirhoek aan de horizon |
|---|---|---|---|
| 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° |
zodat een LEO-gebruiker, die de satelliet ver van nadir ziet, fouten langs en dwars op de baan veel sterker voelt dan een gebruiker in een gemiddelde baan.
Analyses#
analysis = [...] kiest een van de vier (standaard alle).
Afweging van het fitinterval#
[trade] stelt de overspanning, de fitintervallen, de updateperioden en de modellen in. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 tot graad 20 en luchtweerstand, 30 minuten aan berichten) geeft, met een gebruiksperiode gelijk aan het fitinterval:
| Model | Fitinterval | SISRE baan-RMS | SISRE baan max | SISRE met klok-RMS | radiaal / langs / dwars 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 |
En met een fit van 300 s, waarbij varieert hoe vaak een nieuw bericht het overneemt:
| Model | Updateperiode | SISRE baan-RMS | SISRE baan 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 |
De Kepler-set met 16 parameters verslechtert van 0,04 cm bij 60 s tot 9,35 cm bij 900 s: één Kepler-set met harmonischen van tweemaal per omloop kan de zwaartekrachttermen met hogere frequentie en de luchtweerstand van een LEO-boog niet langer dan een paar minuten volgen, en zijn kleinste-kwadratenresidu oscilleert over het venster. De polynomen langs/dwars/radiaal (graden 7, 5, 6) absorberen wat overblijft: 1,01 cm bij 900 s, 0,21 cm bij 600 s. Bij de kortste intervallen zijn de Kepler-waarden submillimeter en niet langer strikt geordend (de fit wordt dan beperkt door de conditionering, niet door het model).
Modelvergelijking#
scenarios/leo-navmsg-model-comparison.toml draait de vier modellen op 1, 5 en 10 minuten op dezelfde baan, met het aantal parameters en de bits voor efemeride en klok in de codering van Kshana:
| Model | Fitinterval | Parameters | Efemeride- + klokbits | SISRE baan-RMS | SISRE met klok-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 (nulklok) |
60 s | 22 | 750 | 0,000 cm | 28,784 cm |
ecef-poly (nulklok) |
300 s | 22 | 750 | 0,005 cm | 28,784 cm |
ecef-poly (nulklok) |
600 s | 22 | 750 | 0,561 cm | 28,774 cm |
De rij met nulklok wordt gescoord tegen een klok die is gestuurd met een residu van 0,24 m (de ATOMIC-waarde), de andere tegen de vrijlopende klok die zij fitten.
Liu et al. 2025, SISRE versus hoogte (MODELLED). Hetzelfde scenario fit het model met 22 parameters van Kshana over bogen van 20 minuten op de vijf hoogten van het artikel, bij de inclinatie van elke satelliet:
| Satelliet | Hoogte | Inclinatie | Liu et al. 2025 | Kshana (alleen baan-RMS) | verhouding |
|---|---|---|---|---|---|
| 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 |
Dit is geen toetsing aan een onafhankelijke externe referentie. Het artikel fitte echte precieze wetenschappelijke banen van de genoemde satellieten (met hun volledige zwaartekracht-, luchtweerstands- en niet-zwaartekrachtgeschiedenis); Kshana fit zijn eigen geïntegreerde baan, evalueert de zes toegevoegde parameters zoals hierboven beschreven en gebruikt zijn eigen SISRE-gewichten. De vergelijking toont de trend en de orde van grootte. De vergelijking op dezelfde echte banen die het artikel fitte is tests/leo_navmsg_fit_real_orbit_oracle.rs (sinds 0,30 komt de fit met 22 parameters daar overeen binnen de vooraf vastgelegde factor 1,5, op de dagen van het artikel en op acht achtergehouden dagen).
Update halverwege de passage#
[midpass] plaatst een gebruiker (standaard 45° N, 10° O), vindt de hoogste passage boven het masker binnen search_s en plant berichten elke update_period_s. Bij elke omschakeling binnen de passage rapporteert het de positiesprong, de kloksprong, de pseudorangesprong van de gebruiker (nieuw bericht min oud), de grootste sprong die een zichtbare gebruiker kan zien (gesloten vorm over de nadirkegel), de afstandsfout vóór en na, en PASS of FAIL tegen threshold_m. scenarios/leo-navmsg-midpass-update.toml (fits van 300 s, elke 150 s bijgewerkt):
De hoogste passage van een dag bereikt 43,7° en duurt 455 s. De omschakelingen:
| Omschakeling | Elevatie | Positiesprong | Kloksprong | Gebruikersafstandssprong | Sprong in de slechtste geometrie |
|---|---|---|---|---|---|
| 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 |
Grootste gebruikersafstandssprong 0,35 mm tegenover een drempel van 5 cm: PASS.
Coderen en decoderen#
scenarios/leo-navmsg-encode-decode.toml codeert het eerste van drie berichten, decodeert het, controleert de CRC en weigert een beschadigde kopie, drukt het kwantisatiebudget af en schrijft en leest het RINEX-achtige blok en de CSV-tabel terug:
- frame: 171 bytes (1310 payloadbits, waarvan 1045 efemeride en klok), 24-bits cyclische redundantiecontrole (CRC-24Q)
0x19105F; - grootste halve-stapseffect van een enkel veld:
af0, 0,545 mm; - heel bericht na kwantisatie: positie binnen 1,126 mm en klok binnen 0,185 mm van het exacte bericht; SISRE 0,113 cm exact, 0,129 cm gedecodeerd;
- een frame met één omgeslagen bit wordt geweigerd: true;
- RINEX-achtige rondgang binnen 5.0e-06 m, CSV-rondgang binnen 0.0e+00 m.
Platformonafhankelijkheid#
Een frame wordt als gehele getallen uitgezonden, dus het moet dezelfde gehele getallen opleveren waar en hoe het scenario ook draait: de native binary op elk besturingssysteem, een debug- of een releasebuild en de WebAssembly-build (WASM) in een browser. Drie dingen stonden hierbij in de weg. De sinus, cosinus, arctangens en exponentiële functie van de wiskundebibliotheek van een host zijn niet verplicht correct afgerond en verschillen tussen hosts in de laatste plaats. Een geoptimaliseerde build op macOS haalt een sinus en een cosinus van één argument uit de gecombineerde routine van het systeem, die niet altijd de waarde van de losse sinus teruggeeft, waardoor ook een debug- en een releasebuild van elkaar verschilden. En de gebruikelijke normale sampler roept in zijn zeldzame takken de exponentiële en logaritmische functie van de host aan. De fit zet een zo klein verschil om in andere gekwantiseerde velden. Het hele soort (referentiebaan en -klok, fit, gebruikersalgoritme, signal-in-space range error (SISRE), codec) berekent daarom elke dergelijke functie met de pure-Rust-crate libm via src/portable_math.rs, gehele machten als expliciete producten en normale afwijkingen met de polaire methode op de ruwe uitvoer van de generator. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform legt het frame van 171 bytes van het scenario voor coderen en decoderen hieronder vast, plus één controlewaarde per efemeridemodel; een debug-build, een releasebuild en de WASM-build geven byte-identieke resultaatdocumenten voor alle vijf meegeleverde leo-navmsg-scenario's.
Binair formaat#
Dit is de eigen, gedocumenteerde codering van Kshana. Ze bevat de onderdelen die de gepubliceerde beschrijvingen van LEO-navigatieberichten noemen, naar het voorbeeld van de veldenset van de Galileo ICD. Ze is niet de bitindeling van Celeste of van enig ander systeem: die is niet openbaar.
Frame: preambule 0xA7 (8 bits), versie 1 (4), model (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), payloadlengte in bytes (12), payload met nullen aangevuld tot een byte, CRC-24Q (een 24-bits cyclische redundantiecontrole, 24 bits) over alle voorafgaande bytes. CRC-24Q is de controle van de norm van de Radio Technical Commission for Maritime Services, RTCM 10403, en van de Galileo ICD (polynoom 0x1864CFB, beginwaarde 0); de code reproduceert de cataloguscontrolewaarde 0xCDE703 voor 123456789 en de controlebytes van het voorbeeldframe van berichttype 1005 uit RTCM 10403 (VALIDATED).
De stappen van de Galileo ICD zijn gekozen voor een middelhoge baan om de aarde en zijn te grof voor een LEO-bericht op centimeterniveau: Crs in stappen van 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm op LEO-straal), de hoeken 2⁻³¹ halve cirkels (1,0 cm) en af0 2⁻³⁴ s (1,7 cm). Kshana behoudt de ICD-eenheden en de conventie van halve cirkels, verfijnt de stappen zodat de halve-stapsfout van elk veld onder 1 mm positie of afstand blijft over een venster van 15 minuten, en verbreedt de velden om de bereiken te dekken die een LEO-fit nodig heeft:
| Blok | Veld | Bits | Stap | Eenheid |
|---|---|---|---|---|
| hulp en synchronisatie | SVID |
8 | 1 | - |
| hulp en synchronisatie | IOD |
10 | 1 | - |
| hulp en synchronisatie | Band |
4 | 1 | - |
| hulp en synchronisatie | Health |
2 | 1 | - |
| hulp en synchronisatie | WeekNumber |
13 | 1 | week |
| hulp en synchronisatie | ToW |
20 | 1 | s |
| hulp en synchronisatie | Flags |
4 | 1 | - |
| klok (vlagbit 0) | toc |
20 | 1 | s |
| klok (vlagbit 0) | af0 |
34 | 2^-38 | s |
| klok (vlagbit 0) | af1 |
28 | 2^-50 | s/s |
| klok (vlagbit 0) | af2 |
20 | 2^-62 | s/s^2 |
| Kepler (modellen 1-3) | toe |
20 | 1 | s |
| Kepler (modellen 1-3) | M0 |
36 | 2^-35 | halve cirkel |
| Kepler (modellen 1-3) | e |
32 | 2^-33 | - |
| Kepler (modellen 1-3) | sqrtA |
36 | 2^-23 | m^0,5 |
| Kepler (modellen 1-3) | Omega0 |
36 | 2^-35 | halve cirkel |
| Kepler (modellen 1-3) | i0 |
36 | 2^-35 | halve cirkel |
| Kepler (modellen 1-3) | omega |
36 | 2^-35 | halve cirkel |
| Kepler (modellen 1-3) | deltaN |
29 | 2^-43 | semicircle/s |
| Kepler (modellen 1-3) | OmegaDot |
29 | 2^-43 | semicircle/s |
| Kepler (modellen 1-3) | iDot |
22 | 2^-43 | semicircle/s |
| Kepler (modellen 1-3) | Cuc |
26 | 2^-34 | rad |
| Kepler (modellen 1-3) | Cus |
26 | 2^-34 | rad |
| Kepler (modellen 1-3) | Crc |
26 | 2^-10 | m |
| Kepler (modellen 1-3) | Crs |
26 | 2^-10 | m |
| Kepler (modellen 1-3) | Cic |
26 | 2^-34 | rad |
| Kepler (modellen 1-3) | Cis |
26 | 2^-34 | rad |
| langs-, dwars- en radiale correcties (model 2) | degA |
3 | 1 | - |
| langs-, dwars- en radiale correcties (model 2) | degC |
3 | 1 | - |
| langs-, dwars- en radiale correcties (model 2) | degR |
3 | 1 | - |
| langs-, dwars- en radiale correcties (model 2) | racTauExp |
4 | 1 | log2(s) |
| langs-, dwars- en radiale correcties (model 2) | a_k, c_k, r_k |
22 | 2^-14 | m |
| Extra's van Liu et al. 2025 (model 3) | aDot |
26 | 2^-20 | m/s |
| Extra's van Liu et al. 2025 (model 3) | nDot |
30 | 2^-58 | halve cirkel/s^2 |
| Extra's van Liu et al. 2025 (model 3) | Crs3 |
26 | 2^-10 | m |
| Extra's van Liu et al. 2025 (model 3) | Crc3 |
26 | 2^-10 | m |
| Extra's van Liu et al. 2025 (model 3) | Crs1 |
26 | 2^-10 | m |
| Extra's van Liu et al. 2025 (model 3) | Crc1 |
26 | 2^-10 | m |
| ECEF-polynoom (model 4) | tref |
20 | 1 | s |
| ECEF-polynoom (model 4) | degP |
4 | 1 | - |
| ECEF-polynoom (model 4) | x0, y0, z0 |
38 | 2^-11 | m |
| ECEF-polynoom (model 4) | x_k, y_k, z_k (k >= 1) |
34 | 2^-12 | m |
| Klobuchar (vlagbit 1) | alpha0 |
8 | 2^-30 | s |
| Klobuchar (vlagbit 1) | alpha1 |
8 | 2^-27 | s/semicircle |
| Klobuchar (vlagbit 1) | alpha2 |
8 | 2^-24 | s/halve cirkel^2 |
| Klobuchar (vlagbit 1) | alpha3 |
8 | 2^-24 | s/halve cirkel^3 |
| Klobuchar (vlagbit 1) | beta0 |
8 | 2^11 | s |
| Klobuchar (vlagbit 1) | beta1 |
8 | 2^14 | s/semicircle |
| Klobuchar (vlagbit 1) | beta2 |
8 | 2^16 | s/halve cirkel^2 |
| Klobuchar (vlagbit 1) | beta3 |
8 | 2^16 | s/halve cirkel^3 |
| NeQuick-G (vlagbit 2) | ai0 |
11 | 2^-2 | sfu |
| NeQuick-G (vlagbit 2) | ai1 |
11 | 2^-8 | sfu/deg |
| NeQuick-G (vlagbit 2) | ai2 |
14 | 2^-15 | sfu/deg^2 |
| NeQuick-G (vlagbit 2) | SF1-5 |
5 | 1 | - |
| UTC (vlagbit 3) | A0 |
32 | 2^-30 | s |
| UTC (vlagbit 3) | A1 |
24 | 2^-50 | s/s |
| UTC (vlagbit 3) | dtLS |
8 | 1 | s |
| UTC (vlagbit 3) | t0t |
8 | 3600 | s |
| UTC (vlagbit 3) | WNot |
8 | 1 | week |
| UTC (vlagbit 3) | WNLSF |
8 | 1 | week |
| UTC (vlagbit 3) | DN |
3 | 1 | dag |
| UTC (vlagbit 3) | dtLSF |
8 | 1 | s |
Een waarde buiten het bereik van haar veld wordt geweigerd, niet omgeslagen. De bereiken zijn gecontroleerd door fits te coderen op 300 tot 2000 km, bij inclinaties van 0° tot 140° en fitintervallen tot 20 minuten: deltaN en OmegaDot zijn breed omdat de knoop op een bijna-equatoriale baan slecht gedefinieerd is en de fit de J2-drift van het argument van de breedte tussen beide verdeelt, en aDot en nDot omdat de fit met 22 parameters over 20 minuten een deel van de kortperiodieke oscillatie van de halve lange as opneemt. Sinds 0,30 is de fit met 22 parameters de gewone kleinste-kwadratenmethode van het artikel zonder priors, en een equatoriale fit op 800 km heeft dan nDot van ongeveer 6.3e-10 halve cirkel/s^2 nodig, waardoor de schaal van 2^-60 naar 2^-58 ging. De langsbaancorrecties van graad 7 van kepler-rac passen in het coëfficiëntbereik van 22 bits tot 15 minuten; een langere fit kan dat overschrijden en wordt dan geweigerd. quantisation_budget rapporteert voor elk efemeride- en klokveld de grootste verandering in positie en afstand die een verandering van een halve stap over de gebruiksperiode veroorzaakt, en de verandering van het hele bericht na kwantisatie.
Tekstexports#
RINEX 4,02 definieert geen LEO-navigatierecords (de systeemletters zijn G, R, E, J, C, I en S; International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4,02). Het blok dat text.rs schrijft leent de RINEX-4-vorm — een recordkop > EPH, een satelliet- en epochregel met drie klokcoëfficiënten, broadcast-baanregels van vier D19.12-velden — en is een gedocumenteerde Kshana-extensie: systeemletter L, recordtypen KP16, KRAC, LU22, APOL en drie koptekstcommentaren die dat vermelden. Eerder werk over LEO-banen in navigatierecords in RINEX-4-stijl: 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
De CSV-tabel bevat de berichten kepler16 en kepler-rac, één per rij. De standaardkolommen gebruiken de namen van de 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 kiest in plaats daarvan de spelling van een voorinstelling. Beide formaten kunnen worden teruggelezen.
Ionosfeer en UTC#
- Klobuchar: het L1-model van de engine (
gnss_sim::klobuchar_delay_m, getoetst aan RTKLIB), met de eerste-ordewet(f_L1 / f)²geschaald naar de draaggolf. - NeQuick-G: de coëfficiënten reizen mee in het bericht en
effective_ionisation_levelgeeftAz = ai0 + ai1·μ + ai2·μ²terug voor een gemodificeerde dip-breedteμ, met de regels van het algoritme (coëfficiënten die allemaal nul zijn geven 63,7 solar flux units, sfu; het resultaat wordt begrensd tot [0, 400] sfu). Het NeQuick-elektronendichtheidsmodel en de integratie langs het schuine pad, dieAzomzetten in een vertraging, zijn niet geïmplementeerd. - Een satelliet op enkele honderden kilometers vliegt binnen de ionosfeer. Geen van beide broadcastmodellen houdt rekening met de elektroneninhoud boven de satelliet, en er wordt daarvoor geen correctie toegepast.
- UTC:
system_to_utcpast de drie gevallen van de Galileo ICD §5.1.7 toe (vóór, binnen zes uur van en na een schrikkelseconde); een ingevoegde seconde leest 86400.
Voorinstellingen#
Voorinstellingen zijn gegevens, elk één bestand onder src/leo_navmsg/presets/, met hun bronnen. De engine en elk meegeleverd scenario behalve dat van Celeste draaien zonder.
| Sleutel | Bron | Baan | Draaggolf | Berichtmodel |
|---|---|---|---|---|
xona-pulsar |
PUBLIC, arXiv 2509,19551 | 1080 km, 53° | X1 1593,3225 MHz | niet gepubliceerd |
xona-pulsar-0 |
PUBLIC, arXiv 2509,19551 | 520 km, 97° | X1 | niet gepubliceerd |
iridium |
PUBLIC, RNTF-rapport, beschrijving van de constellatie | 781 km, 86,4° | 1621 MHz (band van 1616–1626 MHz) | geen uitzending |
starlink |
PUBLIC, NAVIGATION 72(1), beschrijving van de constellatie | 550 km, 53° | Ku-band, waarde midden in de band (representatief) | geen (signals of opportunity) |
centispace |
PUBLIC, Sensors 2023, Satellite Navigation 2026 | 700 km, 55° | nabij B1 (in de bron afgeschermd; L1 als vervanging) | niet gepubliceerd |
cband-generic |
REPRESENTATIVE | 600 km, 97,8° | 5020 MHz (midden van RNSS C-band) | niet gepubliceerd |
atomic |
PUBLIC, InsideGNSS | 500 km (representatief) | L1 (representatief) | ecef-poly, graad 6, 60 s, elke 30 s ververst, nulklok, 0,24 m restfout van de sturing |
celeste-iod |
WORKSHOP en PUBLIC | 510 km, 97,4° | 1191,795 MHz | kepler-rac, graden en recordafstand in het voorinstellingsbestand |
RNSS is de radionavigatiesatellietdienst; RNTF is de Resilient Navigation and Timing Foundation.
Celeste IOD. De voorinstelling voor de in-orbit demonstration (IOD) Celeste van het Europees Ruimteagentschap (ESA) is de enige die materiaal gebruikt dat is gepresenteerd op de LEO-PNT-workshop van het ESA Navigation Innovation and Support Programme (NAVISP), 2026: de berichtstructuur (Galileo-Keplerset plus langs-, dwars- en radiale correctiepolynomen, klokpolynoom, SVID, health, IOD, ionosferische en UTC-parameters), de recordafstand en de CSV-kolomnamen. De baan (510 km, bijna polair zonsynchroon) en de draaggolf komen uit openbare bronnen die in het bestand worden aangehaald. De bitindeling van Celeste is niet openbaar en wordt niet nagebouwd; latere Celeste-fasen en het LEO-PNT-systeem van de Europese Unie (EU) kunnen afwijken. Elke van de workshop afgeleide waarde staat in de module navmsg van src/celeste_iod.rs, gebruikt door scenarios/leo-navmsg-celeste-iod.toml. Hoe de voorinstelling wordt achtergehouden: elk van de workshop afgeleid getal van de engine staat in één bestand, src/celeste_iod.rs, dat build.rs alleen meecompileert als het bestaat, en in de scenario's scenarios/*celeste-iod*.toml die alleen in de repository staan. Door dat bestand en die scenario's te verwijderen wordt de voorinstelling achtergehouden zonder bronwijziging; elke andere test, onafhankelijke referentie en elk ander scenario draait zonder haar, en het aantal scenariobestanden in de README telt de achtergehouden bestanden nog steeds mee.
Verificatie#
| Rij | Label | Onafhankelijke referentie |
|---|---|---|
| SISRE-gewichten | VALIDATED | Tabel van Montenbruck et al. 2018 (GPS, GLONASS, Galileo, BeiDou, geostationair) |
| Gebruikersalgoritme van de Galileo ICD | VALIDATED | RTKLIB eph2pos op vier echte Galileo-broadcastefemeriden, 1 mm per as (tests/leo_navmsg_reference.rs) |
| CRC-24Q | VALIDATED | cataloguscontrolewaarde 0xCDE703; RTCM 10403 voorbeeldframe 1005 |
| Fitter en SISRE-afweging | MODELLED | tweelichamenreferentie teruggevonden tot 1 mm; gecorrigeerde J2–J6-fit tot 1 mm; monotone groei met het interval |
| Continuïteit halverwege de pass | MODELLED | sprongidentiteit; gesloten-vormgrens van de kegel tegenover bemonstering |
| Binair formaat en budget | MODELLED | rondgangen; de halve stap van elk veld onder 1 mm |
| RINEX-achtig en CSV | MODELLED | rondgangen |
| Model en fit met 22 parameters van Liu et al. 2025 | VALIDATED | nauwkeurige banen van TU Graz ITSG van vier satellieten tegenover de tabellen 4, 5, 6 en 8 van het artikel: verhoudingen langs, dwars, radiaal en SISRE van 0,755 tot 1,138 op de dagen van het artikel en 0,683 tot 1,186 op acht achtergehouden dagen, binnen 1.5x (tests/leo_navmsg_fit_real_orbit_oracle.rs) |
| ATOMIC-nulklokpolynoom en de tabel met vijf hoogten | MODELLED | ATOMIC-feiten uit InsideGNSS; de gepubliceerde tabel van Liu naast de fit van Kshana met geïntegreerde baan, niet vastgepind |
| Ionosfeer en UTC | MODELLED | gesloten vormen uit de ICD; het aan RTKLIB getoetste Klobuchar-model |
Beperkingen#
- SISRE is alleen representatiefout: geen fout in baanbepaling of voorspelling.
- De referentie is een integratie van Kshana (zonder derde lichamen, zonnestralingsdruk of getijden), niet de nauwkeurige baan van een echte satelliet.
- Het binaire formaat en het RINEX-achtige blok zijn van Kshana zelf.
- NeQuick-G wordt meegedragen, niet geïntegreerd tot een vertraging; geen correctie voor een satelliet binnen de ionosfeer.
- De vergelijking met Liu et al. verschilt in banen, lezing van de parameters en gewichten.