Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

ScenariuszeEdytuj na GitHubieŹródło: docs/CAMPAIGNS.md

Kampanie

Pojedynczy scenariusz odpowiada na jedno pytanie o jednej sytuacji. Misja to ciąg sytuacji, a badanie projektowe to ich rodzina. Rodzaj scenariusza campaign składa istniejące rodzaje w jeden przebieg bez ponownej implementacji któregokolwiek z nich: każdy element jest zwykłą tabelą scenariusza z własnym kind, wywoływaną przez api::run_toml dokładnie tak, jak uruchomiłoby ją kshana <file>.toml, a kampania tylko odczytuje liczby z dokumentów wyników.

Kampania jest MODELLED. Jej tożsamości składania są testowane (poniżej), ale łączenie faz w łańcuch jest wyborem modelowania, a każda faza jest tak dobra, jak rodzaj, który ją uruchomił.

Uruchom ją jak każdy inny scenariusz:

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

Kampania może zawierać dowolną kombinację czterech sekcji; kampania bez żadnej uruchamia się, a jej podsumowanie mówi, że nic nie złożyła.

[[phases]]: misja połączona w łańcuch na jednej osi czasu#

Każda faza uruchamia jeden lub więcej scenariuszy w oknie wspólnej osi czasu misji, na przykład zegar w holdover i bezwładnościowy system nawigacji (INS) dryfujący w tym samym czasie. Wyniki każdego przebiegu są wczytywane do nazwanych kanałów, umieszczane w czasie początku fazy i przepróbkowywane na wspólną siatkę ([timeline] step_s) przez zatrzymanie zerowego rzędu: czas siatki przyjmuje najnowszą próbkę przebiegu fazy będącej właścicielem, nie późniejszą niż on, i jest pusty (null), gdy żaden przebieg tej fazy nie dostarcza kanału.

Kanał Jednostka Czym jest Źródło ustawienia wstępnego
time_error_ns ns błąd czasu zegara clock: <side>.series[].error_ns; spoof: <side>.series[].offset_ns
guard_ns ns zabezpieczenie błędu czasu własny threshold_ns przebiegu
cn0_dbhz dB-Hz średni efektywny stosunek nośnej do gęstości szumu (C/N0) dla widocznych satelitów jamming: średnia z epochs[].sats[].cn0_effective_dbhz
cn0_floor_dbhz dB-Hz dolna granica utraty śledzenia jamming: tracking_threshold_dbhz scenariusza, gdy je podaje
tracking liczba satelity nadal śledzone jamming: epochs[].tracking
protection_level_m m pionowy poziom ochrony integrity: epochs[].vpl_m
alert_limit_m m pionowy limit alarmowy integrity: al_v_m
position_error_m m błąd pozycji gnss-ins: <side>.series[].error_m
position_threshold_m m próg błędu pozycji gnss-ins: threshold_m
alarm 1 1, gdy którykolwiek monitor fazy alarmuje zob. poniżej

<side> to classical, chyba że przebieg ustawia side = "quantum". Każda inna wielkość jest odczytywana jawnym wpisem [[phases.runs.series]]: ścieżka czasu z jednym [] nazywającym wiersze (epochs[].t), ścieżka wartości dzieląca te wiersze lub skalar rozgłoszony na każdy wiersz (przedrostek input: odczytuje scenariusz przebiegu zamiast jego wyniku), opcjonalna redukcja (mean, min, max, count) dla kilku wartości w jednym wierszu, skala oraz jednostka dla kanału, którego kampania nie zna.

Alarmy pochodzą z trzech miejsc, łączonych logicznym OR w obrębie fazy:

  • flagi ustawień wstępnych odczytane z przebiegu: jamming alarmuje, gdy śledzi mniej niż cztery satelity (własna definicja dostępności); integrity alarmuje w epokach, które oznacza jako niedostępne;
  • reguły ustawień wstępnych na kanałach fazy, oceniane po carry: clock alarmuje, gdy bezwzględny błąd czasu przekracza guard_ns; gnss-ins, gdy błąd pozycji przekracza position_threshold_m; jawne reguły trafiają do [[phases.runs.alarms]];
  • zdarzenia alarmujące: spoof zgłasza jedno przy detect_time_s swojego monitora wspomaganego zegarem; spoof-detect zgłasza jedno na początku fazy, gdy jego scalona decyzja alarmuje.

Stan jest przekazywany między fazami na trzy jawne sposoby:

  • carry = ["time_error_ns"] dodaje wartość kanału z końca poprzedniej fazy do wartości tej fazy. Faza zegara, którą przeciągnął spoofer, jest punktem, od którego zaczyna się holdover. Dodanie przesunięcia jest dokładne dla fazy zegara, który całkuje częstotliwość; dla błędu pozycji zakłada, że oba błędy są współliniowe, co jest przypadkiem pesymistycznym.
  • [[phases.handoff]] zapisuje liczbę z poprzedniej fazy (channel:<name> dla wartości końcowej kanału lub dowolnej ścieżki wyniku poprzedniego przebiegu) do klucza z kropkami w scenariuszu tej fazy przed jego uruchomieniem, z opcjonalną skalą i przesunięciem.
  • end_at = "<result path>" kończy fazę w czasie obliczonym przez przebieg, ograniczonym do duration_s. Dołączona misja kończy swoją fazę spoofingu przy classical.detect_time_s.

skip_s odrzuca pierwsze sekundy własnej osi czasu przebiegu (rozgrzewkę) przed zerem czasu fazy.

Dołączona misja#

scenarios/campaign-jam-spoof-holdover-integrity.toml uruchamia 18 scenariuszy składowych w sześciu fazach na siatce 10 s:

Faza Przebiegi Co pokazuje oś czasu
nominalny, 600 s clock, jamming (bez zagłuszacza), integrity błąd czasu 0 ns; C/N0 43,0 dB-Hz wobec dolnej granicy 25 dB-Hz; pionowy poziom ochrony od 9,1 do 21,6 m wobec limitu alarmowego 50 m
zagłuszanie, 600 s to samo, zagłuszacz o mocy -30 dBW, 1 km C/N0 spada do 27,7 dB-Hz, wszystkie 8 satelitów nadal śledzonych
spoofing, zakończony po 370 s przez end_at spoof (rampa czasu 0,1 ns/s), spoof-detect, jamming błąd czasu narasta do 36 ns; detektor radiowy alarmuje na początku fazy, monitor wspomagany zegarem po 370 s
holdover, 1800 s clock (odmówiony, przenosi 37,0 ns), gnss-ins (jednostka taktyczna w dryfie), jamming przy 10 dBW utracono wszystkie satelity (C/N0 około -12 dB-Hz); błąd czasu od 36,4 do 62,7 ns wobec zabezpieczenia 50 ns; błąd pozycji do 24 km
integrity-alarm, 600 s clock (przenosi 59,6 ns), jamming i integrity z maską 25 deg 5 satelitów śledzonych; poziom ochrony od 19 do 135 m, brak wartości w 18 z 60 czasów siatki; przeniesiony błąd czasu, od 52,1 do 61,7 ns, pozostaje powyżej zabezpieczenia 50 ns, więc alarm trwa przez całą fazę
odzyskiwanie, 600 s clock, jamming (bez zagłuszacza), integrity błąd czasu wrócił do 0 ns; alarm wyciszony

Przebiegi integralności używają własnej trajektorii użytkownika z przykładu integrity (kołowa trajektoria na wysokości 0,4 km), a nie stałego stanowiska odbiornika zagłuszania, a maska 25 deg zastępuje częściowe niebo odbiornika odzyskującego śledzenie. Są to wybory scenariusza, podane w pliku.

Misja napędzana widmem pasma L#

scenarios/campaign-spectrum-holdover-integrity.toml uruchamia 8 scenariuszy składowych w trzech fazach na siatce 1 s, z C/N0 dla GPS L1 C/A i Galileo E1 odczytywanym z rodzaju spectrum (zob. SPECTRUM.md), a nie z tabeli rodzaju jamming dla poszczególnych satelitów. Zagłuszacze są takie jak w scenarios/l-band-waterfall-jamming.toml.

Faza Przebiegi Co pokazuje oś czasu
początek, zakończony po 10 s przez end_at clock, spectrum (czirp od 10 s), integrity L1 C/A 43,48 i E1 44,73 dB-Hz; faza kończy się przy własnej pierwszej utracie L1 C/A w przebiegu widma (timeline.bands[0].first_loss_t_s); poziom ochrony 21,6 m wobec 50 m
holdover, 600 s clock (odmówiony, przenosi błąd początkowy, tu 0 ns), spectrum (czirp włączony) L1 C/A 3,38 i E1 4,44 dB-Hz, oba poniżej dolnej granicy 25 dB-Hz; błąd czasu od -0.07 do 5,06 ns wobec zabezpieczenia 50 ns; alarm trwa
galileo-fallback, 300 s clock (zsynchronizowany ponownie), spectrum (ton CW na nośnej L1), integrity na konstelacji typu Galileo Walker 24/3/1 L1 C/A utrzymany na 17,98 dB-Hz, E1 wrócił do 44,73 dB-Hz; poziom ochrony od 6,1 do 17,7 m; alarm wyciszony

Odzyskanie E1 pod tonem CW opiera się na traktowaniu widma ciągłego w rodzaju widma: ton leży w zerze widma MBOC i niczego nie sprzęga. Prawdziwy ton sprzęgałby się przez linie widmowe kodu; jest to podane w pliku i w SPECTRUM.md.

[sweep]: siatka parametrów dla dowolnego rodzaju#

Od jednego do trzech kluczy scenariusza w zapisie z kropkami, każdy w zakresie liniowym lub logarytmicznym, na tych samych wartościach osi, których używa rodzaj sweep-nd. Każda oś ma nazwę i jednostkę; każda metryka ma nazwę i ścieżkę wyniku, a jej jednostka jest odczytywana z własnego bloku jednostek badanego rodzaju, chyba że kampania deklaruje własną. Przy runs > 1 każdy węzeł jest zasianym zespołem Monte Carlo (realizacja k przy ziarnie węzła plus k), raportowanym ze statystykami poniżej. scenarios/campaign-sweep-jammer-power.toml przegląda zagłuszacz w odległości 1 km od odbiornika od -50 do +10 dBW: średni stosunek zagłuszacza do sygnału zmienia się dokładnie o 1 dB na dB (od 12,2 do 72,2 dB), a dostępność spada z 1 do 0 między -30 a -25 dBW.

Klucz z kropkami może indeksować tablicę tabel według położenia: system.2.sisre_m to sisre_m trzeciej tabeli [[system]], a case.0.system.0.shell.0.altitude_km sięga trzy poziomy w głąb.

[monte_carlo]: zasiany zespół#

Realizacja k uruchamia scenariusz z kluczem ziarna ustawionym na base_seed + k, zgodnie z konwencją, której już używa zespół zegara, dzięki czemu zespół odtwarza się dokładnie. Każda metryka podaje średnią, odchylenie standardowe populacji, percentyle 5., 50. i 95. metodą najbliższej rangi, percentylowy przedział ufności bootstrap 95% dla średniej o stałym ziarnie (2000 prób) oraz domyślnie każdą próbkę w kolejności ziaren. Ścieżki wyniku mogą indeksować tablice: classical.series[-1].error_ns to ostatnia próbka.

[compose]: kilka scenariuszy we wspólnych warunkach#

Nazwane wartości wspólne (liczba lub tablica liczb, z jednostką) są zapisywane w każdym elemencie pod kluczami, do których je wiąże, więc elementy nie mogą się nie zgadzać co do wspólnego warunku. Każdy element jest uruchamiany, a dla każdej metryki podsumowanie zbiorcze podaje najmniejszą, największą i średnią wartość po elementach, wskazując najlepszy i najgorszy. scenarios/campaign-shared-jammer-sea-road.toml umieszcza jeden zagłuszacz 8 dBW między statkiem w Zatoce Fińskiej (około 30 km dalej) a samochodem na nadmorskiej drodze w Helsinkach (około 50 km): statek traci każdego satelitę (średni stosunek zagłuszacza do sygnału 39,0 dB), a samochód zachowuje co najmniej czterech (34,6 dB).

[optimize]: najlepsza wartość jednej metryki#

Od jednego do trzech kluczy scenariusza w zapisie z kropkami, każdy ograniczony do [lo, hi] w skali lin lub log, jest przeszukiwanych pod kątem najlepszej wartości jednej metryki (goal = "minimize", "maximize" lub "target", co minimalizuje odległość od target).

Są dwie metody:

  • method = "grid" uruchamia każdy węzeł siatki o steps na klucz, na wartościach osi przeglądu.
  • method = "nelder-mead" (domyślna) uruchamia deterministyczny sympleks Neldera–Meada we współrzędnych znormalizowanych do [0, 1] na klucz. Punkty próbne są rzutowane na pudełko. Sekcja przyjmuje max_evals, początkowy step oraz tolerancje zatrzymania ftol i xtol.

Przebieg, którego metryka jest nieobecna lub nieskończona, otrzymuje najgorszy wynik i pozostaje w śladzie. Przy runs > 1 metryką jest średnia z tych samych ziaren przy każdej ewaluacji. Wynik podaje best_coords, best_metric, best_score, evals, stop_reason oraz każdą ewaluację w trace.

scenarios/campaign-optimize-link-budget.toml przeszukuje zasięg i szybkość transmisji danych pod kątem zapasu łącza 3 dB. Optimum jest lokalne względem pudełka i punktu startu. Jest to MODELLED, nigdy twierdzenie globalne.

Protokół i jego wstępnie zarejestrowane progi znajdują się w docs/design/evidence/cap32-optimize/. Test to tests/campaign_optimize_reference.rs. Wyniki:

  • rozwiązanie celu 1-D zgadza się ze wzorem zamkniętym do 6e-15;
  • metoda siatki zgadza się co do bitu z niezależną pętlą przeszukiwania wyczerpującego;
  • sympleks radzi sobie co najmniej tak dobrze jak siatka 41 × 41, w około jednej dziesiątej jej przebiegów.

Próg 1-D rundy 1 jest zapisany jako NOT MET: wstępnie zarejestrowane pudełko wykluczało rozwiązanie.

Odtwarzalność#

Każdy wynik kampanii zawiera scenario_hash, czyli SHA-256 (Secure Hash Algorithm 2, 256-bitowy skrót) kanonicznej postaci JavaScript Object Notation (JSON) dokumentu kampanii (kolejność kluczy i formatowanie jej nie zmieniają), oraz blok reproducibility z liczbą przebiegów składowych i run_digest, czyli SHA-256 ze skrótów wyników wszystkich elementów w kolejności dyspozytora. Dwa przebiegi o tym samym skrócie dały identyczne co do bajta wyniki elementów. Każdy przebieg fazy zapisuje też swój rodzaj, własny scenario_hash, jeśli rodzaj go ma, oraz SHA-256 swojego dokumentu wyniku. Każda liczba w dokumencie ma wpis jednostek.

Rdzeń jest sekwencyjny i nie czyta plików, więc kampania działa bez zmian w kompilacji WebAssembly. Kampanie nie mogą zawierać kampanii.

Eksporty#

--export na kampanii zapisuje każdy scenariusz składowy, który ma geometrię, jako osobny zestaw plików, z etykietą elementu wstawioną przed przyrostkiem formatu: każdy przebieg fazy (<phase> lub <phase>-<k>, gdy faza ma kilka przebiegów), scenariusz bazowy przeglądu (sweep), scenariusz Monte Carlo (monte-carlo) i każdy złożony element (jego własna etykieta, z zapisanymi wartościami wspólnymi, które wiąże). Element identyczny z wcześniejszym jest zapisywany raz; przekazania oraz wartości przeglądu lub ziarna stosowane w czasie przebiegu nie są w eksportowanych scenariuszach.

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

Format, którego żaden z elementów nie potrafi opisać, jest odrzucany z podaniem tego powodu. Tabela dla poszczególnych scenariuszy znajduje się w INTEROP.md.

Kampanie LEO-PNT#

Piętnaście dołączonych kampanii ujmuje pytania o pozycjonowanie, nawigację i czas (PNT) na niskiej orbicie okołoziemskiej (LEO); LEO-PNT.md opisuje, co pokazuje każda z nich. Co każda uruchamia, w ujęciu wiersza poleceń:

Scenariusz Tryb Pytanie
leo-focus-data-services.toml złożenie, 4 elementy dane usługi komunikatu nawigacyjnego a długość ramki
leo-focus-fused-pnt-sisre.toml przegląd leo-pvt, 7 węzłów scalone pozycjonowanie MEO i LEO a błąd zasięgu sygnału w przestrzeni (SISRE) LEO
leo-focus-indoor-uhf.toml złożenie, 2 elementy LEO-PNT wewnątrz budynków według pasma i klasy budynku
leo-focus-iot-eirp.toml przegląd leo-pass, 9 węzłów energia na jedno wyznaczenie pozycji w Internecie rzeczy (IoT) a moc nadawania LEO w UHF
leo-focus-ntn-bandwidth.toml przegląd ntn-positioning, 9 węzłów pozycjonowanie w sieci nienaziemnej (NTN) a szerokość pasma sygnału referencyjnego
leo-focus-ppp-altitude.toml przegląd leo-ppp, 3 węzłów zbieżność precyzyjnego pozycjonowania punktowego (PPP) a wysokość 192-satelitarnej warstwy LEO
leo-resilience-gnss-jammed-leo-carries.toml łańcuch, 3 fazy w ciągu 2100 s Globalny System Nawigacji Satelitarnej (GNSS) zagłuszony, użytkownika prowadzi warstwa LEO, integralność zachowana
leo-resilience-multiband-diversity.toml przegląd spectrum, 13 węzłów różnorodność pasm LEO a zagłuszacz zaporowy w paśmie L
leo-resilience-spoof-monitors.toml złożenie, 4 elementy monitory spoofingu wobec czterech spooferów
leo-vertical-5g-network-timing.toml łańcuch, 1 faza w ciągu 86 400 s synchronizacja czasu stacji bazowych 5G: holdover i czas LEO
leo-vertical-asset-tracking-iot.toml łańcuch, 3 fazy w ciągu 1440 s śledzenie kontenerów przez LEO UHF: energia na wyznaczenie pozycji w trakcie podróży
leo-vertical-autonomous-vehicle.toml łańcuch, 2 fazy w ciągu 1500 s pojazd autonomiczny w miejskim kanionie z warstwą LEO
leo-vertical-autonomous-vehicle-skyline.toml łańcuch, 2 fazy w ciągu 1800 s ten sam miejski kanion jako płaskie odcięcie 35 deg i jako panorama city-street
leo-vertical-critical-infrastructure-timing.toml łańcuch, 2 fazy w ciągu 87 000 s synchronizacja czasu infrastruktury krytycznej: holdover z czasem LEO
leo-vertical-polar-arctic.toml łańcuch, 3 fazy w ciągu 10 800 s użytkownicy polarni i arktyczni z polarną warstwą LEO
leo-vertical-rail-maritime.toml łańcuch, 3 fazy w ciągu 2520 s użytkownicy kolejowi i morscy z warstwą LEO

MEO to średnia orbita okołoziemska, UHF to częstotliwość ultrawysoka, a 5G to piąta generacja sieci komórkowych.

Co jest sprawdzane#

tests/campaign_composition_reference.rs przypina tożsamości składania:

  • Kampania jednofazowa odtwarza samodzielny przebieg co do bitu. Dla clock, integrity i jamming dokument wyniku elementu jest identyczny co do bajta z run_toml na pliku scenariusza, jego skrót jest tym, który podaje kampania, a przy siatce o własnym kroku przebiegu każda wyrównana wartość równa się wartości samodzielnego szeregu (C/N0 zagłuszania równa się średniej obliczonej niezależnie z dokumentu samodzielnego).
  • Przegląd jednowęzłowy i złożenie jednoelementowe odczytują dokładnie samodzielną liczbę.
  • Zespół o stałym ziarnie jest stabilny co do bajta, a realizacja k jest dokładnie samodzielnym przebiegiem przy seed + k; skrót kampanii ignoruje kolejność kluczy.
  • Przypadek analityczny. scenarios/campaign-monte-carlo-clock-holdover.toml uruchamia 200 ziaren zegara atomowego w skali układu scalonego z wyłącznie białym szumem częstotliwości (q_wf = 9e-20 s^2/s, Microchip SA.45s sigma_y(1 s) = 3e-10), zsynchronizowanego do 590 s i dryfującego do 3600 s. Końcowy błąd czasu ma rozkład Gaussa ze średnią 0 i odchyleniem standardowym sqrt(q_wf * 3010 s) = 16,459 ns (błądzenie losowe fazy przy białym szumie częstotliwości, National Institute of Standards and Technology (NIST) Technical Note 1337). Podany przedział, [-2.52, 1,59] ns, zawiera prawdziwą średnią 0; odchylenie standardowe próbki, 14,93 ns, daje statystykę chi-kwadrat 164,5 przy 199 stopniach swobody, mieszczącą się w dwustronnym przedziale 99% [151,37, 254,14]. Przy 3000 ziarnach ten sam scenariusz daje 16,31 ns.
  • Łańcuch napędzany widmem odczytuje liczby samodzielne: faza początkowa trwa dokładnie tyle, ile czas pierwszej utraty w przebiegu widma, a każda wartość L1 C/A i E1 na osi czasu równa się, z dokładnością do 1e-9 dB, wierszowi samodzielnego przykładu wodospadu dla tego samego stanu zagłuszacza (nominalny, sam czirp, sam ton CW).
  • Łańcuch przekazuje stan dalej zgodnie z dokumentacją: faza spoofingu trwa dokładnie tyle, ile czas detekcji w przebiegu spoofingu, holdover przenosi dokładnie przesunięcie przebiegu spoofingu w chwili detekcji, odzyskiwanie nie przenosi niczego, a alarm trwa wszędzie tam, gdzie brakuje poziomu ochrony lub przekracza on limit alarmowy.

Te sprawdzenia pokazują, że składanie nie zmienia niczego, czego nie powinno. Nie walidują misji połączonej w łańcuch względem zmierzonej, dlatego trzy wiersze kampanii w VERIFICATION-MATRIX.md są MODELLED.