# Class KalmanFilter<States extends Num,​Inputs extends Num,​Outputs extends Num>

java.lang.Object
edu.wpi.first.math.estimator.KalmanFilter<States,​Inputs,​Outputs>

```public class KalmanFilter<States extends Num,​Inputs extends Num,​Outputs extends Num>
extends Object```
A Kalman filter combines predictions from a model and measurements to give an estimate of the true system state. This is useful because many states cannot be measured directly as a result of sensor noise, or because the state is "hidden".

Kalman filters use a K gain matrix to determine whether to trust the model or measurements more. Kalman filter theory uses statistics to compute an optimal K gain which minimizes the sum of squares error in the state estimate. This K gain is used to correct the state estimate by some amount of the difference between the actual measurements and the measurements predicted by the model.

For more on the underlying math, read https://file.tavsys.net/control/controls-engineering-in-frc.pdf chapter 9 "Stochastic control theory".

• ## Constructor Summary

Constructors
Constructor Description
```KalmanFilter​(Nat<States> states, Nat<Outputs> outputs, LinearSystem<States,​Inputs,​Outputs> plant, Matrix<States,​N1> stateStdDevs, Matrix<Outputs,​N1> measurementStdDevs, double dtSeconds)```
Constructs a state-space observer with the given plant.
• ## Method Summary

Modifier and Type Method Description
`void` ```correct​(Matrix<Inputs,​N1> u, Matrix<Outputs,​N1> y)```
Correct the state estimate x-hat using the measurements in y.
`Matrix<States,​Outputs>` `getK()`
Returns the steady-state Kalman gain matrix K.
`double` ```getK​(int row, int col)```
Returns an element of the steady-state Kalman gain matrix K.
`Matrix<States,​N1>` `getXhat()`
Returns the state estimate x-hat.
`double` `getXhat​(int row)`
Returns an element of the state estimate x-hat.
`void` ```predict​(Matrix<Inputs,​N1> u, double dtSeconds)```
Project the model into the future with a new control input u.
`void` `reset()`
`void` ```setXhat​(int row, double value)```
Set an element of the initial state estimate x-hat.
`void` `setXhat​(Matrix<States,​N1> xhat)`
Set initial state estimate x-hat.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ## Constructor Details

• ### KalmanFilter

public KalmanFilter​(Nat<States> states, Nat<Outputs> outputs, LinearSystem<States,​Inputs,​Outputs> plant, Matrix<States,​N1> stateStdDevs, Matrix<Outputs,​N1> measurementStdDevs, double dtSeconds)
Constructs a state-space observer with the given plant.
Parameters:
`states` - A Nat representing the states of the system.
`outputs` - A Nat representing the outputs of the system.
`plant` - The plant used for the prediction step.
`stateStdDevs` - Standard deviations of model states.
`measurementStdDevs` - Standard deviations of measurements.
`dtSeconds` - Nominal discretization timestep.
Throws:
`IllegalArgumentException` - If the system is unobservable.
• ## Method Details

• ### reset

public void reset()
• ### getK

public  getK()
Returns the steady-state Kalman gain matrix K.
Returns:
The steady-state Kalman gain matrix K.
• ### getK

public double getK​(int row, int col)
Returns an element of the steady-state Kalman gain matrix K.
Parameters:
`row` - Row of K.
`col` - Column of K.
Returns:
the element (i, j) of the steady-state Kalman gain matrix K.
• ### setXhat

public void setXhat​(Matrix<States,​N1> xhat)
Set initial state estimate x-hat.
Parameters:
`xhat` - The state estimate x-hat.
• ### setXhat

public void setXhat​(int row, double value)
Set an element of the initial state estimate x-hat.
Parameters:
`row` - Row of x-hat.
`value` - Value for element of x-hat.
• ### getXhat

public Matrix<States,​N1> getXhat()
Returns the state estimate x-hat.
Returns:
The state estimate x-hat.
• ### getXhat

public double getXhat​(int row)
Returns an element of the state estimate x-hat.
Parameters:
`row` - Row of x-hat.
Returns:
the state estimate x-hat at that row.
• ### predict

public void predict​(Matrix<Inputs,​N1> u, double dtSeconds)
Project the model into the future with a new control input u.
Parameters:
`u` - New control input from controller.
`dtSeconds` - Timestep for prediction.
• ### correct

public void correct​(Matrix<Inputs,​N1> u, Matrix<Outputs,​N1> y)
Correct the state estimate x-hat using the measurements in y.
Parameters:
`u` - Same control input used in the last predict step.
`y` - Measurement vector.