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

Důvěra v přijímač a námořní oblastUpravit na GitHubuZdroj: docs/SKYLINE.md

Masky skyline a geometrie oblohy

Do verze 0,36 byl každý test viditelnosti vůči Zemi v enginu jediným elevačním prahem, mask_deg: družice se počítala, když byla na jednom čísle nebo nad ním, bez ohledu na směr. Ulice, nábřeží, fjord nebo jeřáb část oblohy zakrývá a zbytek ponechává otevřený. Skyline je elevační řez závislý na azimutu; funkce geometrie oblohy mění stanoviště, čas, konstelace a skyline na viditelnou množinu, faktor zhoršení přesnosti (DOP), kovarianci geometrie, horizontální chybovou elipsu, mrak Monte Carlo a skyplot. Návrh je docs/design/2026-10-12-geometry-and-skyline-design.md (položky 1 a 2).

Důkazy: rozhodnutí o viditelnosti s maskou (geodetické úhly pohledu, tabulková maska, viditelná množina a její DOP) je VALIDATED vůči Orekitu 12,2 a gnss_lib_py 1.0.4 v předregistrovaném porovnání, stejně tak chybová elipsa a kofaktor podle systému (numpy, předregistrováno); redukce kaňonu, sektorů a terénu, předvolby a ostatní funkce geometrie oblohy jsou MODELLED (Důkazy). Skyline odstraňuje družice v přímé viditelnosti, a nic víc. Předvolby jsou REPRESENTATIVE geometrie, nikoli zaměření.

Skyline#

Skyline je bodové maximum čtyř popisů. Azimut je v stupních po směru hodinových ručiček od pravého severu v místní soustavě východ–sever–nahoru stanoviště; elevace jsou v [0, 90).

Popis TOML Co to je
Tabulka table = [[az, el], ...] Elevace lineárně interpolované v azimutu, zacyklené na 360°. Azimuty striktně rostoucí v [0, 360); nejvýše 3600 řádků.
Ulice (kaňon) street_az_deg, width_m, height_left_m, height_right_m, antenna_m, length_m Dvě přímé rovnoběžné stěny (níže).
Sektory sectors = [{ az_from, az_to, el_deg }] Ostře ohraničené intervaly po směru hodinových ručiček od az_from (včetně) do az_to (mimo), které mohou procházet severem; nejvýše 360.
Terén terrain = [{ az, distance_m, height_m }] Body převedené na tabulku: elevace atan((height_m − d²/(2 R_eff)) / d), s poklesem zakřivením pro R_eff = 4/3 × 6371 km (zvolená, uvedená konstanta). height_m je nad anténou.

preset = "<name>" vychází z pojmenované geometrie; pole kaňonu pak přepisují kaňon předvolby pole po poli a table, sectors a terrain se k ní přidávají.

Parametr přijímače mask_deg si zachovává svůj význam: je to plochý skyline. Efektivní práh při azimutu az je max(mask_deg, skyline(az)) a družice je viditelná, když je její elevace na něm nebo nad ním: stejné >=, jaké vždy používala plochá maska. Družice nad mask_deg, ale pod skyline, je zakryta skyline.

Ulice (kaňon)#

Ulice vede podél azimutu s, w metrů mezi stěnami, anténa a metrů nad zemí na ose. Podél azimutu az, s θ = az − s, paprsek dosáhne stěny po d(az) = (w/2) / |sin θ|, takže stěna o výšce h zakrývá od

cut(az) = atan( (h − a) / d(az) )          (the right wall for sin θ > 0, the side at s + 90°)

Otevřený pruh leží podél ulice. S length_m = L (anténa uprostřed) paprsek odchází otevřeným koncem a stěna nezakrývá nic, když platí d(az) · |cos θ| > L/2. Stěna ne vyšší než anténa nezakrývá nic. antenna_m je ve výchozím stavu 1,5 m (střecha auta nebo ruční přijímač, zvolená hodnota); nový kaňon potřebuje width_m.

Předvolby#

Zvolené a uvedené rozměry (z návrhové poznámky), nikoli zaměření skutečného místa. kshana skyline --preset <name> vypíše jednu z nich s jejím původem a jejím řezem po každém stupni.

Předvolba Geometrie Původ
city-street Kaňon: ulice 0°, šířka 20 m, stěny 30 m a 30 m, anténa 1,5 m. 70,7° napříč ulicí, otevřeno podél ní. Poměr výšky k šířce 1,5, uvnitř pásma 0,5–2 poměrů stran městských kaňonů v práci Oke (1988), Street design and urban canopy layer climate, Energy and Buildings 11, 103–113.
harbour-approach Sektory: otevřeno k moři v rozmezí 090–270 (180°); budovy na nábřeží 8° v rozmezí 315–045 (90°); vlnolam a jeho maják 3° v rozmezí 045–090 a 270–315. Zvolené hodnoty (například sklady o výšce 40 m asi 285 m daleko).
fjord Terén: stěny 600 m nad anténou ve vzdálenosti 1500 m na obě strany od kanálu sever–jih, jeden bod na stupeň (při 1500/|sin az| m), použit pokles zakřivením. 21,8° napříč, pod 1° podél osy. Řádově odpovídá šířce a reliéfu hlubokých západonorských fjordů (Holtedahl (1967), Notes on the formation of fjords and fjord-valleys, Geografiska Annaler 49A, 193–203).
container-terminal Sektory: kontejnerové stohy 12° v pevninské polovině 000–180; ramena jeřábů 35° v rozmezí 245–255 a 25° v rozmezí 285–295; jinde otevřeno k vodě. Pět kontejnerů ISO 668 high-cube (14,5 m) asi 60 m od antény ve výšce 2 m; rameno asi 50 m nad nábřežím ve vzdálenostech 70 m a 100 m, řádově jako u jeřábu typu post-Panamax. Sektor jeřábu je neprůhledný.

Ve scénáři#

Nepovinná sekce [skyline] nad vlastním prahem daného druhu:

Druh Co skyline mění Pro každý vzorek
orbit (s user_site) Časová osa viditelnosti (dostupnost GNSS) a souhrn DOP. —
integrity (s user_site) Družice, které používají RAIM a ARAIM (araim_dual). epochs[].masked_by_skyline
gnss-sim Družice, jejichž pseudovzdálenosti se simulují a používá je RAIM. gnss_measurements[].masked_by_skyline
jamming Družice, které přijímač dokáže sledovat, před rušením. epochs[].masked_by_skyline
leo-pvt Množina viditelných družic každého režimu nad maskou každého systému, včetně polárního průchodu (stejný skyline na každém stanovišti). Obálka režimu Doppler a navržený jednotlivý přelet jsou meze toho, co musí přijímač zvládnout, a zachovávají masku každého systému. joint.epochs[].masked_by_skyline
leo-pass Které epochy se počítají jako nad maskou, doba nad ní, družice v porovnání GNSS. satellites[].pass.epochs_masked_by_skyline
nmea-scenario (výcvikové NMEA) Družice ve zprávě GSV a v řešení polohy. Azimuty jsou skutečné směry vztažené k zemi, nikoli kurz plavidla. —

Pozemní stanoviště pro orbit a integrity. Oba druhy modelují obíhajícího uživatele s geocentrickou elevací a bez azimutu vázaného k Zemi, takže skyline přijímají jen v režimu pozemního stanoviště z návrhové poznámky: user_site = { lat_deg, lon_deg, height_m } místo user (právě jedno z obou). Každý vzorek je jeden absolutní okamžik, epoch + t: každá družice se k němu propaguje (sada elementů, broadcast efemeridy nebo soubor SP3 se posouvá od vlastní epochy, družice Walker se počítá t od epoch) a převede se do zemského pevného systému v tomto okamžiku, takže stanoviště vidí jednu konzistentní oblohu. epoch je vlastní epocha scénáře oběžné dráhy; bez ní (a vždy pro integrity, který ji nemá) je to nejnovější epocha mezi družicemi, které nějakou nesou, nebo J2000 pouze pro vzory Walker. Elevace a azimut jsou geodetické (WGS-84). Horizontální a vertikální rozdělení ochranných úrovní ARAIM druhu integrity a Stanfordovy vertikální chyby používá stejný geodetický směr nahoru (normálu elipsoidu WGS-84, asi 0,19° od geocentrického radiálního směru při šířce 45°); snímkový RAIM jej už používal. user_site bez skyline je obyčejný pozemní uživatel; cesta obíhajícího user zůstává beze změny.

kind = "integrity"
mask_deg = 5.0
# ...
[user_site]
lat_deg = 59.45
lon_deg = 24.75
height_m = 15.0

[skyline]
preset = "harbour-approach"

Zpětná kompatibilita. Bez sekce [skyline] je scénář bajtově shodný s tím, co tentýž engine dával předtím, než kód skyline existoval: tests/skyline_scenarios.rs kontroluje JSON, graf a souhrn každého dodávaného scénáře, který některý z těchto druhů spouští, a text NMEA každého výcvikového scénáře proti digestům SHA-256 základu „0,36 portable“ (digesty z commitu vydání 0.35.0, znovu stanovené, když engine přešel na přenositelnou matematiku, a uchované v testu jako záznam: docs/revisions/STUDIO15-portable-math-rebaseline.md). Prázdná sekce [skyline] nezakrývá nic; výsledek se pak rovná běhu bez ní, až na přidaný blok skyline a nulové počty masked_by_skyline.

Co se odmítá, s důvodem ve zprávě: skyline na obíhajícím user; user a user_site současně; neznámá předvolba; kaňon bez width_m; tabulka, která není striktně rostoucí v [0, 360); elevace mimo [0, 90); prázdný sektor; nekladná vzdálenost terénu; vstup nad limity; jakýkoli neznámý klíč.

Výsledek získá skyline: { source, open_fraction, provenance }, je-li sekce přítomna: source je preset:<name>, preset:<name>+overrides nebo custom; open_fraction je zlomek prostorového úhlu horní polosféry nad max(mask_deg, skyline) (průměr 1 − sin(cut) přes azimut: 1 pro nulovou masku, 0,5 pro plochý řez 30°); provenance je řádek předvolby nebo vlastní řádek scénáře. Jednotky a třídy původu jsou v bloku units.

Přibalené příklady (kshana example <name>):

Příklad Co ukazuje (pro porovnání odeberte sekci [skyline])
orbit-urban-canyon-skyline GPS + Galileo na dně city-street: 17 z 289 vzorků si zachovává řešení polohy, střední PDOP 70,5 (1,14 pod otevřenou oblohou).
integrity-harbour-approach Dvoukonstelační ARAIM při vjezdu do přístavu: 70 epoch družic skryto, dostupnost beze změny (145 ze 145).
gnss-sim-container-terminal-skyline Pseudovzdálenosti a RAIM na nábřeží: 44 epoch družic skryto; dostupnost RAIM 0,59 (0,85 pod otevřenou oblohou).
jamming-harbour-approach-skyline Rušička 2 W v přístavu: 83 epoch družic skryto, sledování beze změny (rušička je převzala).
leo-pvt-fjord-skyline GPS + Galileo + vrstva LEO ve fjordu: střední fúzní PDOP 1,14 (0,93 pod otevřenou oblohou).
leo-vertical-autonomous-vehicle-skyline Kaňon leo-vertical-autonomous-vehicle jako plochý řez 35° a jako city-street otočený podle kurzu vozidla: 8 oproti 4 až 5 družicím GPS a Galileo; střední fúzní chyba 2,1 m v obou případech; poplach 1,5 m při 51 % a 59 % epoch.

Geometrie oblohy#

Pět funkcí enginu (src/geometry.rs), na každém rozhraní stejných:

Funkce Vstup → výstup
sky_geometry(request) pro každou družici 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 (jednotkový rozptyl), covariance_enu_m2; ellipse_1sigma a ellipse při požadované spolehlivosti; label, statement, advisory
sky_monte_carlo(request, seed, n) n (nejvýše 5000, vstupní limit) chyb metodou nejmenších čtverců při nezávislých gaussovských chybách vzdálenosti σ_UERE z proudu ChaCha8 inicializovaného seed: samples_enu_m, empirická kovariance, horizontální a 3D RMS vedle σ_UERE × HDOP a σ_UERE × PDOP, podíl uvnitř elipsy 95 %
skyline_presets() předvolby s označením, popisem, původem, řezem po každém stupni a open_fraction
skyline_profile(skyline) sekce skyline převedená na 360záznamovou tabulku, kterou engine používá, s source, provenance, open_fraction
skyplot_svg(request) skyplot jako statické SVG (bez skriptu, bez externí reference, každý vstupní řetězec ošetřen escapováním)

Požadavek:

{
  "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 jsou předvolby konstelací enginu (constellation-design: gps-baseline, galileo, beidou-meo, glonass, ...; předvolby LEO xona-pulsar, iridium-stl, ...) nebo úplná tabulka leo-pvt [[system]], propagovaná do time_s (keplerovská se sekulárním J2, dráhy společného režimu leo-pvt). Jejich relativní fáze pocházejí z různých referenčních epoch, takže obloha je reprezentativní geometrie, nikoli obloha toho data na tom místě. Družice lze místo toho (nebo také) zadat přímo: "satellites": [{"id": "G05", "system": "GPS", "az_deg": 120, "el_deg": 35}, ...], nebo s "ecef_m": [x, y, z] a site či user_ecef_m. Výchozí hodnoty: maska každého systému (5° GNSS, 10° LEO; 5° pro přímo zadané družice), jedny hodiny přijímače na systém ("common" pro jedny sdílené hodiny), σ_UERE 1 m (reprezentativní řádek rozpočtu dvoufrekvenčního příjmu), spolehlivost 0,95. Vstupní limity: nejvýše 2000 družic nad horizontem (systémová tabulka žádající více je odmítnuta dříve, než je sestavena) a 16 hodin přijímače.

Datovaná obloha ze sad elementů. "tle" přijímá text dvouřádkových sad elementů (řádek s názvem před každou sadou je nepovinný; nejvýše 4 MiB, vstupní limit), propagovaný SGP4 enginu (WGS-72, propagátor, který používá orbit-real-tle) do "epoch" plus time_s, převedený do zemského pevného systému s UT1 převzatým jako UTC a bez pohybu pólu a viděný z site. "epoch" je UTC ISO 8601 (2026-06-07T12:00:00Z) a datuje pouze sady elementů (předvolby datum nenesou, takže epoch bez tle je odmítnuto); "tle_system" je označuje pro hodiny podle systému (výchozí TLE). Každý výsledek říká, jaká obloha to je, v sky_source a sky_statement:

sky_source Obloha
presets předvolby konstelací enginu: reprezentativní geometrie
tle-at-epoch sady elementů propagované k uvedené epoše: obloha, kterou tyto sady elementů k té epoše dávají, nikoli její měření (jejich vlastní přesnost je přesnost SGP4 a stáří sad)
tle-at-element-epoch bez epoch: sady elementů propagované k vlastní epoše nejnovější sady plus time_s, reprezentativní obloha
satellites družice zadané přímo, tak, jak jsou uvedeny

Směs je spojí pomocí +. epoch_utc je okamžik, ke kterému byly sady elementů propagovány, a tle_skipped jmenuje, co z textu nebylo použito, s důvodem: poškozené nebo osiřelé řádky sad elementů (s čísly řádků), sady, které parser odmítl, a sady, které SGP4 nemohl k tomu okamžiku propagovat (zanikly nebo jsou za svými mezemi); celkem nejvýše 100 záznamů, poté jeden poslední záznam počítající zbytek. Prázdný seznam systems nepřidává žádné předvolby. Skyplot uvádí svůj základ v patičce.

Jedno jádro. Kofaktorová matice je orbit::cofactor_from_los, sestavení návrhové matice a Gaussova–Jordanova inverze za orbit::dop. orbit::dop_cov zpřístupňuje kovarianci a orbit::dop je její redukce, takže skaláry VALIDATED zůstávají nezměněny a stále je zafixuje tests/dop_reference.rs. Neexistuje druhá implementace DOP.

Elipsa. Poloosy k σ √λ pro vlastní čísla λ východo-severního bloku, s k = √(−2 ln(1 − p)) (√5.991 = 2.448 při 95 %, 1 při 39,35 %) a azimut hlavní osy ½ atan2(2 Q_EN, Q_NN − Q_EE) v [0, 180) od severu.

Povrch Vstupní body
CLI kshana sky <request.json|toml> nebo kshana sky --site <lat,lon[,h]> (--systems <a,b> | --tle <file>) [--epoch] [--tle-system] [--time] [--mask] [--skyline-preset] [--uere] [--clock], s --monte-carlo <n> --seed <s> nebo --svg; kshana skyline --preset <name> | --presets | --profile <file>
Rust kshana::geometry::{sky_geometry, sky_monte_carlo, skyline_presets, skyline_profile, skyplot_svg}, kshana::surface::* týchž názvů
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 nebo skyline_preset); přes MCP žádné Monte Carlo (hromadné vzorky, které má agent shrnout, nikoli přenášet)

Každý výsledek nese label (MODELLED), statement (geometrie za uvedeného modelu chyb: nezávislé, stejné gaussovské chyby vzdálenosti s nulovou střední hodnotou; nikoli předpověď skutečné chyby přijímače, která má také systematické chyby, vícecestné šíření a chyby bez přímé viditelnosti; nikoli mez integrity) a poradní sdělení: Software pouze poradního charakteru, nikoli typově schválené navigační zařízení (IEC 61108, IEC 61162): za navigaci plavidla zůstává odpovědný provozovatel.

Důkazy#

Pět řádků registru (docs/VERIFICATION-MATRIX.md), tak jak je vymezuje návrhová poznámka:

Řádek Stav Orákulum
Maska obzoru závislá na azimutu: viditelná množina, azimut a elevace a DOP pod maskou VALIDATED Orekit 12,2 (úhly pohledu TopocentricFrame, ElevationMask) s gnss_lib_py 1.0.4 (get_dop a matice DOP), předregistrováno v xval/orekit-skyline/PREREGISTRATION.md (commit e4b9d912) dříve, než byl kterýkoli z nich spuštěn: 1173 úhlů pohledu na šesti stanovištích a ve čtyřech epochách, šest tabulek, 142 viditelných množin; nejhorší elevace 1.3e-13°, azimut 2.3e-13°, maska 1.1e-12° oproti 1e-9°; shodné viditelné množiny, žádná v pásmu hranice; DOP 3.3e-13 relativně a kofaktor 6.6e-13 měřítka matice oproti 1e-9. Rozsah: tabulkové masky, geodetické úhly pohledu, maskovaná množina a její DOP a kofaktor při společných hodinách.
Redukce městského kaňonu, sektorů a terénu na tabulku MODELLED ručně vypočtené hodnoty; výše uvedené porovnání čte jejich tabulky jako vstupy a nekontroluje je
Předvolby skyline MODELLED žádné: zvolené, uvedené rozměry (kontrolované jen proti sobě samým)
Horizontální chybová elipsa a kofaktor pro jednotlivé systémy z kovariance geometrie VALIDATED numpy 2.5.4 linalg.inv a linalg.eigh (standardní P2) na 142 uložených viditelných množinách, při společných hodinách i s jedněmi hodinami na systém, předregistrováno v xval/numpy-ellipse/PREREGISTRATION.md (commit 0bbeeaee): 270 případů, osy 5.1e-13 relativně, orientace 5.3e-12°, kofaktor 1.0e-12 měřítka matice, oproti 1e-9 a 1e-6°
Funkce geometrie oblohy MODELLED složení: propagace předvolby na reprezentativní oblohu, mrak Monte Carlo (zkontrolovaný proti geometrii, z níž vzorkuje), rozhraní

Nepřítomnost sekce [skyline] se kontroluje bajt po bajtu proti výstupům 0.35.0, což ukazuje zpětnou kompatibilitu a nic neověřuje. gnss_lib_py aplikuje pouze jedinou elevační masku, takže je zde orákulem pro DOP, nikoli orákulem pro masku.

Co skyline nemodeluje: difrakci přes hranu stěny, odrazy a signály bez přímé viditelnosti, které může skutečný přijímač stále sledovat (zahazují se, nezhoršují), částečnou průhlednost (příhradový jeřáb je v celém svém sektoru neprůhledný), terén za zadanými body a zakřivení Země uvnitř tvarů kaňonu a sektoru.