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.
Identify power-law clock noise from supplied ADEV and MDEV curves.
Overlapping Hadamard deviation for explicit averaging factors.
Modified Allan deviation for explicit averaging factors.
Fully overlapping Allan deviation for explicit averaging factors.
Return the exact Allan-family log-log slope for a power-law noise type.
Extract RINEX receiver-clock phase deviations in seconds.
Time deviation for explicit averaging factors.
Types
@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 | :invalid_options | :invalid_curve | term()
@type estimator() :: :adev | :overlapping_adev | :mdev | :hdev | :tdev
@type gap_policy() :: :reject | :omit_terms
@type power_law_noise_type() ::
:random_walk_fm | :flicker_fm | :white_fm | :flicker_pm | :white_pm
@type tau_grid() :: :octave | :all | {:explicit, [pos_integer()]}
Functions
@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.
@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-:standardfor 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-:rejector:omit_termsfor gapped series.
@spec fit_power_law_noise( Sidereon.ClockStability.Curve.t(), Sidereon.ClockStability.Curve.t(), keyword() | Sidereon.ClockStability.PowerLawNoiseOptions.t() ) :: {:ok, Sidereon.ClockStability.PowerLawNoiseFit.t()} | {:error, allan_error()}
Identify power-law clock noise from supplied ADEV and MDEV curves.
@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.
@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.
@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.
@spec power_law_slope(power_law_noise_type(), :adev | :overlapping_adev | :mdev) :: float()
Return the exact Allan-family log-log slope for a power-law noise type.
@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.
@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.