Kampanjat
Yksittäinen skenaario vastaa yhteen kysymykseen yhdestä tilanteesta. Tehtävä on tilanteiden jono ja suunnittelututkimus niiden perhe. Skenaariolaji campaign yhdistää olemassa olevat lajit yhdeksi ajoksi toteuttamatta mitään niistä uudelleen: jokainen jäsen on tavallinen skenaariotaulukko, jolla on oma kind, ja se välitetään funktion api::run_toml kautta täsmälleen niin kuin komento kshana <file>.toml sen ajaisi, ja kampanja vain lukee lukuja tulosasiakirjoista.
Kampanja on MODELLED. Sen koostamisidentiteetit on testattu (alla), mutta vaiheiden ketjuttaminen on mallinnusvalinta, ja kukin vaihe on vain niin hyvä kuin sen ajanut laji.
Aja sellainen kuten mikä tahansa muu skenaario:
kshana scenarios/campaign-jam-spoof-holdover-integrity.toml
# writes .result.json, .chart.svg, .report.html and .report.json next to the file
Kampanjassa voi olla mikä tahansa yhdistelmä neljästä osiosta; kampanja, jossa ei ole yhtään, ajetaan ja sen yhteenveto kertoo, ettei se koostanut mitään.
[[phases]]: ketjutettu tehtävä yhdellä aikajanalla#
Kukin vaihe ajaa yhden tai useamman skenaarion yhteisen tehtävän aikajanan ikkunassa, esimerkiksi holdover-tilassa olevan kellon ja samaan aikaan liukuvan inertianavigointijärjestelmän (INS). Kunkin ajon tulosteet luetaan nimettyihin kanaviin, sijoitetaan vaiheen alkuhetkeen ja otetaan uudelleen yhteiselle ruudukolle ([timeline] step_s) nollannen asteen pidolla: ruudukon aika saa vaiheen ajon viimeisimmän näytteen, joka on sillä tai sitä aiemmin, ja on null, jos mikään kyseisen vaiheen ajo ei tarjoa kanavaa.
| Kanava | Yksikkö | Mikä se on | Esiasetuksen lähde |
|---|---|---|---|
time_error_ns |
ns | kellon aikavirhe | clock: <side>.series[].error_ns; spoof: <side>.series[].offset_ns |
guard_ns |
ns | aikavirheen suojaraja | ajon oma threshold_ns |
cn0_dbhz |
dB-Hz | näkyvien satelliittien efektiivisen kantoaalto-kohinatiheyssuhteen (C/N0) keskiarvo | jamming: kentän epochs[].sats[].cn0_effective_dbhz keskiarvo |
cn0_floor_dbhz |
dB-Hz | seurannan menetyksen alaraja | jamming: skenaarion tracking_threshold_dbhz, kun se sellaisen ilmoittaa |
tracking |
lukumäärä | yhä seurattavat satelliitit | jamming: epochs[].tracking |
protection_level_m |
m | pystysuuntainen suojaustaso | integrity: epochs[].vpl_m |
alert_limit_m |
m | pystysuuntainen hälytysraja | integrity: al_v_m |
position_error_m |
m | paikkavirhe | gnss-ins: <side>.series[].error_m |
position_threshold_m |
m | paikkavirheen kynnys | gnss-ins: threshold_m |
alarm |
1 | 1, kun jokin vaiheen monitori hälyttää | katso alla |
<side> on classical, ellei ajo aseta side = "quantum". Mikä tahansa muu suure luetaan eksplisiittisellä merkinnällä [[phases.runs.series]]: aikapolku, jossa yksi [] nimeää rivit (epochs[].t), arvopolku, joka jakaa nämä rivit, tai skalaari, joka lähetetään jokaiselle riville (etuliite input: lukee ajon skenaarion sen tuloksen sijaan), valinnainen pelkistys (mean, min, max, count) usealle arvolle yhden rivin alla, skaala ja yksikkö kanavalle, jota kampanja ei tunne.
Hälytykset tulevat kolmesta lähteestä, jotka yhdistetään loogisella OR:lla vaiheen sisällä:
- ajosta luetut esiasetetut liput:
jamminghälyttää, kun alle neljä satelliittia seuraa (sen oma saatavuusmääritelmä);integrityhälyttää epookeilla, jotka se merkitsee ei saatavilla oleviksi; - vaiheen kanavien esiasetussäännöt, arvioidaan sen jälkeen, kun
carryon suoritettu:clockhälyttää, kun absoluuttinen aikavirhe ylittää arvonguard_ns;gnss-inskun paikkavirhe ylittää arvonposition_threshold_m; eksplisiittiset säännöt kirjoitetaan kohtaan[[phases.runs.alarms]]; - hälyttävät tapahtumat:
spooftuottaa yhden kellotuetun monitorinsa kohdassadetect_time_s;spoof-detecttuottaa yhden vaiheen alussa, kun sen yhdistetty päätös hälyttää.
Tila siirretään vaiheiden välillä kolmella eksplisiittisellä tavalla:
carry = ["time_error_ns"]lisää kanavan arvon edellisen vaiheen lopussa tämän vaiheen saman kanavan arvoihin. Kellon vaihe, jonka harhauttaja veti pois, on kohta, josta holdover alkaa. Offsetin lisääminen on tarkka kellon vaiheelle, joka integroi taajuutta; paikkavirheelle se olettaa kahden virheen olevan samansuuntaisia, mikä on pessimistinen tapaus.[[phases.handoff]]kirjoittaa edellisen vaiheen luvun (channel:<name>kanavan loppuarvolle tai mikä tahansa aiemman ajon tulospolku) tämän vaiheen skenaarion pisteellä erotettuun avaimeen ennen ajoa, valinnaisella skaalalla ja siirtymällä.end_at = "<result path>"päättää vaiheen hetkeen, jonka ajo laski, rajattuna arvoonduration_s. Mukana toimitettu tehtävä päättää harhautusvaiheensa hetkeenclassical.detect_time_s.
skip_s pudottaa ajon oman aikajanan ensimmäiset sekunnit (lämmittely) ennen vaiheen nollahetkeä.
Mukana toimitettu tehtävä#
scenarios/campaign-jam-spoof-holdover-integrity.toml ajaa 18 jäsenskenaariota kuudessa vaiheessa 10 s ruudukolla:
| Vaihe | Ajot | Mitä aikajana näyttää |
|---|---|---|
| nominaali, 600 s | clock, jamming (ei häirintälähdettä), integrity |
aikavirhe 0 ns; C/N0 43,0 dB-Hz, kun alaraja on 25 dB-Hz; pystysuuntainen suojaustaso 9,1–21,6 m, kun hälytysraja on 50 m |
| häirintä, 600 s | sama, häirintälähde tasolla -30 dBW, 1 km | C/N0 laskee arvoon 27,7 dB-Hz, kaikki 8 satelliittia yhä seurattavina |
harhautus, päättyi hetkellä 370 s säännöllä end_at |
spoof (0,1 ns/s aikarampi), spoof-detect, jamming |
aikavirhe kasvaa rampilla arvoon 36 ns; radiotaajuinen ilmaisin hälyttää vaiheen alussa, kellotuettu monitori hetkellä 370 s |
| holdover, 1800 s | clock (estetty, mukana 37,0 ns), gnss-ins (taktinen yksikkö liukumassa), jamming tasolla 10 dBW |
jokainen satelliitti menetetty (C/N0 noin -12 dB-Hz); aikavirhe 36,4–62,7 ns, kun suojaraja on 50 ns; paikkavirhe kasvaa arvoon 24 km |
| eheyshälytys, 600 s | clock (mukana 59,6 ns), jamming ja integrity maskilla 25 astetta |
5 satelliittia seurannassa; suojaustaso 19–135 m, puuttuu 18 ruudukkohetkellä, joita on yhteensä 60; mukana kulkeva aikavirhe, 52,1–61,7 ns, pysyy suojarajan yläpuolella (50 ns), joten hälytys on päällä koko vaiheen ajan |
| palautuminen, 600 s | clock, jamming (ei häirintälähdettä), integrity |
aikavirhe takaisin arvossa 0 ns; hälytys hiljaa |
Eheysajot käyttävät esimerkin integrity omaa käyttäjäreittiä (pyöreä reitti, korkeus 0,4 km), eivät häirintävastaanottimen kiinteää paikkaa, ja maski 25 astetta edustaa uudelleen kiinnittyvän vastaanottimen osittaista taivasta. Nämä ovat skenaariovalintoja, jotka on kirjattu tiedostoon.
L-kaistan spektrin ohjaama tehtävä#
scenarios/campaign-spectrum-holdover-integrity.toml ajaa 8 jäsenskenaariota kolmessa vaiheessa 1 s ruudukolla, ja GPS L1 C/A:n ja Galileo E1:n C/N0 luetaan lajista spectrum (ks. SPECTRUM.md) eikä lajin jamming satelliittikohtaisesta taulukosta. Häirintälähteet ovat ne, jotka ovat tiedostossa scenarios/l-band-waterfall-jamming.toml.
| Vaihe | Ajot | Mitä aikajana näyttää |
|---|---|---|
alku, päättyi hetkellä 10 s säännöllä end_at |
clock, spectrum (chirp hetkestä 10 s), integrity |
L1 C/A 43,48 ja E1 44,73 dB-Hz; vaihe päättyy spektriajon omaan L1 C/A:n ensimmäiseen menetykseen (timeline.bands[0].first_loss_t_s); suojaustaso 21,6 m, kun raja on 50 m |
| holdover, 600 s | clock (estetty, mukana alkuvirhe, tässä 0 ns), spectrum (chirp päällä) |
L1 C/A 3,38 ja E1 4,44 dB-Hz, molemmat alle rajan 25 dB-Hz; aikavirhe välillä -0.07 ja 5,06 ns, kun suojaraja on 50 ns; hälytys päällä |
| Galileo-varavaihtoehto, 300 s | clock (synkronoitu uudelleen), spectrum (CW-sävel L1-kantoaallolla), integrity Galileo-tyyppisellä Walker-tähdistöllä 24/3/1 |
L1 C/A pysyy arvossa 17,98 dB-Hz, E1 takaisin arvoon 44,73 dB-Hz; suojaustaso 6,1–17,7 m; hälytys hiljaa |
E1:n palautuminen CW-sävyn alla perustuu spektrilajin jatkuvan spektrin käsittelyyn: sävel osuu MBOC-spektrin nollakohtaan eikä kytkeydy mihinkään. Todellinen sävel kytkeytyisi koodin spektriviivojen kautta; tämä on kirjattu tiedostoon ja asiakirjaan SPECTRUM.md.
[sweep]: parametriruudukko mille tahansa lajille#
Yhdestä kolmeen pisteellä erotettua skenaarioavainta, kukin lineaarisella tai logaritmisella alueella, samoilla akseliarvoilla, joita laji sweep-nd käyttää. Jokaisella akselilla on nimi ja yksikkö; jokaisella mittarilla on nimi ja tulospolku, ja sen yksikkö luetaan pyyhkäistyn lajin omasta yksikkölohkosta, ellei kampanja ilmoita omaa. Kun runs > 1, jokainen solmu on siemenillä alustettu Monte Carlo -joukko (toteuma k solmun siemenluvulla plus k), raportoituna alla olevilla tilastoilla. scenarios/campaign-sweep-jammer-power.toml pyyhkäisee häirintälähdettä, joka on 1 km päässä vastaanottimesta, tasolta -50 tasolle +10 dBW: keskimääräinen häirintä-signaalisuhde liikkuu täsmälleen 1 dB per dB (12,2–72,2 dB), ja saatavuus putoaa arvosta 1 arvoon 0 välillä -30 ja -25 dBW.
Pisteellä erotettu avain voi indeksoida taulukkotaulukkoa sijainnin mukaan: system.2.sisre_m on kolmannen taulukon [[system]] kenttä sisre_m, ja case.0.system.0.shell.0.altitude_km yltää kolme tasoa alas.
[monte_carlo]: siemenillä alustettu joukko#
Toteuma k ajaa skenaarion siten, että sen siemenavaimeksi asetetaan base_seed + k, kuten kelloensemble jo tekee, joten joukko toistuu täsmälleen. Kukin mittari raportoi keskiarvon, populaation keskihajonnan, lähimmän sijan 5., 50. ja 95. persentiilin, kiinteällä siemenluvulla lasketun persentiili-bootstrap-luottamusvälin (taso 95%) keskiarvolle (2000 uudelleenotosta) ja oletuksena jokaisen näytteen siemenjärjestyksessä. Tulospolut voivat indeksoida taulukoita: classical.series[-1].error_ns on viimeinen näyte.
[compose]: useita skenaarioita yhteisillä ehdoilla#
Nimetyt jaetut arvot (luku tai lukujen taulukko yksikköineen) kirjoitetaan jokaiseen jäseneen niihin avaimiin, joihin se ne sitoo, joten jäsenet eivät voi olla eri mieltä yhteisestä ehdosta. Jokainen jäsen ajetaan, ja jokaiselle mittarille yhdistetty yhteenveto antaa pienimmän, suurimman ja keskimääräisen arvon jäsenten yli ja nimeää parhaan ja huonoimman. scenarios/campaign-shared-jammer-sea-road.toml sijoittaa yhden häirintälähteen (8 dBW) Suomenlahdella olevan aluksen (noin 30 km päässä) ja Helsingin rannikkotiellä ajavan auton (noin 50 km päässä) väliin: alus menettää jokaisen satelliitin (keskimääräinen häirintä-signaalisuhde 39,0 dB), kun taas auto pitää vähintään neljä (34,6 dB).
[optimize]: yhden mittarin paras arvo#
Yhdestä kolmeen pisteellä erotettua skenaarioavainta, kukin rajattuna välille [lo, hi] asteikolla lin tai log, haetaan yhden mittarin parasta arvoa varten (goal = "minimize", "maximize" tai "target", joka minimoi etäisyyden arvosta target).
Menetelmiä on kaksi:
method = "grid"ajaa jokaisen solmun ruudukossa, jossa onstepsaskelta avainta kohden, pyyhkäisyn akseliarvoilla.method = "nelder-mead"(oletus) ajaa deterministisen Nelder–Mead-simpleksin koordinaateissa, jotka on normalisoitu välille [0, 1] avainta kohden. Koepisteet projisoidaan laatikkoon. Osio ottaa parametritmax_evals, alkuaskeleenstepsekä pysäytystoleranssitftoljaxtol.
Ajo, jonka mittari puuttuu tai ei ole äärellinen, saa huonoimman pistemäärän ja säilyy jäljessä. Kun runs > 1, mittari on keskiarvo samoista siemenluvuista jokaisella arvioinnilla. Tulos antaa best_coords, best_metric, best_score, evals, stop_reason sekä jokaisen arvioinnin kohdassa trace.
scenarios/campaign-optimize-link-budget.toml hakee etäisyyden ja datanopeuden linkkimarginaalille, jonka arvo on 3 dB. Optimi on paikallinen laatikon ja aloituspisteen suhteen. Se on MODELLED, ei koskaan globaali väite.
Protokolla ja sen ennakkorekisteröidyt kynnykset ovat kohdassa docs/design/evidence/cap32-optimize/. Testi on tests/campaign_optimize_reference.rs. Tulokset:
- 1-D-tavoiteratkaisu yhtyy suljettuun muotoon 6e-15 tarkkuudella;
- ruudukkomenetelmä on bitti bitiltä sama kuin riippumaton raakavoimasilmukka;
- simpleksi toimii vähintään yhtä hyvin kuin ruudukko 41 × 41, noin kymmenesosalla sen ajoista.
Kierroksen 1 1-D-kynnys kirjattiin NOT MET: ennakkorekisteröity laatikko sulki ratkaisun pois.
Toistettavuus#
Jokainen kampanjatulos sisältää kentän scenario_hash, kampanja-asiakirjan kanonisen JavaScript Object Notation (JSON) -muodon SHA-256-tiivisteen (Secure Hash Algorithm 2, 256-bittinen tiiviste), jota avainjärjestys ja muotoilu eivät muuta, sekä lohkon reproducibility, jossa on jäsenajojen määrä ja run_digest, SHA-256 kaikkien jäsentulosten tiivisteiden yli lähetysjärjestyksessä. Kaksi samalla tiivisteellä varustettua ajoa tuotti tavu tavulta identtiset jäsentulokset. Jokainen vaiheajo kirjaa myös lajinsa, oman tiivisteensä scenario_hash, jos lajilla on sellainen, ja tulosasiakirjansa SHA-256-tiivisteen. Jokaisella asiakirjan luvulla on yksikkömerkintä.
Ydin on sekventiaalinen eikä lue tiedostoja, joten kampanja ajetaan muuttumattomana WebAssembly-rakennuksessa. Kampanjat eivät saa sisältää kampanjoita.
Viennit#
--export kampanjassa kirjoittaa jokaisen geometrian sisältävän jäsenskenaarion omaksi tiedostojoukokseen, jäsenen nimike lisättynä ennen muotopäätettä: jokainen vaiheajo (<phase> tai <phase>-<k>, kun vaiheessa on useita ajoja), pyyhkäisyn perusskenaario (sweep), Monte Carlo -skenaario (monte-carlo) ja jokainen koostettu jäsen (oma nimikkeensä, siihen sidotut jaetut arvot kirjoitettuina). Aiempaa vastaava jäsen kirjoitetaan kerran; siirrot sekä ajonaikaisesti sovelletut pyyhkäisy- tai siemenarvot eivät ole viedyissä skenaarioissa.
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
Muoto, jota mikään jäsenistä ei voi kuvata, hylätään sen syyn kera. Skenaariokohtainen taulukko on asiakirjassa INTEROP.md.
LEO-PNT-kampanjat#
Viisitoista mukana toimitettua kampanjaa jäsentää matalan Maan kiertoradan (LEO) paikannus-, navigointi- ja ajanmääritys (PNT) -kysymyksiä; LEO-PNT.md kuvaa, mitä kukin näyttää. Mitä kukin ajaa, komentorivin yhteenvedon mukaan:
| Skenaario | Tila | Kysymys |
|---|---|---|
leo-focus-data-services.toml |
koostaminen, 4 jäsentä | navigointiviestin palveludata suhteessa kehyksen pituuteen |
leo-focus-fused-pnt-sisre.toml |
pyyhkäisy: leo-pvt, 7 solmua |
yhdistetty MEO- ja LEO-paikannus suhteessa LEO-signaalin avaruusosuuden etäisyysvirheeseen (SISRE) |
leo-focus-indoor-uhf.toml |
koostaminen, 2 jäsentä | sisätilojen LEO-PNT kaistan ja rakennusluokan mukaan |
leo-focus-iot-eirp.toml |
pyyhkäisy: leo-pass, 9 solmua |
esineiden internetin (IoT) energia paikannusta kohden suhteessa LEO UHF -lähetystehoon |
leo-focus-ntn-bandwidth.toml |
pyyhkäisy: ntn-positioning, 9 solmua |
ei-maanpäällisen verkon (NTN) paikannus suhteessa viitesignaalin kaistanleveyteen |
leo-focus-ppp-altitude.toml |
pyyhkäisy: leo-ppp, 3 solmua |
tarkan pistepaikannuksen (PPP) konvergenssi suhteessa 192 satelliitin LEO-kerroksen korkeuteen |
leo-resilience-gnss-jammed-leo-carries.toml |
ketju, 3 vaihetta, kesto 2100 s | Maailmanlaajuinen satelliittinavigointijärjestelmä (GNSS) häirittynä, LEO-kerros kantaa käyttäjää, eheys säilyy |
leo-resilience-multiband-diversity.toml |
pyyhkäisy: spectrum, 13 solmua |
LEO-kaistamonipuolisuus L-kaistan laajakaistaista tukahduttavaa häirintälähdettä vastaan |
leo-resilience-spoof-monitors.toml |
koostaminen, 4 jäsentä | harhautusmonitorit neljää harhauttajaa vastaan |
leo-vertical-5g-network-timing.toml |
ketju, 1 vaihe, kesto 86 400 s | 5G-tukiaseman ajoitus: holdover ja LEO-aika |
leo-vertical-asset-tracking-iot.toml |
ketju, 3 vaihetta, kesto 1440 s | konttien seuranta LEO UHF:llä: energia paikannusta kohden matkan varrella |
leo-vertical-autonomous-vehicle.toml |
ketju, 2 vaihetta, kesto 1500 s | autonominen ajoneuvo kaupunkikanjonissa LEO-kerroksen kanssa |
leo-vertical-autonomous-vehicle-skyline.toml |
ketju, 2 vaihetta, kesto 1800 s | sama kaupunkikanjoni tasaisena 35 asteen katkaisukulmana ja taivaanrajana city-street |
leo-vertical-critical-infrastructure-timing.toml |
ketju, 2 vaihetta, kesto 87 000 s | kriittisen infrastruktuurin ajoitus: holdover LEO-ajalla |
leo-vertical-polar-arctic.toml |
ketju, 3 vaihetta, kesto 10 800 s | napa-alueiden ja arktisten alueiden käyttäjät polaarisella LEO-kerroksella |
leo-vertical-rail-maritime.toml |
ketju, 3 vaihetta, kesto 2520 s | rautatie- ja merenkulun käyttäjät LEO-kerroksella |
MEO tarkoittaa keskikorkeaa Maan kiertorataa, UHF ultrakorkeaa taajuutta ja 5G mobiiliverkkojen viidettä sukupolvea.
Mitä tarkistetaan#
tests/campaign_composition_reference.rs lukitsee koostamisidentiteetit:
- Yhden vaiheen kampanja toistaa erillisen ajon bitti bitiltä. Lajeille
clock,integrityjajammingjäsenen tulosasiakirja on tavu tavulta identtinen funktionrun_tomltuloksen kanssa skenaariotiedostolla, sen tiiviste on se, jonka kampanja raportoi, ja kun ruudukko on ajon oma askel, jokainen kohdistettu arvo on yhtä suuri kuin erillisen sarjan arvo (häirinnän C/N0 on yhtä suuri kuin erillisestä asiakirjasta riippumattomasti laskettu keskiarvo). - Yhden solmun pyyhkäisy ja yhden jäsenen koostaminen lukevat täsmälleen erillisen ajon luvun.
- Kiinteällä siemenluvulla ajettu joukko on tavu tavulta vakaa, ja toteuma
kon täsmälleen erillinen ajo arvollaseed + k; kampanjan tiiviste ei välitä avainjärjestyksestä. - Analyyttinen tapaus.
scenarios/campaign-monte-carlo-clock-holdover.tomlajaa 200 siemenlukua sirumittakaavaisesta atomikellosta, jossa on vain valkoista taajuuskohinaa (q_wf = 9e-20 s^2/s, Microchip SA.45s sigma_y(1 s) = 3e-10), synkronoituna kohtaan 590 s ja liukuen kohtaan 3600 s. Lopullinen aikavirhe on gaussinen, keskiarvo 0 ja keskihajonta sqrt(q_wf * 3010 s) = 16,459 ns (vaiheen satunnaiskävely valkoisen taajuuskohinan alla, National Institute of Standards and Technology (NIST) Technical Note 1337). Raportoitu väli, [-2.52, 1,59] ns, sisältää todellisen keskiarvon 0; otoskeskihajonta, 14,93 ns, antaa khiin neliö -tunnusluvun 164,5 vapausasteilla 199, kaksipuolisen välin ([151,37, 254,14], luottamustaso 99%) sisällä. Kun siemenlukuja on 3000, sama skenaario antaa 16,31 ns. - Spektriohjattu ketju lukee erillisten ajojen luvut: alkuvaihe kestää täsmälleen spektriajon ensimmäisen menetyksen ajan, ja jokainen aikajanan L1 C/A- ja E1-arvo vastaa tarkkuudella 1e-9 dB erillisen vesiputousesimerkin riviä samalle häirintätilalle (nominaali, pelkkä chirp, pelkkä CW-sävel).
- Ketju siirtää tilaa dokumentoidusti: harhautusvaihe kestää täsmälleen harhautusajon havaitsemisajan, holdover kantaa täsmälleen harhautusajon poikkeaman havaitsemishetkellä, palautuminen ei kanna mitään, ja hälytys on päällä aina, kun suojaustaso puuttuu tai ylittää hälytysrajan.
Nämä tarkistavat, ettei koostaminen muuta mitään, mitä sen ei pitäisi. Ne eivät validoi ketjutettua tehtävää mitattua vastaan, minkä vuoksi kolme kampanjariviä asiakirjassa VERIFICATION-MATRIX.md ovat MODELLED.