Sidereon.Estimation.TrackFilter (Sidereon v0.19.1)

Copy Markdown View Source

Stateful no-IMU constant-velocity track filter.

The native handle is mutated by prediction and update calls. Each call returns the corresponding state, innovation, update, or gating report as Elixir structs.

Summary

Functions

Return the white acceleration variance spectral density in m^2 / s^3.

Return the position dimension.

Build a filter from a position fix and uncertain zero initial velocity.

Build a stateful track filter from a validated config.

Compute the position-only innovation without applying the observation.

Predict the filter forward by dt_s.

Predict forward and record the interval for RTS smoothing.

Record the current predicted state as an epoch without a measurement update.

Return the current filter state.

Compute the full state innovation without applying the observation.

Apply a position-only observation with covariance weighting.

Apply a position-only observation only when it passes the NIS gate.

Apply a gated position-only update and record accepted or rejected epochs.

Apply a position-only update and record the epoch for RTS smoothing.

Apply a position-and-velocity observation with covariance weighting.

Types

t()

@type t() :: %Sidereon.Estimation.TrackFilter{handle: reference()}

Functions

acceleration_variance_spectral_density_m2_s3(track_filter)

@spec acceleration_variance_spectral_density_m2_s3(t()) ::
  {:ok, float()} | {:error, term()}

Return the white acceleration variance spectral density in m^2 / s^3.

dimension(track_filter)

@spec dimension(t()) :: {:ok, pos_integer()} | {:error, term()}

Return the position dimension.

from_position(opts)

@spec from_position(keyword() | map()) :: {:ok, t()} | {:error, term()}

Build a filter from a position fix and uncertain zero initial velocity.

new(config)

@spec new(Sidereon.Estimation.TrackFilterConfig.t()) :: {:ok, t()} | {:error, term()}

Build a stateful track filter from a validated config.

position_innovation(track_filter, position_m, covariance_m2)

@spec position_innovation(t(), [number()] | tuple(), [[number()]]) ::
  {:ok, Sidereon.Estimation.TrackInnovation.t()} | {:error, term()}

Compute the position-only innovation without applying the observation.

predict(track_filter, dt_s)

@spec predict(t(), number()) ::
  {:ok, Sidereon.Estimation.TrackPrediction.t()} | {:error, term()}

Predict the filter forward by dt_s.

predict_recorded(track_filter, dt_s, track_rts_history_builder)

@spec predict_recorded(t(), number(), Sidereon.Estimation.TrackRtsHistoryBuilder.t()) ::
  {:ok, Sidereon.Estimation.TrackPrediction.t()} | {:error, term()}

Predict forward and record the interval for RTS smoothing.

record_prediction_only(track_filter, track_rts_history_builder)

@spec record_prediction_only(t(), Sidereon.Estimation.TrackRtsHistoryBuilder.t()) ::
  :ok | {:error, term()}

Record the current predicted state as an epoch without a measurement update.

state(track_filter)

@spec state(t()) :: {:ok, Sidereon.Estimation.TrackState.t()} | {:error, term()}

Return the current filter state.

state_innovation(track_filter, state, covariance)

@spec state_innovation(t(), [number()] | tuple(), [[number()]]) ::
  {:ok, Sidereon.Estimation.TrackInnovation.t()} | {:error, term()}

Compute the full state innovation without applying the observation.

update_position(track_filter, position_m, covariance_m2)

@spec update_position(t(), [number()] | tuple(), [[number()]]) ::
  {:ok, Sidereon.Estimation.TrackUpdate.t()} | {:error, term()}

Apply a position-only observation with covariance weighting.

update_position_gated(track_filter, position_m, covariance_m2, confidence)

@spec update_position_gated(t(), [number()] | tuple(), [[number()]], number()) ::
  {:ok, Sidereon.Estimation.TrackGatedUpdate.t()} | {:error, term()}

Apply a position-only observation only when it passes the NIS gate.

update_position_gated_recorded(track_filter, position_m, covariance_m2, confidence, track_rts_history_builder)

@spec update_position_gated_recorded(
  t(),
  [number()] | tuple(),
  [[number()]],
  number(),
  Sidereon.Estimation.TrackRtsHistoryBuilder.t()
) :: {:ok, Sidereon.Estimation.TrackGatedUpdate.t()} | {:error, term()}

Apply a gated position-only update and record accepted or rejected epochs.

update_position_recorded(track_filter, position_m, covariance_m2, track_rts_history_builder)

@spec update_position_recorded(
  t(),
  [number()] | tuple(),
  [[number()]],
  Sidereon.Estimation.TrackRtsHistoryBuilder.t()
) :: {:ok, Sidereon.Estimation.TrackUpdate.t()} | {:error, term()}

Apply a position-only update and record the epoch for RTS smoothing.

update_state(track_filter, state, covariance)

@spec update_state(t(), [number()] | tuple(), [[number()]]) ::
  {:ok, Sidereon.Estimation.TrackUpdate.t()} | {:error, term()}

Apply a position-and-velocity observation with covariance weighting.