Skip to content

GaussianObservation

Bases: ObservationModel

Nonlinear Gaussian observation model.

Observations are modeled as

\[ y_t \sim \mathcal{N}(h(x_t, u_t, t), R), \]

where \(h\) is a user-provided measurement function and \(R\) is the observation noise covariance.

__init__(h: Callable[[State, Control, Time], jax.Array], R: jax.Array)

Parameters:

Name Type Description Default
h Callable[[State, Control, Time], Array]

Measurement function mapping \((x, u, t)\) to the mean observation.

required
R Array

Observation noise covariance with shape \((d_y, d_y)\).

required

Structured inference

You can always instantiate a model without this structured class (for example, by passing a generic callable observation model). But GaussianObservation explicitly signals Gaussian emission structure that enables fast ensemble Kalman methods; see Filters and EnKFConfig / ContinuousTimeEnKFConfig in FilterConfigs.

Without these exploitable structures, marginalizing latent processes during parameter inference typically requires particle filters (PFConfig and related particle methods), which are often slower.

Example

Nonlinear Gaussian observation
import jax.numpy as jnp
from dynestyx import GaussianObservation

def h(x, u, t):
    # Example nonlinear measurement function
    return jnp.array([x[0] ** 2 + 0.1 * x[1]])

observation = GaussianObservation(
    h=h,
    R=0.05 * jnp.eye(1),
)

x_t = jnp.array([1.5, -0.3])
dist_y = observation(x_t, u=None, t=0.0)  # p(y_t | x_t, t)