FirstOrderGaussMarkov#

class FirstOrderGaussMarkov(state_array: StateArray, spacecraft: Spacecraft, base_frame: Frame, default_beta: ndarray | None = None)#

Bases: DynamicModel

Models a first-order exponentially correlated Gauss-Markov acceleration process.

An empirical acceleration state \(\mathbf{a}_{gm}\) is added to the equations of motion and evolves according to exponential decay:

\[\dot{\mathbf{a}}_{gm} = -\mathbf{B}\,\mathbf{a}_{gm}\]

where \(\mathbf{B} = \mathrm{diag}(\beta_x, \beta_y, \beta_z)\) with \(\beta_i = 1/\tau_i\) being the inverse correlation times. The spacecraft translational dynamics become \(\ddot{\mathbf{r}} = \mathbf{a}_{\mathrm{other}} + \mathbf{a}_{gm}\). The \(\beta_i\) can be estimated as static parameters via ("beta_fogm", spice_id) state entries.

In deterministic propagation only the drift term is used:

\[\dot{\mathbf a}_{gm} = -\mathbf B \, \mathbf a_{gm}\]

The continuous-time process noise intensity consistent with the stationary first-order Gauss-Markov model is:

\[q_i = 2 \, \beta_i \, \sigma_i^2\]

where \(\sigma_i^2\) is the stationary variance of the corresponding acceleration component.

Parameters:
  • state_array (StateArray) – State definition containing the a_fogm Gauss-Markov acceleration state and, optionally, the beta_fogm inverse correlation coefficients.

  • spacecraft (Spacecraft) – Spacecraft object associated with the propagated body.

  • base_frame (Frame) – Reference frame of the propagator.

  • default_beta (np.ndarray, optional) – Default inverse correlation coefficients \([\beta_x, \beta_y, \beta_z]\) in 1/TU. Used when beta_fogm is not found in the state array. Defaults to isotropic unit decay [1, 1, 1].

Notes

The state vector must contain entries of the form:

  • ('a_fogm', 3, 'estimated', 'dynamic', owner, value)

Optionally, if the inverse correlation times are themselves estimated:

  • ('beta_fogm', 3, 'estimated', 'static', owner, value)

The model is linear in \(\mathbf a_{gm}\) for fixed \(\mathbf B\). If process noise is needed in a filter, this class provides the deterministic drift and Jacobians; the user should inject the corresponding process noise covariance separately.

See also

scarabaeus.StateArray

State vector used to initialize the model.

scarabaeus.Propagator

Propagator that integrates the augmented state.

scarabaeus.DynamicModel

Abstract base class for all force model components.

scarabaeus.PiecewiseFirstOrderGaussMarkov

Batch-segmented variant of this model.

References

Maybeck, P. S. (1979). Stochastic Models, Estimation, and Control. Brown, R. G., & Hwang, P. Y. C. (2012). Introduction to Random Signals and Applied Kalman Filtering.

Examples

import scarabaeus as scb

state = [
    ("position", 3, "estimated", "dynamic", sc, [7000, 0, 0]),
    ("velocity", 3, "estimated", "dynamic", sc, [0, 7.5, 0]),
    ("a_fogm", 3, "estimated", "dynamic", sc, [1e-9, 0.0, 0.0]),
    ("beta_fogm", 3, "estimated", "static", sc, [1/3600, 1/3600, 1/3600]),
]

state_vector = scb.StateArray(
    epoch=epochs[0],
    frame="J2000",
    origin=scb.CelestialBody("Earth"),
    state=state,
)

gm_model = FirstOrderGaussMarkov(
    state_array=state_vector,
    spacecraft=sc,
    base_frame="J2000",
)
Attributes:
default_beta

Default inverse correlation coefficients used when not specified in state.

origin

Celestial body serving as origin of the state vector.

origin_name

Name of the origin body.

ref_frame

Reference frame used by the model.

Methods

compute_acceleration(position, ...)

Returns the current Gauss-Markov acceleration applied to the body.

compute_acceleration(position: ndarray, current_state: dict, epoch: float, body: Body) ndarray#

Returns the current Gauss-Markov acceleration applied to the body.

Parameters:
  • position (np.ndarray) – Spacecraft position vector, unused in this model but kept for API consistency.

  • current_state (dict) – Dictionary containing the propagated state.

  • epoch (float) – Current epoch, unused in this model but kept for API consistency.

  • body (Body) – Body for which the acceleration is evaluated.

Returns:

Current acceleration vector \(\mathbf a_{gm}\) in km/s^2.

Return type:

np.ndarray

property default_beta: ndarray#

Default inverse correlation coefficients used when not specified in state.

property origin: Body#

Celestial body serving as origin of the state vector.

property origin_name: str#

Name of the origin body.

property ref_frame: str#

Reference frame used by the model.