# Kalman Filter

Estimate states of discrete-time or continuous-time linear system

## Description

Use the Kalman Filter block to estimate states of a state-space plant model given process and measurement noise covariance data. The state-space model can be time-varying. A steady-state Kalman filter implementation is used if the state-space model and the noise covariance matrices are all time-invariant. A time-varying Kalman filter is used otherwise.

Kalman filter provides the optimal solution to the following continuous or discrete estimation problems:

The Kalman Filter block differs from the `kalman` command in the following ways:

• When calling `kalman(sys,...)`, `sys` includes the `G` and `H` matrices. Specifically, `sys.B` has `[B G]` and `sys.D` has `[D H]`. When you provide a LTI variable to the Kalman Filter block, it does not assume that the LTI variable provided contains `G` and `H`. They are optional and separate.

• The `kalman` command outputs `[yhat;xhat]` by default. The block only outputs `xhat` by default.

## Parameters

The following table summarizes the Kalman Filter block parameters, accessible via the Block Parameter dialog box.

Specify filter settings
Specify the system model

Model source in Model Parameters tab

Specify initial state estimates

Source in Model Parameters tab

Specify noise characteristics

In Model Parameters tab:

In Options tab:

In Options tab:

### Time domain

Specify whether to estimate continuous-time or discrete-time states:

• `Discrete-Time` (Default) — Block estimates discrete-time states

• `Continuous-Time` — Block estimates continuous-time states

When the Kalman Filter block is in a model with synchronous state control (see the State Control (HDL Coder) block), you cannot select `Continuous-time`.

### Use the current measurement y[n] to improve xhat[n]

Use the current estimator variant of the discrete-time Kalman filter. When not selected, the delayed estimator (variant) is used.

This option is available only when Time Domain is `Discrete-Time`.

### Model source

Specify how the A, B, C, D matrices are provided to the block. Must be one of the following:

• ```Dialog: LTI State-Space Variable``` — Use the values specified in the LTI state-space variable. You must also specify the variable name in Variable. The sample time of the model must match the setting in the Time domain option, i.e. the model must be discrete-time if the Time domain is discrete-time.

• `Dialog: Individual A, B, C, D matrices` — Specify values in the following block parameters:

• A — Specify the A matrix. It must be real and square.

• B — Specify the B matrix. It must be real and have as many rows as the A matrix. This option is available only when Add input port u is selected in the Options tab.

• C — Specify the C matrix. It must be real and have as many columns as the A matrix.

• D — Specify the D matrix. It must be real. It must have as many rows as the C matrix and as many columns as the B matrix. This option is available only when Add input port u is selected in the Options tab.

• `External` — Specify the A, B, C, D matrices as input signals to the Kalman Filter block. If you select this option, the block includes additional input ports A, B, C and D. You must also specify the following in the block parameters:

• `Number of states` — Number of states to be estimated, specified as a positive integer. The default value is 2.

• `Number of inputs` — Number of known inputs in the model, specified as a positive integer. The default value is 2. This option is only available when Add input port u is selected.

• `Number of outputs` — Number of measured outputs in the model, specified as a positive integer. The default value is 2.

### Sample Time

Block sample time, specified as -1 or a positive scalar.

This option is available only when Time Domain is `Discrete Time` and Model Source is `Dialog: Individual A, B, C, D matrices` or `External`. The sample time is obtained from the LTI state-space variable if the Model Source is ```Dialog: LTI State-Space Variable```.

The default value is -1, which implies that the block inherits its sample time based on the context of the block within the model. All block input ports must have the same sample time.

### Source

Specify how to enter the initial state estimates and initial state estimation error covariance:

• `Dialog` — Specify the values directly in the dialog box. You must also specify the following parameters:

• Initial states x[0] — Specify the initial state estimate as a real scalar or vector. If you specify a scalar, all initial state estimates are set to this scalar. If you specify a vector, the length of the vector must match with the number of states in the model.

• State estimation error covariance P[0] (only when time-varying Kalman filter is used) — Specify the initial state estimation error covariance P[0] for discrete-time Kalman filter or P(0) for continuous-time Kalman filter. Must be specified as one of the following:

• Real nonnegative scalar. P is an Ns-by-Ns diagonal matrix with the scalar on the diagonals. Ns is the number of states in the model.

• Vector of real nonnegative scalars. P is an Ns-by-Ns diagonal matrix with the elements of the vector on the diagonals of P.

• Ns-by-Ns positive semi-definite matrix.

• `External` — Inherit the values from input ports. The block includes an additional input port X0. A second additional input port P0 is added when time-varying Kalman filter is used. X0 and P0 must satisfy the same conditions described previously when you specify them in the dialog box.

### Use the Kalman Gain K from the model variable

Specify whether to use the pre-identified Kalman Gain contained in the state-space plant model. This option is available only when:

• Model Source is ```Dialog: LTI State-Space Variable``` and Variable is an identified state-space model (`idss` (System Identification Toolbox)) with a nonzero K matrix.

• Time Invariant Q, Time Invariant R and Time Invariant N options are selected.

If the Use G and H matrices (default G=I and H=0) option is selected, Time Invariant G and Time Invariant H options must also be selected.

### Use G and H matrices (default G=I and H=0)

Specify whether to use non-default values for the G and H matrices. If you select this option, you must specify:

• G — Specify the G matrix. It must be a real matrix with as many rows as the A matrix. The default value is 1.

• Time-invariant G — Specify if the G matrix is time invariant. If you unselect this option, the block includes an additional input port G.

• H — Specify the H matrix. It must be a real matrix with as many rows as the C matrix and as many columns as the G matrix. The default value is 0.

• Time-invariant H — Specify if the H matrix is time invariant. If you unselect this option, the block includes an additional input port G.

• Number of process noise inputs — Specify the number of process noise inputs in the model. The default value is 1.

This option is available only when Time-invariant G and Time-invariant H are cleared. Otherwise, this information is inferred from the G or H matrix.

### Q

Process noise covariance matrix, specified as one of the following:

• Real nonnegative scalar. Q is an Nw-by-Nw diagonal matrix with the scalar on the diagonals. Nw is the number of process noise inputs in the model.

• Vector of real nonnegative scalars. Q is an Nw-by-Nw diagonal matrix with the elements of the vector on the diagonals of Q.

• Nw-by-Nw positive semi-definite matrix.

### Time Invariant Q

Specify if the Q matrix is time invariant. If you unselect this option, the block includes an additional input port Q.

### R

Measurement noise covariance matrix, specified as one of the following:

• Real positive scalar. R is an Ny-by-Ny diagonal matrix with the scalar on the diagonals. Ny is the number of measured outputs in the model.

• Vector of real positive scalars. R is an Ny-by-Ny diagonal matrix with the elements of the vector on the diagonals of R.

• Ny-by-Ny positive-definite matrix.

### Time Invariant R

Specify if the R matrix is time invariant. If you unselect this option, the block includes an additional input port R.

### N

Process and measurement noise cross-covariance matrix. Specify it as a Nw-by-Ny matrix. The matrix [Q N; NT R] must be positive definite.

### Time Invariant N

Specify if the N matrix is time invariant. If you unselect this option, the block includes an additional input port N.

Select this option if your model contains known inputs `u(t)` or `u[k]`. The option is selected by default. Unselecting this option removes the input port `u` from the block and removes the B, D and Number of inputs parameters from the block dialog box.

Select this option if you want to control the measurement updates. The block includes an additional inport `Enable`. The `Enable` input port takes a scalar signal. This option is cleared by default.

By default the block does measurement updates at each time step to improve the state and output estimates $\stackrel{^}{x}$ and $\stackrel{^}{y}$ based on measured outputs. The measurement update is skipped for the current sample time when the signal in the Enable port is 0. Concretely, the equation for state estimates become $\stackrel{˙}{\stackrel{^}{x}}\left(t\right)=A\left(t\right)\stackrel{^}{x}\left(t\right)+B\left(t\right)u\left(t\right)$ for continuous-time Kalman filter and $\stackrel{^}{x}\left[n+1|n\right]=A\left[n\right]\stackrel{^}{x}\left[n|n-1\right]+B\left[n\right]u\left[n\right]$ for discrete-time.

### External Reset

Option to reset estimated states and parameter covariance matrix using specified initial values.

Suppose you reset the block at a time step, `t`. If the block is enabled at `t`, the software uses the initial parameter values specified either in the block dialog or the input ports P0 and X0 to estimate the states. In other words, at `t`, the block performs a time update and if it is enabled, a measurement update after the reset. The block outputs these updated estimates.

Specify one of the following:

• `None` (Default) — Estimated states $\stackrel{^}{x}$ and state estimation error covariance matrix P values are not reset.

• `Rising` — Triggers a reset when the control signal rises from a negative or zero value to a positive value. If the initial value is negative, rising to zero triggers a reset.

• `Falling` — Triggers a reset when the control signal falls from a positive or a zero value to a negative value. If the initial value is positive, falling to zero triggers a reset.

• `Either` — Triggers a reset when the control signal is either rising or falling.

• `Level` — Triggers a reset in either of these cases:

• The control signal is nonzero at the current time step.

• The control signal changes from nonzero at the previous time step to zero at the current time step.

• `Level hold` — Triggers reset when the control signal is nonzero at the current time step.

When you choose an option other than `None`, a `Reset` input port is added to the block to provide the reset control input signal.

### Output estimated model output y

Add $\stackrel{^}{y}$ output port to the block to output the estimated model outputs. The option is cleared by default.

### Output state estimation error covariance P or Z

Add P output port or Z output port to the block. The Z matrix is provided only when Time Domain is `Discrete Time` and the Use the current measurement y[n] to improve xhat[n] is selected. Otherwise, the P matrix, as described in the Description section previously, is provided.

The option is cleared by default.

## Ports

Port Name

Port Type

(In/Out)

Description
u (Optional)InKnown inputs, specified as a real scalar or vector.
yInMeasured outputs, specified as a real scalar or vector.
xhatOutEstimated states, returned as a real scalar or vector.
yhat (Optional)OutEstimated outputs, returned as a real scalar or vector.
P or Z (Optional)OutState estimation error covariance, returned as a matrix.
A (Optional)InA matrix, specified as a real matrix.
B (Optional)InB matrix, specified as a real matrix.
C (Optional)InC matrix, specified as a real matrix.
D (Optional)InD matrix, specified as a real matrix.
G (Optional)InG matrix, specified as a real matrix.
H (Optional)InH matrix, specified as a real matrix.
Q (Optional)InQ matrix, specified as a real scalar, vector or matrix.
R (Optional)InR matrix, specified as a real scalar, vector or matrix.
N (Optional)InN matrix, specified as a real matrix.
P0 (Optional)InP matrix at initial time, specified as a real scalar, vector, or matrix.
X0 (Optional)InInitial state estimates, specified as a real scalar or vector.
Enable (Optional)InControl signal to enable measurement updates, specified as a real scalar.
Reset (Optional)InControl signal to reset state estimates, specified as a real scalar.

## Supported Data Types

• Double-precision floating point

• Single-precision floating point (for discrete-time Kalman filter only)

Note

• All input ports except Enable and Reset must have the same data type (single or double).

• Enable and Reset ports support `single`, `double`, `int8`, `uint8`, `int16`, `uint16`, `int32`, `uint32`, and boolean data types.

## Limitations

• The plant and noise data must satisfy:

• (C,A) detectable

• $\overline{R}>0$ and $\overline{Q}-\overline{N}{\overline{R}}^{-1}{\overline{N}}^{T}\ge 0$

• $\left(A-\overline{N}{\overline{R}}^{-1}C,\overline{Q}-\overline{N}{\overline{R}}^{-1}{\overline{N}}^{T}\right)$ has no uncontrollable mode on the imaginary axis (or unit circle in discrete time) with the notation

`$\begin{array}{l}\overline{Q}=GQ{G}^{T}\\ \overline{R}=R+HN+{N}^{T}{H}^{T}+HQ{H}^{T}\\ \overline{N}=G\left(Q{H}^{T}+N\right)\end{array}$`
• The continuous-time Kalman filter cannot be used in Function-Call Subsystems or Triggered Subsystems.

## Compatibility Considerations

expand all

Behavior changed in R2021a

## References

[1] Franklin, G.F., J.D. Powell, and M.L. Workman, Digital Control of Dynamic Systems, Second Edition, Addison-Wesley, 1990.

[2] Lewis, F., Optimal Estimation, John Wiley & Sons, Inc, 1986.

## Extended Capabilities

### PLC Code GenerationGenerate Structured Text code using Simulink® PLC Coder™.

Introduced in R2014b