Sidereal repeat-period helpers and residual filtering.
Durations cross the public Elixir boundary as seconds. Residual samples are unitless to the filter, so callers may pass metres, cycles, or another scalar residual unit as long as each series uses one unit consistently.
Summary
Functions
Filter a residual series with a supplied repeat period in seconds.
Compute a broadcast-derived per-satellite orbit repeat lag in seconds.
Score repeating components at candidate periods.
Return the default constellation repeat period in seconds.
Types
@type constellation() :: :gps | :glonass | :galileo | :beidou | :qzss | :navic | :sbas | String.t()
@type error_reason() :: :invalid_input | :no_broadcast_record | :unsupported_constellation | term()
@type satellite_id() :: String.t() | {String.t(), pos_integer()} | {atom(), pos_integer()}
Functions
@spec filter([number()], number(), keyword() | Sidereon.Sidereal.FilterOptions.t()) :: {:ok, Sidereon.Sidereal.FilterOutput.t()} | {:error, error_reason()}
Filter a residual series with a supplied repeat period in seconds.
@spec orbit_repeat_lag(Sidereon.GNSS.Broadcast.t(), satellite_id(), number()) :: {:ok, float()} | {:error, error_reason()}
Compute a broadcast-derived per-satellite orbit repeat lag in seconds.
@spec periodicity_strength([number()], [number()], keyword()) :: {:ok, [{float(), float()}]} | {:error, error_reason()}
Score repeating components at candidate periods.
Returns {period_s, strength} pairs, where strength is in [0, 1].
@spec repeat_period(constellation()) :: float()
Return the default constellation repeat period in seconds.