Horisondimaskid ja taevageomeetria
Kuni 0,36 oli iga Maa nähtavuse test mootoris üks kõrgusnurga piir, mask_deg: satelliit loeti arvesse, kui see oli sellel numbril või kõrgemal, olenemata suunast. Tänav, kai, fjord või kraana varjab osa taevast ja jätab ülejäänu lahtiseks. Horisondijoon on kõrguspiir, mis sõltub asimuudist; taevageomeetria funktsioonid muudavad asukoha, aja, konstellatsioonid ja horisondijoone nähtavaks hulgaks, täpsuse halvenemise teguriks (DOP), geomeetria kovariatsiooniks, horisontaalseks veaellipsiks, Monte Carlo pilveks ja taevakaardiks. Kavand on docs/design/2026-10-12-geometry-and-skyline-design.md (punktid 1 ja 2).
Tõendid: maskeeritud nähtavusotsus (geodeetilised vaatenurgad, tabelmask, nähtav hulk ja selle DOP) on VALIDATED Orekit 12,2 ja gnss_lib_py 1.0.4 vastu eelregistreeritud võrdluses, nagu ka veaellips ja süsteemipõhine kofaktor (numpy, eelregistreeritud); kanjoni-, sektori- ja maastikukärped, eelseaded ja ülejäänud taevageomeetria funktsioonid on MODELLED (Tõendid). Horisondijoon eemaldab nähtavuse sirgel olevad satelliidid ja mitte midagi enamat. Eelseaded on REPRESENTATIVE geomeetriad, mitte mõõdistused.
Horisondijoon#
Horisondijoon on nelja kirelduse punktiviisiline maksimum. Asimuut on kraadid päripäeva tõelisest põhjast asukoha lokaalses ida-põhja-üles teljestikus; kõrgused on ühikus [0, 90).
| Kirjeldus | TOML | Mis see on |
|---|---|---|
| Tabel | table = [[az, el], ...] |
Kõrgused on asimuudi suhtes lineaarselt interpoleeritud ja ümber keeratud kohal 360°. Asimuudid on rangelt kasvavad väljal [0, 360); kuni 3600 rida. |
| Tänavakanjon | street_az_deg, width_m, height_left_m, height_right_m, antenna_m, length_m |
Kaks sirget paralleelset seina (allpool). |
| Sektorid | sectors = [{ az_from, az_to, el_deg }] |
Teravate servadega vahemikud päripäeva alates az_from (kaasa arvatud) kuni az_to (välja arvatud), mis võivad põhja kaudu ümber keerata; kuni 360. |
| Maastik | terrain = [{ az, distance_m, height_m }] |
Punktid taandatud tabeliks: kõrgusnurk atan((height_m − d²/(2 R_eff)) / d), koos kõveruse languga väärtuse R_eff = 4/3 × 6371 km jaoks (valitud, esitatud konstant). height_m on antenni kohal. |
preset = "<name>" algab nimetatud geomeetriast; kanjoni väljad alistavad seejärel eelseade kanjoni välja väljahaaval ning table, sectors ja terrain lisavad sellele.
Vastuvõtja mask_deg säilitab oma tähenduse: see on tasane horisondijoon. Efektiivne piir asimuudil az on max(mask_deg, skyline(az)) ja satelliit on nähtav, kui selle kõrgusnurk on sellega võrdne või suurem: sama >=, mida tasane mask alati kasutas. Satelliit, mis on kohal mask_deg, kuid horisondijoonest allpool, on horisondijoone poolt maskeeritud.
Tänavakanjon#
Tänav kulgeb piki asimuuti s, seinte vahel w meetrit, antenn a meetri kõrgusel keskjoonel. Piki asimuuti az, väärtusega θ = az − s, jõuab kiir seinani pärast d(az) = (w/2) / |sin θ|, nii et kõrgusega h sein lõikab piiri
cut(az) = atan( (h − a) / d(az) ) (the right wall for sin θ > 0, the side at s + 90°)
Avatud riba on tänava suunas. Väärtusega length_m = L (antenn keskel) väljub kiir läbi avatud otsa ja sein ei lõika midagi, kui d(az) · |cos θ| > L/2. Sein, mis pole antennist kõrgem, ei lõika midagi. antenna_m vaikeväärtus on 1,5 m (auto katus või käeshoitav vastuvõtja, esitatud valik); uus kanjon vajab width_m.
Eelseadistused#
Valitud ja esitatud mõõtmed (kavandimärkuse omad), mitte ühegi tegeliku koha mõõdistused. kshana skyline --preset <name> trükib ühe koos selle päritolu ja iga kraadi piiriga.
| Eelseade | Geomeetria | Päritolu |
|---|---|---|
city-street |
Kanjon: tänav 0°, laius 20 m, seinad 30 m ja 30 m, antenn 1,5 m. 70,7° risti tänavaga, tänava suunas avatud. | Kõrguse ja laiuse suhe 1,5, tänavakanjonite kujusuhete vahemikus 0,5–2 allikas Oke (1988), Street design and urban canopy layer climate, Energy and Buildings 11, 103–113. |
harbour-approach |
Sektorid: mere poole avatud üle 090–270 (180°); kaihooned 8° üle 315–045 (90°); lainemurd ja selle tuli 3° üle 045–090 ja 270–315. | Esitatud valikud (näiteks 40 m laohooned umbes 285 m kaugusel). |
fjord |
Maastik: seinad 600 m antenni kohal 1500 m kaugusel põhja-lõuna suunalise kanali mõlemal küljel, üks punkt kraadi kohta (väärtusel 1500/|sin az| m), kõveruse langus rakendatud. 21,8° risti, alla 1° piki telge. |
Sügavate Lääne-Norra fjordide laiuse ja reljeefi suurusjärk (Holtedahl (1967), Notes on the formation of fjords and fjord-valleys, Geografiska Annaler 49A, 193–203). |
container-terminal |
Sektorid: konteinerivirnad 12° maa poole jääval poolel 000–180; kraanade noolad 35° üle 245–255 ja 25° üle 285–295; mujal veele avatud. | Viis ISO 668 high-cube konteinerit (14,5 m) umbes 60 m kaugusel antennist, mis on 2 m kõrgusel; nool umbes 50 m kai kohal kaugustel 70 m ja 100 m, post-Panamax kraana suurusjärk. Kraanasektor on läbipaistmatu. |
Stsenaariumis#
Valikuline jaotis [skyline], liigi enda piiri kohal:
| Liik | Mida horisondijoon muudab | Valimi kohta |
|---|---|---|
orbit (koos väljaga user_site) |
Nähtavuse ajajoon (GNSS kättesaadavus) ja DOP kokkuvõte. | — |
integrity (koos väljaga user_site) |
Satelliidid, mida RAIM ja ARAIM (araim_dual) kasutavad. |
epochs[].masked_by_skyline |
gnss-sim |
Satelliidid, mille pseudovahemaad simuleeritakse ja mida RAIM kasutab. | gnss_measurements[].masked_by_skyline |
jamming |
Satelliidid, mida vastuvõtja suudab jälgida, enne segajat. | epochs[].masked_by_skyline |
leo-pvt |
Iga režiimi nähtavushulk iga süsteemi enda maski kohal, polaarlaotus kaasa arvatud (sama horisondijoon igal asukohal). Doppleri režiimi mähisjoon ja kavandatud üksikläbilend on piirid sellele, mida vastuvõtja peab käsitlema, ning säilitavad iga süsteemi maski. | joint.epochs[].masked_by_skyline |
leo-pass |
Millised epohhid loetakse maski kohal olevaks, maski kohal oldud aeg, GNSS võrdluse satelliidid. | satellites[].pass.epochs_masked_by_skyline |
nmea-scenario (õppe-NMEA) |
Satelliidid väljal GSV ja lahendis. Asimuudid on tõelised suunad, mis on maapinna külge kinnitatud, mitte laeva kurss. | — |
Liikide orbit ja integrity maapealne asukoht. Mõlemad liigid modelleerivad orbiidil olevat kasutajat geotsentrilise kõrgusnurga ja Maa suhtes fikseeritud asimuudita, seega võtavad nad horisondijoone vastu ainult kavandimärkuse maapealse asukoha režiimiga: user_site = { lat_deg, lon_deg, height_m } väljade user asemel (täpselt üks kahest). Iga valim on üks absoluutne ajahetk, epoch + t: iga satelliit levitatakse selleni (elemendikomplekti, edastatud efemeriidi või SP3 faili edasiliigutamine toimub selle enda epohhist, Walkeri satelliit loeb t alates epoch) ja pööratakse selle hetkel Maa suhtes fikseerituks, nii et asukoht näeb üht kooskõlalist taevast. epoch on orbiidi stsenaariumi enda; selle puudumisel (ja alati liigi integrity puhul, millel seda pole) on see uusim epohh nende satelliitide seas, millel see on, või ainult Walkeri mustrite puhul J2000. Kõrgusnurk ja asimuut on geodeetilised (WGS-84). Terviklikkuse liigi ARAIM kaitsetasemete ning Stanfordi vertikaalvea horisontaalne ja vertikaalne jaotus kasutab sama geodeetilist ülesuunda (WGS-84 ellipsoidi normaal, umbes 0,19° geotsentrilisest radiaalist 45° laiuskraadil); hetktõmmise RAIM kasutas seda juba. Liik user_site ilma horisondijooneta on tavaline maapealne kasutaja; orbiidil oleva user tee jääb muutmata.
kind = "integrity"
mask_deg = 5.0
# ...
[user_site]
lat_deg = 59.45
lon_deg = 24.75
height_m = 15.0
[skyline]
preset = "harbour-approach"
Tagasiühilduvus. Ilma jaotiseta [skyline] on stsenaarium bait baidi haaval identne sellega, mida sama mootor andis enne horisondijoone koodi olemasolu: tests/skyline_scenarios.rs kontrollib iga tarnitud stsenaariumi, mis neid liike käivitab, JSON-i, graafikut ja kokkuvõtet ning iga õppestsenaariumi NMEA teksti „0,36 portable“ baasjoone SHA-256 räsite vastu (0.35.0 väljalaskekommiti räsid, uuesti baseeritud, kui mootor läks üle portatiivsele matemaatikale, ja hoitud testis kirjena: docs/revisions/STUDIO15-portable-math-rebaseline.md). Tühi jaotis [skyline] ei lõika midagi; tulemus on siis võrdne käivitusega ilma selleta, välja arvatud lisatud plokk skyline ja nullist masked_by_skyline arvud.
Mida tagasi lükatakse, põhjusega teates: horisondijoon orbiidil olevale user; user ja user_site koos; tundmatu eelseade; kanjon ilma väljata width_m; tabel, mis ei ole väljal [0, 360) rangelt kasvav; kõrgusnurk väljaspool [0, 90); tühi sektor; mittepositiivne maastikukaugus; sisend üle piirmäärade; mis tahes tundmatu võti.
Tulemus saab välja skyline: { source, open_fraction, provenance }, kui jaotis on olemas: source on preset:<name>, preset:<name>+overrides või custom; open_fraction on ülemise poolsfääri ruuminurga osa kõrgusel max(mask_deg, skyline) (väärtuse 1 − sin(cut) keskmine asimuudi üle: 1 nullmaski korral, 0,5 tasase 30° piiri korral); provenance on eelseade rida või stsenaariumi enda. Ühikud ja päritoluklassid on blokis units.
Kaasasolevad näited (kshana example <name>):
| Näide | Mida see näitab (võrdlemiseks eemalda jaotis [skyline]) |
|---|---|
orbit-urban-canyon-skyline |
GPS + Galileo väljaku city-street põhjas: 17 valimist 289 säilitab lahendi, mediaan-PDOP 70,5 (1,14 lahtise taeva all). |
integrity-harbour-approach |
Kahe konstellatsiooni ARAIM sadamasse sisenemisel: 70 satelliidi-epohhi peidetud, kättesaadavus muutumatu (145 / 145). |
gnss-sim-container-terminal-skyline |
Pseudovahemaad ja RAIM kail: 44 satelliidi-epohhi peidetud; RAIM kättesaadavus 0,59 (0,85 lahtise taeva all). |
jamming-harbour-approach-skyline |
2 W segaja sadamas: 83 satelliidi-epohhi peidetud, jälgimine muutumatu (segaja oli need juba võtnud). |
leo-pvt-fjord-skyline |
GPS + Galileo + LEO kiht fjordis: liidetud PDOP mediaan 1,14 (0,93 lahtise taeva all). |
leo-vertical-autonomous-vehicle-skyline |
Kanjon leo-vertical-autonomous-vehicle tasase 35° piirina ja kui city-street pööratud auto kursi suunas: 8 versus 4 kuni 5 GPS ja Galileo satelliiti; liidetud keskmine viga 2,1 m mõlemal juhul; 1,5 m häire 51 % ja 59 % epohhidest. |
Taeva geomeetria#
Viis mootori funktsiooni (src/geometry.rs), kõigil pindadel samad:
| Funktsioon | Sisend → väljund |
|---|---|
sky_geometry(request) |
satelliidi kohta id, system, az_deg, el_deg, cut_deg, visible, masked; n_visible, n_masked, open_fraction; dop (GDOP, PDOP, HDOP, VDOP, TDOP, tdop_by_clock); states, cofactor_enu (ühikuline dispersioon), covariance_enu_m2; ellipse_1sigma ja ellipse nõutud usaldusnivool; label, statement, advisory |
sky_monte_carlo(request, seed, n) |
n (kuni 5000, sisendi piirmäär) vähimruutude viga sõltumatute Gaussi kaugusvigade korral väärtusega σ_UERE ChaCha8 vooust, mille algväärtus (seed) on seed: samples_enu_m, empiiriline kovariatsioon, horisontaalne ja 3-D RMS koos σ_UERE × HDOP ja σ_UERE × PDOP, 95 % ellipsi sisse jääv osa |
skyline_presets() |
eelseaded koos sildi, kirjelduse, päritolu, iga kraadi piiri ja open_fraction |
skyline_profile(skyline) |
horisondijoone jaotis, taandatud mootori kasutatavaks 360-kirjeliseks tabeliks, koos source, provenance, open_fraction |
skyplot_svg(request) |
taevakaart staatilise SVG-na (ilma skriptita, ilma välise viiteta, iga sisendsõne on paojadastatud) |
Päring:
{
"site": {"lat_deg": 59.91, "lon_deg": 10.75, "height_m": 5},
"time_s": 3600,
"systems": ["gps-baseline", "galileo", "beidou-meo", "xona-pulsar"],
"mask_deg": 5,
"skyline": {"preset": "fjord"},
"clock": "per-system",
"sigma_uere_m": 1.5,
"confidence": 0.95
}
systems on mootori konstellatsiooni eelseaded (väljad constellation-design gps-baseline, galileo, beidou-meo, glonass, ...; LEO eelseaded xona-pulsar, iridium-stl, ...) või täielik leo-pvt [[system]] tabel, levitatud kuni time_s (Kepleri, sekulaarse J2-ga, leo-pvt ühisrežiimi orbiidid). Nende suhtelised faasid tulevad erinevatest etalonepohhidest, seega on taevas representatiivne geomeetria, mitte selle kuupäeva taevas sellel kohal. Satelliidid võib anda ka otse (või lisaks): "satellites": [{"id": "G05", "system": "GPS", "az_deg": 120, "el_deg": 35}, ...], või väljadega "ecef_m": [x, y, z] ja site või user_ecef_m. Vaikeväärtused: iga süsteemi enda mask (5° GNSS, 10° LEO; 5° otse antud satelliitidele), üks vastuvõtja kell süsteemi kohta ("common" ühe jagatud kella jaoks), σ_UERE 1 m (representatiivne kahe sagedusega eelarverida), usaldusnivoo 0,95. Sisendi piirmäärad: kuni 2000 satelliiti horisondi kohal (rohkema nõudev süsteemitabel lükatakse tagasi enne ehitamist) ja 16 vastuvõtja kella.
Kuupäevastatud taevas elemendikomplektidest. "tle" võtab kaherealise elemendikomplekti teksti (nimerida iga komplekti ees on valikuline; kuni 4 MiB, sisendi piirmäär), levitatud mootori SGP4-ga (WGS-72, levitaja, mida orbit-real-tle kasutab) hetkeni "epoch" pluss time_s, pööratud Maa suhtes fikseerituks, UT1 võetuna UTC-ks ja ilma poolusliikumiseta, ning vaadatuna kohast site. "epoch" on UTC ISO 8601 (2026-06-07T12:00:00Z) ja kuupäevastab ainult elemendikomplektid (eelseadetel kuupäeva pole, seega lükatakse epoch ilma tle tagasi); "tle_system" sildistab need süsteemipõhise kella jaoks (vaikimisi TLE). Iga tulemus ütleb, millist taevast ta kujutab, väljades sky_source ja sky_statement:
sky_source |
Taevas |
|---|---|
presets |
mootori konstellatsiooni eelseaded: representatiivne geomeetria |
tle-at-epoch |
elemendikomplektid, mis on levitatud esitatud epohhini: taevas, mille need elemendikomplektid sel epohhil annavad, mitte selle mõõtmine (nende enda täpsus on SGP4 oma ja komplektide vanus) |
tle-at-element-epoch |
ilma väljata epoch: elemendikomplektid, mis on levitatud uusima komplekti enda epohhini pluss time_s, representatiivne taevas |
satellites |
otse antud satelliidid, nagu esitatud |
Segu ühendab need väljaga +. epoch_utc on ajahetk, milleni elemendikomplektid levitati, ja tle_skipped nimetab, millist osa tekstist ei kasutatud, koos põhjusega: valesti vormistatud või orvuks jäänud elemendikomplekti read (koos nende reanumbritega), komplektid, mille parser tagasi lükkas, ja komplektid, mida SGP4 ei suutnud sellesse ajahetke levitada (lagunenud või oma piiridest väljas); kokku kuni 100 kirjet, seejärel üks viimane kirje, mis loendab ülejäänud. Tühi loend systems ei lisa eelseadeid. Taevakaart esitab aluse oma jaluses.
Üks tuum. Kofaktormaatriks on orbit::cofactor_from_los, kujundusmaatriksi koostamine ja Gauss-Jordani pöördmaatriks väljade orbit::dop taga. orbit::dop_cov avab kovariatsiooni ja orbit::dop on selle taandus, nii et VALIDATED skalaarid on muutumatud ja neid kinnitab endiselt tests/dop_reference.rs. Teist DOP realisatsiooni ei ole.
Ellips. Pooltelg k σ √λ ida-põhja bloki omaväärtustele λ, koos k = √(−2 ln(1 − p)) (√5.991 = 2.448 95 % juures, 1 39,35 % juures) ning peatelje asimuut ½ atan2(2 Q_EN, Q_NN − Q_EE) väljal [0, 180) põhjast.
| Pind | Sisenemispunktid |
|---|---|
| CLI | kshana sky <request.json|toml> või kshana sky --site <lat,lon[,h]> (--systems <a,b> | --tle <file>) [--epoch] [--tle-system] [--time] [--mask] [--skyline-preset] [--uere] [--clock], koos --monte-carlo <n> --seed <s> või --svg; kshana skyline --preset <name> | --presets | --profile <file> |
| Rust | kshana::geometry::{sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg}, samanimelised kshana::surface::* |
| Python | kshana.sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg |
| WASM | sky_geometry(request_json), sky_monte_carlo(request_json, seed, n), skyline_presets(), skyline_profile(skyline_json), skyplot_svg(request_json) |
| MCP | sky_geometry (request või skyline_preset); MCP kaudu Monte Carlot ei tehta (massvalimid, mida agent peaks kokku võtma, mitte kandma) |
Iga tulemus kannab label (MODELLED), väljavõtet statement (geomeetria esitatud veamudeli all: sõltumatud, võrdsed, nullkeskmisega Gaussi kaugusvead; mitte vastuvõtja tegeliku vea ennustus, millel on ka kallutused, mitmeteelevi ja otsenähtavuseta vead; mitte terviklikkuse piir) ja nõuannet: Nõuandev tarkvara, mitte tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162): laeva navigeerimise eest vastutab jätkuvalt operaator.
Tõendid#
Viis registri (ledger) rida (docs/VERIFICATION-MATRIX.md), nagu kavandimärkus neid piirab:
| Rida | Staatus | Sõltumatu etalon |
|---|---|---|
| Asimuudist sõltuv skyline'i mask: nähtav hulk, asimuut ja tõusunurk ning DOP maski all | VALIDATED | Orekit 12,2 (TopocentricFrame vaatenurgad, ElevationMask) koos gnss_lib_py 1.0.4 (get_dop ja DOP maatriks), eelregistreeritud failis xval/orekit-skyline/PREREGISTRATION.md (commit e4b9d912) enne kummagi käivitamist: 1173 vaatenurka kuuel asukohal ja neljal epohhil, kuus tabelit, 142 nähtavat hulka; halvim kõrgusnurk 1.3e-13°, asimuut 2.3e-13°, mask 1.1e-12° versus 1e-9°; identsed nähtavad hulgad, ükski pole piiririba sees; DOP 3.3e-13 suhteline ja kofaktor 6.6e-13 maatriksi skaalast versus 1e-9. Ulatus: tabelmaskid, geodeetilised vaatenurgad, maskeeritud hulk ning selle ühiskella DOP ja kofaktor. |
| Tänavakanjoni, sektori ja maastiku taandamine tabeliks | MODELLED | käsitsi arvutatud väärtused; ülaltoodud võrdlus loeb nende tabeleid sisenditena ega kontrolli neid |
| Horisondijoone eelseaded | MODELLED | puudub: valitud, esitatud mõõtmed (kontrollitud ainult iseenda vastu) |
| Horisontaalne veaellips ja süsteemikohane kofaktor geomeetria kovariatsioonist | VALIDATED | numpy 2.5.4 linalg.inv ja linalg.eigh (standardne P2) 142 sisse kirjutatud nähtaval hulgal, ühine kell ja üks kell süsteemi kohta, eelregistreeritud failis xval/numpy-ellipse/PREREGISTRATION.md (commit 0bbeeaee): 270 juhtu, teljed 5.1e-13 suhteline, orientatsioon 5.3e-12°, kofaktor 1.0e-12 maatriksi skaalast, versus 1e-9 ja 1e-6° |
| Taevageomeetria funktsioonid | MODELLED | koostis: eelseade levitamine representatiivse taevani, Monte Carlo pilv (kontrollitud geomeetria vastu, mida see valimina võtab), pinnad |
Jaotise [skyline] puudumist kontrollitakse bait baidi haaval väljundite 0.35.0 vastu, mis näitab tagasiühilduvust ega kinnita midagi. gnss_lib_py rakendab ainult ühte kõrgusnurga maski, seega on see siin DOP-i sõltumatu etalon, mitte maski sõltumatu etalon.
Mida horisondijoon ei modelleeri: difraktsioon seina serva kohal, peegeldused ja otsenähtavuseta signaalid, mida tegelik vastuvõtja võib siiski jälgida (need jäetakse välja, mitte ei halvendata), osaline läbipaistvus (võrkkraana on kogu oma sektoris läbipaistmatu), antud punktidest kaugemal olev maastik ning Maa kõverus kanjoni- ja sektorivormides.