Canonical GNSS carrier-frequency lookups.
This module exposes the same carrier table used by the core GNSS algorithms.
Fixed-frequency lookups use canonical band atoms such as :l1, :e5a, or
:b3i. RINEX observation-band lookups use the one-character RINEX band digit
and accept a GLONASS FDMA channel for G1/G2. Full observation-code lookups
additionally accept the RINEX version so version-sensitive signal labels are
resolved by the core policy.
Frequencies are returned in hertz and wavelengths in metres. All public
functions return {:ok, value} or {:error, reason} and never raise for
unknown systems or bands.
Summary
Types
Canonical carrier band.
Frequency lookup error.
Full RINEX observation code such as "C1C" or "L1C".
One-character RINEX observation band digit, for example "1".
GNSS system letter such as "G", "E", "C", or "R".
Functions
Return the fixed carrier frequency for system and canonical band.
Return the standard dual-frequency ionosphere-free pair for system.
Return a RINEX observation-band frequency in hertz.
Return a RINEX observation-band wavelength in metres.
Return the frequency for a full RINEX observation code in hertz.
Return the wavelength for a full RINEX observation code in metres.
Return the fixed carrier wavelength for system and canonical band.
Types
@type carrier_band() ::
:l1
| :l2
| :l5
| :e1
| :e5a
| :e5b
| :e5
| :e6
| :b1c
| :b1i
| :b2a
| :b2b
| :b2
| :b3i
| :g1
| :g2
Canonical carrier band.
Supported fixed-frequency bands are :l1, :l2, :l5, :e1, :e5a,
:e5b, :e5, :e6, :b1c, :b1i, :b2a, :b2b, :b2, and :b3i.
GLONASS :g1 and :g2 are channel-derived and are available through the
RINEX band functions.
@type error() :: {:unknown_system, term()} | {:unknown_band, term(), term()} | {:no_default_pair, term()} | {:missing_glonass_channel, term(), term()} | {:invalid_channel, term()} | {:unknown_observation_code, term(), term(), term()}
Frequency lookup error.
@type observation_code() :: String.t()
Full RINEX observation code such as "C1C" or "L1C".
@type rinex_band() :: String.t()
One-character RINEX observation band digit, for example "1".
@type system() :: String.t()
GNSS system letter such as "G", "E", "C", or "R".
Functions
@spec carrier_frequency_hz(system(), carrier_band()) :: {:ok, float()} | {:error, error()}
Return the fixed carrier frequency for system and canonical band.
GLONASS G1/G2 frequencies depend on the satellite FDMA channel and therefore
are not fixed carrier frequencies. Use rinex_band_frequency_hz/3 with a
channel for those carriers.
@spec default_pair(system()) :: {:ok, {carrier_band(), carrier_band()}} | {:error, error()}
Return the standard dual-frequency ionosphere-free pair for system.
GPS, Galileo, and BeiDou have standard pairs. GLONASS FDMA frequencies are channel-derived, so no constellation-wide default pair is returned.
@spec rinex_band_frequency_hz(system(), rinex_band(), integer() | nil) :: {:ok, float()} | {:error, error()}
Return a RINEX observation-band frequency in hertz.
band is the RINEX band digit from an observation code. For GLONASS band
"1" (G1) and "2" (G2), pass the parsed FDMA channel from the observation
file's GLONASS SLOT / FRQ # header records.
@spec rinex_band_wavelength_m(system(), rinex_band(), integer() | nil) :: {:ok, float()} | {:error, error()}
Return a RINEX observation-band wavelength in metres.
This uses the same system, band, and GLONASS-channel rules as
rinex_band_frequency_hz/3.
@spec rinex_observation_frequency_hz( system(), observation_code(), number(), integer() | nil ) :: {:ok, float()} | {:error, error()}
Return the frequency for a full RINEX observation code in hertz.
The core policy uses both the observation code and rinex_version, so this
preserves distinctions that a band-only lookup cannot represent (for
example BeiDou C1I in RINEX 3.02 versus later RINEX 3 versions). For
GLONASS G1/G2 codes, pass the satellite's FDMA channel.
@spec rinex_observation_wavelength_m( system(), observation_code(), number(), integer() | nil ) :: {:ok, float()} | {:error, error()}
Return the wavelength for a full RINEX observation code in metres.
This is the version-aware counterpart to rinex_band_wavelength_m/3; it
delegates the observation-code policy and wavelength calculation to core.
@spec wavelength_m(system(), carrier_band()) :: {:ok, float()} | {:error, error()}
Return the fixed carrier wavelength for system and canonical band.