298#define SRUKF_ENTRY(A, i, j) \
299 ((A)->data[(i) * (A)->inc_row + (j) * (A)->inc_col])
302#define SRUKF_SET_TYPE(A, t) ((A)->type |= (t))
304#define SRUKF_UNSET_TYPE(A, t) ((A)->type &= ~(t))
306#define SRUKF_IS_TYPE(A, t) ((A)->type & (t))
310#define SRUKF_LEADING_DIM(A) ((A)->n_rows)
313#define SRUKF_CBLAS_LAYOUT CblasColMajor
315#define SRUKF_LAPACK_LAYOUT LAPACK_COL_MAJOR
319#define SRUKF_GEMM cblas_sgemm
320#define SRUKF_TRSM cblas_strsm
321#define SRUKF_TRSV cblas_strsv
322#define SRUKF_GEQRF LAPACKE_sgeqrf
323#define SRUKF_POTRF LAPACKE_spotrf
325#define SRUKF_GEMM cblas_dgemm
326#define SRUKF_TRSM cblas_dtrsm
327#define SRUKF_TRSV cblas_dtrsv
328#define SRUKF_GEQRF LAPACKE_dgeqrf
329#define SRUKF_POTRF LAPACKE_dpotrf
357#define SRUKF_MAT_ALLOC(rows, cols) srukf_mat_alloc((rows), (cols), 1)
359#define SRUKF_MAT_ALLOC_NO_DATA(rows, cols) srukf_mat_alloc((rows), (cols), 0)
srukf_index srukf_state_dim(const srukf *ukf)
Get the state dimension N.
srukf_index srukf_meas_dim(const srukf *ukf)
Get the measurement dimension M.
srukf_return srukf_set_noise(srukf *ukf, const srukf_mat *Qsqrt, const srukf_mat *Rsqrt)
Set the noise sqrt-covariance matrices.
struct srukf_workspace srukf_workspace
Opaque workspace structure.
srukf * srukf_create(int N, int M)
Create a filter with uninitialized noise matrices.
srukf_return srukf_predict_to(srukf *ukf, srukf_mat *x, srukf_mat *S, void(*f)(const srukf_mat *, srukf_mat *, void *), void *user)
Transactional predict: operate on external buffers.
srukf * srukf_create_from_noise(const srukf_mat *Qsqrt, const srukf_mat *Rsqrt)
Create a filter from noise covariance matrices.
double srukf_value
Scalar value type.
void srukf_free(srukf *ukf)
Free all memory allocated for the filter.
void(* srukf_diag_fn)(const char *msg)
Diagnostic callback function type.
srukf_return srukf_correct_to(srukf *ukf, srukf_mat *x, srukf_mat *S, srukf_mat *z, void(*h)(const srukf_mat *, srukf_mat *, void *), void *user)
Transactional correct: operate on external buffers.
srukf_mat_type
Matrix type flags.
srukf_return srukf_predict(srukf *ukf, void(*f)(const srukf_mat *, srukf_mat *, void *), void *user)
Process model callback type.
srukf_return srukf_alloc_workspace(srukf *ukf)
Pre-allocate workspace.
srukf_return srukf_reset(srukf *ukf, srukf_value init_std)
Reset filter to initial conditions.
srukf_return srukf_set_sqrt_cov(srukf *ukf, const srukf_mat *S_in)
Set the sqrt-covariance matrix.
srukf_return srukf_get_sqrt_cov(const srukf *ukf, srukf_mat *S_out)
Get the sqrt-covariance matrix.
srukf_return srukf_get_state(const srukf *ukf, srukf_mat *x_out)
Get the current state estimate.
void srukf_set_diag_callback(srukf_diag_fn fn)
Set the global diagnostic callback.
void srukf_mat_free(srukf_mat *mat)
Free a matrix and its data.
srukf_return srukf_set_state(srukf *ukf, const srukf_mat *x_in)
Set the state estimate.
void srukf_free_workspace(srukf *ukf)
Free workspace to reclaim memory.
size_t srukf_index
Scalar index type.
srukf_return
Function return codes.
@ SRUKF_RETURN_MATH_ERROR
@ SRUKF_RETURN_PARAMETER_ERROR
srukf_mat * srukf_mat_alloc(srukf_index rows, srukf_index cols, int alloc_data)
Allocate a matrix.
srukf_return srukf_set_scale(srukf *ukf, srukf_value alpha, srukf_value beta, srukf_value kappa)
Set the UKF scaling parameters.
srukf_return srukf_correct(srukf *ukf, srukf_mat *z, void(*h)(const srukf_mat *, srukf_mat *, void *), void *user)
Correct step: incorporate measurement.
Square-Root Unscented Kalman Filter.