Sidereon.ClockStability (Sidereon v0.14.0)

Copy Markdown View Source

Allan-family clock-stability estimators.

The functions in this module delegate to sidereon-core's IEEE-1139 Allan, modified Allan, Hadamard, and time-deviation estimators. Phase deviations are in seconds, fractional-frequency samples are dimensionless, and averaging times are seconds.

Summary

Functions

Plain non-overlapping Allan deviation for explicit averaging factors.

Compute a configured set of Allan-family curves.

Overlapping Hadamard deviation for explicit averaging factors.

Modified Allan deviation for explicit averaging factors.

Fully overlapping Allan deviation for explicit averaging factors.

Extract RINEX receiver-clock phase deviations in seconds.

Time deviation for explicit averaging factors.

Types

allan_error()

@type allan_error() ::
  :empty_series
  | :invalid_tau0
  | :no_estimators
  | :empty_tau_grid
  | :invalid_averaging_factor
  | :too_few_samples
  | :non_finite_sample
  | :gap
  | :non_finite_tau
  | :non_finite_deviation
  | term()

estimator()

@type estimator() :: :adev | :overlapping_adev | :mdev | :hdev | :tdev

gap_policy()

@type gap_policy() :: :reject | :omit_terms

series()

@type series() ::
  [number()]
  | {:phase_seconds, [number()]}
  | {:fractional_frequency, [number()]}
  | {:phase_seconds_with_gaps, [number() | nil]}
  | {:fractional_frequency_with_gaps, [number() | nil]}

tau_grid()

@type tau_grid() :: :octave | :all | {:explicit, [pos_integer()]}

Functions

allan_deviation(series, tau0_s, averaging_factors)

@spec allan_deviation(series(), number(), [pos_integer()]) ::
  {:ok, Sidereon.ClockStability.Curve.t()} | {:error, allan_error()}

Plain non-overlapping Allan deviation for explicit averaging factors.

tau0_s is the base sample interval in seconds. averaging_factors are the integer m values, so each output tau_s is m * tau0_s.

compute_allan_deviations(series, tau0_s, opts \\ [])

@spec compute_allan_deviations(series(), number(), keyword()) ::
  {:ok, Sidereon.ClockStability.Curves.t()} | {:error, allan_error()}

Compute a configured set of Allan-family curves.

Options:

  • :estimators - :standard for OADEV, MDEV, HDEV, and TDEV, :all, :none, a list of estimator atoms, or a map of estimator booleans.
  • :tau_grid - :octave, :all, or {:explicit, factors}. Averaging times are seconds.
  • :gap_policy - :reject or :omit_terms for gapped series.

hadamard_deviation(series, tau0_s, averaging_factors)

@spec hadamard_deviation(series(), number(), [pos_integer()]) ::
  {:ok, Sidereon.ClockStability.Curve.t()} | {:error, allan_error()}

Overlapping Hadamard deviation for explicit averaging factors.

tau0_s and returned tau_s values are seconds.

modified_adev(series, tau0_s, averaging_factors)

@spec modified_adev(series(), number(), [pos_integer()]) ::
  {:ok, Sidereon.ClockStability.Curve.t()} | {:error, allan_error()}

Modified Allan deviation for explicit averaging factors.

tau0_s and returned tau_s values are seconds.

overlapping_adev(series, tau0_s, averaging_factors)

@spec overlapping_adev(series(), number(), [pos_integer()]) ::
  {:ok, Sidereon.ClockStability.Curve.t()} | {:error, allan_error()}

Fully overlapping Allan deviation for explicit averaging factors.

tau0_s and returned tau_s values are seconds.

receiver_clock_phase_deviations(observations)

@spec receiver_clock_phase_deviations(Sidereon.GNSS.RINEX.Observations.t()) :: [
  float() | nil
]

Extract RINEX receiver-clock phase deviations in seconds.

Event epochs are returned as nil gaps. The result can be passed as {:phase_seconds_with_gaps, values} to compute_allan_deviations/3.

time_deviation(series, tau0_s, averaging_factors)

@spec time_deviation(series(), number(), [pos_integer()]) ::
  {:ok, Sidereon.ClockStability.Curve.t()} | {:error, allan_error()}

Time deviation for explicit averaging factors.

Returned deviation values are seconds.