go-estimate: State estimation and filtering algorithms in Go

Build Status reference GoDoc License Go Report Card

This package offers a small suite of basic filtering algorithms written in Go. It currently provides the implementations of the following filters and estimators:

In addition it provides an implementation of Rauch–Tung–Striebel smoothing for Kalman filter, which is an optimal Gaussian smoothing algorithm. There are variants for both LKF (Linear Kalman Filter) and EKF (Extended Kalman Filter) implemented in the smooth package. UKF smoothing will be implemented in the future.

Get started

Get the package:

$ go get

Get dependencies:

$ make dep

Run unit tests:

$ make test

You can find various examples of usage in go-estimate-examples.




Expand ▾ Collapse ▴




This section is empty.


This section is empty.


This section is empty.


type DiscreteModel

type DiscreteModel interface {
	// Model is a model of a dynamical system
	// StateMatrix returns state propagation matrix
	StateMatrix() mat.Matrix
	// StateCtlMatrix returns state propagation control matrix
	StateCtlMatrix() mat.Matrix
	// OutputMatrix returns observation matrix
	OutputMatrix() mat.Matrix
	// OutputCtlMatrix returns observation control matrix
	OutputCtlMatrix() mat.Matrix

    DiscreteModel is a dynamical system whose state is driven by static propagation and observation dynamics matrices

    type Estimate

    type Estimate interface {
    	// Val returns estimate value
    	Val() mat.Vector
    	// Cov returns estimate covariance
    	Cov() mat.Symmetric

      Estimate is dynamical system filter estimate

      type Filter

      type Filter interface {
      	// Predict estimates the next internal state of the system
      	Predict(mat.Vector, mat.Vector) (Estimate, error)
      	// Update updates the system state based on external measurement
      	Update(mat.Vector, mat.Vector, mat.Vector) (Estimate, error)

        Filter is a dynamical system filter.

        type InitCond

        type InitCond interface {
        	// State returns initial filter state
        	State() mat.Vector
        	// Cov returns initial state covariance
        	Cov() mat.Symmetric

          InitCond is initial state condition of the filter

          type Model

          type Model interface {
          	// Propagator is system propagator
          	// Observer is system observer
          	// Dims returns input and output dimensions of the model
          	Dims() (in int, out int)

            Model is a model of a dynamical system

            type Noise

            type Noise interface {
            	// Mean returns noise mean
            	Mean() []float64
            	// Cov returns covariance matrix of the noise
            	Cov() mat.Symmetric
            	// Sample returns a sample of the noise
            	Sample() mat.Vector
            	// Reset resets the noise

              Noise is dynamical system noise

              type Observer

              type Observer interface {
              	// Observe observes external state of the system
              	Observe(mat.Vector, mat.Vector, mat.Vector) (mat.Vector, error)

                Observer observes external state (output) of the system

                type Propagator

                type Propagator interface {
                	// Propagate propagates internal state of the system to the next step
                	Propagate(mat.Vector, mat.Vector, mat.Vector) (mat.Vector, error)

                  Propagator propagates internal state of the system to the next step

                  type Smoother

                  type Smoother interface {
                  	// Smooth implements filter smoothing and returns new estimates
                  	Smooth([]Estimate, []mat.Vector) ([]Estimate, error)

                    Smoother is a filter smoother

                    Source Files


                    Path Synopsis