Strojový překlad, nekontrolovaný rodilým mluvčím. Referenční je anglická verze.

ScénářeUpravit na GitHubuZdroj: docs/CAMPAIGNS.md

Kampaně

Jeden scénář odpovídá na jednu otázku o jedné situaci. Mise je posloupnost situací a návrhová studie je jejich rodina. Druh scénáře campaign skládá existující druhy do jednoho běhu, aniž by kterýkoli z nich znovu implementoval: každý člen je běžná tabulka scénáře nesoucí vlastní kind, rozdělovaná přes api::run_toml přesně tak, jak by ji spustilo kshana <file>.toml, a kampaň z dokumentů s výsledky pouze čte čísla.

Kampaň je MODELLED. Její kompoziční identity jsou testovány (viz níže), ale řetězení fází je modelářská volba a každá fáze je tak dobrá, jako druh, který ji spustil.

Spusťte ji jako kterýkoli jiný scénář:

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

Kampaň může obsahovat libovolnou kombinaci čtyř sekcí; kampaň bez jediné se spustí a její shrnutí uvede, že nesložila nic.

[[phases]]: řetězená mise na jedné časové ose#

Každá fáze spouští jeden nebo více scénářů v okně sdílené časové osy mise, například hodiny v holdoveru a inerciální navigační systém (INS) setrvávající ve stejné době. Výstupy každého běhu se čtou do pojmenovaných kanálů, umístí se na počáteční čas fáze a převzorkují na společnou mřížku ([timeline] step_s) podržením nultého řádu: čas mřížky přebírá poslední vzorek běhu vlastnící fáze, který v daný okamžik nebo před ním existuje, a je null tam, kde kanál neposkytuje žádný běh dané fáze.

Kanál Jednotka Co to je Zdroj předvolby
time_error_ns ns časová chyba hodin clock: <side>.series[].error_ns; spoof: <side>.series[].offset_ns
guard_ns ns ochrana časové chyby vlastní threshold_ns běhu
cn0_dbhz dB-Hz průměrný efektivní poměr nosné k hustotě šumu (C/N0) přes viditelné družice jamming: průměr epochs[].sats[].cn0_effective_dbhz
cn0_floor_dbhz dB-Hz práh ztráty sledování jamming: tracking_threshold_dbhz scénáře, pokud je uvádí
tracking počet družice, které stále sledují jamming: epochs[].tracking
protection_level_m m vertikální ochranná úroveň integrity: epochs[].vpl_m
alert_limit_m m vertikální mez výstrahy integrity: al_v_m
position_error_m m chyba polohy gnss-ins: <side>.series[].error_m
position_threshold_m m práh chyby polohy gnss-ins: threshold_m
alarm 1 1, dokud kterýkoli monitor fáze hlásí poplach viz níže

<side> je classical, pokud běh nenastaví side = "quantum". Jakákoli jiná veličina se čte pomocí explicitního záznamu [[phases.runs.series]]: časová cesta s jedním [] pojmenovávajícím řádky (epochs[].t), cesta hodnot sdílející tyto řádky nebo skalár rozšířený na každý řádek (předpona input: čte scénář běhu místo jeho výsledku), volitelná redukce (mean, min, max, count) pro několik hodnot pod jedním řádkem, měřítko a jednotka pro kanál, který kampaň nezná.

Poplachy pocházejí ze tří míst, uvnitř fáze spojených logickým OR:

  • příznaky předvoleb načtené z běhu: jamming hlásí poplach, dokud sleduje méně než čtyři družice (vlastní definice dostupnosti); integrity hlásí poplach v epochách, které označí jako nedostupné;
  • pravidla předvoleb na kanálech fáze, vyhodnocovaná po carry: clock hlásí poplach, dokud absolutní časová chyba přesahuje guard_ns; gnss-ins dokud chyba polohy přesahuje position_threshold_m; explicitní pravidla patří do [[phases.runs.alarms]];
  • události s poplachem: spoof jednu vyvolá při detect_time_s svého monitoru podporovaného hodinami; spoof-detect jednu vyvolá na začátku fáze, když jeho fúzní rozhodnutí hlásí výstrahu.

Stav se předává mezi fázemi třemi explicitními způsoby:

  • carry = ["time_error_ns"] přičte hodnotu kanálu na konci předchozí fáze k hodnotám tohoto kanálu v této fázi. Fáze hodin, kterou spoofer odtáhl, je místem, odkud holdover začíná. Přičtení posunu je přesné pro fázi hodin, která integruje frekvenci; u chyby polohy předpokládá, že obě chyby jsou kolineární, což je pesimistický případ.
  • [[phases.handoff]] zapíše číslo z předchozí fáze (channel:<name> pro koncovou hodnotu kanálu nebo libovolnou cestu výsledku předchozího běhu) do klíče s tečkami scénáře této fáze před jeho během, s volitelným měřítkem a posunem.
  • end_at = "<result path>" ukončí fázi v čase, který vypočítal některý běh, omezeném na duration_s. Přibalená mise ukončuje fázi spoofingu v classical.detect_time_s.

skip_s zahodí prvních několik sekund vlastní časové osy běhu (zahřátí) před nulovým časem fáze.

Přibalená mise#

scenarios/campaign-jam-spoof-holdover-integrity.toml spouští 18 členských scénářů v šesti fázích na mřížce 10 s:

Fáze Běhy Co časová osa ukazuje
nominální, 600 s clock, jamming (bez rušičky), integrity časová chyba 0 ns; C/N0 43,0 dB-Hz proti prahu 25 dB-Hz; vertikální ochranná úroveň 9,1 až 21,6 m proti mezi výstrahy 50 m
rušení (jamming), 600 s totéž, rušička -30 dBW, 1 km C/N0 klesne na 27,7 dB-Hz, všech 8 družic stále sleduje
spoofing, ukončen v 370 s pomocí end_at spoof (časová rampa 0,1 ns/s), spoof-detect, jamming časová chyba narůstá na 36 ns; radiofrekvenční detektor hlásí poplach na začátku fáze, monitor podporovaný hodinami v 370 s
holdover, 1800 s clock (odepřeno, přenáší 37,0 ns), gnss-ins (taktická jednotka setrvávající), jamming při 10 dBW ztraceny všechny družice (C/N0 asi -12 dB-Hz); časová chyba 36,4 až 62,7 ns proti ochraně 50 ns; chyba polohy až 24 km
integrity-alarm, 600 s clock (přenáší 59,6 ns), jamming a integrity s maskou 25 deg sleduje 5 družic; ochranná úroveň 19 až 135 m, chybí v 18 z 60 časů mřížky; přenesená časová chyba, 52,1 až 61,7 ns, zůstává nad ochranou 50 ns, takže poplach trvá po celou fázi
zotavení, 600 s clock, jamming (bez rušičky), integrity časová chyba zpět na 0 ns; poplach utichl

Běhy integrity používají vlastní uživatelskou trajektorii příkladu integrity (kruhovou trajektorii ve výšce 0,4 km), nikoli pevné stanoviště přijímače pro rušení, a maska 25 deg zastupuje částečnou oblohu přijímače, který znovu zachytává signál. To jsou volby scénáře, uvedené v souboru.

Mise řízená spektrem v pásmu L#

scenarios/campaign-spectrum-holdover-integrity.toml spouští 8 členských scénářů ve třech fázích na mřížce 1 s, přičemž C/N0 pro GPS L1 C/A a Galileo E1 se čte z druhu spectrum (viz SPECTRUM.md), nikoli z tabulky druhu jamming po jednotlivých družicích. Rušičky jsou ty z scenarios/l-band-waterfall-jamming.toml.

Fáze Běhy Co časová osa ukazuje
nástup, ukončen v 10 s pomocí end_at clock, spectrum (chirp od 10 s), integrity L1 C/A 43,48 a E1 44,73 dB-Hz; fáze končí při první ztrátě L1 C/A v běhu spektra (timeline.bands[0].first_loss_t_s); ochranná úroveň 21,6 m proti 50 m
holdover, 600 s clock (odepřeno, přenáší chybu nástupu, zde 0 ns), spectrum (chirp zapnut) L1 C/A 3,38 a E1 4,44 dB-Hz, obojí pod prahem 25 dB-Hz; časová chyba -0.07 až 5,06 ns proti ochraně 50 ns; poplach trvá
galileo-fallback, 300 s clock (znovu synchronizováno), spectrum (tón CW na nosné L1), integrity na konstelaci podobné Galileo Walker 24/3/1 L1 C/A drží na 17,98 dB-Hz, E1 zpět na 44,73 dB-Hz; ochranná úroveň 6,1 až 17,7 m; poplach utichl

Zotavení E1 pod tónem CW spočívá na zacházení druhu spektrum se spojitým spektrem: tón leží v nule spektra MBOC a nic nespřahuje. Skutečný tón by se spřahoval přes spektrální čáry kódu; to je uvedeno v souboru a v SPECTRUM.md.

[sweep]: mřížka parametrů přes libovolný druh#

Jeden až tři tečkami oddělené klíče scénáře, každý v lineárním nebo logaritmickém rozsahu, na týchž hodnotách os, jaké používá druh sweep-nd. Každá osa má název a jednotku; každá metrika má název a cestu k výsledku a její jednotka se čte z bloku jednotek procházeného druhu, pokud kampaň neuvede vlastní. S runs > 1 je každý uzel souborem Monte Carlo se seedem (realizace k na seedu uzlu plus k) a uvádí se se statistikami níže. scenarios/campaign-sweep-jammer-power.toml prochází výkon rušičky 1 km od přijímače od -50 do +10 dBW: průměrný poměr rušení k signálu se mění přesně o 1 dB na dB (12,2 až 72,2 dB) a dostupnost klesá z 1 na 0 mezi -30 a -25 dBW.

Klíč s tečkami může indexovat pole tabulek podle pozice: system.2.sisre_m je sisre_m třetí tabulky [[system]] a case.0.system.0.shell.0.altitude_km sahá o tři úrovně hlouběji.

[monte_carlo]: soubor se seedem#

Realizace k spouští scénář s klíčem seedu nastaveným na base_seed + k, což je konvence, kterou už používá soubor hodin, takže soubor je přesně reprodukovatelný. Každá metrika uvádí průměr, populační směrodatnou odchylku, percentily 5., 50. a 95. podle nejbližšího pořadí, percentilový bootstrap s pevným seedem, 95% interval spolehlivosti průměru (2000 převzorkování) a ve výchozím stavu každý vzorek v pořadí seedů. Cesty k výsledkům mohou indexovat pole: classical.series[-1].error_ns je poslední vzorek.

[compose]: několik scénářů za sdílených podmínek#

Pojmenované sdílené hodnoty (číslo nebo pole čísel s jednotkou) se zapisují do každého člena pod klíče, ke kterým je váže, takže se členové nemohou o sdílené podmínce rozcházet. Každý člen běží a pro každou metriku uvádí souhrn nejmenší, největší a průměrnou hodnotu napříč členy a pojmenuje nejlepšího a nejhoršího. scenarios/campaign-shared-jammer-sea-road.toml staví jednu rušičku 8 dBW mezi loď v Finském zálivu (asi 30 km daleko) a auto na pobřežní silnici v Helsinkách (asi 50 km): loď ztratí všechny družice (průměrný poměr rušení k signálu 39,0 dB), zatímco auto si ponechá alespoň čtyři (34,6 dB).

[optimize]: nejlepší hodnota jedné metriky#

Jeden až tři tečkami oddělené klíče scénáře, každý omezený na [lo, hi] v měřítku lin nebo log, se prohledávají kvůli nejlepší hodnotě jedné metriky (goal = "minimize", "maximize" nebo "target", které minimalizuje vzdálenost od target).

Existují dvě metody:

  • method = "grid" spustí každý uzel mřížky s steps na klíč, na hodnotách os průchodu.
  • method = "nelder-mead" (výchozí) spouští deterministický simplex Nelder–Mead v souřadnicích normalizovaných na [0, 1] pro každý klíč. Zkušební body se promítají do kvádru. Sekce přijímá max_evals, počáteční step a zastavovací tolerance ftol a xtol.

Běh, jehož metrika chybí nebo není konečná, se hodnotí jako nejhorší a ponechává se ve stopě. S runs > 1 je metrika průměrem přes tytéž seedy při každém vyhodnocení. Výsledek uvádí best_coords, best_metric, best_score, evals, stop_reason a každé vyhodnocení v trace.

scenarios/campaign-optimize-link-budget.toml hledá dosah a datovou rychlost pro rezervu spoje 3 dB. Optimum je lokální v rámci kvádru a startu. Je MODELLED, nikdy nejde o globální tvrzení.

Protokol a jeho předregistrované prahy jsou v docs/design/evidence/cap32-optimize/. Test je tests/campaign_optimize_reference.rs. Výsledky:

  • 1D řešení cíle souhlasí s uzavřeným tvarem na 6e-15;
  • metoda mřížky souhlasí bit po bitu s nezávislou smyčkou hrubou silou;
  • simplex si vede alespoň stejně dobře jako mřížka 41 × 41, přibližně za desetinu jejích běhů.

1D práh kola 1 je zaznamenán jako NOT MET: předregistrovaný kvádr řešení vylučoval.

Reprodukovatelnost#

Každý výsledek kampaně nese scenario_hash, SHA-256 (Secure Hash Algorithm 2, 256bitový otisk) kanonického tvaru dokumentu kampaně v JavaScript Object Notation (JSON) (pořadí klíčů a formátování ho nemění), a blok reproducibility s počtem členských běhů a run_digest, SHA-256 přes otisky všech výsledků členů v pořadí rozdělování. Dva běhy se stejným otiskem vytvořily bajt po bajtu shodné výsledky členů. Každý běh fáze také zaznamenává svůj druh, vlastní scenario_hash, pokud ho druh má, a SHA-256 svého dokumentu s výsledkem. Každé číslo v dokumentu má záznam jednotek.

Jádro je sekvenční a nečte žádné soubory, takže kampaň běží beze změny v sestavení WebAssembly. Kampaně nesmějí obsahovat kampaně.

Exporty#

--export u kampaně zapíše každý členský scénář, který má geometrii, jako vlastní sadu souborů, přičemž štítek člena se vloží před příponu formátu: každý běh fáze (<phase>, nebo <phase>-<k>, má-li fáze několik běhů), základní scénář průchodu (sweep), scénář Monte Carlo (monte-carlo) a každého složeného člena (jeho vlastní štítek, se sdílenými hodnotami, které váže, zapsanými dovnitř). Člen shodný s dřívějším se zapíše jednou; předání a hodnoty průchodu nebo seedu použité za běhu nejsou v exportovaných scénářích.

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

Formát, který žádný z členů nedokáže popsat, je odmítnut s uvedením tohoto důvodu. Tabulka po jednotlivých scénářích je v INTEROP.md.

Kampaně LEO-PNT#

Patnáct přibalených kampaní rámuje otázky určování polohy, navigace a času (PNT) z nízké oběžné dráhy Země (LEO); LEO-PNT.md popisuje, co každá z nich ukazuje. Co každá spouští, jak to shrnuje příkazový řádek:

Scénář Režim Otázka
leo-focus-data-services.toml skládání, 4 členové servisní data navigační zprávy podle délky rámce
leo-focus-fused-pnt-sisre.toml průchod leo-pvt, 7 uzlů fúzní určování polohy z MEO a LEO podle chyby dosahu signálu ve vesmíru (SISRE) LEO
leo-focus-indoor-uhf.toml skládání, 2 členové vnitřní LEO-PNT podle pásma a třídy budovy
leo-focus-iot-eirp.toml průchod leo-pass, 9 uzlů energie na určení polohy pro internet věcí (IoT) podle vysílacího výkonu LEO UHF
leo-focus-ntn-bandwidth.toml průchod ntn-positioning, 9 uzlů určování polohy v neterestrických sítích (NTN) podle šířky pásma referenčního signálu
leo-focus-ppp-altitude.toml průchod leo-ppp, 3 uzly konvergence přesného určování polohy z jednoho bodu (PPP) podle výšky vrstvy LEO o 192 družicích
leo-resilience-gnss-jammed-leo-carries.toml řetěz, 3 fáze po 2100 s globální družicový navigační systém (GNSS) rušen, uživatele nese vrstva LEO, integrita zachována
leo-resilience-multiband-diversity.toml průchod spectrum, 13 uzlů pásmová diverzita LEO proti širokopásmové rušičce v pásmu L
leo-resilience-spoof-monitors.toml skládání, 4 členové monitory spoofingu proti čtyřem spooferům
leo-vertical-5g-network-timing.toml řetěz, 1 fáze po 86 400 s časování základnových stanic 5G: holdover a čas z LEO
leo-vertical-asset-tracking-iot.toml řetěz, 3 fáze po 1440 s sledování kontejnerů přes LEO UHF: energie na určení polohy po cestě
leo-vertical-autonomous-vehicle.toml řetěz, 2 fáze po 1500 s autonomní vozidlo v městském kaňonu s vrstvou LEO
leo-vertical-autonomous-vehicle-skyline.toml řetěz, 2 fáze po 1800 s tentýž městský kaňon jako plochá mez 35 deg a jako obrys oblohy city-street
leo-vertical-critical-infrastructure-timing.toml řetěz, 2 fáze po 87 000 s časování kritické infrastruktury: holdover s časem z LEO
leo-vertical-polar-arctic.toml řetěz, 3 fáze po 10 800 s polární a arktičtí uživatelé s polární vrstvou LEO
leo-vertical-rail-maritime.toml řetěz, 3 fáze po 2520 s železniční a námořní uživatelé s vrstvou LEO

MEO je střední oběžná dráha Země, UHF ultra vysoká frekvence a 5G pátá generace mobilních sítí.

Co se kontroluje#

tests/campaign_composition_reference.rs pevně stanoví kompoziční identity:

  • Jednofázová kampaň reprodukuje samostatný běh bit po bitu. Pro clock, integrity a jamming je dokument s výsledkem člena bajt po bajtu shodný s run_toml na souboru scénáře, jeho otisk je ten, který kampaň uvádí, a při mřížce na vlastním kroku běhu se každá zarovnaná hodnota rovná hodnotě samostatné řady (C/N0 rušení se rovná průměru vypočtenému nezávisle ze samostatného dokumentu).
  • Průchod o jednom uzlu a složení z jednoho člena čtou přesně samostatné číslo.
  • Soubor s pevným seedem je bajtově stabilní a realizace k je přesně samostatný běh na seed + k; otisk kampaně ignoruje pořadí klíčů.
  • Analytický případ. scenarios/campaign-monte-carlo-clock-holdover.toml spouští 200 seedů čipových atomových hodin pouze s bílým frekvenčním šumem (q_wf = 9e-20 s^2/s, Microchip SA.45s sigma_y(1 s) = 3e-10), synchronizovaných do 590 s a setrvávajících do 3600 s. Konečná časová chyba je gaussovská se střední hodnotou 0 a směrodatnou odchylkou sqrt(q_wf * 3010 s) = 16,459 ns (náhodná procházka fáze při bílém frekvenčním šumu, Technical Note 1337 National Institute of Standards and Technology (NIST)). Uvedený interval, [-2.52, 1,59] ns, obsahuje pravou střední hodnotu 0; výběrová směrodatná odchylka, 14,93 ns, dává statistiku chí-kvadrát 164,5 při 199 stupních volnosti, uvnitř oboustranného 99% intervalu [151,37, 254,14]. Při 3000 seedech dává stejný scénář 16,31 ns.
  • Řetěz řízený spektrem čte samostatná čísla: fáze nástupu trvá přesně dobu první ztráty v běhu spektra a každá hodnota L1 C/A a E1 na časové ose se na 1e-9 dB rovná řádku samostatného příkladu vodopádu pro stejný stav rušičky (nominální, samotný chirp, samotný tón CW).
  • Řetěz předává stav tak, jak je zdokumentováno: fáze spoofingu trvá přesně dobu detekce v běhu spoofingu, holdover přenáší přesně posun běhu spoofingu při detekci, zotavení nepřenáší nic a poplach trvá všude tam, kde ochranná úroveň chybí nebo překračuje mez výstrahy.

Tyto kontroly ověřují, že skládání nemění nic, co by změnit nemělo. Neověřují řetězenou misi proti naměřené, a proto jsou tři řádky kampaní v VERIFICATION-MATRIX.md MODELLED.