1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// SPDX-License-Identifier: AGPL-3.0-only
//! LEO-PNT link physics: the public building blocks of the `leo-pass` scenario kind
//! ([`crate::leo_pass`]), callable on their own by any other module.
//!
//! LEO-PNT is positioning, navigation and timing from satellites in low Earth orbit. The
//! engine treats it as a generic problem: any constellation (Walker, TLE, explicit elements or
//! a designed single pass), any signal design and any band. Named systems are optional data in
//! [`presets`], each with its source.
//!
//! * [`geometry`]: satellite and user kinematics, look angles, range rate, Doppler and Doppler
//! rate (closed form, with a numerical check), pass design and the static-user Doppler
//! envelope of a circular orbit.
//! * [`antenna`]: satellite transmit patterns (isoflux, Gaussian beam, flat), the user patch
//! pattern and polarisation mismatch.
//! * [`itu`]: ITU-R P.676 gaseous attenuation, P.838 and P.618 rain attenuation, P.618
//! tropospheric scintillation and P.2109 building entry loss.
//! * [`iono`]: first-order ionospheric group delay per band, slant TEC (total electron content)
//! below a LEO satellite, the ionosphere-free combination and its noise amplification.
//! * [`energy`]: time to first fix, energy per fix and battery life for a low-power receiver.
//! * [`presets`]: named systems (generic multi-band, generic C band, Xona Pulsar, Iridium STL,
//! Starlink as a signal of opportunity, CentiSpace, Celeste IOD) and the MEO GNSS comparison
//! signals.
/// Speed of light (m/s).
pub const C_M_S: f64 = 299_792_458.0;
/// Earth gravitational parameter (m³/s²), [`crate::forces::MU_EARTH`].
pub const MU_EARTH: f64 = crateMU_EARTH;
/// Earth equatorial radius (m), [`crate::forces::RE_EARTH`].
pub const RE_EARTH: f64 = crateRE_EARTH;
/// Earth rotation rate (rad/s), [`crate::forces::EARTH_ROTATION_RATE`].
pub const OMEGA_EARTH: f64 = crateEARTH_ROTATION_RATE;
/// Earth second zonal harmonic, the first entry of [`crate::forces::EARTH_ZONALS_J2_J6`].
pub const J2_EARTH: f64 = crateEARTH_ZONALS_J2_J6;
/// Boltzmann's constant in decibel form (dBW/K/Hz), [`crate::linkbudget::BOLTZMANN_DBW_PER_K_PER_HZ`].
pub const BOLTZMANN_DB: f64 = crateBOLTZMANN_DBW_PER_K_PER_HZ;
/// Free-space path loss (dB) at range `range_m` and carrier `f_hz`: the Friis loss
/// `20·log10(4πR/λ)` of [`crate::linkbudget::free_space_loss_db`], equal to
/// `32.45 + 20·log10(R/km) + 20·log10(f/MHz)`.
/// System noise temperature (K) of a receiver: antenna temperature plus the receiver's
/// `290·(10^(NF/10) − 1)`. The antenna temperature is a ground-and-sky floor `t_floor_k`
/// plus the emission of an absorbing atmosphere of attenuation `atm_db` at mean radiating
/// temperature `t_mr_k` (ITU-R P.618-14 § 3: `T_mr·(1 − 10^(−A/10))`), plus the cosmic
/// background of 2.7 K attenuated by the same path.
/// Carrier-to-noise density (dB-Hz) from received power `c_dbw`, system temperature `tsys_k`
/// and implementation loss `impl_db`: `C − 10·log10(k·T) − L`.