Closed-form GNSS signal spectrum and tracking metrics.
This module is a thin Elixir boundary over the core signal-analysis formulas.
Modulations are plain maps built by bpsk/1 and boc_sine/2; metric calls
return {:ok, value} or {:error, reason}.
Summary
Types
DLL thermal-noise options.
DLL jitter result.
Navigation-signal modulation descriptor.
Multipath-envelope options.
One multipath-envelope point.
Functions
Build a sine-phased BOC(m,n) modulation descriptor.
Build a BPSK(n) modulation descriptor.
Return early-late DLL thermal-noise jitter.
Return the DLL lower bound for code-delay tracking jitter.
Return effective C/N0 after finite-band interference terms.
Return the fraction of total signal power inside a two-sided receiver bandwidth.
Return a one-path early-late multipath envelope on the supplied delay grid.
Return normalized PSD values in 1/Hz at one offset or a list of offsets.
Return RMS bandwidth over a two-sided receiver bandwidth, in hertz.
Return spectral separation coefficient in decibel-hertz.
Return spectral separation coefficient in hertz.
Types
@type dll_options() :: %{ cn0_db_hz: number(), loop_bandwidth_hz: number(), integration_time_s: number(), correlator_spacing_chips: number(), receiver_bandwidth_hz: number() }
DLL thermal-noise options.
DLL jitter result.
@type modulation() :: %{kind: :bpsk, order: number()} | %{kind: :boc_sine, m: number(), n: number()}
Navigation-signal modulation descriptor.
@type multipath_options() :: %{ multipath_to_direct_ratio: number(), correlator_spacing_chips: number(), receiver_bandwidth_hz: number() }
Multipath-envelope options.
@type multipath_point() :: %{ delay_chips: float(), delay_s: float(), in_phase_chips: float(), in_phase_s: float(), in_phase_m: float(), anti_phase_chips: float(), anti_phase_s: float(), anti_phase_m: float(), running_average_chips: float(), running_average_s: float(), running_average_m: float() }
One multipath-envelope point.
Functions
@spec boc_sine(number(), number()) :: modulation()
Build a sine-phased BOC(m,n) modulation descriptor.
@spec bpsk(number()) :: modulation()
Build a BPSK(n) modulation descriptor.
@spec dll_jitter(modulation(), dll_options(), :coherent | :non_coherent) :: {:ok, jitter()} | {:error, term()}
Return early-late DLL thermal-noise jitter.
processing is :coherent or :non_coherent.
@spec dll_lower_bound(modulation(), dll_options()) :: {:ok, jitter()} | {:error, term()}
Return the DLL lower bound for code-delay tracking jitter.
@spec effective_cn0_degradation(modulation(), number(), number(), [map()]) :: {:ok, %{ effective_cn0_hz: float(), effective_cn0_db_hz: float(), degradation_db: float() }} | {:error, term()}
Return effective C/N0 after finite-band interference terms.
Each interference is a map with :modulation and
:power_ratio_to_carrier.
@spec fraction_power(modulation(), number()) :: {:ok, float()} | {:error, term()}
Return the fraction of total signal power inside a two-sided receiver bandwidth.
@spec multipath_envelope(modulation(), multipath_options(), [number()]) :: {:ok, [multipath_point()]} | {:error, term()}
Return a one-path early-late multipath envelope on the supplied delay grid.
Return normalized PSD values in 1/Hz at one offset or a list of offsets.
@spec rms_bandwidth_hz(modulation(), number()) :: {:ok, float()} | {:error, term()}
Return RMS bandwidth over a two-sided receiver bandwidth, in hertz.
@spec ssc_db_hz(modulation(), modulation(), number()) :: {:ok, float()} | {:error, term()}
Return spectral separation coefficient in decibel-hertz.
@spec ssc_hz(modulation(), modulation(), number()) :: {:ok, float()} | {:error, term()}
Return spectral separation coefficient in hertz.