Maskinoversettelse, ikke gjennomgått av en morsmålsbruker. Engelsk er referansen.

ScenarioerRediger på GitHubKilde: docs/CAMPAIGNS.md

Kampanjer

Et enkelt scenario svarer på ett spørsmål om én situasjon. Et oppdrag er en sekvens av situasjoner, og en utformingsstudie er en familie av dem. Scenariotypen campaign setter de eksisterende typene sammen i én kjøring uten å implementere noen av dem på nytt: hvert medlem er en vanlig scenariotabell med sin egen kind, sendt gjennom api::run_toml nøyaktig slik kshana <file>.toml ville kjørt det, og kampanjen leser bare tall ut av resultatdokumentene.

En kampanje er MODELLED. Sammensetningsidentitetene er testet (nedenfor), men å lenke faser sammen er et modellvalg, og hver fase er bare så god som typen som kjørte den.

Kjør en som alle andre scenarioer:

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

En kampanje kan inneholde en hvilken som helst kombinasjon av fire seksjoner. En uten noen kjører, og oppsummeringen sier at den ikke satte sammen noe.

[[phases]]: et lenket oppdrag på én tidslinje#

Hver fase kjører ett eller flere scenarioer over et vindu av en felles oppdragstidslinje, for eksempel en klokke i holdover og et treghetsnavigasjonssystem (INS) som går på tomgang samtidig. Utdataene fra hver kjøring leses inn i navngitte kanaler, plasseres ved fasens starttid og resamples på et felles rutenett ([timeline] step_s) med nulte ordens holdt verdi: et rutenetttidspunkt får siste sample fra den eide fasens kjøring ved eller før det, og er null der ingen kjøring i den fasen gir kanalen.

Kanal Enhet Hva det er Kilde for forhåndsinnstilling
time_error_ns ns klokkens tidsfeil clock: <side>.series[].error_ns; spoof: <side>.series[].offset_ns
guard_ns ns vakt for tidsfeil kjøringens egen threshold_ns
cn0_dbhz dB-Hz gjennomsnittlig effektivt forhold mellom bærebølge og støytetthet (C/N0) over de synlige satellittene jamming: gjennomsnitt av epochs[].sats[].cn0_effective_dbhz
cn0_floor_dbhz dB-Hz gulv for tapt sporing jamming: scenarioets tracking_threshold_dbhz, når det oppgir en
tracking antall satellitter som fortsatt spores jamming: epochs[].tracking
protection_level_m m vertikalt beskyttelsesnivå integrity: epochs[].vpl_m
alert_limit_m m vertikal alarmgrense integrity: al_v_m
position_error_m m posisjonsfeil gnss-ins: <side>.series[].error_m
position_threshold_m m terskel for posisjonsfeil gnss-ins: threshold_m
alarm 1 1 så lenge en overvåker i fasen gir alarm se nedenfor

<side> er classical med mindre kjøringen setter side = "quantum". Alle andre størrelser leses med en eksplisitt oppføring [[phases.runs.series]]: en tidsbane med én [] som navngir radene (epochs[].t), en verdibane som deler disse radene eller en skalar som kringkastes til hver rad (prefikset input: leser kjøringens scenario i stedet for resultatet), en valgfri reduksjon (mean, min, max, count) for flere verdier under én rad, en skala og en enhet for en kanal som kampanjen ikke kjenner.

Alarmer kommer fra tre steder, kombinert med logisk ELLER innenfor en fase:

  • forhåndsinnstilte flagg som leses fra kjøringen: jamming gir alarm så lenge færre enn fire satellitter spores (typens egen definisjon av tilgjengelighet), og integrity gir alarm ved epoker den markerer som utilgjengelige;
  • forhåndsinnstilte regler på fasens kanaler, evaluert etter carry: clock gir alarm så lenge den absolutte tidsfeilen overstiger guard_ns, og gnss-ins så lenge posisjonsfeilen overstiger position_threshold_m. Eksplisitte regler settes i [[phases.runs.alarms]];
  • alarmerende hendelser: spoof utløser én ved sin klokkestøttede overvåkers detect_time_s, og spoof-detect utløser én ved fasens start når dens fusjonerte beslutning gir alarm.

Tilstand overleveres mellom faser på tre eksplisitte måter:

  • carry = ["time_error_ns"] legger kanalens verdi ved slutten av forrige fase til denne fasens verdier for den. Klokkefasen en spoofer trakk bort, er der holdoveren starter. Å legge til forskyvningen er eksakt for klokkefase, som integrerer frekvens. For en posisjonsfeil forutsetter det at de to feilene er kollineære, som er det pessimistiske tilfellet.
  • [[phases.handoff]] skriver et tall fra forrige fase (channel:<name> for en kanals sluttverdi, eller en hvilken som helst resultatbane fra en tidligere kjøring) inn i en punktdelt nøkkel i denne fasens scenario før det kjøres, med valgfri skala og forskyvning.
  • end_at = "<result path>" avslutter fasen ved et tidspunkt en kjøring har beregnet, begrenset til duration_s. Det medfølgende oppdraget avslutter spoofingfasen ved classical.detect_time_s.

skip_s dropper de første sekundene av en kjørings egen tidslinje (en oppvarming) før fasetid null.

Det medfølgende oppdraget#

scenarios/campaign-jam-spoof-holdover-integrity.toml kjører 18 medlemsscenarioer over seks faser på et rutenett med 10 s:

Fase Kjøringer Hva tidslinjen viser
nominell, 600 s clock, jamming (ingen jammer), integrity tidsfeil 0 ns; C/N0 43,0 dB-Hz mot et gulv på 25 dB-Hz; vertikalt beskyttelsesnivå 9,1 til 21,6 m mot en alarmgrense på 50 m
jamming, 600 s det samme, jammer på -30 dBW, 1 km C/N0 faller til 27,7 dB-Hz, alle 8 satellitter spores fortsatt
spoofing, avsluttet ved 370 s av end_at spoof (tidsrampe på 0,1 ns/s), spoof-detect, jamming tidsfeilen øker gradvis til 36 ns. Radiofrekvensdetektoren gir alarm ved fasens start, den klokkestøttede overvåkeren ved 370 s
holdover, 1800 s clock (nektet, bærer med seg 37,0 ns), gnss-ins (taktisk enhet på tomgang), jamming ved 10 dBW alle satellitter tapt (C/N0 omtrent -12 dB-Hz); tidsfeil 36,4 til 62,7 ns mot vakten på 50 ns; posisjonsfeil opptil 24 km
integrity-alarm, 600 s clock (bærer med seg 59,6 ns), jamming og integrity med en maske på 25 deg 5 satellitter spores; beskyttelsesnivå 19 til 135 m, mangler ved 18 av 60 rutenetttidspunkter; den overførte tidsfeilen, 52,1 til 61,7 ns, ligger fortsatt over vakten på 50 ns, så alarmen er oppe gjennom hele fasen
recovery, 600 s clock, jamming (ingen jammer), integrity tidsfeilen er tilbake til 0 ns; alarmen er stille

Integritetskjøringene bruker eksempelet integrity sitt eget brukerspor (et sirkulært spor i 0,4 km høyde), ikke jammingmottakerens faste sted, og masken på 25 deg står for den delvise himmelen til en mottaker som gjenfanger signaler. Dette er scenariovalg, oppgitt i filen.

Et oppdrag drevet av L-båndspekteret#

scenarios/campaign-spectrum-holdover-integrity.toml kjører 8 medlemsscenarioer over tre faser på et rutenett med 1 s, der C/N0 for GPS L1 C/A og Galileo E1 leses fra typen spectrum (se SPECTRUM.md) i stedet for fra typen jamming sin tabell per satellitt. Jammerne er de i scenarios/l-band-waterfall-jamming.toml.

Fase Kjøringer Hva tidslinjen viser
onset, avsluttet ved 10 s av end_at clock, spectrum (chirp fra 10 s), integrity L1 C/A 43,48 og E1 44,73 dB-Hz; fasen slutter ved spektrumkjøringens eget første tap av L1 C/A (timeline.bands[0].first_loss_t_s); beskyttelsesnivå 21,6 m mot 50 m
holdover, 600 s clock (nektet, bærer med seg onset-feilen, her 0 ns), spectrum (chirp på) L1 C/A 3,38 og E1 4,44 dB-Hz, begge under gulvet på 25 dB-Hz; tidsfeil -0.07 til 5,06 ns mot vakten på 50 ns; alarmen er oppe
galileo-fallback, 300 s clock (resynkronisert), spectrum (CW-tone på L1-bærebølgen), integrity på en Galileo-lignende Walker 24/3/1 L1 C/A holdt ved 17,98 dB-Hz, E1 tilbake til 44,73 dB-Hz; beskyttelsesnivå 6,1 til 17,7 m; alarmen er stille

At E1 kommer seg under CW-tonen, hviler på behandlingen av kontinuerlig spektrum i typen spectrum: tonen ligger i nullpunktet til MBOC-spekteret og kobler ikke inn noe. En ekte tone ville koblet inn gjennom kodens spektrallinjer. Dette er oppgitt i filen og i SPECTRUM.md.

[sweep]: et parameterrutenett over en hvilken som helst type#

En til tre punktdelte scenarionøkler, hver over et lineært eller logaritmisk område, på de samme akseverdiene som typen sweep-nd bruker. Hver akse har et navn og en enhet. Hver metrikk har et navn og en resultatbane, og enheten leses fra enhetsblokken til den feide typen, med mindre kampanjen deklarerer en. Med runs > 1 er hver node et seedet Monte Carlo-ensemble (realisering k ved nodens seed pluss k), rapportert med statistikken nedenfor. scenarios/campaign-sweep-jammer-power.toml sveiper en jammer 1 km fra mottakeren fra -50 til +10 dBW. Det gjennomsnittlige forholdet mellom jammer og signal endrer seg nøyaktig 1 dB per dB (12,2 til 72,2 dB), og tilgjengeligheten faller fra 1 til 0 mellom -30 og -25 dBW.

En punktdelt nøkkel kan indeksere en tabellrekke etter posisjon: system.2.sisre_m er sisre_m i den tredje tabellen [[system]], og case.0.system.0.shell.0.altitude_km går tre nivåer ned.

[monte_carlo]: et seedet ensemble#

Realisering k kjører scenarioet med seed-nøkkelen satt til base_seed + k, konvensjonen som klokkeensemblet allerede bruker, slik at ensemblet kan reproduseres eksakt. Hver metrikk rapporterer gjennomsnittet, populasjonens standardavvik, 5., 50. og 95. persentil etter nærmeste rang, et persentil-bootstrap-konfidensintervall på 95 % med fast seed for gjennomsnittet (2000 resamplinger) og, som standard, hvert sample i seed-rekkefølge. Resultatbaner kan indeksere tabeller: classical.series[-1].error_ns er det siste samplet.

[compose]: flere scenarioer under felles betingelser#

Navngitte felles verdier (et tall eller en tabell med tall, med en enhet) skrives inn i hvert medlem på nøklene det binder dem til, slik at medlemmene ikke kan være uenige om den felles betingelsen. Hvert medlem kjøres, og for hver metrikk gir den samlede oppsummeringen den minste, største og gjennomsnittlige verdien på tvers av medlemmene og navngir den beste og den verste. scenarios/campaign-shared-jammer-sea-road.toml setter én jammer på 8 dBW mellom et skip i Finskebukta (omtrent 30 km unna) og en bil på en kystvei i Helsingfors (omtrent 50 km unna). Skipet mister alle satellitter (gjennomsnittlig forhold mellom jammer og signal 39,0 dB), mens bilen beholder minst fire (34,6 dB).

[optimize]: den beste verdien for én metrikk#

En til tre punktdelte scenarionøkler, hver avgrenset til [lo, hi] på en lin- eller log-skala, søkes etter den beste verdien for én metrikk (goal = "minimize", "maximize" eller "target", som minimerer avstanden fra target).

Det finnes to metoder:

  • method = "grid" kjører hver node i et rutenett med steps per nøkkel, på sveipets akseverdier.
  • method = "nelder-mead" (standard) kjører en deterministisk Nelder–Mead-simpleks i koordinater normalisert til [0, 1] per nøkkel. Prøvepunkter projiseres på boksen. Seksjonen tar max_evals, et startsteg step og stopptoleransene ftol og xtol.

En kjøring der metrikken mangler eller ikke er endelig, skårer dårligst og beholdes i sporet. Med runs > 1 er metrikken gjennomsnittet over de samme seedene ved hver evaluering. Resultatet gir best_coords, best_metric, best_score, evals, stop_reason og hver evaluering i trace.

scenarios/campaign-optimize-link-budget.toml søker etter rekkevidde og datarate for en lenkemargin på 3 dB. Optimum er lokalt for boksen og starten. Det er MODELLED, aldri en global påstand.

Protokollen og terskelene som ble fastsatt på forhånd, står i docs/design/evidence/cap32-optimize/. Testen er tests/campaign_optimize_reference.rs. Resultatene:

  • en 1-D-målløsning stemmer med den lukkede formen til 6e-15;
  • rutenettmetoden stemmer bit for bit med en uavhengig brute-force-løkke;
  • simpleksen gjør det minst like bra som rutenettet på 41 × 41, på omtrent en tiendedel av kjøringene.

Terskelen for 1-D i runde 1 er registrert som NOT MET: boksen som ble fastsatt på forhånd, utelot løsningen.

Reproduserbarhet#

Hvert kampanjeresultat har scenario_hash, SHA-256 (Secure Hash Algorithm 2, 256-bits digest) av den kanoniske JavaScript Object Notation-formen (JSON) til kampanjedokumentet (rekkefølgen på nøklene og formateringen endrer den ikke), og en blokk reproducibility med antall medlemskjøringer og run_digest, en SHA-256 over digesten til hvert medlemsresultat i utsendelsesrekkefølge. To kjøringer med samme digest ga byte-identiske medlemsresultater. Hver fasekjøring registrerer også sin type, sin egen scenario_hash der typen har en, og SHA-256 av resultatdokumentet sitt. Hvert tall i dokumentet har en oppføring i enhetsblokken.

Kjernen er sekvensiell og leser ingen filer, så en kampanje kjører uendret i WebAssembly-bygget. Kampanjer kan ikke inneholde kampanjer.

Eksport#

--export på en kampanje skriver hvert medlemsscenario som har geometri, som sitt eget filsett, med medlemmets etikett satt inn før formatsuffikset: hver fasekjøring (<phase>, eller <phase>-<k> når fasen har flere kjøringer), sveipets basisscenario (sweep), Monte Carlo-scenarioet (monte-carlo) og hvert sammensatte medlem (med sin egen etikett, og med de felles verdiene det binder skrevet inn). Et medlem som er identisk med et tidligere, skrives én gang. Overleveringer og sveip- eller seed-verdier som er brukt under kjøring, er ikke med i de eksporterte scenarioene.

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 av medlemmene kan beskrive, avvises med den begrunnelsen. Tabellen per scenario står i INTEROP.md.

LEO-PNT-kampanjer#

Femten medfølgende kampanjer tar for seg spørsmål om posisjonering, navigasjon og tidssynkronisering (PNT) fra lav jordbane (LEO). LEO-PNT.md beskriver hva hver av dem viser. Hva hver av dem kjører, slik kommandolinjen oppsummerer det:

Scenario Modus Spørsmål
leo-focus-data-services.toml compose, 4 medlemmer tjenestedata i navigasjonsmeldingen mot rammelengde
leo-focus-fused-pnt-sisre.toml sveip av leo-pvt, 7 noder fusjonert MEO- og LEO-posisjonering mot LEO-signalets avstandsfeil i signalrommet (SISRE)
leo-focus-indoor-uhf.toml compose, 2 medlemmer LEO-PNT innendørs etter bånd og bygningsklasse
leo-focus-iot-eirp.toml sveip av leo-pass, 9 noder energi per posisjonsbestemmelse for tingenes internett (IoT) mot LEO-UHF-senderens effekt
leo-focus-ntn-bandwidth.toml sveip av ntn-positioning, 9 noder posisjonering i ikke-terrestriske nett (NTN) mot referansesignalets båndbredde
leo-focus-ppp-altitude.toml sveip av leo-ppp, 3 noder konvergens for presis punktposisjonering (PPP) mot høyden til et LEO-lag med 192 satellitter
leo-resilience-gnss-jammed-leo-carries.toml chain, 3 faser over 2100 s globalt navigasjonssatellittsystem (GNSS) jammet, LEO-laget bærer brukeren, integriteten opprettholdt
leo-resilience-multiband-diversity.toml sveip av spectrum, 13 noder LEO-båndmangfold mot en L-bånds barrage-jammer
leo-resilience-spoof-monitors.toml compose, 4 medlemmer spoofingovervåkerne mot fire spoofere
leo-vertical-5g-network-timing.toml chain, 1 fase over 86 400 s tidssynkronisering av 5G-basestasjoner: holdover og LEO-tid
leo-vertical-asset-tracking-iot.toml chain, 3 faser over 1440 s containersporing med LEO-UHF: energi per posisjonsbestemmelse langs en reise
leo-vertical-autonomous-vehicle.toml chain, 2 faser over 1500 s et autonomt kjøretøy i en bykløft med et LEO-lag
leo-vertical-autonomous-vehicle-skyline.toml chain, 2 faser over 1800 s den samme bykløften som en flat avskjæringsvinkel på 35 deg og som en city-street-silhuett
leo-vertical-critical-infrastructure-timing.toml chain, 2 faser over 87 000 s tidssynkronisering for kritisk infrastruktur: holdover med LEO-tid
leo-vertical-polar-arctic.toml chain, 3 faser over 10 800 s brukere i polare strøk og Arktis med et polart LEO-lag
leo-vertical-rail-maritime.toml chain, 3 faser over 2520 s jernbane- og sjøfartsbrukere med et LEO-lag

MEO er middels høy jordbane, UHF ultrahøy frekvens og 5G femte generasjon av mobilnett.

Hva som kontrolleres#

tests/campaign_composition_reference.rs fester sammensetningsidentitetene:

  • En kampanje med én fase reproduserer den frittstående kjøringen bit for bit. For clock, integrity og jamming er medlemmets resultatdokument byte-identisk med run_toml på scenariofilen, digesten er den kampanjen rapporterer, og med rutenettet på kjøringens eget steg er hver justerte verdi lik verdien i den frittstående serien (jamming-C/N0 er lik gjennomsnittet som er beregnet uavhengig fra det frittstående dokumentet).
  • Et sveip med én node og en sammensetning med ett medlem leser nøyaktig det frittstående tallet.
  • Et ensemble med fast seed er byte-stabilt, og realisering k er nøyaktig den frittstående kjøringen ved seed + k. Kampanjens hash ignorerer rekkefølgen på nøklene.
  • Et analytisk tilfelle. scenarios/campaign-monte-carlo-clock-holdover.toml kjører 200 seed av en brikkeskala atomklokke med bare hvit frekvensstøy (q_wf = 9e-20 s^2/s, Microchip SA.45s sigma_y(1 s) = 3e-10), synkronisert til 590 s og på tomgang til 3600 s. Den endelige tidsfeilen er gaussisk med gjennomsnitt 0 og standardavvik sqrt(q_wf * 3010 s) = 16,459 ns (fasens tilfeldige gange under hvit frekvensstøy, National Institute of Standards and Technology (NIST) Technical Note 1337). Det rapporterte intervallet, [-2.52, 1,59] ns, inneholder det sanne gjennomsnittet 0. Utvalgets standardavvik, 14,93 ns, gir en kjikvadratstatistikk på 164,5 med 199 frihetsgrader, innenfor det tosidige intervallet på 99 % [151,37, 254,14]. Med 3000 seed gir det samme scenarioet 16,31 ns.
  • Den spektrumdrevne kjeden leser de frittstående tallene: onset-fasen varer nøyaktig like lenge som spektrumkjøringens tid til første tap, og hver L1 C/A- og E1-verdi på tidslinjen er, innenfor 1e-9 dB, lik raden i det frittstående vannfallseksempelet for den samme jammertilstanden (nominell, bare chirp, bare CW-tone).
  • Kjeden overleverer tilstand slik det er dokumentert: spoofingfasen varer nøyaktig like lenge som spoofkjøringens deteksjonstid, holdoveren bærer nøyaktig spoofkjøringens forskyvning ved deteksjon, recovery bærer ingenting, og alarmen er oppe overalt der beskyttelsesnivået mangler eller overstiger alarmgrensen.

Disse kontrollerer at sammensetning ikke endrer noe det ikke skal. De validerer ikke et lenket oppdrag mot et målt, og det er derfor de tre kampanjeradene i VERIFICATION-MATRIX.md er MODELLED.