Kshana — Arkkitehtuuri
Kshana on yksi moottori, joka on järjestetty kerroksiin jaetun ytimen päälle: anturipaketit (kello, inertia, ajansiirto, hybridi); astrodynamiikan / numeerinen kerros (analyyttinen SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4), numeerinen Cowell-propagaattori seitsemän häiriön voimamalleineen, ratamuutossuunnittelu, radanmääritys maa-asemien etäisyyksistä ja voimamallin sovitus virastojen tarkkoihin efemerideihin); aika- ja koordinaatistokerros (IERS (International Earth Rotation and Reference Systems Service) aika-asteikot, IAU (International Astronomical Union) 2006/2000A prekessio–nutaatio ja CIO (Celestial Intermediate Origin) GCRS↔ITRS (GCRS: Geocentric Celestial Reference System; ITRS: International Terrestrial Reference System) -redukointi); fuusiokerros (GNSS/INS (GNSS: maailmanlaajuinen satelliittinavigointijärjestelmä; INS: inertianavigointijärjestelmä) -estimaattorit); sekä eheys-, kestävyys-, vaihtoehtoisen PNT:n (PNT: paikannus, navigointi ja ajanmääritys) ja Kuun kerrokset (RAIM/ARAIM/SBAS (RAIM: receiver autonomous integrity monitoring; ARAIM: advanced receiver autonomous integrity monitoring; SBAS: satelliittipohjainen täydennysjärjestelmä), häirintä ja monikerroksinen harhautuksen havaitseminen, gravitaatio-, maasto- ja magneettikarttasovitus sekä kuunläheinen PNT); ja uudemmat kerrokset: LEO-PNT (matalan Maan kiertoradan PNT), spektri, aurinkokunta ja tähdistösuunnittelu, verkkoajoitus ja kampanjat, sekä raportti-, animaatio- ja yhteentoimivuuskirjoittimet, joita jokainen ajo voi käyttää (§1d). Kaikissa näissä moottori ei tiedä mitään ”kvantti” vs ”klassinen” -erosta: se ajaa anturien virhemalleja GNSS-katkoskenaarion läpi, ajaa estimaattorin ja pisteyttää lopputuloksen. Kvanttilaite ja klassinen laite vertaillaan siksi samassa skenaariossa, ja ne eroavat vain (julkaistujen, siteerattujen) virheparametriensa ja riippumattomien kohinasiemenlukujensa osalta.
Tämä asiakirja kokoaa rakenteelliset ja käyttäytymiskaaviot. §1 on anturipakettiydin; §1a kartoittaa sen jälkeen lisätyt astrodynamiikan, fuusion ja vaihtoehtoisen PNT:n kerrokset; §1b–§1d tutkimus-, aluekerrokset ja tulostekerrokset. Käyttöä varten katso README; sen, mikä on ja mikä ei ole validoitu, osalta VALIDATION; ominaisuuskohtaiselle kypsyystaulukolle CAPABILITY.
Kaavioissa käytetyt lyhenteet, joita ei ole avattu niiden esiintymiskohdassa: ADEV, Allanin poikkeama; BW, kaistanleveys; CAI, kylmäatomi-interferometri; CZML, Cesium Language; Δ-DOR, delta differential one-way ranging; DO-229E, RTCA (Radio Technical Commission for Aeronautics) SBAS-vastaanotinstandardi; EKF, laajennettu Kalman-suodatin; FM, taajuusmodulaatio; GSE, maatukilaitteisto; HPL/VPL, vaaka-/pystysuojaustaso; IMU, inertiamittausyksikkö; IOAG, Interagency Operations Advisory Group; IQ, vaihe-/kvadratuurinäytteet; ISL, satelliittien välinen linkki; ITU-T, Kansainvälisen televiestintäliiton telealan standardointisektori; J2–J6, Maan zonaaliset gravitaatioharmoniset asteilla 2–6; KIF, Kshana Interchange Format; KML, Keyhole Markup Language; KPI, keskeinen suorituskykymittari; L1/L5, GNSS-kantoaaltokaistat (CR3BP-haloratojen L2 on sen sijaan Maa–Kuu-Lagrangen piste 2); LEO, matala Maan kiertorata; LOO, yksi-pois-menetelmä (leave-one-out); LTC, Kuun koordinoitu aika (Coordinated Lunar Time); MEO, keskikorkea Maan kiertorata; MTIE, suurin aikavälivirhe; N2, kertaluvun 2 Hillin diversiteettiluku; NED, pohjoinen-itä-alas; NTN, ei-maanpäällinen verkko; OD, radanmääritys; OPS-SAT, Euroopan avaruusjärjestön kiertoradalla toimiva ohjelmistolaboratoriosatelliitti; PPP, tarkka pistepaikannus; PSD, tehospektritiheys; PVT, paikka, nopeus ja aika; RINEX, Receiver Independent Exchange Format; RK4 / RK5(4), neljännen asteen ja upotettu viidennen (neljännen) asteen Runge–Kutta-integraattorit; SH, palloharmoninen; SigMF, Signal Metadata Format; SIR, sampling importance resampling; SRIF, neliöjuuri-informaatiosuodatin; SRP, auringon säteilypaine; SSC, spektrierotuskerroin; STK, Systems Tool Kit; SVG, Scalable Vector Graphics; TDEV, aikapoikkeama; TDM, CCSDS (Consultative Committee for Space Data Systems) Tracking Data Message; TLE, kaksirivinen elementtijoukko; TPL, ajoituksen suojaustaso; UBX, u-blox-binääriprotokolla; UHF, ultrakorkeat taajuudet; VLBI, pitkäbaselinjainen interferometria; VRW / ARW, nopeuden / kulman satunnaiskävely; WASM, WebAssembly.
1. Moduulirakenne#
flowchart TD
main["main.rs<br/>CLI (thin wrapper)"]
py["python.rs<br/>PyO3 (feature)"]
wasm["wasm.rs<br/>wasm-bindgen (feature)"]
api["api.rs<br/>run_toml: parse · dispatch by kind · json+svg+summary"]
subgraph shared["Shared core"]
types["types.rs<br/>Seconds · TimeGrid · ModelSpec"]
scenario["scenario.rs<br/>GnssState · GnssTimeline · ClockCfg · Scenario"]
allan["allan.rs<br/>overlapping Allan deviation"]
end
subgraph pack1["Pack 1 · Clock holdover"]
models["models.rs<br/>ErrorModel · ClockModel (incl. flicker FM)"]
estimator["estimator.rs<br/>HoldoverEstimator"]
kalman["kalman.rs<br/>KalmanClock → Integrity bound"]
security["security.rs<br/>clock-aided spoof detection → Security"]
fom["fom.rs<br/>Sample · FoMScores · score · worst_case_holdover"]
report["report.rs<br/>RunResult · hash · to_svg"]
run["run.rs<br/>run / run_clock / run_orbit_clock"]
end
inertial["inertial/<br/>Pack 2 · AccelModel (accel + gyro + bias instability/RW) · run_inertial · quantum_imu CAI + QuantumNavBudget dead-reckoning-over-holdover"]
timetransfer["timetransfer.rs<br/>Pack 3 · TimeTransferLink · run_timetransfer"]
hybrid["hybrid.rs<br/>Pack 4 · run_suite · score_hybrid · run_hybrid (+ integrity/security)"]
fusion["fusion/<br/>joint Kalman PNT estimator · run_fusion"]
orbit["orbit.rs<br/>Propagator (Kepler | SGP4) · Walker / TLE / multi-constellation · visibility · DOP"]
tle["tle.rs<br/>two-line element parsing (line 2 → Kepler, full TLE → SGP4)"]
sgp4mod["sgp4.rs<br/>SGP4 / SDP4 propagator (deep-space + resonance)"]
ensemble["ensemble.rs<br/>Monte Carlo confidence bands"]
sweep["sweep.rs<br/>trade-study parameter sweeps"]
spoof["spoof.rs<br/>active spoofing-attack demonstrator"]
jamming["jamming.rs<br/>link-budget anti-jam C/N₀ (J/S · processing gain · Q)"]
navsignal["navsignal.rs<br/>signal level: BPSK-R / BOC PSD · SSC κ · Gabor BW · DLL jitter · multipath · ranging-code (m-seq/Gold) design-trade"]
holdover["holdover.rs<br/>GNSS-denied clock holdover: van-Loan coast → holdover-to-threshold · quantum-clock classes"]
verification["verification.rs<br/>machine-checked requirement→module→test→oracle→status matrix"]
main --> api
py --> api
wasm --> api
api --> run
api --> inertial
api --> timetransfer
api --> hybrid
api --> ensemble
api --> sweep
api --> fusion
api --> spoof
spoof --> security
api --> jamming
api --> holdover
api --> verification
navsignal -. derives anti-jam Q (κ → Q=1/(R_c·κ)) .-> jamming
jamming -. uses PSD / SSC .-> navsignal
holdover -. coast-variance vs van-Loan recursion .-> kalman
ensemble --> run
sweep --> run
orbit --> tle
tle --> sgp4mod
orbit -. SGP4 propagator .-> sgp4mod
fusion -. composes .-> models
fusion -. composes .-> inertial
fusion --> kalman
run --> models
run --> estimator
run --> kalman
run --> security
run --> fom
run --> report
run --> orbit
models --> types
scenario --> types
inertial --> scenario
timetransfer --> types
orbit --> scenario
hybrid -. composes .-> models
hybrid -. composes .-> estimator
hybrid -. composes .-> inertial
hybrid -. composes .-> timetransfer
pack1 --> shared
inertial --> allan
CLI (komentoriviliittymä) ja molemmat sidokset kulkevat yhden sisäänkäyntipisteen api::run_toml kautta, joten ne eivät koskaan eriydy. Paketit käyttävät jaettua ydintä uudelleen (types, scenario, allan); paketti 4 (hybrid) yhdistää pakettien 1–3 mallit ja estimaattorit eikä toteuta niitä uudelleen; orbit johtaa GNSS-aikajanan geometriasta, joka syöttää sitten paketin 1 ajon. Moduuli navsignal sijaitsee signaalitasolla linkkibudjetin ja mittausalueen välissä: se johtaa spektrierotuskertoimen κ todellisista signaalin ja häirintälähteen tehospektreistä, ja siitä jamming laskee nyt häirinnänestonsa Q = 1/(R_c·κ) edustavan vakion ottamisen sijaan (ristiintarkistettu CI:ssä (jatkuva integrointi)); se sisältää myös paikannuskoodin (m-sekvenssi/Gold) suunnittelukompromissin.
Kolme muuta moduulia muodostavat GNSS-estoympäristön kestävyyden selkärangan. holdover vastaa operatiiviseen kysymykseen suoraan — kuinka kauan tämä kello voi käydä vapaasti, ennen kuin sen aikavirhe ylittää budjetin? — esittämällä van-Loanin vapaaliikevirheen suljetun muodon holdover-kynnys-inversiona, ristiintarkistettuna monivaiheista kovarianssirekursiota clock_state vastaan. Sen inertiakaksonen sijaitsee moduulissa inertial::quantum_imu (QuantumNavBudget), joka yhdistää kylmäatomi-interferometrin valkoisen kohinan ajautuman harhan ja skaalakerroinvirheen kanssa sijainnin ajautuma-holdover-budjetiksi (harhatermi ristiintarkistettu riippumatonta integraattoria AccelModel vastaan). verification renderöi koko moottorin vaatimus–moduuli–testi–oraakkeli–tila-matriisin, jossa yksikkötestatut invariantit kieltävät validoitu-merkinnän ilman riippumatonta ulkoista oraakkelia — joten varmuusväite ei voi ajautua koodista.
1a. Astrodynamiikan, fuusion ja vaihtoehtoisen PNT:n kerrokset#
Anturipakettiytimen lisäksi kolme alijärjestelmää jakavat saman jaetun ytimen ja syöttävät (tai saavat syötteen) moduulilta orbit. Astrodynamiikan / numeerinen kerros lisää ei-analyyttisen Cowell-propagaattorin analyyttisen SGP4/SDP4-polun rinnalle; fuusiokerros kantaa GNSS/INS-estimaattorit; ja vaihtoehtoisen PNT:n kerros on GPS-estoympäristön (GPS: Global Positioning System) gravitaatiokarttasovitus. Nämä ovat kirjasto-/skenaariokykyjä (katso CAPABILITY, mitkä on kytketty skenaariotyyppiin kind ja mitkä ovat tavoitettavissa Rust-API:na (ohjelmointirajapinta)).
flowchart TD
subgraph astro["Astrodynamics & numerical"]
orbit2["orbit · sgp4 · tle · walker<br/>analytic SGP4/SDP4 · Walker design"]
prop["propagator<br/>Cowell driver (accel_at / accel_rv)"]
forces["forces<br/>two-body · J2–J6 · EGM2008 d/o-70 · 3rd-body · SRP · drag · Schwarzschild + Lense–Thirring · tides"]
integ["integrator<br/>RK4 step-doubling · Dormand–Prince RK5(4)"]
ephem["ephem<br/>low-precision Sun & Moon"]
man["maneuver<br/>impulsive/finite burns · Izzo Lambert · porkchop"]
od["orbit_determination<br/>Gauss–Newton batch (batch_ls) · sequential UKF"]
end
subgraph fusion["Fusion (GNSS/INS)"]
ekf["fusion/gnss_ins_ekf · closed_loop · pack<br/>15-state loosely-coupled EKF"]
tc["fusion/tightly_coupled (8-state)<br/>fusion/tightly_coupled17 (17-state, quantum-CAI)"]
ukf["fusion/ukf — sigma-point core"]
coup["fusion/coupled — clock+position cross-covariance"]
end
subgraph alt["Alt-PNT (GPS-denied)"]
grav["gravimeter<br/>cold-atom model + SH anomaly field + mascons"]
pf["particle_filter — SIR"]
mm["mapmatch — field-match likelihood"]
end
prop --> forces
prop --> integ
forces --> ephem
man --> integ
od --> forces
od --> integ
od --> ukf
tc --> ukf
tc -. coasts on .-> forces
grav --> pf
mm --> pf
grav --> mm
ekf -. drives .-> strap["inertial/ strapdown (quaternion · NED · IMU errors)"]
tc -. drives .-> strap
grav -. CAI floor .-> strap
Numeerisen propagaattorin voimatermit ovat oletuksena pois päältä, joten niiden käyttöönotto ei koskaan häiritse julkaistuja golden-tiedostoja. 17-tilainen tiukasti kytketty UKF (unscented Kalman filter) ylittää GNSS-katkon kvantti-CAI-kiihtyvyysmittarin johdetun nopeuden satunnaiskävelyn varassa; radanmääritys käyttää samoja forces/integrator ehdokastilan propagointiin seurantakaaren yli.
Sama jaettu ydin kantaa myös neljää muuta alijärjestelmää, joita ei ole piirretty yllä (niiden paketit esiintyvät kohdan §4 dispatchissa): aika- ja koordinaatistokerros (timescales, jd2, precession, nutation, cio, frames, eop), joka redusoi TEME↔GCRS↔ITRS (TEME: true equator, mean equinox) ja syöttää pakettia ephemeris / maanpintajälki; eheyskerros (raim, sbas) RAIM/ARAIM/SBAS:lle; kestävyyskerros (jamming, spoof, spoof_detect, spoof_monitors, detection) häirinnälle ja monikerroksiselle harhautuksen havaitsemiselle, sekä navigointisignaalikerros (navsignal) signaalitasolla — BPSK-R (BPSK: binary phase-shift keying) / sini-BOC (BOC: binary offset carrier) -tehospektritiheydet, spektrierotuskerroin κ, joka johtaa nyt moduulin jamming häirinnänestosuhteen Q, RMS (Gabor) -paikannuskaistanleveys, koherentti early–late DLL (delay-locked loop) -koodinseurantajitteri ja monitie-virheen verhokäyrä (signaalisuorituskykyanalyysi, ei RF-hyötykuorman (RF: radiotaajuus) / antennilaitteiston suunnittelua — hyötykuormakumppanin rooli); ja Kuun / kuunläheinen kerros (lunar, lunar_frame, lunar_od, cr3bp) CR3BP (circular restricted three-body problem) -dynamiikalle — mukaan lukien 6×6 tilansiirtomatriisi ja yhden ammunnan differentiaalikorjain (cr3bp_jacobian, propagate_state_stm, differential_correct_halo), joka tuottaa aidosti jaksollisia halo-/NRHO (NRHO: near-rectilinear halo orbit) -ratoja, toistaen julkaistun L2-eteläisen 9:2 NRHO:n (Gateway-rata) jaksolla ≈ 6,57 d / perilune ≈ 3 250 km (julkaistu ≈ 6,56 d / ≈ 3 370 km); korjatun radan selenosentrinen MCI/MCMF (MCI: Kuun keskipisteeseen sidottu inertiaali; MCMF: Kuun keskipisteeseen sidottu, Kuuhun kiinnitetty) -muunnos ja perhejatkuminen ovat jatkotöitä, ja NRHO on CR3BP-ratkaisu (ympyrärata, Auringoton), ei validoitu todellista LANS/Gateway (LANS: Lunar Augmented Navigation Service) -efemeridiä vasten — sekä LunaNet-eheys. Virastoefemeridin voimamallisovitus (precise_od, lunar_od, tides, gravity_sh) ja täysi vaihtoehtoisen PNT:n kenttäjoukko (igrf, altpnt/terrain, gravimeter) täydentävät moduulilistan; katso moduulikohtainen kypsyys CAPABILITY.
1b. Kestävyystutkimukset, koneoppimisen arviointi ja toistettavat artefaktit#
Viisi muuta moduuliryhmää muodostavat projektin tutkimusjulkaisujen takana olevan avoimen, toistettavan tutkimuksen kerroksen. Toisin kuin skenaariotyypit (kind), näihin päästään generaattoreina cargo run --example / --bin, jotka kirjoittavat tavu tavulta deterministisiä artefakteja (kiinteät siemenluvut, tallennettu moottorin versio + konfiguraation hash). Kaikki ovat MODELLED (synteettinen tai julkisen aineiston kalibrointi) ja niillä on rehelliset validointimerkinnät — mikään niistä ei ole sertifiointi.
flowchart TD
gen["study generators<br/>examples/ · bin/ (cargo run) → byte-deterministic artifacts"]
subgraph timing["Timing integrity"]
tplm["tpl<br/>conditional Timing Protection Level: k-σ floor · van-Loan coast · CUSUM"]
end
subgraph resilm["Resilience scoring & decision-instability"]
arch["resilience/arch · score<br/>architecture model + RPCF-aligned scoring"]
stats["resilience/stats<br/>Dirichlet · Kendall-τ · flip-rate · bootstrap"]
div["resilience/diversity · timeline<br/>Hill-N2 common-mode collapse · KPIs"]
study["resilience/study · report · panel<br/>instability study + integrity-hashed assurance report"]
end
subgraph aiml["RF-impairment optimism-gap (Machine learning)"]
ie["impairment_eval<br/>labelled synthetic corpus · ROC/AUC harness"]
is["impairment_study<br/>13-detector panel · scaling laws · LOO predictor"]
ml["impairment_ml<br/>logistic-regression + one-hidden-layer MLP"]
es["eval_stats<br/>bootstrap CI · DeLong · Spearman · ridge"]
sdrm["sdr · realdata<br/>IQ/IF → E/P/L taps → SQM + ingest adapters"]
end
subgraph trade["Quantum-vs-classical"]
cross["crossover<br/>resilience crossover map under parameter uncertainty"]
qt["quantum_trade<br/>measured-ADEV holdover benefit vs classical"]
end
gen --> timing
gen --> resilm
gen --> aiml
gen --> trade
tplm -. cross-checked vs .-> recursion["holdover · clock_state · allan"]
is --> ie
is --> ml
is --> es
ie -. real recordings via .-> sdrm
cross -. composes .-> packs2["clock · inertial packs"]
tpl— ehdollinen ajoituksen suojaustaso (TPL): holdover-rajoitettu raja havaitsemattomalle aikavirheelle harhautuksen alla, joka yhdistää k-σ-monitorilattian, van-Loanin vapaaliikevarianssin havaitsemisviiveen yli ja CUSUMin (cumulative sum) hälytysajan; kalibroitu todelliseen tallennettuun harhautukseen (JammerTest 2024). Äärellistä ehdotonta rajaa ei ole — TPL on ehdollinen sille, että riippumaton ristiintarkistus havaitsee hyökkäyksen.resilience/— kehykseen kohdistettu PNT-kestävyyden pisteytysmoottori (DHS (Department of Homeland Security) RPCF (Resilient PNT Conformance Framework) -kategoriat) sekä päätösepästabiilisuustutkimus: Dirichlet-painotussimpleksi, Kendall-τ-järjestysepästabiilisuus, top-1-voittajan vaihtumistaajuus ja yhteismoodinen diversiteettiromahdus (Hill-N2), eheyshashattu varmuusraportti ja 35 käsin johdettua oraakkelitestiä. Katso RESILIENCE-CROSSWALK. Synteettiset RPCF v2.0:aan kohdistetut arkkitehtuurit — itsearviointi, ei sertifiointi.impairment_eval/impairment_study/impairment_ml/eval_stats— RF-häiriöiden optimismikuilututkimus: nimetty synteettinen korpus ja detektoriagnostinen ROC/AUC (ROC: receiver operating characteristic; AUC: area under the curve) -testikehys, 13 detektorin paneeli (energia/AGC/SQM/pariteetti (AGC: automatic gain control; SQM: signal-quality monitoring) sekä siemenluvulla alustetut logistinen regressio ja yhden piilokerroksen MLP (MLP: multi-layer perceptron) -detektorit), jakaumassa ja jakauman ulkopuolella skaalauslait permutaationollalla sekä leave-one-out-ennustaja jakauman ulkopuolisen heikkenemisen ennustamiseen. Arviointimittarit on validoitu bitti bitiltä scikit-learnia vasten.sdr/realdata— ohjelmistovastaanottimen etupää (raaka IQ/IF (IQ: vaihe/kvadratuuri; IF: välitaajuus) → korrelaattorin early/prompt/late-tapit → SQM) ja sisäänluku-adapterit (RINEX, u-blox UBX, GnssLogger, JammerTest, Yunnan, SatGrid), joiden avulla samat detektorit voivat toimia paikallisesti toimitettujen tallenteiden yli; repositorioon ei ole commitoitu aineistoja.crossover/quantum_trade— kvantti vs klassinen -kestävyyden ristikkäisyyskartta parametrien epävarmuuden alla sekä mitatun ADEV:n holdover-hyötykompromissi; kompromissin numeeriset ytimet on validoitu scipyä vasten.
1c. Eheys-, GNSS-, syväavaruus-, Kuu- ja tehtäväkerrokset#
Loput alueet kytkeytyvät samaan dispatchiin (api) ja käyttävät uudelleen jaettua ydintä, koordinaatistoja ja geometriaa. Kaikki tässä on MODELLED, ellei matriisin (verification) rivi viittaa ulkoiseen oraakkeliin (RAIM-ydin vs SciPy, SBAS vs RTKLIB (avoimen lähdekoodin reaaliaikaisen kinemaattisen paikannuksen kirjasto) -fork, gnss_lib_py DOP (tarkkuuden heikkenemiskerroin) -ydin, OPS-SAT-arviointi, Kuun ARAIM-suojaustasoydin, palveluntarjoajien välinen Kuun efemeridien johdonmukaisuus) — loput Kuun sarjasta ja kvanttidemonstraattori ovat mallinnettuja, havainnollistavia, julkisiin lähteisiin perustuvia, eikä niissä esitetä TRL (technology readiness level) -, perintö- tai virastohyväksyntäväitettä.
flowchart TD
api["api.rs — run_toml / run_scenario · 92 kinds"]
subgraph gnss["Integrity & GNSS measurement"]
raim["raim — RAIM/ARAIM · HPL/VPL (kernel vs SciPy)"]
sbas["sbas — DO-229E PL · L1/L5 (vs RTKLIB fork)"]
meas["gnss_sim · ionex · pvt · glonass — pseudorange · iono maps · single-point PVT"]
imp["integrity_impact · frugal — miss→integrity · cost-per-coverage"]
end
subgraph deep["Deep-space & Mars"]
core2["body · ephem_provider · clock_state — multi-body · ephemeris seam · onboard clock"]
radio["radiometric · ccsds_tdm — light-time · Doppler/range · Δ-DOR · TDM"]
mars["deepspace_od · mars_frame · mars_atmos · mars_pnt · linkbudget · gse_sim — SRIF OD · Mars frame · relay-PNT · GSE sim"]
end
subgraph lunar["Lunar PNT suite (evidence tier per piece in the matrix · illustrative public-source)"]
cis["cr3bp · lunar · lunar_frame · lunar_od — CR3BP · halo/NRHO · cislunar ARAIM · MCI↔MCMF"]
suite["lunar_time · lunar_vlbi · lunar_combination · lunar_frame_realise — LTC time · VLBI · joint OD+clock · frame realisation"]
suite2["lunar_service · lunar_dpnt · lunar_interop — Moonlight service-volume · differential PNT · LunaNet/IOAG interop"]
end
subgraph quantum["Quantum-Enabled PNT demonstrator (MODELLED)"]
qd["quantum_devices · quantum_faults · quantum_nav_od — device error models · fault catalogue · GNSS-free OD"]
qt["qtrade · timetransfer_chain · representativeness — unified trade · time-transfer chain · gaps-to-flight ledger"]
end
subgraph mission["Mission analysis, environment & interop"]
ma["launch · reentry · eo_payload · attitude_budget · passes · linkbudget — first-order budgets"]
env["space_weather — Jacchia-71 density"]
iop["rinex · rinex_obs · sp3 · oem · omm · ccsds_tdm · space_packet · interchange · permalink — interop formats + KIF"]
ver["verification — requirement→module→test→oracle→status matrix"]
end
api --> gnss & deep & lunar & quantum & mission
raim -. reuses .-> meas
suite -. reuses validated DOP / SBAS kernels .-> gnss
qt -. rides validated kernels (scipy / sklearn) .-> quantum
1d. LEO PNT, spektri, aurinkokunta, verkkoajoitus, kampanjat ja tulosteet#
Uusimmat kerrokset noudattavat samaa mallia: kukin on yksi tai useampi skenaariotyyppi (kind), joka ohjataan moduulin api kautta, rakennettu jaetun ytimen päälle, ja MODELLED, ellei matriisirivi nimeä ulkoista oraakkelia.
flowchart TD
api["api.rs — run_toml / run_scenario"]
subgraph leo["LEO PNT (low Earth orbit positioning, navigation and timing)"]
lsig["leo_signal — signal design: acquisition, code tracking, GNSS compatibility, band trade"]
lpass["leo_pass · leo_link (geometry · antenna · itu · iono · energy · spoof · presets) — pass and per-band link budget"]
lnav["leo_navmsg (elements · fit · codec · sisre · services · text) — broadcast ephemeris and clock message"]
lfus["leo_fusion (doppler · joint_pvt · ppp · ntn · timing · polar · presets) — fused MEO+LEO PVT · PPP · 5G NTN"]
lchain["leo_pnt_chain — one system end to end, each stage handing its output to the next"]
end
subgraph rf["Spectrum"]
spec["spectrum · navsignal — L-band (and UHF/S/C) PSD waterfall under a jammer timeline"]
sig["sigmf — SigMF recording read/write · Welch PSD of complex IQ"]
end
subgraph sky["Solar system & constellations"]
ss["solar_system · body · ephem · ephem_provider — bodies, constants, light time at one epoch"]
bp["body_pnt — positioning around any body with a local constellation"]
cd["constellation · walker — Walker delta/star, multi-shell, published GNSS slots, coverage/DOP maps"]
end
subgraph net["Network timing"]
tel["telecom_timing — time error, MTIE, TDEV vs ITU-T masks"]
slot["slot_timing — seconds until a free-running clock leaves a slot guard"]
end
subgraph comp["Composition & outputs"]
camp["campaign · study · suite — chained phases, sweeps, Monte Carlo, shared conditions"]
rep["advanced_report — report.html + report.json with a reproducibility record"]
anim["animation — SVG / HTML / frame animations"]
iop["interop (czml · kml · geojson · stk) · sigmf — exchange files for --export"]
end
api --> leo & rf & sky & net & comp
lchain -. composes .-> lsig & lpass & lnav & lfus
lsig -. SSC chain .-> spec
lfus -. GNSS presets .-> cd
bp -. reuses .-> ss
camp -. runs other kinds through .-> api
Tyyppikohtaiset yksityiskohdat ovat tiedostoissa LEO-PNT, LEO-SIGNAL, LEO-PASS, LEO-NAVMSG, LEO-PNT-FUSION, SPECTRUM, CONSTELLATION-DESIGN, TELECOM-TIMING, SLOT-TIMING, CAMPAIGNS, REPORTS, ANIMATION ja INTEROP.
1e. Vastaanottimen luottamus-, todiste-, telemetria-, harjoitus- ja compliance-kerrokset (0,35)#
Nämä kerrokset lukevat vastaanottimen oman lokin tai kirjoittavat tiedostoja muille työkaluille; mikään niistä ei syntetisoi eikä lähetä radiotaajuista signaalia. Ne sijaitsevat moduulin api rinnalla eikä skenaariotyyppien alla, lukuun ottamatta tyyppiä receiver-trust itseään, joka on skenaariotyyppi. Kaikki ovat MODELLED, ellei matriisirivi nimeä ulkoista oraakkelia, ja meriliikenteen tulosteet ovat ohjeellisia, eivät tyyppihyväksyttyä navigointilaitetta.
| Moduuli | Mitä se tekee | Dokumentaatio |
|---|---|---|
receiver_trust |
pisteyttää vastaanottimen lokin epookki epookilta luottamusmonitoreilla; alusalusta lisää merenkulun monitorit ja 0–100-pistemäärän syineen | RECEIVER-TRUST, MARITIME-TRUST |
receiver_trust::live |
sama pisteytys virralle sen saapuessa (stdin, liitettävä tiedosto, TCP tai UDP), lause $PKSHT ja valinnainen portti; LiveEngine on sen ydin ilman syötettä tai tulostetta |
MARITIME-TRUST |
evidence |
allekirjoitettu, hash-ketjutettu paketti lokin ikkunasta, sen konfiguraatiosta ja moottorin tuloksesta, todennettavissa offline-tilassa; valinnainen RFC 3161 -aikaleimatunniste | EVIDENCE-PACKS |
telemetry |
luottamusvirta Prometheus-mittareina, syslog-tapahtumina (CEF tai LEEF) ja valinnaisena OpenTelemetry-tietona (ominaisuus otlp, oletuksena pois käytöstä) |
TRUST-TELEMETRY |
nmea_synth |
synteettinen sillan NMEA 0183 käsikirjoitetuin häirintä-, drag-off-, aikaharhautus- ja toistotapahtumin sekä ohjaajan lokilla, miehistön koulutukseen (vain teksti) | NMEA-TRAINING |
interference_map |
koosteiset heikentyneen navigoinnin kartat avoimesti lisensoiduista ilma-alusten ja alusten raporteista sekä reitin altistuminen niille; vain paikalliset tiedostot | INTERFERENCE-MAP |
osnma |
vastaanotinpuolen varmennin Galileo OSNMA:lle: lukee I/NAV-sivut (pelkät sivut, vektori-CSV, UBX-virta), tarkistaa allekirjoitetun avaimen, TESLA-ketjun ja MAC-arvot ja ilmoittaa satelliittikohtaisesti, onko navigointidata todennettu; osnma::cli::verify_report on se yksi polku, jonka komentorivi, Python ja WebAssembly jakavat; vain todennuksen tila, ei eheyspalvelu |
OSNMA |
compliance |
kartoittaa Kshana-tulosteet julkisiin kestävyyden viitekehyksiin ja täyttää kartoituksen tulosasiakirjoista; run_from_text ja assess_texts ottavat vastaan tekstejä, eivät polkuja |
compliance/ |
interop::testbench |
skenaarion ajoneuvon liike ja tapahtumat liike-CSV:nä, NMEA:na, reittipistetekstinä ja tapahtumatiedostoina laboratorion GNSS-simulaattoria varten; signaalia ei kirjoiteta | TEST-BENCH |
Veneiden integraatiot (Signal K -lisäosa, OpenCPN gate mode ja viiterakennus) kutsuvat komentorivityökalua; katso MARINE-INTEGRATIONS.
2. Moottorin käsittelyketju (ajoa kohden)#
Jokainen ajo askeltaa yhtä anturimallia aikaruudukon läpi: sitä ohjataan aina, kun GNSS on nominaali, ja sen annetaan käydä vapaasti (holdover / dead-reckoning) katkon aikana.
flowchart TD
A["for each time step t"] --> B{"i > 0 ?"}
B -- yes --> C["model.step(dt, rng)<br/>evolve noise state"]
B -- no --> D
C --> D{"GNSS state at t ?"}
D -- "Nominal" --> E["discipline to truth<br/>(estimator sync / dead-reckoning reset)<br/>error = 0"]
D -- "Denied/Degraded" --> F["estimator predicts;<br/>error = truth − prediction"]
E --> G["record Sample(t, error, gnss)"]
F --> G
G --> A
A -. after loop .-> H["score(series, spec)<br/>→ figures of merit"]
H --> I["assemble Result<br/>(specs · series · FoM · scenario hash)"]
Skenaario ajaa tämän ketjun kahdesti — kerran kvanttianturille, kerran klassiselle anturille — riippumattomilla siemenluvuilla (classical_seed = seed + 0x9e3779b97f4a7c15), jotta nämä kaksi kohinatoteumaa ovat korreloimattomia.
3. Virhemallirajapinta (laajennuskohta)#
Jokainen anturi toteuttaa saman ajatuksen: tilallinen olio, jonka metodi step() etenee sen sisäistä stokastista virhettä ja jonka kertynyt tila luetaan ulos jokaisella tahdilla. Kellot paljastavat kertyneen vaiheen; kiihtyvyysmittarit kaksoisintegroidun paikan; linkit mittauskohtaisen jitterin.
classDiagram
class ErrorModel {
<<trait>>
+step(dt, rng)
+spec() ModelSpec
}
class ClockModel {
+y0, q_wf, q_rw, drift, flicker
+phase() s
+det_freq() +drift_rate()
}
class AccelModel {
+bias, q_va, gyro_bias, q_arw
+pos() m +theta() rad
+reset()
}
class TimeTransferLink {
+sigma_j
+sample(rng) s
}
ErrorModel <|.. ClockModel
ClockModel : white FM + random-walk FM + flicker FM + aging
AccelModel : accel bias + VRW + gyro bias + ARW (gravity-tilt)
TimeTransferLink : white timing jitter
ModelSpec { id, kind, provenance, params } kulkeutuu tulokseen, joten jokainen tulosteen luku on jäljitettävissä julkaistuun lähteeseen, joka mainitaan kentässä provenance.
Analyyttisen estimaattorin HoldoverEstimator rinnalla kellopaketti ajaa kaksitilaisen (vaihe, taajuus) Kalman-suotimen (KalmanClock), jonka prosessikohina vastaa totuusmallia. Katkon läpi liukuessaan sen vaihevirheen varianssi kasvaa täsmälleen arvoon q_wf·T + q_rw·T³/3 — analyyttinen holdover-relaatio — ja sen online-1-σ-rajaa käytetään täyttämään Eheys-laatumittari (osuus katkon näytteistä, joissa virhe pysyy k-σ-rajan sisällä).
4. Välitys (CLI ja sidonnat)#
api::run_toml(src) on yksittäinen sisääntulopiste: se katsoo ylätason kentän kind, deserialisoi vastaavan skenaarion, ajaa paketin ja palauttaa { json, svg, summary, csv } (csv on mukana vain niissä lajeissa, jotka julkaisevat toistettavuustaulukon). CLI kirjoittaa nämä tiedostoihin sekä raportin (report.html, report.json) ja mahdolliset tulosteet, jotka tuotetaan valitsimilla --export / --animate; Python- ja WebAssembly-sidonnat palauttavat ne isännälle. Yksi välitys, ei ajautumista erilleen.
flowchart TD
F["api::run_toml(src) · run_scenario(src)"] --> K{"ScenarioKind::classify<br/>typed · exhaustive · 92 kinds<br/>(absent kind → clock; unknown kind → InvalidInput)"}
K --> G1["Timing<br/>clock · timetransfer · quantum-time-transfer · telecom-timing · slot-timing"]
K --> G2["Inertial & fusion<br/>inertial · hybrid · hybrid-ukf · fusion · gnss-ins · quantum-gnss-free-nav · ins-trn-coast · hybrid-optical-rf"]
K --> G3["Orbit, geometry & positioning<br/>orbit · ephemeris · constellation-design · gnss-sim · pvt"]
K --> G4["Integrity<br/>integrity · lunar-integrity · araim-reference-check"]
K --> G5["Resilience & spectrum<br/>jamming · spoof · spoof-detect · quantum-anomaly-detect · tracking-loop · spectrum · conflict-resilience"]
K --> G6["Alt-PNT (GPS-denied)<br/>gravity-map · terrain-nav · terrain-slam · combined-altpnt"]
K --> G7["LEO PNT<br/>leo-signal · leo-pass · leo-navmsg · leo-pvt · leo-ppp · ntn-positioning · leo-pnt-chain"]
K --> G8["Lunar / cislunar suite (MODELLED)<br/>lunar-time-offset · lunar-time-budget · lunar-vlbi · lunar-vlbi-fim · lunar-joint-od-clock<br/>lunar-frame-realisation · lunar-frame-campaign · lunar-llr-datum · realtime-frame-eop<br/>moonlight-service-volume · lunar-differential-pnt · lunar-interop-export · lunar-beacon<br/>lunar-jamming · lunar-attack-surface · earth-gnss-lunar · cislunar-observability · cislunar-arc-recovery"]
K --> G9["Deep space & solar system<br/>mars-pnt · solar-system · body-pnt"]
K --> G10["Machine learning & trade<br/>impairment-eval · quantum-trade"]
K --> G11["Mission analysis & environment<br/>launch-window · reentry · eo-coverage · attitude-budget · aperture-duty-cycle<br/>passes · link-budget · space-packet · space-weather"]
K --> G12["Trade studies, campaigns & interop<br/>sweep · sweep-nd · campaign · oem-interop"]
G1 & G2 & G3 & G4 & G5 & G6 & G7 & G8 & G9 & G10 & G11 & G12 --> W["RunOutput { json, svg, summary, csv }<br/>+ SHA-256 scenario_hash"]
Välitys perustuu tyypitettyyn enum-tyyppiin ScenarioKind, joka käydään läpi tyhjentävästi (ks. seuraava alaluku), joten paketin lisääminen on kääntäjän tarkistama muutos. Puuttuva kind korvautuu paketilla clock, joten nykyiset yhden lajin skenaariot deserialisoituvat muuttumattomina (serde ohittaa kentän kind jokaisessa skenaariorakenteessa). Tunnistamaton kind hylätään virheellä KshanaError::InvalidInput, joka nimeää lähimmän sisäänrakennetun lajin, kun nimi näyttää kirjoitusvirheeltä.
Tyypitetty välitys ja jäsennelty API#
Välitys perustuu tyypitettyyn enum-tyyppiin ScenarioKind, ei raakaan merkkijonovertailuun: ScenarioKind::classify(src) ratkaisee kentän kind varianttiin, ja välittäjä käsittelee sen tyhjentävästi — paketin lisääminen on kääntäjän tarkistama muutos, ei merkkijonon kirjoitusvirhe. Kaksi tyypitettyä pintaa on merkkijonon palauttavan funktion run_toml rinnalla (säilytetty CLI:tä ja nykyisiä sidontoja varten):
run_scenario(src) -> Result<RunOutput, KshanaError>— tyypitetty sisääntulo, jossa on jäsennelty virhetaksonomia (InvalidInput,NonConvergence,Unsupported,IoError). Jokaisella virheellä on vakaakind_tag(), jotta kutsuja voi haarautua virheluokan mukaan viestiä jäsentämättä. Sidonnat tarjoavat tämän nimelläerror_kind(toml).list_scenario_kinds() -> Vec<ScenarioMeta>(jalist_scenario_kinds_json(), joka on sidonnoissa nimellälist_kinds()) — ohjelmallinen introspektio: kunkin lajin nimi, kuvaus sekä pakolliset ja valinnaiset kentät käyttöliittymän (UI) ja muistikirjan automaattitäydennystä varten.
Kshana-ohjelmiston laajentaminen ulkoisella paketilla#
Kolmannen osapuolen paketti toteuttaa kaksi pientä, semver-vakaata traittia moduulista api:
use kshana::api::{ExternalPack, KshanaError, RunOutput, Scenario, ScenarioMeta};
struct MyPack {
threshold: f64, // the deserialized scenario fields
}
impl Scenario for MyPack {
fn run(&self) -> Result<RunOutput, KshanaError> {
// Run the model, then build the unified output envelope.
Ok(RunOutput {
json: format!("{{\"threshold\": {}}}", self.threshold),
svg: String::from("<svg xmlns=\"http://www.w3.org/2000/svg\"/>"),
summary: format!("my-pack | threshold {}", self.threshold),
csv: None,
})
}
}
impl ExternalPack for MyPack {
fn kind_name(&self) -> &'static str {
"my-pack"
}
fn meta(&self) -> ScenarioMeta {
ScenarioMeta {
name: "my-pack",
description: "An out-of-tree example pack.",
required_fields: &["threshold"],
optional_fields: &[],
}
}
}
Tyyppi ExternalPack sisältää myös oletusmetodin register_into(&mut PackRegistry), joka ei tee mitään, ellei paketti ota käyttöön rekisterivälityksen saumaa kohdassa src/registry.rs. Sisäänrakennettu paketti jamming on kytketty tyypin Scenario kautta esimerkiksi; ulkopuoliset paketit noudattavat samaa sopimusta ilman ytimen haarauttamista (peilaten laajennuskohtaa ErrorModel luvussa §3, jota yksityinen kestävyyskerros käyttää).
Näin ollen Kshana-ohjelmistossa on kaksi vakaata laajennussaumaa — lisää anturi toteuttamalla ErrorModel (§3), tai lisää kokonainen skenaariolaji toteuttamalla Scenario + ExternalPack — molemmat ovat semver-vakaita, eikä kumpikaan vaadi ytimen haarauttamista:
classDiagram
class ErrorModel {
<<trait — sensor seam>>
+step(dt, rng)
+spec() ModelSpec
}
class Scenario {
<<trait — pack seam>>
+run() RunOutput
}
class ExternalPack {
<<trait : Scenario>>
+kind_name() str
+meta() ScenarioMeta
}
ErrorModel <|.. ClockModel
ErrorModel <|.. AccelModel
ErrorModel <|.. TimeTransferLink
Scenario <|.. ExternalPack
Scenario <|.. JammingPack : worked example
ExternalPack <|.. ThirdPartyPack : out-of-tree, no core fork
5. Hybridin huipentuma#
Hybridipaketti ajaa sarjan (yksi kello + yksi inertiaanturi) ja vaatii, että sekä aika että paikka pysyvät spesifikaatiossa; pnt_holdover on aika, kunnes jompikumpi ylittää rajan. Valinnaisesti optinen satelliittien välinen linkki synkronoi kellon uudelleen katkon aikana — vain ajan tuki; paikkaa ei synkronoida uudelleen, koska ajansiirto antaa ajan, ei paikkaa. Tämä erottaa inertiaanturin rajoittavaksi tekijäksi.
flowchart LR
subgraph suite["PNT suite (per technology)"]
clk["clock → timing error"]
acc["inertial sensor → position error"]
isl["optical ISL<br/>re-sync clock at interval"] -. aids .-> clk
end
clk --> J["both within spec ?"]
acc --> J
J --> P["pnt_holdover = first breach<br/>(timing OR position)"]
6. Geometriasta johdettu GNSS-saatavuus#
orbit.rs on deterministinen, riippuvuuksista vapaa geometriakerros. Propagator on joko analyyttinen Kepler-rata Orbit (kahden kappaleen, valinnaisesti sekulaarinen J2) tai täysi Sgp4-propagaattori, joka on rakennettu täydestä kaksirivisestä elementtijoukosta; Walker-delta-generaattori tuottaa synteettisiä tähdistöjä, ja näkölinjan näkyvyys = Maan peittämä alue + korkeuskulmamaski. Näkyvien satelliittien lukumäärä kuvautuu GNSS-tilaksi (≥4 = nominaali, 1–3 = heikentynyt, 0 = estetty), ja build_timeline muuttaa sen saatavuusaikajanaksi, joka ohjaa tavallista kellon holdover-ajoa. Saatavuus on siis johdettu geometriasta eikä käsin kirjoitettu, kun taas ajo, estimaattori ja pisteytys pysyvät ennallaan.
Täysinä TLE-tietoina annettu tähdistö propagoidaan SGP4/SDP4-mallilla tiedostossa sgp4.rs (validoitu AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 -vektoreita vastaan); vain rivin 2 elementit säilyttävät analyyttisen kahden kappaleen polun. Nämä kaksi voi sekoittaa yhdessä tähdistölohkossa.
flowchart LR
U["user orbit"] --> V
C["Walker constellation"] --> V["visible_count(t)<br/>occultation + mask"]
V --> S["gnss_state: ≥4 / 1–3 / 0"]
S --> T["build_timeline → GnssTimeline"]
T --> R["run_orbit_clock → clock holdover"]
7. Sidonnat#
Ydin kääntyy muuttumattomana natiiviksi, Python-laajennukseksi ja WebAssemblyksi. Python-moduuli (python.rs, PyO3 abi3) ja WebAssembly-moduuli (wasm.rs, wasm-bindgen) ovat valinnaisia, ominaisuuslipuilla rajattuja riippuvuuksia (--features python / --features wasm): oletusrakennus ja testisarja eivät koskaan käännä niitä, kun taas riippuvuustarkastusportti (cargo deny --all-features) tarkastaa niiden riippuvuuspuut, koska nämä crate-kirjastot toimitetaan wheelin ja npm-paketin sisällä. Molemmat kutsuvat funktiota api::run_toml, joten jokainen pinta palauttaa identtiset tulokset. WebAssembly-moduuli tukee selainhiekkalaatikkoa hakemistossa web/ ja vie kolmetoista funktiota: run, run_all (yksi moottoriajo, joka palauttaa tuloksen, kaavion, yhteenvedon ja taulukon yhdessä), chart_svg, summary, table_csv, list_kinds, error_kind, version, jaettavan URL-osoitteen (URL: web address) koodekki encode_permalink / decode_permalink sekä kolme viejää export_sp3 / export_omm / export_oem, jotka tukevat hiekkalaatikon vientivalikkoa. Kaksi muuta etuovea ulottuu samaan rajapintaan api: MCP-palvelin (Model Context Protocol) (mcp/kshana-mcp, työtilan ulkopuolelle rajattu crate rmcp, joka tarjoaa viisitoista työkalua — run_scenario, list_scenario_kinds, validate_scenario, list_example_scenarios, get_example_scenario, report_scenario, animate_scenario, list_export_formats, export_interop, import_route, export_sp3, export_omm, export_oem, export_table_csv, assess_receiver_log; kaksi esimerkkityökalua lukee mukana toimitetut skenaariot kirjaston oletuksena pois päältä olevan ominaisuuden bundled-scenarios kautta, jonka vain tämä palvelin ottaa käyttöön) ja JetBrains IDE -lisäosa (integrated development environment) (ide/jetbrains, Kotlin-projekti, joka kutsuu CLI-työkalua kshana kirjastoon linkittämisen sijaan).
flowchart LR
cli["CLI · main.rs<br/>native binary"] --> api
py["Python · python.rs (PyO3 abi3)<br/>RunOutput class + run · run_full · run_typed · scenario_kinds · list_kinds · validate_toml · error_kind · version"] --> api
wasm["WebAssembly · wasm.rs (wasm-bindgen)<br/>run · run_all · chart_svg · summary · table_csv · list_kinds · error_kind · version · encode/decode_permalink<br/>export_sp3 · export_omm · export_oem"] --> api
mcp["MCP server · mcp/kshana-mcp (rmcp)<br/>tools: run_scenario · list_scenario_kinds · validate_scenario<br/>list_example_scenarios · get_example_scenario<br/>report_scenario · animate_scenario<br/>list_export_formats · export_interop · import_route<br/>export_sp3 · export_omm · export_oem · export_table_csv"] --> api
ide["JetBrains plugin · ide/jetbrains (Kotlin)"] -- spawns process --> cli
api["api::run_toml / run_scenario / list_scenario_kinds"] --> out["identical { json, svg, summary } on every surface"]
Ominaisuuslippujen käyttö: Python ja WASM ovat --features python / --features wasm; mukana toimitettu skenaariotaulukko on --features bundled-scenarios (MCP-palvelimen ainoa käyttötapa); MCP-palvelin ja ristiintarkistukset (xval/*) ovat työtilan ULKOPUOLELLE JÄTETTYJÄ crate-kirjastoja; IDE-lisäosa ei linkitä mitään — se ajaa CLI:tä.
8. Determinismi ja toistettavuus#
- Kaikki satunnaisuus kulkee yhden, siemenluvulla alustetun generaattorin
ChaCha8Rngkautta ajoa kohden; askeltamisjärjestys on kiinteä, joten(scenario, seed, engine version) → identical bits. - Tulos sisältää SHA-256-arvon (SHA: Secure Hash Algorithm)
scenario_hash; skriptiscripts/check-reproducible.shajaa viiteskenaarion kahdesti ja varmistaa, että tuloste on tavu tavulta identtinen. - Sama moottori kääntyy natiiviksi, Python-laajennukseksi ja kohteeksi
wasm32-unknown-unknownselaimen sisäisiä ajoja varten, ja tuottaa samat luvut.
9. Lykätty / tuleva rakenne#
Luvun §1a astrodynamiikka-, fuusio- ja alt-PNT-kerrokset — täysi SGP4/SDP4-propagaattori, numeerinen Cowell-propagaattori seitsemän häiriön voimamallilla ja kahdella adaptiivisella integraattorilla, manööveri-/lentoratasuunnittelu, radanmääritys, 15-/8-/17-tilaiset GNSS/INS-estimaattorit, kytketty kello+paikka-suodin ja painovoimakarttasovitus — on kaikki toimitettu, samoin kuin turvallisuuden laatumittari aktiivisella harhautusdemonstraattorilla, aito TLE-/monitähdistögeometria, Monte Carlo -kaistat, kompromissitutkimusten pyyhkäisyt, tulostettava HTML-raportti (HyperText Markup Language) koneluettavine kaksoisversioineen sekä release-/publish-/wheels-/pages-työnkulut.
Useat tähän aiemmin tulevaksi työksi listatuista ominaisuuksista on sittemmin toimitettu, ja ne käsitellään edellä tai asiakirjassa VALIDATION: täysi IAU 2000A -nutaatio ja ekvinoksivapaa CIO-pohjainen GCRS↔ITRS / ITRF (International Terrestrial Reference Frame) -redusointi (validoitu bitti bitiltä SOFA/ERFA:a vastaan (SOFA: Standards of Fundamental Astronomy; ERFA: Essential Routines for Fundamental Astronomy)), EGM2008 (Earth Gravitational Model 2008) -geopotentiaali asteeseen/kertalukuun 70, Lense–Thirring-termi (koordinaatiston mukaanvetäminen), kiinteän maan/meren/ilmakehän vuorovedet, DE-tasoinen (DE440/ANISE (DE440: Development Ephemeris 440; ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris — puhdas Rust-planeettageometriatyökalupakki)) efemeridin ristiinvalidointi, ulkoinen Orekit-ristiinvalidointi (versio 12,2) numeeriselle Cowell-propagaattorille (0,08 m 24 tunnin aikana) sekä erä- ja sekventiaaliselle radanmääritykselle, ja 17-tilainen tiukasti kytketty navigaattori, joka on tuotu esiin skenaariolajina hybrid-ukf.
Jäljellä olevat jatkotyöt on kirjattu asiakirjaan CHANGELOG kohtaan [Unreleased] ja kykykohtainen etenemissuunnitelma asiakirjaan CAPABILITY: ulkoinen oraakkeliarvo EGM:n (Earth Gravitational Model) korkea-asteiselle evaluaattorille täsmälleen napa-akselilla ja pyshtools-puhdas napa-alueen lähivertailu (evaluaattori asteeseen 2190 ja sen ajonaikainen lataaja .gfc on toimitettu, MODELLED; ks. xval/high-degree-gravity/), ajassa muuttuva avaruussääajuri valinnaiselle NRLMSISE-00 (NRLMSISE: Naval Research Laboratory Mass Spectrometer and Incoherent Scatter Radar Extended atmosphere model) -vastustiheystasolle (oletusvastustiheys on staattinen eksponenttimalli, ja skenaariolajin space-weather Jacchia-71-tiheys on karakterisoitu NRLMSISE-00:aa vastaan mutta sitä ei korvata sillä), ulkoinen tarkistus valinnaiselle auringon reunatummenemisvarjolle, kantoaaltovaiheen GNSS/INS-tiukka kytkentä sekä aito EGM2008/EIGEN (EIGEN: European Improved Gravity model of the Earth by New techniques) -painovoimakartta alt-PNT-sovittimelle.
Yksityinen kerrosrepo sisältää vientiherkkää kestävyyssyvyyttä; se liittyy saman rajapinnan ErrorModel kautta (ja luvun §4 sopimuksen ExternalPack kautta) muuttamatta julkista moottoria.