LEO-navigointiviesti
Skenaariolaji leo-navmsg rakentaa matalan Maan kiertoradan (LEO) paikannus-, navigointi- ja ajanmääritys (PNT) -satelliitin lähettämän efemeridi- ja kelloviestin sekä vastaa kysymyksiin, joita viestin suunnittelija esittää: kuinka pitkän ajan yksi viesti voi kattaa, mitä kukin lisäparametri tuo, mitä käyttäjä näkee, kun viesti vaihtuu ylilennon aikana, ja montako bittiä tarvitaan sentin tarkkuuteen.
Se on järjestelmäriippumaton. Mikä tahansa kiertorata, mikä tahansa kantoaalto ja mikä tahansa neljästä efemeridimallista ajetaan ilman esiasetusta; nimetyt esiasetukset ovat valinnaista dataa (katso Esiasetukset).
Tulosta mukana tuleva esimerkki komennolla kshana example <name> (yksi nimi kutsua kohden) ja aja se komennolla kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update ja leo-navmsg-encode-decode. Laji on myös lajin leo-pnt-chain viestivaihe (LEO-PNT.md) ja kampanjan leo-focus-data-services jäsen, joka kokoaa neljä viestikonfiguraatiota ja raportoi kunkin kehyksen pituuden (146, 154, 159 ja 171 tavua).
Koodi: src/leo_navmsg/ — elements.rs (tietueet ja käyttäjäalgoritmi), truth.rs (todellinen rata ja kello), fit.rs (sovitin), sisre.rs (signaali avaruudessa -etäisyysvirhe), services.rs (ionosfääri ja yleisaika (UTC)), codec.rs (binäärimuoto), text.rs (RINEX-tyyliset ja pilkuilla erotetut (CSV) viennit), presets/ (yksi tiedosto esiasetusta kohden), mod.rs (laji).
Mitä viesti sisältää#
| Osa | Sisältö |
|---|---|
| Aputiedot | avaruusaluksen tunniste (SVID), datan julkaisutunniste (IOD), kaistatunniste, signaalin terveystila (Galileon käytäntö: 0 OK, 1 pois käytöstä, 2 laajennettu toiminta, 3 testauksessa) |
| Synkronointi | viikkonumero, lähetyksen viikon aika (TOW) ja toisen asteen kellopolynomi af0 + af1·(t − toc) + af2·(t − toc)² |
| Efemeridi | yksi alla olevista neljästä mallista |
| Muut palvelut | Klobucharin lähetetty ionosfäärijoukko, Galileon NeQuick-G-kertoimet ai0, ai1, ai2 viidellä myrskylipulla sekä järjestelmäajan ja UTC:n väliset parametrit A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF |
Efemeridimallit#
| Koodi | Malli | Parametrit |
|---|---|---|
kepler16 |
Galileo Open Service Signal-in-Space Interface Control Documentin (OS SIS ICD) Keplerin joukko: √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe |
16 |
kepler-rac |
sama, lisäksi radansuuntaiset, poikittaiset ja radiaaliset (RAC) korjauspolynomit a0…, c0…, r0… kentässä τ = tk / tau_s, kertoimet metreinä, tau_s kakkosen potenssi, joka on vähintään puolet sovitusvälistä (lähetetään), asteluvut määräytyvät kentästä rac_degrees (oletus 7, 5, 6) |
oletuksena 16 + 21, lisäksi aika-asteikko |
liu22 |
Liun, Sun, Xien, Zhoun ja Qun 22 parametrin malli (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): 16 plus ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 |
22 |
ecef-poly |
ATOMICin (Autonomous Time and Orbit Determination for Microsatellite Constellations) nollakellomalli: Maan keskipisteinen Maan mukana pyörivä (ECEF) polynomi akselia kohden kentässä τ = (t − t_ref) / 64 s (oletusaste 6), ei kelloparametreja, koska satelliitin kello ohjataan järjestelmäaikaan (InsideGNSS) |
oletuksena 22 |
Käyttäjäalgoritmi (elements::sat_state) on Galileon ICD:n sarja (Keplerin yhtälö, toisen harmonisen korjaukset, Maan mukana pyörivä solmu), jonka jälkeen kohteelle kepler-rac lasketaan kolme polynomia Keplerin radan omassa koordinaatistossa: radiaalinen arvioitua paikkaa pitkin, poikittainen radan normaalia pitkin korjatusta inklinaatiosta ja solmusta, radansuuntainen täydentää kolmikon. Kello lisää ICD:n suhteellisuusteoreettisen termin F·e·√A·sin E; kohteelle ecef-poly se on yleinen muoto −2 r·v / c² polynomista ja sen derivaatasta.
Liun ym. termit noudattavat artikkelin käyttäjäalgoritmia (kohta 2,2, yhtälöt 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (versiot ennen 0,30 käyttivät Global Positioning Systemin (GPS) siviilinavigoinnin käytäntöä ½·ṅ·tk, joten niiden kirjoittama ṅ on kaksi kertaa artikkelin arvo) sekä Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ lisättynä säteeseen, Φ korjaamaton leveysargumentti. Mittakaavakäytäntö ṅ on kirjattu artikkelin yhtälöstä 1; artikkelin vertailu todellisilla radoilla ei riipu siitä (kerroin ½ kohteessa ṅ jättää jokaisen sovitetun luvun ennalleen), joten lähetetyn arvon nDot merkitystä ei siellä validoida.
Kaksi tulkintaa on Kshanan omia ja ne ilmoitetaan sellaisina:
- RAC-koordinaatisto ja normalisointi
τ = tk / tau_s. Mikään julkinen asiakirja ei määritä LEO-korjauskoordinaatistoa lähetetylle viestille. - Nollakello-viestin kello on kokonaisuudessaan nolla: ohjaussilmukan oletetaan pitävän näennäisen kellon, suhteellisuusteoreettinen termi mukaan lukien, järjestelmäajassa.
Sovitin#
truth.rs integroi radan kiinteäaskelisella neljännen kertaluvun Runge–Kutta-menetelmällä koordinaatistossa, joka muuttuu Maan mukana pyöriviksi akseleiksi yhdellä kierrolla, θ(t) = θ0 + Ω̇e·t, samalla yhdellä kierrolla, jonka lähetetty käyttäjäalgoritmi soveltaa. Painovoima on kaksikappale (gravity_degree = 0), vyöhykeharmoniset J2–J6 (2 – 6) tai Earth Gravitational Model 2008 (EGM2008) -kenttä asteluvulle ja kertaluvulle 7–70, jonka tesseraaliset termit kantavat lyhytjaksoisen allekirjoituksen, joka tekee LEO-sovituksesta vaikean. Ilmanvastus on valinnainen (staattinen eksponentiaalinen tiheys). Kello on vapaasti käyvä (bias, ajautuma, ajautuman nopeus ja valkoinen taajuuskohina ilmoitetulla yhden sekunnin Allanin poikkeamalla, plus jaksollinen suhteellisuusteoreettinen termi) tai ohjattu (ensimmäisen kertaluvun Gauss–Markov-jäännös).
fit.rs sovittaa Keplerin joukon Levenberg–Marquardt-menetelmällä ei-singulaarisille alkioille (e·cos ω, e·sin ω, λ0 = M0 + ω): LEO-rata on lähes ympyrä, joten ω ja M0 yksinään ovat lähes erottamattomia. Se lähtee oskuloivasta tilasta kohdassa toe J2-solmunopeudella. Heikot nollakeskiset priorit rajoittavat nopeudet ja harmoniset, joita lyhyt kaari ei pysty ratkaisemaan; havaintopainolla 1 cm ne vaikuttavat vain näissä nollasuunnissa. Sovitus liu22 ottaa sen sijaan artikkelin kohdan 2,3 lähdön ja estimaattorin: se alkaa kaikilla korjaustermeillä nollana, ei käytä prioreita (tavallinen pienimmän neliösumman menetelmä) ja pitää artikkelin 100 iteraation katon. Se pysähtyy Kshanan omaan parametrien suppenemissääntöön, kun jokainen parametriaskel on alle 1e-3 sen muodollisesta keskihajonnasta; artikkeli pysähtyy sen sijaan, kun RMS muuttuu alle 0,1 mm. RAC-polynomit sovitetaan sitten radansuuntaisiin, poikittaisiin ja radiaalisiin jäännöksiin lineaarisella pienimmän neliösumman menetelmällä, ja kellopolynomi todelliseen kelloon vähennettynä suhteellisuusteoreettinen termi, jonka käyttäjä lisää takaisin.
Oletusarvojen koodaama havainto: Keplerin pienimmän neliösumman sovituksen jälkeen jäännös on rakenteensa mukaan se, mitä 16 parametria eivät voi kattaa, joten se värähtelee ikkunan yli (useita nollanylityksiä kussakin komponentissa) eikä ajaudu. Korjauspolynomi poistaa sen vain, kun sen aste ylittää sen, minkä Keplerin joukko jo kattaa: radansuuntainen 7, poikittainen 5 ja radiaalinen 6 vievät 15 minuutin jäännöksen senttimetreistä noin millimetriin, kun taas matalammat poikittaisasteet poistavat lähes mitään (poikittainen jäännös on pariton ikkunan keskipisteen suhteen). Järjestelmä, joka johtaa Keplerin osan jollain muulla tavalla, jättää eri muotoisen jäännöksen, ja tarvittavat asteet seuraavat siitä. Celeste-esiasetuksen omat korjausasteet (matalammat kuin nämä; ne ovat vain esiasetustiedostossa, src/celeste_iod.rs) ajetaan tässä Kshanan pienimmän neliösumman pohjalla, minkä vuoksi sen poikittaistermit vaikuttavat tässä moottorissa vähän: lausuma Kshanan sovittimesta, ei mistään todellisesta järjestelmästä. toe ja toc ovat kokonaisia sekunteja, kuten binäärimuoto ne kantaa.
Kutakin viestiä käytetään sovitusikkunansa keskelle sijoitetun jakson ajan (ensimmäinen kompromissitaulukko käyttää koko ikkunaa). Signaali avaruudessa -etäisyysvirheen (SISRE) luvut mittaavat viestin esitysvirhettä suhteessa totuuteen, johon se sovitettiin, neliökeskiarvona (RMS) ja jakson maksimina. Radanmäärityksen ja ratakennusteen virhettä, jonka todellinen maa- tai aluksella oleva segmentti lisää päälle, ei mallinneta.
Signaali avaruudessa -etäisyysvirhe#
sisre.rs käyttää Montenbruckin, Steigenbergerin ja Hauschildin maailmanlaajuista keskimääräistä SISRE:a (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²) )
Painot ovat keskiarvoja käyttäjille, jotka on jaettu tasaisesti näkyvälle Maan kalotille, kohteille cos² η ja ½ sin² η, missä η on näkölinjan nadirkulma satelliitilla, laskettuna radan omalle säteelle ja korkeuskulman maskille. Maskikulmalla 0° laskenta toistaa artikkelin taulukon keskikorkealla kiertoradalla (GPS 0,98 ja 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) ja geostationaarisella kiertoradalla (0,99 ja 1/126): se on VALIDATED-tarkistus. LEO:lla sama keskiarvo antaa
| Korkeus | w_R |
1 / w_AC² |
horisontin nadirkulma |
|---|---|---|---|
| 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° |
joten LEO-käyttäjä, joka näkee satelliitin kaukana nadirista, tuntee radansuuntaiset ja poikittaiset virheet paljon voimakkaammin kuin keskikorkean radan käyttäjä.
Analyysit#
analysis = [...] valitsee minkä tahansa neljästä (oletuksena kaikki).
Sovitusvälin kompromissi#
[trade] asettaa jakson, sovitusvälit, päivitysjaksot ja mallit. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 asteelle 20 ja ilmanvastus, 30 minuuttia viestejä) antaa, kun käyttöjakso on yhtä pitkä kuin sovitusväli:
| Malli | Sovitusväli | SISRE-radan RMS | SISRE-radan maksimi | SISRE kellon kanssa, RMS | radiaalinen / radansuuntainen / poikittainen 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 |
Ja kun sovitus on 300 s ja vaihdellaan sitä, kuinka usein uusi viesti ottaa vallan:
| Malli | Päivitysjakso | SISRE-radan RMS | SISRE-radan maksimi |
|---|---|---|---|
kepler16 |
30 s | 0,314 cm | 0,850 cm |
kepler16 |
60 s | 0,288 cm | 0,859 cm |
kepler16 |
150 s | 0,219 cm | 0,830 cm |
kepler16 |
300 s | 0,310 cm | 1,033 cm |
kepler-rac |
30 s | 0,004 cm | 0,009 cm |
kepler-rac |
60 s | 0,004 cm | 0,009 cm |
kepler-rac |
150 s | 0,004 cm | 0,010 cm |
kepler-rac |
300 s | 0,004 cm | 0,014 cm |
16 parametrin Keplerin joukko heikkenee arvosta 0,04 cm kohdassa 60 s arvoon 9,35 cm kohdassa 900 s: yksi Keplerin joukko kaksi kertaa kierrosta kohden olevilla harmonisilla ei pysty seuraamaan LEO-kaaren korkeataajuisempia painovoimatermejä ja ilmanvastusta kuin muutaman minuutin ajan, ja sen pienimmän neliösumman jäännös värähtelee ikkunan yli. Radansuuntaiset/poikittaiset/radiaaliset polynomit (asteet 7, 5, 6) vaimentavat jäljelle jäävän: 1,01 cm kohdassa 900 s, 0,21 cm kohdassa 600 s. Lyhimmillä väleillä Keplerin luvut ovat millimetrin alapuolella eivätkä enää ole tiukasti järjestyksessä (sovitusta rajoittaa silloin ehdollisuus, ei malli).
Mallien vertailu#
scenarios/leo-navmsg-model-comparison.toml ajaa neljä mallia 1, 5 ja 10 minuutin välein samalla radalla, parametrien lukumäärällä ja efemeridin ja kellon biteillä Kshanan koodauksessa:
| Malli | Sovitusväli | Parametrit | Efemeridin + kellon bitit | SISRE-radan RMS | SISRE kellon kanssa, 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 (nollakello) |
60 s | 22 | 750 | 0,000 cm | 28,784 cm |
ecef-poly (nollakello) |
300 s | 22 | 750 | 0,005 cm | 28,784 cm |
ecef-poly (nollakello) |
600 s | 22 | 750 | 0,561 cm | 28,774 cm |
Nollakellorivi pisteytetään kelloa vastaan, joka on ohjattu jäännöksellä 0,24 m (ATOMIC-luku), muut vapaasti käyvää kelloa vastaan, johon ne sovittuvat.
Liu ym. 2025, SISRE korkeuden funktiona (MODELLED). Sama skenaario sovittaa Kshanan 22 parametrin mallin 20 minuutin kaarille artikkelin viidellä korkeudella, kunkin satelliitin inklinaatiolla:
| Satelliitti | Korkeus | Inklinaatio | Liu ym. 2025 | Kshana (vain radan RMS) | suhde |
|---|---|---|---|---|---|
| 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 |
Tämä ei ole validointi. Artikkeli sovitti nimettyjen satelliittien todellisia tarkkoja tieteellisiä ratoja (täydellä painovoima-, ilmanvastus- ja ei-gravitaatiohistorialla); Kshana sovittaa oman integroidun ratansa, arvioi kuusi lisäparametria edellä kuvatulla tavalla ja käyttää omia SISRE-painojaan. Vertailu osoittaa suuntauksen ja suuruusluokan. Vertailu samoilla todellisilla radoilla, jotka artikkeli sovitti, on tests/leo_navmsg_fit_real_orbit_oracle.rs (versiosta 0,30 lähtien 22 parametrin sovitus on siellä yhtä mieltä ennakkorekisteröidyn kertoimen 1,5 sisällä, artikkelin päivinä ja kahdeksana pidätettynä päivänä).
Päivitys kesken ylilennon#
[midpass] sijoittaa käyttäjän (oletus 45° N, 10° E), etsii korkeimman maskin yläpuolisen ylilennon jaksosta search_s ja ajoittaa viestit välein update_period_s. Jokaisessa ylilennon sisäisessä vaihdossa se raportoi paikkahypyn, kellohypyn, käyttäjän pseudoetäisyyshypyn (uusi viesti miinus vanha), suurimman hypyn, jonka mikä tahansa näkyvä käyttäjä voisi nähdä (suljettu muoto nadirkartion yli), etäisyysvirheen ennen ja jälkeen sekä PASS tai FAIL vastaan threshold_m. scenarios/leo-navmsg-midpass-update.toml (sovitukset 300 s, päivitettynä 150 s välein):
Vuorokauden korkein ylilento saavuttaa korkeuskulman 43,7° ja kestää 455 s. Sen vaihdot:
| Vaihto | Korkeuskulma | Paikkahyppy | Kellohyppy | Käyttäjän etäisyyshyppy | Pahimman geometrian hyppy |
|---|---|---|---|---|---|
| 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 |
Suurin käyttäjän etäisyyshyppy 0,35 mm kynnystä 5 cm vastaan: PASS.
Koodaus ja purku#
scenarios/leo-navmsg-encode-decode.toml koodaa kolmesta viestistä ensimmäisen, purkaa sen, tarkistaa CRC:n ja hylkää turmeltuneen kopion, tulostaa kvantisointibudjetin sekä kirjoittaa ja lukee takaisin RINEX-tyylisen lohkon ja CSV-taulukon:
- kehys: 171 tavua (1310 hyötykuormabittiä, joista 1045 on efemeridiä ja kelloa), 24-bittinen syklinen redundanssitarkistus (CRC-24Q)
0x19105F; - minkä tahansa yksittäisen kentän suurin puoliaskelvaikutus:
af0, 0,545 mm; - koko viesti kvantisoinnin jälkeen: paikka 1,126 mm:n ja kello 0,185 mm:n sisällä täsmällisestä viestistä; SISRE 0,113 cm täsmällisenä, 0,129 cm puretussa;
- kehys, jossa yksi bitti on käännetty, hylätään: tosi;
- RINEX-tyylinen edestakainen kierros 5.0e-06 m:n sisällä, CSV-edestakainen kierros 0.0e+00 m:n sisällä.
Alustariippumattomuus#
Kehys on lähetettyjä kokonaislukuja, joten sen on oltava samat kokonaisluvut missä ja miten tahansa skenaario ajetaan: natiivi binääri millä tahansa käyttöjärjestelmällä, debug- tai release-käännös sekä selaimessa toimiva WebAssembly (WASM) -käännös. Tiellä oli kolme asiaa. Isäntäkoneen matematiikkakirjaston sini, kosini, arkustangentti ja eksponentti eivät välttämättä ole oikein pyöristettyjä ja eroavat isäntien välillä viimeisessä numerossa. Optimoitu käännös macOS:ssä ottaa yhden argumentin sinin ja kosinin järjestelmän yhdistetystä rutiinista, joka ei aina palauta yksittäisen sinin arvoa, joten debug- ja release-käännös erosivat myös. Ja tavallinen normaalijakaumanäytteistin kutsuu isännän eksponenttia ja logaritmia harvinaisissa haaroissaan. Sovitus muuttaa näin pienen eron erilaisiksi kvantisoiduiksi kentiksi. Koko laji (todellinen rata ja kello, sovitus, käyttäjäalgoritmi, signaali avaruudessa -etäisyysvirhe (SISRE), koodekki) laskee siksi jokaisen tällaisen funktion puhtaalla Rust-kirjastolla (crate) libm kautta src/portable_math.rs, kokonaislukupotenssit eksplisiittisinä tuloina ja normaalipoikkeamat napamenetelmällä generaattorin raakatulosteesta. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform lukitsee alla olevan koodaus- ja purkuskenaarion 171 tavun kehyksen ja yhden tarkistusarvon efemeridimallia kohden; debug-käännös, release-käännös ja WASM-käännös antavat tavu tavulta identtiset tulosasiakirjat kaikille viidelle mukana tulevalle skenaariolle lajista leo-navmsg.
Binäärimuoto#
Tämä on Kshanan oma dokumentoitu koodaus. Se kantaa ne osat, jotka LEO-navigointiviestien julkaistut kuvaukset nimeävät, mallinnettuna Galileon ICD-kenttäjoukon mukaan. Se ei ole Celesten tai minkään muun järjestelmän bittirakenne: yksikään ei ole julkinen.
Kehys: johdanto 0xA7 (8 bittiä), versio 1 (4), malli (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), hyötykuorman pituus tavuina (12), hyötykuorma nollatäytettynä tavun rajaan, CRC-24Q (24-bittinen syklinen redundanssitarkistus, 24 bittiä) jokaisen edeltävän tavun yli. CRC-24Q on Radio Technical Commission for Maritime Services -standardin RTCM 10403 ja Galileon ICD:n tarkistus (polynomi 0x1864CFB, alkuarvo 0); koodi toistaa luettelon tarkistusarvon 0xCDE703 syötteelle 123456789 ja RTCM 10403 -viestityypin 1005 esimerkkikehyksen tarkistustavut (VALIDATED).
Galileon ICD:n askeleet valittiin keskikorkealle kiertoradalle, ja ne ovat liian karkeita senttitason LEO-viestille: Crs askelin 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm LEO-säteellä), kulmat 2⁻³¹ puoliympyrää (1,0 cm) ja af0 2⁻³⁴ s (1,7 cm). Kshana säilyttää ICD:n yksiköt ja puoliympyräkäytännön, tihentää askeleet niin, että jokaisen kentän puoliaskelvirhe pysyy alle 1 mm:n paikkaa tai etäisyyttä 15 minuutin ikkunassa, ja leventää kenttiä, jotta LEO-sovituksen tarvitsemat alueet säilyvät:
| Lohko | Kenttä | Bitit | Askel | Yksikkö |
|---|---|---|---|---|
| aputiedot ja synkronointi | SVID |
8 | 1 | - |
| aputiedot ja synkronointi | IOD |
10 | 1 | - |
| aputiedot ja synkronointi | Band |
4 | 1 | - |
| aputiedot ja synkronointi | Health |
2 | 1 | - |
| aputiedot ja synkronointi | WeekNumber |
13 | 1 | viikko |
| aputiedot ja synkronointi | ToW |
20 | 1 | s |
| aputiedot ja synkronointi | Flags |
4 | 1 | - |
| kello (lippubitti 0) | toc |
20 | 1 | s |
| kello (lippubitti 0) | af0 |
34 | 2^-38 | s |
| kello (lippubitti 0) | af1 |
28 | 2^-50 | s/s |
| kello (lippubitti 0) | af2 |
20 | 2^-62 | s/s^2 |
| Keplerin (mallit 1-3) | toe |
20 | 1 | s |
| Keplerin (mallit 1-3) | M0 |
36 | 2^-35 | puoliympyrä |
| Keplerin (mallit 1-3) | e |
32 | 2^-33 | - |
| Keplerin (mallit 1-3) | sqrtA |
36 | 2^-23 | m^0,5 |
| Keplerin (mallit 1-3) | Omega0 |
36 | 2^-35 | puoliympyrä |
| Keplerin (mallit 1-3) | i0 |
36 | 2^-35 | puoliympyrä |
| Keplerin (mallit 1-3) | omega |
36 | 2^-35 | puoliympyrä |
| Keplerin (mallit 1-3) | deltaN |
29 | 2^-43 | semicircle/s |
| Keplerin (mallit 1-3) | OmegaDot |
29 | 2^-43 | semicircle/s |
| Keplerin (mallit 1-3) | iDot |
22 | 2^-43 | semicircle/s |
| Keplerin (mallit 1-3) | Cuc |
26 | 2^-34 | rad |
| Keplerin (mallit 1-3) | Cus |
26 | 2^-34 | rad |
| Keplerin (mallit 1-3) | Crc |
26 | 2^-10 | m |
| Keplerin (mallit 1-3) | Crs |
26 | 2^-10 | m |
| Keplerin (mallit 1-3) | Cic |
26 | 2^-34 | rad |
| Keplerin (mallit 1-3) | Cis |
26 | 2^-34 | rad |
| radansuuntaiset/poikittaiset/radiaaliset korjaukset (malli 2) | degA |
3 | 1 | - |
| radansuuntaiset/poikittaiset/radiaaliset korjaukset (malli 2) | degC |
3 | 1 | - |
| radansuuntaiset/poikittaiset/radiaaliset korjaukset (malli 2) | degR |
3 | 1 | - |
| radansuuntaiset/poikittaiset/radiaaliset korjaukset (malli 2) | racTauExp |
4 | 1 | log2(s) |
| radansuuntaiset/poikittaiset/radiaaliset korjaukset (malli 2) | a_k, c_k, r_k |
22 | 2^-14 | m |
| Liu ym. 2025 lisät (malli 3) | aDot |
26 | 2^-20 | m/s |
| Liu ym. 2025 lisät (malli 3) | nDot |
30 | 2^-58 | puoliympyrä/s^2 |
| Liu ym. 2025 lisät (malli 3) | Crs3 |
26 | 2^-10 | m |
| Liu ym. 2025 lisät (malli 3) | Crc3 |
26 | 2^-10 | m |
| Liu ym. 2025 lisät (malli 3) | Crs1 |
26 | 2^-10 | m |
| Liu ym. 2025 lisät (malli 3) | Crc1 |
26 | 2^-10 | m |
| ECEF-polynomi (malli 4) | tref |
20 | 1 | s |
| ECEF-polynomi (malli 4) | degP |
4 | 1 | - |
| ECEF-polynomi (malli 4) | x0, y0, z0 |
38 | 2^-11 | m |
| ECEF-polynomi (malli 4) | x_k, y_k, z_k (k >= 1) |
34 | 2^-12 | m |
| Klobuchar (lippubitti 1) | alpha0 |
8 | 2^-30 | s |
| Klobuchar (lippubitti 1) | alpha1 |
8 | 2^-27 | s/semicircle |
| Klobuchar (lippubitti 1) | alpha2 |
8 | 2^-24 | s/puoliympyrä^2 |
| Klobuchar (lippubitti 1) | alpha3 |
8 | 2^-24 | s/puoliympyrä^3 |
| Klobuchar (lippubitti 1) | beta0 |
8 | 2^11 | s |
| Klobuchar (lippubitti 1) | beta1 |
8 | 2^14 | s/semicircle |
| Klobuchar (lippubitti 1) | beta2 |
8 | 2^16 | s/puoliympyrä^2 |
| Klobuchar (lippubitti 1) | beta3 |
8 | 2^16 | s/puoliympyrä^3 |
| NeQuick-G (lippubitti 2) | ai0 |
11 | 2^-2 | sfu |
| NeQuick-G (lippubitti 2) | ai1 |
11 | 2^-8 | sfu/deg |
| NeQuick-G (lippubitti 2) | ai2 |
14 | 2^-15 | sfu/deg^2 |
| NeQuick-G (lippubitti 2) | SF1-5 |
5 | 1 | - |
| UTC (lippubitti 3) | A0 |
32 | 2^-30 | s |
| UTC (lippubitti 3) | A1 |
24 | 2^-50 | s/s |
| UTC (lippubitti 3) | dtLS |
8 | 1 | s |
| UTC (lippubitti 3) | t0t |
8 | 3600 | s |
| UTC (lippubitti 3) | WNot |
8 | 1 | viikko |
| UTC (lippubitti 3) | WNLSF |
8 | 1 | viikko |
| UTC (lippubitti 3) | DN |
3 | 1 | day |
| UTC (lippubitti 3) | dtLSF |
8 | 1 | s |
Arvo, joka on kentän alueen ulkopuolella, hylätään, ei kierretä ympäri. Alueet tarkistettiin koodaamalla sovituksia korkeuksilla 300–2000 km, inklinaatioilla 0°–140° ja sovitusväleillä enintään 20 minuuttia: deltaN ja OmegaDot ovat leveitä, koska lähes päiväntasaajan radalla solmu on huonosti määritelty ja sovitus jakaa leveysargumentin J2-ajautuman niiden kesken, ja aDot ja nDot siksi, että 22 parametrin sovitus 20 minuutin yli imee osan isoakselin lyhytjaksoisesta värähtelystä. Versiosta 0,30 lähtien 22 parametrin sovitus on artikkelin tavallinen pienimmän neliösumman menetelmä ilman prioreita, ja päiväntasaajan 800 km:n sovitus tarvitsee silloin arvon nDot noin 6.3e-10 puoliympyrää/s^2, joten sen mittakaava muuttui arvosta 2^-60 arvoon 2^-58. Kohteen kepler-rac 7. asteen radansuuntaiset korjaukset mahtuvat 22-bittiseen kerroinalueeseen 15 minuuttiin asti; pidempi sovitus voi ylittää sen ja hylätään silloin. quantisation_budget raportoi jokaiselle efemeridin ja kellon kentälle suurimman paikan ja etäisyyden muutoksen, jonka puoliaskelmuutos aiheuttaa käyttöjakson aikana, sekä koko viestin muutoksen kvantisoinnin jälkeen.
Tekstiviennit#
RINEX 4,02 ei määritä LEO-navigointitietueita (sen järjestelmätunnukset ovat G, R, E, J, C, I ja S; International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4,02). Lohko, jonka text.rs kirjoittaa, lainaa RINEX 4 -muodon rakennetta — tietueen otsikko > EPH, satelliitti- ja epookkirivi kolmella kelloparametrilla, lähetetyn radan rivit, joilla on neljä D19.12-kenttää — ja on dokumentoitu Kshanan laajennus: järjestelmätunnus L, tietuetyypit KP16, KRAC, LU22, APOL ja kolme otsikkokommenttia, jotka sen kertovat. Aiempaa työtä LEO-radoista RINEX-4-tyylisissä navigointitietueissa: 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-taulukko kantaa viestit kepler16 ja kepler-rac yhden riviä kohden. Oletussarakkeet käyttävät Galileon ICD:n nimiä (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 valitsee sen sijaan esiasetuksen kirjoitusasun. Molemmat muodot luetaan takaisin.
Ionosfääri ja UTC#
- Klobuchar: moottorin L1-malli (
gnss_sim::klobuchar_delay_m, tarkistettu RTKLIB:ia vastaan) skaalattuna kantoaallolle ensimmäisen kertaluvun lailla(f_L1 / f)². - NeQuick-G: kertoimet kulkevat viestissä ja
effective_ionisation_levelpalauttaa arvonAz = ai0 + ai1·μ + ai2·μ²muunnetulle dip-leveysasteelleμ, algoritmin säännöillä (kaikki nollakertoimet antavat 63,7 aurinkovuoyksikköä, sfu; tulos rajataan välille [0, 400] sfu). NeQuickin elektronitiheysmallia ja sen vinointegrointia, jotka muuttavat suureenAzviiveeksi, ei ole toteutettu. - Satelliitti muutaman sadan kilometrin korkeudella lentää ionosfäärin sisällä. Kumpikaan lähetetty malli ei huomioi satelliitin yläpuolista elektronipitoisuutta, eikä sille käytetä korjausta.
- UTC:
system_to_utcsoveltaa Galileon ICD:n kohdan § 5.1.7 kolmea tapausta (ennen karkaussekuntitapahtumaa, kuuden tunnin sisällä siitä ja sen jälkeen); lisätty sekunti lukee 86400.
Esiasetukset#
Esiasetukset ovat dataa, yksi tiedosto kutakin hakemistossa src/leo_navmsg/presets/, lähteineen. Moottori ja jokainen mukana tuleva skenaario Celesteä lukuun ottamatta ajetaan ilman niitä.
| Avain | Lähde | Kiertorata | Kantoaalto | Viestimalli |
|---|---|---|---|---|
xona-pulsar |
PUBLIC, arXiv 2509,19551 | 1080 km, 53° | X1 1593,3225 MHz | ei julkaistu |
xona-pulsar-0 |
PUBLIC, arXiv 2509,19551 | 520 km, 97° | X1 | ei julkaistu |
iridium |
PUBLIC, RNTF report, tähdistön kuvaus | 781 km, 86,4° | 1621 MHz (1616–1626 MHz band) | ei lähetystä |
starlink |
PUBLIC, NAVIGATION 72(1), tähdistön kuvaus | 550 km, 53° | Ku-kaista, kaistan keskiarvo (edustava) | ei mitään (opportunistiset signaalit) |
centispace |
PUBLIC, Sensors 2023, Satellite Navigation 2026 | 700 km, 55° | lähellä B1:tä (peitetty lähteessä; L1 sijaisena) | ei julkaistu |
cband-generic |
REPRESENTATIVE | 600 km, 97,8° | 5020 MHz (RNSS C-kaistan keskikohta) | ei julkaistu |
atomic |
PUBLIC, InsideGNSS | 500 km (edustava) | L1 (edustava) | ecef-poly, aste 6, 60 s, päivitetään 30 s välein, nollakello, 0,24 m ohjausjäännös |
celeste-iod |
WORKSHOP and PUBLIC | 510 km, 97,4° | 1191,795 MHz | kepler-rac, asteet ja tietueväli esiasetustiedostossa |
RNSS on radionavigointisatelliittipalvelu; RNTF on Resilient Navigation and Timing Foundation.
Celeste IOD. Euroopan avaruusjärjestön (ESA) Celeste-kiertoratademonstraation (IOD) esiasetus on ainoa, joka käyttää ESA:n Navigation Innovation and Support Programme (NAVISP) LEO-PNT-työpajassa vuonna 2026 esitettyä aineistoa: viestin rakenne (Galileon Keplerin joukko plus radansuuntaiset/poikittaiset/radiaaliset korjauspolynomit, kellopolynomi, SVID, terveys, IOD, ionosfääri- ja UTC-parametrit), tietueväli ja CSV-sarakenimet. Kiertorata (510 km, lähes napainen aurinkosynkroninen) ja kantoaalto tulevat tiedostossa mainituista julkisista lähteistä. Celesten bittirakenne ei ole julkinen eikä sitä toisteta; myöhemmät Celesten vaiheet ja Euroopan unionin (EU) LEO-PNT-järjestelmä voivat poiketa. Jokainen työpajasta johdettu arvo on tiedoston src/celeste_iod.rs moduulissa navmsg, jota käyttää scenarios/leo-navmsg-celeste-iod.toml. Esiasetus pidetään pois näin: jokainen moottorin työpajasta johdettu luku on yhdessä tiedostossa, src/celeste_iod.rs, jonka build.rs käännökseen mukaan vain, jos se on olemassa, sekä vain repositoriossa olevissa skenaarioissa scenarios/*celeste-iod*.toml. Poistamalla tuo tiedosto ja ne skenaariot esiasetus pidetään pois ilman lähdekoodimuutosta; jokainen muu testi, oraakkeli ja skenaario ajetaan ilman sitä, ja README:n skenaariotiedostojen lukumäärä laskee edelleen pois pidetyt tiedostot.
Varmennus#
| Rivi | Merkintä | Oraakkeli |
|---|---|---|
| SISRE-painot | VALIDATED | Montenbruck ym. 2018 taulukko (GPS, GLONASS, Galileo, BeiDou, geostationaarinen) |
| Galileon ICD:n käyttäjäalgoritmi | VALIDATED | RTKLIB eph2pos neljällä todellisella Galileon lähetetyllä efemeridillä, 1 mm akselia kohden (tests/leo_navmsg_reference.rs) |
| CRC-24Q | VALIDATED | luettelon tarkistusarvo 0xCDE703; RTCM 10403 1005 -esimerkkikehys |
| Sovittimen ja SISRE:n kompromissi | MODELLED | kaksikappaletotuus palautettu 1 mm:n tarkkuudella; korjattu J2–J6-sovitus 1 mm:n tarkkuudella; monotoninen kasvu välin mukana |
| Ylilennon aikainen jatkuvuus | MODELLED | hyppyidentiteetti; suljetun muodon kartiorajoite näytteenottoa vasten |
| Binäärimuoto ja budjetti | MODELLED | edestakaiset kierrokset; jokaisen kentän puoliaskel alle 1 mm |
| RINEX-tyylinen ja CSV | MODELLED | edestakaiset kierrokset |
| Liu ym. 2025 22 parametrin malli ja sovitus | VALIDATED | TU Grazin ITSG-tarkat radat neljälle satelliitille vastaan artikkelin taulukot 4, 5, 6 ja 8: radansuuntaiset, poikittaiset, radiaaliset ja SISRE-suhteet 0,755–1,138 artikkelin päivinä ja 0,683–1,186 kahdeksana pidätettynä päivänä, 1.5x:n sisällä (tests/leo_navmsg_fit_real_orbit_oracle.rs) |
| ATOMICin nollakellopolynomi ja viiden korkeuden taulukko | MODELLED | ATOMIC-tiedot lähteestä InsideGNSS; julkaistu Liun taulukko Kshanan integroidun radan sovituksen rinnalla tulostettuna, ei lukittu |
| Ionosfääri ja UTC | MODELLED | ICD:n suljetut muodot; RTKLIB:lla tarkistettu Klobuchar-malli |
Rajoitukset#
- SISRE on vain esitysvirhe: ei radanmääritys- tai ratakennusteen virhettä.
- Totuus on Kshanan integrointi (ei kolmatta kappaletta, auringon säteilypainetta tai vuorovesiä), ei todellisen satelliitin tarkka rata.
- Binäärimuoto ja RINEX-tyylinen lohko ovat Kshanan omia.
- NeQuick-G kuljetetaan, ei integroida viiveeksi; ei korjausta ionosfäärin sisällä olevalle satelliitille.
- Liun ym. vertailu eroaa radoissa, parametrien tulkinnassa ja painoissa.