Orbis.GNSS.QC (Orbis v0.31.0)

Copy Markdown View Source

Measurement-quality control for single-point positioning.

The numerical modeling and FDE orchestration live in the astrodynamics-gnss Rust core. This module keeps the Elixir API shape, normalizes options and epochs for the NIF, maps errors, and decodes the unchanged public result maps.

Summary

Types

The result of raim/2.

A {satellite_id, elevation_deg} or {satellite_id, elevation_deg, cn0_dbhz} entry.

Functions

Chi-square inverse CDF (quantile).

Fault detection and exclusion: solve, run RAIM, exclude the worst satellite, and repeat until the measurement set is self-consistent or the exclusion budget is exhausted.

Pseudorange measurement variance (m^2) from satellite elevation.

Residual-based RAIM: a chi-square goodness-of-fit test on a positioning solution.

Build a satellite => sigma_m map for a list of weight entries.

Build a satellite => inverse_variance_weight map for a list of weight entries.

Types

raim_result()

@type raim_result() :: %{
  fault_detected?: boolean(),
  test_statistic: float(),
  threshold: float() | nil,
  dof: integer(),
  testable?: boolean(),
  normalized_residuals: %{required(String.t()) => float()},
  worst_sat: String.t() | nil
}

The result of raim/2.

weight_entry()

@type weight_entry() :: {String.t(), number()} | {String.t(), number(), number()}

A {satellite_id, elevation_deg} or {satellite_id, elevation_deg, cn0_dbhz} entry.

Functions

chi2_inv(p, k)

@spec chi2_inv(float(), pos_integer()) :: float()

Chi-square inverse CDF (quantile).

fde(source, observations, epoch, opts \\ [])

@spec fde(
  term(),
  [Orbis.GNSS.Positioning.observation()],
  Orbis.GNSS.Positioning.epoch(),
  keyword()
) ::
  {:ok,
   %{
     solution: Orbis.GNSS.Positioning.Solution.t(),
     excluded: [{String.t(), :raim_excluded}],
     iterations: non_neg_integer()
   }}
  | {:error, {:fault_unresolved, float()}}
  | {:error, term()}

Fault detection and exclusion: solve, run RAIM, exclude the worst satellite, and repeat until the measurement set is self-consistent or the exclusion budget is exhausted.

pseudorange_variance(elevation_deg, opts \\ [])

@spec pseudorange_variance(
  number(),
  keyword()
) :: float() | {:error, :invalid_elevation | :missing_cn0}

Pseudorange measurement variance (m^2) from satellite elevation.

Returns a float, {:error, :invalid_elevation} for elevations at or below the horizon, or {:error, :missing_cn0} when model: :elevation_cn0 is selected without :cn0.

raim(solution, opts \\ [])

Residual-based RAIM: a chi-square goodness-of-fit test on a positioning solution.

sigmas(entries, opts \\ [])

@spec sigmas(
  [weight_entry()],
  keyword()
) :: %{required(String.t()) => float()}

Build a satellite => sigma_m map for a list of weight entries.

weight_vector(entries, opts \\ [])

@spec weight_vector(
  [weight_entry()],
  keyword()
) :: %{required(String.t()) => float()}

Build a satellite => inverse_variance_weight map for a list of weight entries.