Machinevertaling, niet beoordeeld door een moedertaalspreker. Engels is de referentie.

Aan de slagBewerken op GitHubBron: docs/tutorials/README.md

Handleidingen

Praktische, uitgewerkte voorbeelden die u meenemen van “draai een meegeleverd scenario” naar “kwantificeer en verdedig een resultaat.” Elk getal in de drie tutorials is een echte uitvoer van de engine, verankerd aan een externe (niet-circulaire) gezaghebbende onafhankelijke referentie, en vastgelegd door een integratietest (tests/tutorials.rs), zodat een tutorial nooit ongemerkt kan afwijken van wat de engine werkelijk doet. Als een tutorial zegt dat de optische klok 6600 s volhoudt, laat de test de build falen op de dag dat dat niet langer waar is.

Kshana is een simulator voor positiebepaling, navigatie en tijdsynchronisatie (PNT). De tutorials gebruiken nog een paar afkortingen, elk uitgeschreven waar ze voor het eerst voorkomen: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (command-line interface) en TOML (Tom's Obvious Minimal Language, het formaat van scenariobestanden).

Nieuw bij het project? Lees eerst de conceptenintroductie en de verklarende woordenlijst en kom dan hier terug.

De drie uitgewerkte voorbeelden#

# Tutorial Wat u leert Scenariosoort Moeilijkheid ~Tijd
1 Mijn eerste baan: waar zijn de GPS-satellieten een echte GPS-constellatie propageren, beschikbaarheid, position dilution of precision (PDOP) en positienauwkeurigheid lezen, en exporteren waar de satellieten werkelijk zijn (SP3-formaat voor nauwkeurige banen) orbit beginner 15 min
2 Klok-holdover: hoelang kunt u doorlopen een klok-holdover zonder GNSS draaien, de kwaliteitsmaat voor tijdsynchronisatie lezen en de groeiwet √(q_wf·T) erachter begrijpen clock beginner 20 min
3 Quantum tegenover klassieke GNSS-veerkracht het sluitstuk: een spoofingdetector (spoof) en een volledige gefuseerde PNT-suite (hybrid), en hoe u beveiliging, integriteit en dead-reckoning samen leest spoof + hybrid gevorderd 35 min

Notebooks#

Uitvoerbare Jupyter-notebooks, op synthetische gegevens en openbare elementensets die alleen in de repository worden bewaard, staan in notebooks/:

Notebook Wat u leert
Vaartuigvertrouwen en training een synthetische NMEA-stroom van de brug genereren met een gescripte gebeurtenis en die scoren met de vertrouwensmonitors voor vaartuigen (adviserend, geen typegoedgekeurde navigatieapparatuur)
Interferentiekaart en blootstelling van routes waar navigatiegegevens verslechterd leken en hoeveel van een route daardoor wordt geraakt
Compliance-mapping en test-bench-export voor welke rijen van openbare raamwerken een reeks runs bewijs levert (nooit dat een raamwerk is gehaald), en de beweging en gebeurtenissen van een scenario als tekst geëxporteerd voor een GNSS-simulator in een laboratorium (er wordt geen signaal geschreven)
Quantum tegenover klassieke GDOP dezelfde constellatiegeometrie met een quantumsensor en een klassieke sensor, vergeleken op dilution of precision
Hemelgeometrie onder een skyline de satellieten die een locatie ziet onder de skyline van een straat of kade, hun DOP en foutellips, een gedateerde hemel uit elementensets en een geseede Monte Carlo tegen de covariantie (MODELLED)

Een tutorial draaien#

Elke tutorial draait hetzelfde scenario op drie manieren; kies wat bij u past. Ze roepen allemaal dezelfde engine aan, dus de getallen zijn identiek (volgt de sectie Usage van de README).

Opdrachtregel. De CLI schakelt op het veld kind van het scenario en schrijft <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html en <scenario>.report.json naast de invoer (JSON is JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Enkele soorten publiceren ook een reproduceerbaarheidstabel als <scenario>.table.csv (door komma's gescheiden waarden): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing, en moonlight-service-volume wanneer een exportlocatie is ingesteld. Geen van de drie tutorials is er een van, dus u ziet dat bestand hier niet.

cargo run -- scenarios/orbit-sgp4-gps.toml

cargo run -- bouwt de CLI uit deze checkout. Met een geïnstalleerd binair bestand (cargo install kshana) is dezelfde opdracht kshana scenarios/orbit-sgp4-gps.toml. Zonder checkout zijn de meeste meegeleverde scenario's in het binaire bestand opgenomen: kshana example somt ze op (en noemt de enkele die niet zijn opgenomen, met de reden), en kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml schrijft er één uit: de kopie van scenarios/orbit-sgp4-gps.toml waarmee het binaire bestand is gebouwd.

Python. Bouw de extensie eenmalig uit deze checkout met maturin, binnen een actieve virtuele omgeving, en roep dan kshana.run aan:

pip install maturin
maturin develop --features python
import json, kshana
result = json.loads(kshana.run(open("scenarios/orbit-sgp4-gps.toml").read()))
print(result["geometry"]["best_pdop"])

pip install kshana installeert in plaats daarvan het gepubliceerde wheel. Dat kan achterlopen op deze checkout: json.loads(kshana.list_kinds()) vertelt u welke scenariosoorten uw build heeft.

Playground in de browser. Zonder installatie: open de Studio, kies een scenario, pas de parameters aan en lees het resultaat. Er wordt niets geüpload; de engine draait aan de clientzijde als WebAssembly.

De tutorials noemen de CLI, maar elke opdracht heeft hierboven het equivalent in Python en in de playground. Elk resultaat is reproduceerbaar uit scenario + seed + engine version: draai het twee keer en u krijgt bitidentieke uitvoer.

Geannoteerde leerscenario's#

Voor elk mogelijkhedendomein is er één rijkelijk becommentarieerd .toml onder scenarios/: een leerversie van een canoniek scenario met elk veld inline toegelicht, de aangehaalde onafhankelijke referentie genoemd en de verwachte samenvatting van één regel vastgelegd als commentaar # expected:. De veldwaarden zijn identiek aan die van het origineel in de map scenarios/ op het hoogste niveau van de repo (tests/tutorials.rs vergelijkt de geparseerde TOML), zodat de gedocumenteerde uitvoer klopt. De golden hashes blijven ook ongewijzigd: commentaar verandert nooit een scenariohash.

Domein Leerbestand Type Afgeleid van
Klok-holdover scenarios/clock.toml clock scenarios/clock-holdover.toml
Baan en geometrie scenarios/orbit.toml orbit scenarios/orbit-sgp4-gps.toml
Integriteit (RAIM, receiver autonomous integrity monitoring) scenarios/integrity.toml integrity scenarios/integrity-raim.toml
Beveiliging (spoofing) scenarios/security.toml spoof scenarios/spoof-attack.toml
Hybride PNT scenarios/hybrid.toml hybrid scenarios/hybrid-pnt.toml
Inertiële koppelnavigatie scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
Tijdoverdracht scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
GNSS-meetdomein scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

Het leerbestand voor beveiliging gebruikt kind = "spoof" binnenin: de kwaliteitsmaat voor beveiliging (1 − P_md, één min de kans op gemiste detectie) wordt geproduceerd door het spoofpakket. De bestandsnaam volgt de mogelijkheid (beveiliging), de kind volgt het pakket (spoof). De kop van dat bestand wijst hierop.

De volledige catalogus van scenariosoorten#

De engine schakelt op de kind van het scenario. De tabel hieronder somt de meestgebruikte soorten op (de acht tutorialdomeinen hierboven plus hun naaste buren). Het is niet de complete verzameling: src/api.rs::list_scenario_kinds() geeft alle 92 ingebouwde soorten terug. Die functie (beschikbaar als list_kinds() in de Python- en WebAssembly-bindings (WASM), en als kshana kinds --json op de opdrachtregel) is de gezaghebbende, altijd actuele catalogus, en SCENARIOS.md is de gegenereerde opsomming ervan, één sectie per soort met de verplichte en optionele TOML-velden. tests/tutorials.rs::tutorial_scenarios_use_real_kinds dwingt af dat elke soort die een tutorial beschrijft een echte dispatchsoort is, zodat niets in deze tabel een soort kan noemen die niet bestaat.

Type Wat het doet
clock Klok-holdover tegenover specificatie; optioneel Monte-Carlo-ensemble (runs > 1).
inertial 1-DOF (één vrijheidsgraad) inertiële dead-reckoning tijdens een GNSS-uitval.
orbit GNSS-beschikbaarheid + dilution of precision (DOP) uit een constellatie (Walker / two-line elements / RINEX, het Receiver Independent Exchange-formaat).
integrity Snapshot / solution-separation / ARAIM (advanced RAIM) met horizontale en verticale beschermingsniveaus (HPL/VPL) + Stanford-diagram.
lunar-integrity ARAIM-passage met beschermingsniveaus op de zuidpool van de maan tegenover een set LunaNet-relays.
timetransfer Optische tegenover radiofrequente (RF) tweewegs tijd-/frequentieoverdracht.
hybrid Sluitstuk hybride PNT: klok + inertiële meeteenheid (IMU) + ondersteuning met tijdoverdracht.
fusion Gezamenlijke Kalman-sensorfusie voor PNT op dezelfde hybride invoer.
gnss-ins Losjes en strak gekoppeld GNSS/INS (inertial navigation system) extended Kalman-filter met foutstatus.
gnss-sim Pseudorange-simulatie in het meetdomein (Klobuchar-ionosfeer, Saastamoinen/Niell-troposfeer) + RAIM.
jamming Jamming met linkbudget: jammer-to-signal ratio (J/S) → effectieve draaggolf-ruisdichtheid (C/N₀) → verlies van lock.
spoof Stochastische detector voor tijdspoofing (Neyman–Pearson / χ²₁) met Monte-Carlo-kansen op vals alarm en gemiste detectie (P_fa/P_md).
sweep 1-D-sweep voor een afwegingsstudie over een parameter van een klokpakket.
sweep-nd Generieke N-D-sweep over elk pakket via TOML-sleutels met punten / JSON-metriekpaden.

Voorbij de tutorials: nieuwere mogelijkheden#

De drie tutorials blijven bij de klassieke pakketten voor klok, baan en beveiliging. De engine is daar ver bovenuit gegroeid. Elke rij hieronder is een meegeleverd scenario dat u ongewijzigd kunt draaien (cargo run -- <file> of kshana <file>); de samenvatting is de eerste regel die kshana 0.35.0 er op 2026-10-10 voor afdrukte. Anders dan de cijfers uit de tutorials zijn deze regels de vastlegging van één run en niet vastgelegd door tests/tutorials.rs: draai het scenario opnieuw voor de actuele waarde. Resultaten vermelden hun eigen reikwijdte (de meeste hebben een label), en de verificatiematrix vermeldt welke mogelijkheden VALIDATED zijn aan een externe onafhankelijke referentie en welke MODELLED.

Mogelijkheid Scenario Type Eerste regel van de samenvatting Meer lezen
L-bandspectrum en jammingwaterval scenarios/l-band-waterfall-jamming.toml spectrum scenario spectrum | 5 bands | 3 jammers | noise floor -202.0 dBW/Hz | worst band gps-l1ca min C/N0 3.2 dB-Hz (J/S 60.2 dB) SPECTRUM.md
Het zonnestelsel op één epoch scenarios/solar-system-tour.toml solar-system Solar system at 2026-09-28T00:00:00 (JD 2461311.50080 TDB), 18 bodies, observer Earth SCENARIOS.md
Positiebepaling rond een ander hemellichaam scenarios/europa-surface-pnt.toml body-pnt Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs SCENARIOS.md
Constellatieontwerp op schaal scenarios/constellation-multi-gnss-coverage.toml constellation-design constellation-design: 102 satellites (GPS, Galileo, BeiDou, GLONASS) around the Earth; availability 100.00% (PDOP <= 6 at 10 deg mask), … CONSTELLATION-DESIGN.md
Campagnes: soorten geketend op één tijdlijn scenarios/campaign-jam-spoof-holdover-integrity.toml campaign campaign f87a4a0e0bab | Jamming, spoofing, holdover and integrity: a chained mission | chain: 6 phases over 4570 s, … CAMPAIGNS.md
Eén LEO-PNT-systeem van begin tot eind scenarios/leo-pnt-end-to-end.toml leo-pnt-chain LEO-PNT end to end, generic 1080 km constellation LEO-PNT.md
Gefuseerde MEO- + LEO-positiebepaling scenarios/meo-leo-fused-pvt.toml leo-pvt LEO PVT (joint) at 40.42, -3.70 over 1800 s LEO-PNT-FUSION.md
LEO-signalen, passages en navigatieberichten scenarios/leo-band-trade.toml, scenarios/leo-pass-iridium.toml, scenarios/leo-navmsg-encode-decode.toml leo-signal, leo-pass, leo-navmsg LEO pass link budget, air user at 50.00, -30.00; 1 LEO satellite(s), 900 s window (de passage) LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md
PPP-convergentie met een LEO-laag; 5G-positiebepaling scenarios/leo-ppp-convergence.toml, scenarios/ntn-5g-positioning.toml leo-ppp, ntn-positioning PPP convergence to 0.10 m horizontal / 0.10 m vertical, 12 runs per case, 96 GNSS satellites SCENARIOS.md
Veerkracht: GNSS gejamd, LEO draagt de gebruiker scenarios/leo-resilience-gnss-jammed-leo-carries.toml campaign campaign 248395b851cc | GNSS jammed, LEO-PNT carries the user, integrity maintained | chain: 3 phases over 2100 s, … RESILIENCE-CROSSWALK.md
Verticale toepassingen: spoor, maritiem, telecom, voertuigen, Arctisch gebied scenarios/leo-vertical-rail-maritime.toml (en de andere leo-vertical-*-bestanden) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
Telecom-holdover tegenover de klokgrenzen van ITU-T (International Telecommunication Union, Telecommunication Standardization Sector) G.8272 scenarios/telecom-prtc-holdover-24h.toml telecom-timing telecom-timing: max|TE| 603.2 ns over 90000 s; eprtc-a-holdover FAIL, prtc-a FAIL; 100 ns budget exceeded after 8206 s (MODELLED) TELECOM-TIMING.md

LEO is lage baan om de aarde (low Earth orbit) en MEO middelhoge baan om de aarde (medium Earth orbit); PVT is positie, snelheid en tijd; PPP is precise point positioning; 5G is de vijfde generatie mobiele standaard; TDB is Barycentric Dynamical Time; JD is Juliaanse datum; TE is tijdfout.

De CLI voegt drie uitvoeren toe aan elke run:

  • Rapporten. Elke run schrijft <scenario>.report.html en <scenario>.report.json (zie REPORTS.md). kshana --study <suite.toml> draait een suite van scenario's naar één .study.json en .study.html, bijvoorbeeld kshana --study scenarios/quantum-pnt-demonstrator.suite.toml.
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all> geeft de tijdreeks van de run weer, bijvoorbeeld --animate html op scenarios/orbit-sgp4-gps.toml schrijft orbit-sgp4-gps.animation.html. Een soort zonder bemonsterde tijdas (zoals solar-system) wordt met een foutmelding geweigerd; zie ANIMATION.md.
  • Interop-exports. --export <czml|kml|geojson|stk|sigmf|all|list> schrijft het resultaat voor andere hulpmiddelen: CZML (Cesium Language), KML (Keyhole Markup Language, voor Google Earth), GeoJSON (geografische JSON), een efemeride voor STK (Systems Tool Kit) of een opname in SigMF (Signal Metadata Format). --export list zegt welke formaten voor een scenario gelden; SigMF geldt alleen voor spectrum. Het baanpakket exporteert ook --export-sp3, --export-omm en --export-oem (CCSDS, het Consultative Committee for Space Data Systems, baanberichten). Zie INTEROP.md.

Oefeningen met oplopende moeilijkheid#

Werk de ladder door. Elke tier is moeilijker en beter verdedigbaar dan de vorige; referentie-oplossingen staan in exercises/.

Tier Doel Wat u doet Referentie-oplossing
Tier 1 — draaien en lezen een meegeleverd scenario ongewijzigd draaien en één kwaliteitsmaat lezen Draai scenarios/clock-holdover.toml; druk de holdover_s van quantum tegenover klassiek af. CLI, playground of een Python-aanroep van één regel. exercises/tier1_run.py
Tier 2 — bewerken en sweepen verander één parameter en observeer een monotoon effect Scherp de klokspecificatie (threshold_ns) aan of verleng de uitval en zie de holdover dalen; of gebruik kind = "sweep"/"sweep-nd" om die in een tabel te zetten. exercises/tier2_sweep.py
Tier 3 — kwantificeren en verdedigen Monte-Carlo, betrouwbaarheidsbanden, reproduceerbaarheid en een beschermingsniveau Draai een klokensemble (runs = N), lees de band [p05–p95], bevestig dat twee runs een identieke scenario_hash geven en lees een integriteits-/Stanford-resultaat. exercises/tier3_montecarlo.py

De referentie-oplossingen gebruiken de Python-extensie (eerst maturin develop --features python). Vanuit de root van de repository gedraaid drukt tier2_sweep.py af dat de holdover van de atoomklok op chipschaal daalt van 2610 s bij een specificatie van 20 ns naar 1140 s bij 5 ns.

Verse gegevens nodig?#

De kerngetallen in deze tutorials draaien volledig uit scenario's die al in de repo staan. Er wordt niets opgehaald, en dat houdt ze reproduceerbaar en veilig om in continuous integration (CI) te draaien. Voor de oefeningen “breid het uit” kunt u live gegevens ophalen:

  • GPS two-line elements (TLE's) (ververs de baanconstellatie): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, elementensets van 3 regels in platte tekst (naam + regel 1 + regel 2). Hulpmiddel: scripts/fetch_tles.sh. Open gegevens (catalogus van het 18th Space Defense Squadron van de US Space Force, herverspreid door Celestrak, Dr T. S. Kelso).
  • Verificatiereferentie voor SGP4 (Simplified General Perturbations 4) (al opgenomen, haal niet opnieuw op): de testvectoren uit AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 “Revisiting Spacetrack Report #3”, https://celestrak.org/publications/AIAA/2006-6753/, gebruikt door tests/sgp4_verification.rs; zie docs/SGP4-VALIDATION.md.
  • Onafhankelijke referentie voor klokstabiliteitsrelaties: NIST (National Institute of Standards and Technology) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, de relaties tussen σ_y(τ) en fase achter Tutorial 2.