Maskinoversættelse, ikke gennemgået af en modersmålstalende. Engelsk er referencen.

ScenarierRedigér på GitHubKilde: docs/CAMPAIGNS.md

Kampagner

Et enkelt scenarie besvarer ét spørgsmål om én situation. En mission er en række af situationer, og et designstudie er en familie af dem. Scenarietypen campaign sammensætter de eksisterende typer i én kørsel uden at genimplementere nogen af dem: hvert medlem er en almindelig scenarietabel med sit eget kind, sendt gennem api::run_toml præcis som kshana <file>.toml ville køre den, og kampagnen læser kun tal tilbage fra resultatdokumenterne.

En kampagne er MODELLED. Dens sammensætningsidentiteter er testet (nedenfor), men at kæde faser sammen er et modelvalg, og hver fase er kun så god som den type, der kørte den.

Kør en som et hvilket som helst andet scenarie:

kshana scenarios/campaign-jam-spoof-holdover-integrity.toml
# writes .result.json, .chart.svg, .report.html and .report.json next to the file

En kampagne kan indeholde en vilkårlig kombination af fire sektioner; en uden nogen kører, og dens oversigt siger, at den intet sammensatte.

[[phases]]: en kædet mission på én tidslinje#

Hver fase kører ét eller flere scenarier over et vindue af en fælles missionstidslinje, for eksempel et ur i holdover og et inertinavigationssystem (INS) i frit løb samtidig. Outputtet fra hver kørsel læses ind i navngivne kanaler, placeres på fasens starttidspunkt og resamples på et fælles gitter ([timeline] step_s) med nulte ordens hold: et gittertidspunkt tager den seneste sample fra den ejende fases kørsel på eller før det, og er null, hvor ingen kørsel i den fase leverer kanalen.

Kanal Enhed Hvad det er Forudindstillet kilde
time_error_ns ns urets tidsfejl clock: <side>.series[].error_ns; spoof: <side>.series[].offset_ns
guard_ns ns vagt for tidsfejl kørslens eget threshold_ns
cn0_dbhz dB-Hz gennemsnitligt effektivt forhold mellem bærebølge og støjtæthed (C/N0) over de synlige satellitter jamming: gennemsnit af epochs[].sats[].cn0_effective_dbhz
cn0_floor_dbhz dB-Hz grænse for tab af tracking jamming: scenariets tracking_threshold_dbhz, når det angiver en
tracking antal satellitter, der stadig trackes jamming: epochs[].tracking
protection_level_m m vertikalt beskyttelsesniveau integrity: epochs[].vpl_m
alert_limit_m m vertikal alarmgrænse integrity: al_v_m
position_error_m m positionsfejl gnss-ins: <side>.series[].error_m
position_threshold_m m tærskel for positionsfejl gnss-ins: threshold_m
alarm 1 1, så længe en monitor i fasen alarmerer se nedenfor

<side> er classical, medmindre kørslen sætter side = "quantum". Enhver anden størrelse læses med en eksplicit post [[phases.runs.series]]: en tidssti med ét [], der navngiver rækkerne (epochs[].t), en værdisti, der deler disse rækker, eller en skalar, der udsendes til hver række (præfikset input: læser kørslens scenarie i stedet for dens resultat), en valgfri reduktion (mean, min, max, count) for flere værdier under én række, en skala og en enhed til en kanal, som kampagnen ikke kender.

Alarmer kommer fra tre steder, kombineret med logisk OR inden for en fase:

  • forudindstillede flag aflæst fra kørslen: jamming alarmerer, mens færre end fire satellitter trackes (dens egen definition af tilgængelighed); integrity alarmerer i epoker, den markerer som utilgængelige;
  • forudindstillede regler på fasens kanaler, evalueret efter carry: clock alarmerer, mens den absolutte tidsfejl overstiger guard_ns; gnss-ins, mens positionsfejlen overstiger position_threshold_m; eksplicitte regler står i [[phases.runs.alarms]];
  • alarmerende hændelser: spoof rejser én ved sin ur-støttede monitors detect_time_s; spoof-detect rejser én ved fasens start, når dens fusionerede beslutning alarmerer.

Tilstand overdrages mellem faser på tre eksplicitte måder:

  • carry = ["time_error_ns"] lægger kanalens værdi ved slutningen af den forrige fase til denne fases værdier for den. Den urfase, en spoofer trak, er det sted, holdover starter fra. At lægge forskydningen til er nøjagtigt for urfase, som integrerer frekvens; for en positionsfejl antager det, at de to fejl er kollineære, det pessimistiske tilfælde.
  • [[phases.handoff]] skriver et tal fra den forrige fase (channel:<name> for en kanals slutværdi, eller en hvilken som helst resultatsti fra en tidligere kørsel) ind i en punkteret nøgle i denne fases scenarie, før det kører, med en valgfri skala og forskydning.
  • end_at = "<result path>" afslutter fasen på et tidspunkt, en kørsel har beregnet, begrænset til duration_s. Den medfølgende mission afslutter sin spoofingfase ved classical.detect_time_s.

skip_s dropper de første sekunder af en kørsels egen tidslinje (en opvarmning) før fasetid nul.

Den medfølgende mission#

scenarios/campaign-jam-spoof-holdover-integrity.toml kører 18 medlemsscenarier over seks faser på et gitter på 10 s:

Fase Kørsler Hvad tidslinjen viser
nominel, 600 s clock, jamming (ingen jammer), integrity tidsfejl 0 ns; C/N0 43,0 dB-Hz mod en grænse på 25 dB-Hz; vertikalt beskyttelsesniveau 9,1 til 21,6 m mod en alarmgrænse på 50 m
jamming, 600 s det samme, jammer ved -30 dBW, 1 km C/N0 falder til 27,7 dB-Hz, alle 8 satellitter trackes stadig
spoofing, afsluttet ved 370 s af end_at spoof (tidsrampe på 0,1 ns/s), spoof-detect, jamming tidsfejlen vokser til 36 ns; radiofrekvensdetektoren alarmerer ved fasens start, den ur-støttede monitor ved 370 s
holdover, 1800 s clock (nægtet, bærer 37,0 ns), gnss-ins (taktisk enhed i frit løb), jamming ved 10 dBW hver satellit tabt (C/N0 omkring -12 dB-Hz); tidsfejl 36,4 til 62,7 ns mod vagten på 50 ns; positionsfejl op til 24 km
integrity-alarm, 600 s clock (bærer 59,6 ns), jamming og integrity med en maske på 25 deg 5 satellitter trackes; beskyttelsesniveau 19 til 135 m, mangler ved 18 af 60 gittertidspunkter; den medbragte tidsfejl, 52,1 til 61,7 ns, ligger fortsat over vagten på 50 ns, så alarmen er oppe i hele fasen
recovery, 600 s clock, jamming (ingen jammer), integrity tidsfejl tilbage på 0 ns; alarmen er stille

Integritetskørslerne bruger eksemplet integritys egen brugerbane (en cirkulær bane i 0,4 km højde), ikke jamming-modtagerens faste placering, og masken på 25 deg står for den delvise himmel hos en modtager, der genfinder signalet. Det er scenarievalg, angivet i filen.

En mission styret af L-båndets spektrum#

scenarios/campaign-spectrum-holdover-integrity.toml kører 8 medlemsscenarier over tre faser på et gitter på 1 s, med C/N0 for GPS L1 C/A og Galileo E1 læst fra typen spectrum (se SPECTRUM.md) frem for fra typen jammings tabel pr. satellit. Jammerne er dem i scenarios/l-band-waterfall-jamming.toml.

Fase Kørsler Hvad tidslinjen viser
onset, afsluttet ved 10 s af end_at clock, spectrum (chirp fra 10 s), integrity L1 C/A 43,48 og E1 44,73 dB-Hz; fasen slutter ved spektrumkørslens eget første tab af L1 C/A (timeline.bands[0].first_loss_t_s); beskyttelsesniveau 21,6 m mod 50 m
holdover, 600 s clock (nægtet, bærer onset-fejlen, her 0 ns), spectrum (chirp tændt) L1 C/A 3,38 og E1 4,44 dB-Hz, begge under grænsen på 25 dB-Hz; tidsfejl -0.07 til 5,06 ns mod vagten på 50 ns; alarm oppe
galileo-fallback, 300 s clock (resynkroniseret), spectrum (CW-tone på L1-bærebølgen), integrity på en Galileo-lignende Walker 24/3/1 L1 C/A holdt på 17,98 dB-Hz, E1 tilbage på 44,73 dB-Hz; beskyttelsesniveau 6,1 til 17,7 m; alarmen er stille

At E1 kommer sig under CW-tonen hviler på spektrumtypens behandling af kontinuerligt spektrum: tonen ligger i nulpunktet af MBOC-spektret og kobler intet. En rigtig tone ville koble gennem kodens spektrallinjer; det er angivet i filen og i SPECTRUM.md.

[sweep]: et parametergitter over en vilkårlig type#

Fra én til tre punkterede scenarienøgler, hver over et lineært eller logaritmisk område, på de samme akseværdier som typen sweep-nd bruger. Hver akse har et navn og en enhed; hver metrik har et navn og en resultatsti, og dens enhed læses fra den fejede types egen enhedsblok, medmindre kampagnen erklærer en. Med runs > 1 er hver knude et seedet Monte Carlo-ensemble (realisering k ved knudens seed plus k), rapporteret med statistikken nedenfor. scenarios/campaign-sweep-jammer-power.toml fejer en jammer 1 km fra modtageren fra -50 til +10 dBW: det gennemsnitlige forhold mellem jammer og signal flytter sig præcis 1 dB pr. dB (12,2 til 72,2 dB), og tilgængeligheden falder fra 1 til 0 mellem -30 og -25 dBW.

En punkteret nøgle kan indeksere et array af tabeller efter position: system.2.sisre_m er sisre_m i den tredje tabel [[system]], og case.0.system.0.shell.0.altitude_km når tre niveauer ned.

[monte_carlo]: et seedet ensemble#

Realisering k kører scenariet med dets seed-nøgle sat til base_seed + k, den konvention som urensemblet allerede bruger, så ensemblet gengives nøjagtigt. Hver metrik rapporterer middelværdien, populationens standardafvigelse, 5., 50. og 95. percentil efter nærmeste rang, et percentil-bootstrap-konfidensinterval på 95 % med fast seed for middelværdien (2000 resamplinger) og som standard hver sample i seed-rækkefølge. Resultatstier kan indeksere arrays: classical.series[-1].error_ns er den sidste sample.

[compose]: flere scenarier under fælles betingelser#

Navngivne fælles værdier (et tal eller et array af tal, med en enhed) skrives ind i hvert medlem ved de nøgler, det binder dem til, så medlemmerne ikke kan være uenige om den fælles betingelse. Hvert medlem kører, og for hver metrik angiver den samlede oversigt den mindste, største og gennemsnitlige værdi på tværs af medlemmerne og nævner den bedste og den værste. scenarios/campaign-shared-jammer-sea-road.toml placerer én jammer på 8 dBW mellem et skib i Finske Bugt (omkring 30 km væk) og en bil på en kystvej i Helsinki (omkring 50 km): skibet mister hver satellit (gennemsnitligt forhold mellem jammer og signal 39,0 dB), mens bilen beholder mindst fire (34,6 dB).

[optimize]: den bedste værdi af én metrik#

Fra én til tre punkterede scenarienøgler, hver afgrænset til [lo, hi] på en skala lin eller log, gennemsøges for den bedste værdi af én metrik (goal = "minimize", "maximize" eller "target", som minimerer afstanden fra target).

Der er to metoder:

  • method = "grid" kører hver knude i et gitter med steps pr. nøgle, på sweepets akseværdier.
  • method = "nelder-mead" (standard) kører et deterministisk Nelder–Mead-simpleks i koordinater normaliseret til [0, 1] pr. nøgle. Prøvepunkter projiceres ind på boksen. Sektionen tager max_evals, en indledende step og stoptolerancerne ftol og xtol.

En kørsel, hvis metrik mangler eller ikke er endelig, scorer værst og bevares i sporet. Med runs > 1 er metrikken middelværdien over de samme seeds ved hver evaluering. Resultatet angiver best_coords, best_metric, best_score, evals, stop_reason og hver evaluering i trace.

scenarios/campaign-optimize-link-budget.toml søger efter rækkevidde og datarate for en linkmargin på 3 dB. Optimum er lokalt for boksen og startpunktet. Det er MODELLED, aldrig en global påstand.

Protokollen og dens tærskler, fastsat på forhånd, står i docs/design/evidence/cap32-optimize/. Testen er tests/campaign_optimize_reference.rs. Resultaterne:

  • en 1-D-målløsning stemmer med den lukkede form til 6e-15;
  • gittermetoden stemmer bit for bit med en uafhængig brute-force-løkke;
  • simpleks klarer sig mindst lige så godt som gitteret på 41 × 41, på omkring en tiendedel af dets kørsler.

Runde 1s 1-D-tærskel er registreret som NOT MET: den boks, der blev fastsat på forhånd, udelukkede løsningen.

Reproducerbarhed#

Hvert kampagneresultat bærer scenario_hash, SHA-256 (Secure Hash Algorithm 2, 256-bit digest) af kampagnedokumentets kanoniske JavaScript Object Notation-form (JSON) (nøglerækkefølge og formatering ændrer den ikke), og en blok reproducibility med antallet af medlemskørsler og run_digest, en SHA-256 over hvert medlemsresultats digest i dispatch-rækkefølge. To kørsler med samme digest gav medlemsresultater, der er identiske byte for byte. Hver fasekørsel registrerer også sin type, sin egen scenario_hash, hvor typen har en, og SHA-256 af sit resultatdokument. Hvert tal i dokumentet har en post i enhedsblokken.

Kernen er sekventiel og læser ingen filer, så en kampagne kører uændret i WebAssembly-bygget. Kampagner må ikke indeholde kampagner.

Eksport#

--export på en kampagne skriver hvert medlemsscenarie, der har geometri, som sit eget filsæt, med medlemmets label indsat før formatsuffikset: hver fasekørsel (<phase>, eller <phase>-<k>, når fasen har flere kørsler), sweepets basisscenarie (sweep), Monte Carlo-scenariet (monte-carlo) og hvert sammensat medlem (med sin egen label og de fælles værdier, det binder, skrevet ind). Et medlem, der er identisk med et tidligere, skrives én gang; overdragelser og sweep- eller seed-værdier, der anvendes under kørslen, er ikke med i de eksporterede scenarier.

kshana scenarios/campaign-shared-jammer-sea-road.toml --export kml
# after the usual result, chart and report files:
# wrote scenarios/campaign-shared-jammer-sea-road.ship-strait.kml
# wrote scenarios/campaign-shared-jammer-sea-road.car-coast-road.kml

Et format, som ingen af medlemmerne kan beskrive, afvises med den begrundelse. Tabellen pr. scenarie står i INTEROP.md.

LEO-PNT-kampagner#

Femten medfølgende kampagner rammesætter spørgsmål om positionering, navigation og tidssynkronisering (PNT) fra lav jordbane (LEO); LEO-PNT.md beskriver, hvad hver af dem viser. Hvad hver kører, som kommandolinjen opsummerer det:

Scenarie Tilstand Spørgsmål
leo-focus-data-services.toml compose, 4 medlemmer servicedata i navigationsmeddelelsen mod rammelængde
leo-focus-fused-pnt-sisre.toml sweep af leo-pvt, 7 knuder fusioneret MEO- og LEO-positionering mod LEO-signalets afstandsfejl i rummet (SISRE)
leo-focus-indoor-uhf.toml compose, 2 medlemmer LEO-PNT indendørs efter bånd og bygningsklasse
leo-focus-iot-eirp.toml sweep af leo-pass, 9 knuder Internet of Things (IoT), energi pr. positionsbestemmelse mod LEO UHF-sendeeffekten
leo-focus-ntn-bandwidth.toml sweep af ntn-positioning, 9 knuder positionering i ikke-terrestriske net (NTN) mod referencesignalets båndbredde
leo-focus-ppp-altitude.toml sweep af leo-ppp, 3 knuder konvergens for præcis punktpositionering (PPP) mod højden af et LEO-lag med 192 satellitter
leo-resilience-gnss-jammed-leo-carries.toml chain, 3 faser over 2100 s Global Navigation Satellite System (GNSS) jammet, LEO-laget bærer brugeren, integriteten opretholdes
leo-resilience-multiband-diversity.toml sweep af spectrum, 13 knuder LEO-båndmangfoldighed mod en L-bånds-barrage-jammer
leo-resilience-spoof-monitors.toml compose, 4 medlemmer spoofingmonitorerne mod fire spoofere
leo-vertical-5g-network-timing.toml chain, 1 fase over 86.400 s tidssynkronisering af 5G-basestationer: holdover og LEO-tid
leo-vertical-asset-tracking-iot.toml chain, 3 faser over 1440 s containersporing med LEO UHF: energi pr. positionsbestemmelse undervejs på en rejse
leo-vertical-autonomous-vehicle.toml chain, 2 faser over 1500 s et autonomt køretøj i en bykløft med et LEO-lag
leo-vertical-autonomous-vehicle-skyline.toml chain, 2 faser over 1800 s den samme bykløft som en flad afskæring på 35 deg og som en skyline af typen city-street
leo-vertical-critical-infrastructure-timing.toml chain, 2 faser over 87.000 s tidssynkronisering af kritisk infrastruktur: holdover med LEO-tid
leo-vertical-polar-arctic.toml chain, 3 faser over 10.800 s polare og arktiske brugere med et polart LEO-lag
leo-vertical-rail-maritime.toml chain, 3 faser over 2520 s jernbane- og søfartsbrugere med et LEO-lag

MEO er medium Earth orbit (middelhøj jordbane), UHF ultra-high frequency og 5G femte generation af mobilnet.

Hvad der kontrolleres#

tests/campaign_composition_reference.rs fastlåser sammensætningsidentiteterne:

  • En kampagne med én fase gengiver den selvstændige kørsel bit for bit. For clock, integrity og jamming er medlemmets resultatdokument identisk byte for byte med run_toml på scenariefilen, dets digest er den, kampagnen rapporterer, og med gitteret ved kørslens eget trin er hver tilpasset værdi lig med værdien i den selvstændige serie (jamming-C/N0 er lig med gennemsnittet beregnet uafhængigt ud fra det selvstændige dokument).
  • Et sweep med én knude og en sammensætning med ét medlem læser nøjagtigt det selvstændige tal.
  • Et ensemble med fast seed er byte-stabilt, og realisering k er nøjagtigt den selvstændige kørsel ved seed + k; kampagnens hash ignorerer nøglerækkefølgen.
  • Et analytisk tilfælde. scenarios/campaign-monte-carlo-clock-holdover.toml kører 200 seeds af et chipskala-atomur med kun hvid frekvensstøj (q_wf = 9e-20 s^2/s, Microchip SA.45s sigma_y(1 s) = 3e-10), synkroniseret til 590 s og i frit løb til 3600 s. Den endelige tidsfejl er gaussisk med middelværdi 0 og standardafvigelse sqrt(q_wf * 3010 s) = 16,459 ns (fasens random walk under hvid frekvensstøj, National Institute of Standards and Technology (NIST) Technical Note 1337). Det rapporterede interval, [-2.52, 1,59] ns, indeholder den sande middelværdi 0; stikprøvens standardafvigelse, 14,93 ns, giver en chi-i-anden-statistik på 164,5 med 199 frihedsgrader, inden for det tosidede interval på 99 % [151,37, 254,14]. Ved 3000 seeds giver det samme scenarie 16,31 ns.
  • Den spektrumdrevne kæde læser de selvstændige tal: onset-fasen varer nøjagtigt spektrumkørslens tid til første tab, og hver L1 C/A- og E1-værdi på tidslinjen er, til 1e-9 dB, lig med den selvstændige waterfall-eksempelkørsels række for den samme jammertilstand (nominel, chirp alene, CW-tone alene).
  • Kæden overdrager tilstand som dokumenteret: spoofingfasen varer nøjagtigt spoofkørslens detektionstid, holdover bærer nøjagtigt spoofkørslens forskydning ved detektion, recovery bærer intet, og alarmen er oppe, hvor beskyttelsesniveauet mangler eller overstiger alarmgrænsen.

Disse kontroller sikrer, at sammensætning ikke ændrer noget, den ikke bør. De validerer ikke en kædet mission mod en målt, og derfor er de tre kampagnerækker i VERIFICATION-MATRIX.md MODELLED.