Single-frequency ionospheric group-delay corrections.
Two models are exposed over the astrodynamics-gnss crate: the GPS broadcast
Klobuchar model (eight alpha/beta coefficients, IS-GPS-200), and an IONEX
vertical-TEC-grid slant delay (single-layer model). Both return the group
delay in positive meters.
This is the ionosphere correction for a GNSS signal. It is not
Orbis.Atmosphere, which is NRLMSISE-00 neutral-atmosphere mass density for
drag — a different quantity entirely.
Sign convention
The returned delay is a group delay and is positive: it increases the
measured pseudorange (the signal arrives later than vacuum geometry would
predict). The carrier-phase advance is the negation of this value. The
ionosphere is dispersive, so the delay reported on a carrier other than the
model's native L1 is the L1 delay scaled by (f_L1 / f)^2; pass the carrier
via frequency_hz.
Units at the boundary
Public inputs are in degrees (_deg) and meters/hertz, per the Orbis naming
convention; the radians the crate uses internally are converted here. Latitude
is positive north, longitude positive east, azimuth clockwise from north.
Summary
Functions
IONEX vertical-TEC-grid slant ionospheric group delay, scaled to frequency_hz.
GPS broadcast Klobuchar L1 ionospheric group delay, scaled to frequency_hz.
Load and parse an IONEX file into a product handle.
Parse an in-memory IONEX byte buffer into a product handle.
Functions
@spec ionex_slant_delay( reference(), number(), number(), number(), number(), NaiveDateTime.t() | tuple(), number() ) :: {:ok, float()} | {:error, term()}
IONEX vertical-TEC-grid slant ionospheric group delay, scaled to frequency_hz.
handle is a parsed-IONEX reference from parse_ionex/1 or load_ionex/1.
The receiver geodetic latitude/longitude and the satellite azimuth/elevation
are in degrees; epoch is a NaiveDateTime or {{y, m, d}, {h, min, s}}
tuple (the pierce point rides on the IONEX shell, so the receiver height is not
used). Returns {:ok, delay_m} (positive meters) or {:error, reason}.
@spec klobuchar_delay( map(), number(), number(), number(), number(), NaiveDateTime.t() | tuple(), number() ) :: {:ok, float()} | {:error, term()}
GPS broadcast Klobuchar L1 ionospheric group delay, scaled to frequency_hz.
params carries the eight broadcast coefficients as
%{alpha: {a0, a1, a2, a3}, beta: {b0, b1, b2, b3}} (or lists). The receiver
geodetic latitude/longitude and the satellite azimuth/elevation are in
degrees; epoch is a NaiveDateTime or {{y, m, d}, {h, min, s}} tuple in
GPS time. Returns {:ok, delay_m} (positive meters) or {:error, reason}.
Load and parse an IONEX file into a product handle.
Returns {:ok, reference()} or {:error, reason}.
Parse an in-memory IONEX byte buffer into a product handle.
Returns {:ok, reference()} or {:error, reason}. The buffer is parsed
exactly once; the parsed grid is held as a resource handle.