Vastuvõtja usaldus: reaalse GNSS-i vastuvõtja logi hindamine
kshana receiver-trust loeb logi reaalsest globaalsest satelliitnavigatsioonisüsteemi (GNSS) vastuvõtjast, käitab usalduse monitore selle kohal epohhi kaupa ja ütleb, millal ja miks vastuvõtja lahendus lakkas usaldusväärne olemast. See võib logi ka skoorida sündmuste ja ennustuste vastu, mille te esitate enne jooksu: kas iga sündmus tuvastati õigel ajal ja kas modelleeritud kandja ja müra tiheduse (C/N0) langus langeb kokku sellega, mida vastuvõtja mõõtis.
Vaatlussuurused on vastuvõtja omad; monitorid ja nende läved on mootori ja teie omad. Iga tulemus kannab seda silti, logi SHA-256 ja iga läve, millega see jooksis, nii et jooksu saab korrata ja auditeerida.
Käimasoleva laeva kohta, koos reaalajas skoori ja valikulise väravaga kaardisüsteemi ees, vt MARITIME-TRUST.md.
Käivitamine#
kshana receiver-trust examples/receiver-trust/session.toml
See kirjutab session.result.json, session.trust.csv (üks rida epohhi kohta) ja session.trust.svg (keskmine C/N0 ajas koos usalduse olekuga all) stsenaariumi kõrvale ning prindib ühe rea verdikti. Näitelogi on sünteetiline, tehtud vormingu näitamiseks; suunake path oma vastuvõtja logile.
Ülaltoodud joonis on dokumendi MARITIME-TRUST.md laevademo: väljamõeldud logi, nõuandev skoor.
Sama stsenaarium töötab Pythonist (kshana.receiver_trust(toml)), WebAssembly paketist (receiver_trust(toml), logi sisse kirjutatuna) ja Model Context Protocol (MCP) serveri tööriistast assess_receiver_log.
Logid, mida see loeb#
format |
Allikas | Mida loetakse |
|---|---|---|
ubx |
u-blox binaarne | NAV-SAT satelliidi kohta C/N0, kõrgus ja asimuut, NAV-PVT asukoht, MON-RF automaatvõimenduse juhtimine (AGC) ja segamisnäitaja jamInd, NAV-TIMEGPS nädal ning vastuvõtja enda lipud: NAV-STATUS spoofDetState ja SEC-SIG (self_report, vt RECEIVER-PROTOCOLS.md) |
rinex |
RINEX 3 vaatlusfail | S koodid (C/N0) satelliidi ja signaali kohta; edastatud navigatsioonifailiga (nav) mootori enda lahenduse pseudovahemaad |
android |
Androidi GnssLoggeri CSV | Raw read: C/N0 ja AgcDb satelliidi kohta; Fix read: asukoht |
nmea |
NMEA 0183 tekst | GSV signaali ja müra suhe satelliidi kohta (dB-Hz, signaali ID-ga 4,10 või ilma) ja selle kõrgus ning asimuut, GSA täpsuse halvenemise tegur ja kasutatud satelliidid, GGA ja RMC aeg ning asukoht |
sbf |
Septentrio binaarne (0,38, ainult lugemine) | PVTGeodetic asukoht, MeasEpoch C/N0 satelliidi ja signaali kohta, RFStatus ribade arv; vt RECEIVER-PROTOCOLS.md |
rtklib-pos |
RTKLIB lahendusfail (.pos) |
aeg, asukoht (laius/pikkus või ECEF, teisendatud) ja kasutatud satelliidid epohhi kohta; kraadi-minuti-sekundi failid lükatakse tagasi teatega |
novatel |
NovAtel OEM7 ASCII- või binaarlogid | BESTPOS asukoht (ainult arvutatud lahendus), RANGE C/No satelliidi ja signaali kohta; RXSTATUS segaja lipud muutuvad epohhi self_report-ks (segamise olek 2, kui vastuvõtja annab segaja lipu, 1, kui mitte; RXSTATUS-is spuufimise lippu ei ole), mida võrreldakse Kshana häiretega võrdlusega receiver-self-report |
gnss-sdr |
GNSS-SDR Monitori ja PVT-monitori vood JSON-ridadena | kanalipõhine C/N0, lahendus, kasutatud satelliidid, HDOP, asimuut ja kõrgus; teeb integrations/gnss-sdr/relay.py |
Nende kolme üksikasjad, allikad ja piirangud: MACHINE-INPUTS.md.
Iga lugejate toodetud epohh kannab ka source_span, [start, end) baidinihkeid sisendis: väikseim ühtne vahemik, mis sisaldab selle andnud kirjeid, nii et täpse toore lõigu saab sündmuseakna jaoks räsida. NMEA: iga rida, mida loetakse, kuni epohh on jooksev (ülemhulk, kui sõnumite vahel on tähendusetu rida). UBX: epohhi kaadrid. RINEX 3: epohhikirjed igast > reast järgmiseni. Android: epohhi Raw read (Fix rida ainult epohhi jaoks, millel ei ole Raw ridu). Puudub reaalajavoo puhul ja kõikjal, kus see ei ole hästi defineeritud (RINEX 2).
Fail antakse kujul path (lahendatakse stsenaariumi enda kausta suhtes) või sisse kirjutatuna kujul text või base64 (ainsad valikud brauseris).
IMU logi teise andurina#
[log.imu] lisab inertsiaalse logi samale kellale:
[log.imu]
format = "csv" # or "euroc"
path = "imu.csv" # or text / base64
heading0_deg = 90.0 # heading at the first IMU sample
yaw_axis_down = true # body z down (NED/FRD); false for z up (ENU/FLU)
time_offset_s = 0.0 # added to the IMU clock to reach the log's t_s
Pöördekiirus integreeritakse väljast heading0_deg ja see täidab suuna kõikjal, kus vastuvõtja logi seda ei kanna, nii et monitor heading-course (mis vajab platvormil heading_sensor = true) võrdleb güroskoobi suunda kursiga maapinna suhtes. Güroskoop triivib: suund on nii hea kui integreerimisaken ja hdg_cog_tol_deg otsustab, mida loetakse lahknevuseks. Paigutus csv on dokumenteeritud failis MACHINE-INPUTS.md. IMU baidid on osa stsenaariumi räsist ja tõendipaketi stsenaariumi räsist. Sisse kirjutatud (text/base64) töötab igal pinnal; path lükatakse tagasi seal, kus faile ei loeta.
Platvorm: staatiline või laev#
Ülaltoodud monitorid eeldavad fikseeritud antenni. Stsenaarium esitab platvormi enne jooksu ülemise taseme tabelis [platform]; ilma selleta on platvorm static ja midagi ei muutu.
[platform]
kind = "vessel" # "static" (default) or "vessel"
max_speed_kn = 30.0 # default 30
max_accel_mps2 = 0.5 # default 0.5
max_turn_rate_dps = 6.0 # default 6
antenna_height_m = 18.0 # no default: without it the sea-level monitor does not run
heading_sensor = false # true: the stream carries a gyro heading (HDT or THS)
| Võti | Vaikeväärtus | Miks see väärtus |
|---|---|---|
max_speed_kn |
30 | Üle kaubalaevade ja enamiku reisilaevade teenduskiiruse, nii et reaalne laev ei saavuta seda kunagi; kaugelt alla kiiruse, mida asukoha äravedamine eeldab. Aeglasem laev peaks esitama madalama piiri: mida madalam piir, seda varem äravedamine tabatakse. |
max_accel_mps2 |
0.5 | Suur laev muudab kiirust palju vähem kui 0,1 m/s²; väike kiire alus saavutab kõva gaasimuutuse korral mõne kümnendiku. |
max_turn_rate_dps |
6 | Suur laev pöörab palju aeglasemalt kui 1 kraadi/s ja väike alus kõvas pöördes mõne kraadi/s. |
antenna_height_m |
puudub | Paigalduse omadus; oletus oleks peidetud lävi. |
heading_sensor |
false | Deklareeritud true ja logis puuduv on viga, seega ei saa puuduv andur läbida puhta kontrollina. |
Laevavõtmed lükatakse tagasi tingimusel kind = "static". Laeva jaoks monitor position-jump ei tööta, sest see mõõdab kaugust kalibreerimiskeskmisest, mis on liikuval antennil vale; tulemuse monitor_config salvestab platvormi ja kasutatud piirid.
Dokumendi kshana nmea-scenario sünteetilised NMEA-vood, mis on tehtud meeskonna koolituseks, aktsepteerib NMEA lugeja ja neid saab sellest liigist käitada nagu mis tahes NMEA logi.
Monitorid#
Iga monitor vajab oma andmeid; monitori, mille andmeid logis ei ole, ei käitata ja seda ei loetleta väljal monitors_run. Esimesed calibration_s sekundit (vaikeväärtus 60) määravad lähtetaseme ega anna kunagi häiret.
| Seire | Annab häire, kui | Vajab |
|---|---|---|
cn0-drop |
keskmine C/N0 lähtetasemega ühiste satelliitide üle langeb cn0_drop_db või rohkem (vaikeväärtus 6 dB) |
C/N0 |
loss-of-lock |
jälgitavad satelliidid langevad lähtetaseme mediaanist sats_lost või rohkem allapoole (vaikeväärtus 4) |
C/N0 |
agc |
AGC näit erineb lähtetasemest rohkem kui agc_k_sigma standardhälbe võrra (vaikeväärtus 5) |
UBX MON-RF või Android AgcDb |
jam-ind |
u-blox jamInd ületab väärtust jam_ind_threshold (vaikeväärtus 80 väärtusest 255) |
UBX MON-RF |
position-jump |
vastuvõtja enda lahendus on kalibreerimiskeskmisest kaugemal kui position_jump_m (vaikeväärtus 50 m) |
teatatud asukoht |
raim |
pariteedi-vastuvõtja autonoomne terviklikkuse monitooring (RAIM) mootori enda üksikpunkti lahendusel lükkab mõõtmiskomplekti tagasi | RINEX-i logi koos nav |
solve-failure |
mootori üksikpunkti lahendus ebaõnnestub viie või enama satelliidiga | RINEX-i logi koos nav |
clock |
vastuvõtja kell erineb oma prognoositud sirgest rohkem kui selle kalibreerimismüra vähim tuvastatav nihe | RINEX-i logi koos nav |
Kalibreeritud profiil (valikuline). [monitors] profile = "jammertest-2024-calibrated" asendab kolm häirelävendit väärtustega, mis on kalibreeritud avalikul andmekogul JammerTest 2024 (üks u-blox ZED-F9P stsenaariumi kohta; Zenodo 15911589): cn0_drop_db = 1.5, agc_k_sigma = 3.5, jam_ind_threshold = 29. Kalibreerimine oli eelregistreeritud (xval/jammertest-trust/PREREGISTRATION.md) ja profiil on MODELLED, sobitatud ühel avalikul kampaanial: selle cn0_drop_db lävi jättis täitmata eelregistreeritud suletud komplekti valehäire läve (0,0231 võrreldes väärtusega 0,02); AGC ja segamisnäitaja lävendid ning ühendi lävi (valehäired 0,033, tuvastamine 0,81) said täidetud (xval/jammertest-trust/RESULTS.md). See kehtib selle vastuvõtjatüübi kohta sellel sündmusel, planeeritud ründeakende vastu, ja kalibreeriti andmekogu CSV-logidel (selle UBX-logid annavad kahes kaustas rohkem valehäireid). Profiiliga käitatud tulemus kordab rakendatud lävendeid ja kannab märget profile_note, mis ütleb seda kõike. Ilma profiilita kehtivad ülaltoodud vaikeväärtused ja iga väljund jääb muutumatuks.
vessel platvormi puhul käitatakse ka liikuva platvormi monitore (läved ülemise taseme tabelis [maritime], iga vaikeväärtus dokumenteeritud failis src/receiver_trust/maritime.rs); igaüks vajab oma andmeid ja see loetletakse väljal monitors_run ainult siis, kui see otsustas:
| Seire | Annab häire, kui | Vajab |
|---|---|---|
kinematic |
asukoha muutus ei kattu teatatud kiiruse ja kursiga või eeldab kiirust, kiirendust või pöörlemiskiirust, mis on üle laeva piiride | lahendused; kiirus ja kurss (RMC või VTG) surnud lugemi (dead-reckoning) osa jaoks |
heading-course |
güroskoobi suund ja kurss maapinna suhtes erinevad rohkem kui hdg_cog_tol_deg (kiirus üle min_speed_kn) |
HDT, THS või VHW suund, heading_sensor = true |
speed-log |
kiirus vee suhtes ja kiirus maapinna suhtes erinevad rohkem kui stw_sog_tol_kn |
VHW või VBW ja kiirus maapinna suhtes |
sea-level |
GGA kõrgus erineb väärtusest antenna_height_m rohkem kui sea_level_tol_m |
GGA kõrgus, antenna_height_m |
cn0-spread |
C/N0 hajuvus satelliitide vahel langeb tasemele cn0_spread_frac selle kalibreerimismediaanist |
GSV |
cn0-rise |
ühiste satelliitide C/N0 tõusis keskmiselt cn0_rise_db ja cn0_rise_frac neist tõusis |
GSV |
time-consistency |
järjestikused epohhi ajad astuvad ebaregulaarselt, jooksevad tagurpidi või lahkuvad hostikellast | NMEA aeg; viimase osa jaoks hostikell |
osnma |
vastuvõtja teatab OSNMA autentimise ebaõnnestumisest (loetakse teatatud olekut; midagi ei kontrollita; OSNMA kontrollimiseks I/NAV-lehtedest endist vt docs/OSNMA.md) | $PKSOS olekulause |
Epohh on usaldamatu, kui RAIM, kellamonitor, lahendamise ebaõnnestumine või asukohahüpe annab häire või kui C/N0 langus jõuab oma läve kahekordsele väärtusele; halvenenud mis tahes muu häire korral; ja nominaalne muul juhul.
Mootori rada (raim, solve-failure, clock) on sama arvutus mis JammerTest 2024 spuufimise sõltumatul etalonil failis tests/jammertest_spoof_oracle_support: tests/receiver_trust_jammertest.rs kontrollib, et kõigil kaheksal avaldatud algushetkel langeb esimene häire samale epohhile ja on samat liiki.
Usaldusskoor (laeva platvorm)#
Laeva puhul saab iga epohh pärast kalibreerimist ka skoori vahemikus 0 kuni 100 ja põhjused, miks see ei ole 100. Kujutis on deterministlik ja fikseeritud enne mis tahes logi skoorimist: ei mingit õppimist, midagi ei sobitata sündmustele. Iga monitor taandab oma tõendid suhtarvule statistic / threshold (häire väärtusel 1 või enam); suhtarv maksab skoorile
points = weight * clamp((ratio - onset_ratio) / (full_ratio - onset_ratio), 0, 1)
score = round_to_0.1( clamp(100 - sum of points, 0, 100) )
seega ei maksa monitor midagi, kuni see on alla onset_ratio oma läve (vaikeväärtus 0,5), maksab poole oma kaalust oma läve juures ja kogu kaalu full_ratio korda läve juures (vaikeväärtus 1,5); skoor ei kasva ühegi statistiku korral. Allikas, mis epohhil ei teata, hoiab oma viimast statistikut evidence_hold_s (vaikeväärtus 10 s: kaks tsüklit C/N0 lausest, mida saadetakse iga 5 s järel), nii häirena kui mahaarvamisena.
Ümardamine on pool üles (floor(x * 10 + 0.5) / 10), riba on ümardatud skoori oma ja piiramine tuleb enne ümardamist. Mahaarvamistes loetletakse ainult monitorid, mille punktid on üle nulli, koos nende suhtarvu ja ümardamata punktidega, suurimad punktid ees; võrdsete punktidega mahaarvamised loetletakse monitorinimede järjekorras cn0-drop, agc, jam-ind, loss-of-lock, position-jump, raim, clock, solve-failure, kinematic, heading-course, speed-log, sea-level, cn0-spread, cn0-rise, time-consistency, osnma, geometry. Monitorile, mille test on läbitud või läbikukkunud (ebaõnnestunud lahendamine, ebaõnnestunud autentimine), antakse suhtarv 1,5, täiskaal. Loetletud punktid on need enne piiramist tasemele 0.
[score]
nominal_min = 90.0 # score >= 90: nominal
degraded_min = 55.0 # 55 <= score < 90: degraded; below 55: untrusted
onset_ratio = 0.5
full_ratio = 1.5
evidence_hold_s = 10.0
[score.weights] # overrides; a monitor not listed keeps its default
sea-level = 30.0
| Kaal (punktid) | Monitorid | Miks |
|---|---|---|
| 70 | osnma |
autentimise ebaõnnestumine on väide, mitte statistik |
| 60 | kinematic, raim, clock, position-jump, time-consistency |
võltsasukoht peab olema vastuolus füüsikaga või vastuvõtja enda kontrollidega ja aeg ei saa joosta tagurpidi; üks rikkumine täisjõul (1,5 korda selle lävi: 60 punkti, skoor 40) on usaldamatu ja oma läve juures (30 punkti, skoor 70) halvenenud |
| 40 | heading-course, speed-log, solve-failure |
üks sõltumatu andur, mis ei nõustu, on halvenenud; kaks täisjõul on usaldamatud |
| 30 | sea-level, cn0-spread, cn0-rise, cn0-drop |
signaalikeskkond või nõrgalt informatiivne kontroll |
| 25 | loss-of-lock, agc, jam-ind |
keskkond on vaenulik; see üksi ei näita, et lahendus on vale |
kuni 15, [geometry] |
geometry (0.36) |
ei ole kaal sellel kallakul: mitte midagi, kui taevas ei ole kehv, siis kuni cap_points (15); ainuüksi geomeetria jõuab halvenenud tasemele, mitte kunagi usaldamatule, ega anna häiret (vt allpool „Geomeetria“) |
Riba servad tulenevad kaaludest: kergeim häiret andev monitor maksab oma läve juures 12,5 punkti, seega jätab iga häire nominaalse riba; ükski üksik monitor alla 60 punkti ei saa üksi usaldamatu ribani jõuda (mitu koos võivad). Tulemus salvestab skoorimudeli (score_model) ja iga epohh kannab score.deductions: millised monitorid arvasid maha, nende suhtarvud ja nende punktid. Laeva puhul on epohhi olek tema skoori riba.
Geomeetria: loomulik halvenemine ründetaolisest vastuolust eraldi#
Vastuvõtja kai kraana kõrval, lüüsis või kõrge kere all kaotab satelliite ja selle lahendus halveneb põhjusel, mis ei ole rünnak. Alates versioonist 0,36, järgides geomeetria disainimärget (docs/design/2026-10-12-geometry-and-skyline-design.md, jaotis 4), kannab iga epohh oma satelliidigeomeetriat, laeva skooril on geomeetriamonitor ja iga mahaarvamine kannab klassi: geometry (taevas), environment (signaalikeskkond) või inconsistency (ründetaoline tõend).
Kust geomeetria tuleb. Iga jälgitava satelliidi kõrgus ja asimuut (NMEA GSV, UBX NAV-SAT), millest tuletatakse täpsuse halvenemise tegur (DOP) mootori ainsa DOP-tuumaga (orbit::dop, VALIDATED gnss_lib_py vastu): source = derived. Selle puudumisel DOP ja kasutatud satelliidid, mida vastuvõtja esitab (NMEA GSA): source = reported. Taevapositsioonid ja GSA kehtivad skoori evidence_hold_s jooksul (vaikeväärtus 10 s), sest paljud siinid saadavad GSV-d iga mõne sekundi järel; epohhil mittetäielikku GSV komplekti (väljavõtte lõpp, kaotatud lause) ei kasutata. Logi, millel ei ole kumbagi, näiteks NMEA ainult GGA ja RMC-ga või Androidi ja RINEX-i logid täna, saab oleku unknown märkusega „geomeetria teadmata“: mootor ei oleta geomeetriat, mida talle ei antud, ja geomeetriamonitor ei tööta.
geometry.status |
Tähendus |
|---|---|
good |
piisavalt satelliite ja DOP läve piires |
degraded |
üks või mitu põhjust: few-satellites, high-pdop, high-hdop ja (informatiivne, skooris mitte) sky-blocked, kui iga jälgitav satelliit asub horisondi ühes pooles |
unknown |
logi ei anna sellele epohhile satelliidigeomeetriat |
Olek on kirjeldav ja skoori jaoks on tähtis silt (allpool): degraded hõlmab informatiivset juhtu sky-blocked, mis võib tulla koos hea või rahuldava DOP-iga, ja skoorile läheb ainult silt poor.
Silt (alati teatatud, mitte kunagi skooris). Iga epohhi geometry.label on good (HDOP kuni hdop_good 2, PDOP kuni pdop_good 3 ja vähemalt used_good 6 satelliiti), poor (HDOP üle hdop_max 4, PDOP üle pdop_max 6 või vähem kui min_used 5 satelliiti), fair nende kahe vahel või unknown. Epohhi märkus algab alati sildi ja arvudega, näiteks „geomeetria rahuldav: HDOP 1,105, PDOP 1,831, VDOP 1,410, 8 satelliiti; skooris mitte (skoor arvab maha ainult üle HDOP 4, PDOP 6 või alla 5 satelliidi)“, ja lisab „, signaalikadu“, kui see kehtib.
Geomeetriamonitor (laeva skoor). See arvab maha midagi, kui geomeetria ei ole kehv: selle suhtarv on max(hdop / hdop_max, pdop / pdop_max, min_used / n_used) ja kuni see on kuni 1 (hea või rahuldav geomeetria, kaasa arvatud GPS-i ainult avatud taevas 8 satelliidiga) ei maksa see midagi, seega skooritakse selline logi täpselt nagu versioonis 0,35. Üle 1 kasvab mahaarvamine lineaarselt väärtuseni cap_points (15) tasemel full_ratio (1,5 korda läve: HDOP 6, PDOP 9, 3 satelliiti): 7,5 punkti suhtarvul 1,25 (HDOP 5 või 4 satelliiti), 15 alates 1,5 (skoor 85, halvenenud). Üksi ei saa see skoori kunagi viia alla taseme floor (vaikeväärtus: skoori degraded_min, 55), seega jõuab ainuüksi geomeetria halvenenud ribale ja mitte kunagi usaldamatule: kehtiv piir on min(cap_points, 100 - floor), nii et tabel [score], mis tõstab degraded_min (näiteks 0,35 oma degraded_min 90), langetab piiri väärtusele 100 - degraded_min, mitte ei lükata tagasi, ja floor, mis on seatud alla degraded_min, lükatakse tagasi. Monitor ei anna häiret; see loetletakse väljal monitors_run viimasena, kui see otsustas mis tahes epohhil (laev, mille logi annab geomeetria), ja seda ei arvata versiooni 0,35 identsusse; see ei ole [score.weights] kirje (selle seadmine lükatakse tagasi) ning kehtiv piir ja alampiir salvestatakse väljadele geometry_model.cap_in_force ja geometry_model.floor_in_force. Kehva epohhi märkus ütleb miks, näiteks „geomeetria kehv: HDOP 5,200, PDOP 7,900, VDOP 4,100, 7 satelliiti; halvenenud geomeetria tõttu: HDOP 5,200 üle 4 (tuletatud 7 logitud satelliidist); mitte vastuolu“.
Klassid. Iga mahaarvamine (score.deductions[].class):
| Klass | Monitorid |
|---|---|
geometry |
geometry (kehv geomeetria); loss-of-lock, kui iga kalibreerimislähtetasemega võrreldes kaotatud satelliit oli viimasel teatamisel alla low_elev_deg |
environment |
cn0-drop, cn0-spread, cn0-rise, agc, jam-ind, loss-of-lock muul juhul; geometry signaalikao ajal (allpool) |
inconsistency |
kinematic, heading-course, speed-log, sea-level, time-consistency, clock, raim, position-jump, osnma, solve-failure; ja geometry, kui geomeetria on kehv ja esitatud HDOP ei lange kokku esitatud taevaga (allpool) |
Kaitse võltsitud kehva taeva vastu. Spuufer võiks saata hõreda GSV või teatada kõrge HDOP-i, et osta tolerantsi. Mootor sildistab ega anna andeks: ükski teine kontroll ei laiene kehva geomeetria tõttu ja vastuvõtja esitatud HDOP (GSA hoidmise jooksul, muidu GGA) võrreldakse esitatud taevast tuletatud HDOP-iga. Kui need erinevad rohkem kui max(reported_vs_derived_tol, reported_vs_derived_rel × derived HDOP) (1,0 või 25 % tuletatud HDOP-ist, olenevalt sellest, kumb on suurem), kannab epohh reported_derived_mismatch: true ja kui geomeetria on kehv, klassifitseeritakse selle mahaarvamine inconsistency. Hea või rahuldava geomeetria korral lahknevust teatatakse ja ei skooritud: midagi ei arvata maha, kui geomeetria ei ole kehv. See on teadlik valik (0,36): „null, kui ei ole kehv“ kehtib iga epohhi kohta, nii et hea ja rahuldav geomeetria skooritakse täpselt nagu versioonis 0,35 ja võltsitud HDOP ei ole kunagi vaikne. Lipp (reported_derived_mismatch) on tulemuse igal epohhil ja igal reaalajarea real, märkus ütleb „…tolerantsist väljaspool: teatatud, skooris mitte (geomeetria ei ole kehv)“ või „…: geomeetria mahaarvamine klassifitseeritakse vastuoluks“, geometry_summary.hdop_mismatch loendab epohhe ja tõendite kokkuvõtte leht näitab arvu, null kaasa arvatud. 25 % on REPRESENTATIVE inseneriotsus, mitte mõõdetud ega standardne arv: vastuvõtja, mis lahendab ühe kella konstellatsiooni kohta või osaga satelliitidest, mida see jälgib (kõrgusmask, C/N0 piir, RAIM-i välistus), esitab HDOP-i, mis erineb iga jälgitava satelliidi ühe kella HDOP-ist summa võrra, mis kasvab HDOP-iga, seega loeks fikseeritud tolerants üksi loomulikku kehva geomeetriat vastuoluks. Suurem erinevus loetakse endiselt vastuoluks. Mahaarvamine, mis on klassifitseeritud geometry, on väide taeva kohta, mitte järeldus, et rünnakut ei toimunud.
Signaalikadu ei ole taevas. Kui satelliite, mida vastuvõtja loetleb nähtavana (üle low_elev_deg), ei jälgita, tuletab mootor ka kõigi nähtavate satelliitide DOP-i. Kui see nähtavate satelliitide DOP on läve piires ja kas midagi ei jälgita või jälgimata satelliidid on jaotunud mööda horisonti (mitte piiratud selle ühe poolega), siis taevas oli olemas ja signaal mitte: epohh kannab signal_loss: true, märkust „satelliidid nähtavad, kuid jälgimata: signaalikeskkond, mitte geomeetria“ ja geomeetria mahaarvamine klassifitseeritakse environment. Jälgimata satelliidid, mis on piiratud horisondi ühe poolega, loetakse endiselt blokeeritud taevaks (sein, kaljuserv, kai). Kahepoolne takistus (kanjon või kitsas fjord) loetakse signaalikaoks, kuni horisondijoon on seadistatud. Vastuvõtja puuduva lahenduse märgid ei ole DOP: esitatud HDOP või PDOP 99 või enam, GGA kvaliteet 0 ja GSA režiim 1 ei anna esitatud DOP-i.
Võti [geometry] |
Vaikeväärtus | Päritolu |
|---|---|---|
hdop_max |
4 | valitud (disainimärge 4,2): tasemel sigma_uere_m 1,5 m on HDOP 4 2drms väärtusega 12 m, kinemaatilise kontrolli kin_pos_tol_m. IEC 61108-1 puhul tsiteeritakse sageli, et see esitab oma täpsusnõuded HDOP ≤ 4 (või PDOP ≤ 6) jaoks: meenutatud GNSS-vastuvõtjate sekundaarkirjandusest, konkreetset sekundaarset allikat ei konsulteeritud ja standardit ei loetud; kontrollida standardi tekstiga |
pdop_max |
6 | PDOP kättesaadavuse lävi scenarios/polar-arctic-leo-coverage.toml; GPS SPS Performance Standard, 5. väljaanne (2020), PDOP ≤ 6, nagu tsiteeritud failis tests/constellation_availability_published_spec_oracle.rs; kontrollida standardi tekstiga |
min_used |
5 | üks rohkem kui lahendus vajab, nii et üksik kadu ei lõpeta lahendust; vähim arv, millel on RAIM-i jaoks üks liigne mõõtmine |
sigma_uere_m |
1.5 | esitatud sisend lüli 2drms jaoks hdop_max; seadke vastuvõtja enda arv |
reported_vs_derived_tol |
1,0 HDOP | valitud (disainimärge 4,2): tolerantsi absoluutne osa; lahknevus üle tolerantsi ei ole geomeetria |
reported_vs_derived_rel |
0.25 | REPRESENTATIVE inseneriotsus: suhteline osa, vastuvõtjatele, millel on konstellatsioonipõhised kellad või alamhulga lahendused |
low_elev_deg |
15 | disainimärge 4,3: sellest allapoole kaotatud satelliidid on taevale kaotatud; horisondijoon (0,36 punkt 1) laiendab seda |
azimuth_gap_deg |
180 | geomeetriline, informatiivne: iga satelliit horisondi ühes pooles |
cap_points |
15 | disainimärge 4,2: ainuüksi geomeetria viib skoori nominaalsest halvenenuks ja mitte kunagi usaldamatuks; maha arvatakse ainult siis, kui geomeetria on kehv (asutaja otsus B1, 0,36) |
full_ratio |
1.5 | skoori enda full_ratio: kallak jõuab väärtuseni cap_points tasemel 1,5 korda kehvad läved |
floor |
skoori degraded_min (55) |
ainuüksi geomeetria ei jõua kunagi usaldamatu ribani; kehtiv piir on min(cap_points, 100 - floor); alla degraded_min alampiir lükatakse tagasi |
hdop_good |
2 | REPRESENTATIVE, ainult silt: pool väärtusest hdop_max (skoori 0,35 algussuhtarv) |
pdop_good |
3 | REPRESENTATIVE, ainult silt: pool väärtusest pdop_max |
used_good |
6 | REPRESENTATIVE, ainult silt: üks rohkem kui min_used, nii et üksik kadu jätab endiselt liigse mõõtmise |
Mis väljundites muutus ja mis mitte. Ükski skoor ei muutu, kui geomeetria ei ole kehv; silt teatatakse alati. Lisatud võtmed: epochs[].geometry (status, reasons, source, n_used, hdop, pdop, vdop ümardatud väärtuseni 0,001, open_fraction (null, kuni horisondijoon on seadistatud), max_azimuth_gap_deg, age_s, reported_hdop, reported_derived_mismatch, note, in_view (satelliidid, mis on loetletud üle low_elev_deg), signal_loss, label), class igal mahaarvamisel ja lõpus geometry_model (läved, hoidmine, kehtiv piir ja alampiir, päritolu, klassireeglid) ning geometry_summary (epohhid oleku, sildi ja mahaarvamise klassi järgi ning epohhid esitatud HDOP lahknevusega); score_model.weights on nagu versioonis 0,35. Kaks testi hoiavad seda „0,36 portable“ lähtetaseme baitideni, kui need võtmed on eemaldatud (versiooni 0.35.0 räsid, mis on ümber lähtestatud, kui mootor läks üle portatiivsele matemaatikale, ja mida hoitakse testides kirjena sellest, mida 0.35.0 välja andis: docs/revisions/STUDIO15-portable-math-rebaseline.md). tests/geometry_trust_no_change.rs hoiab mõlema näidissessiooni kõiki väljundeid (tulemuse JSON, CSV, SVG, verdikt, taasesitatud reaalajaread, $PKSHT, Prometheus, CEF, LEEF). tests/geometry_corpus_identity.rs hoiab iga kinnitatud laeva NMEA korpuse partii tulemust, kokkuvõtet, reaalajaridu ja $PKSHT (demo ja mereviite fikstuurid, igaüks ka GPS-i ainult avatud taevana 8 satelliidiga, ja meeskonnakoolituse stsenaariumid, mis on genereeritud nende algväärtustest); kahes koolitusstsenaariumis, kus segamine teeb geomeetria kehvaks, on iga epohh, mis ei ole kehv, identne ja iga kehv erineb ainuüksi geomeetria mahaarvamise võrra. Logi, mille geomeetria on kehv, kaotab kuni 15 punkti, mida see versioonis 0,35 ei kaotanud; see on ettenähtud muutus. Demol loetakse äravedamine inconsistency; tests/geometry_trust.rs muudab logi nii, et maskeerib lääne taeva (rahuldav: sildistatud, skooris mitte), maskeerib selle ja kaks idapoolset satelliiti (kehv: geomeetria mahaarvamised, lukustuse kadu environment, sest ka kõrged satelliidid läksid), kaotab ainult alla 15° satelliidid (lukustuse kadu geometry) ja esitab HDOP-i, mida taevas ei seleta (kehva geomeetria mahaarvamine muutub inconsistency). Läved on MODELLED: valitud, mitte ühelegi logile sobitatud; siin ei väideta midagi selle kohta, kui sageli loomulikku halvenemist ja rünnakuid päris andmetel eristatakse.
Sündmuste ja ennustuste esitamine#
[[events]]
label = "jammer on"
kind = "jamming" # jamming, spoofing or other
onset_s = 120.0 # seconds since the first epoch of the log
end_s = 240.0 # optional; otherwise onset_s + compare.horizon_s
predicted_cn0_drop_db = 12.0 # optional, e.g. from a `jamming` scenario's link budget
[compare]
detect_tol_s = 10.0 # an alarm this soon after onset counts as a detection
cn0_tol_db = 3.0 # predicted and observed drops agree within this
Iga sündmuse kohta annab tulemus valehäired kalibreerimise ja algushetke vahel, esimese häire ja selle monitorid, latentsuse, tulemuse (detected, late, missed või not-evaluable) ning vaadeldud C/N0 languse mediaani ennustuse vastu (agree, disagree, no-prediction või not-evaluable). Lahknevust teatatakse, mitte kunagi ei häälestata ära: tolerantsid on stsenaariumis ja stsenaarium on tulemuse räsis.
Mida see ei väida#
Usalduse monitorid on MODELLED: nende läved on sisendid ja nende tuvastamise toimivus reaalse häire korral on see, mida sündmuste skoorimine mõõdab, mitte midagi, mida see liik väidab. JammerTest 2024 spuufimise sessioonidel tabavad mootori raja monitorid mõne algushetke 10 s jooksul ja on teiste puhul hilised; arvude jaoks vt rida „Clock-aided χ², RAIM, AGC, SQM fused per-epoch security FoM“ failis VERIFICATION-MATRIX.md. Ennustus, mis ühe logiga kokku langeb, on üks andmepunkt, mitte valideerimine.