Estimate states of discrete-time or continuous-time linear system
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.
The following table summarizes the Kalman Filter block parameters, accessible via the Block Parameter dialog box.
Task | Parameters |
---|---|
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: |
Specify additional inports | In Options tab: |
Specify additional outports | In Options tab: |
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 block), you cannot select Continuous-time
.
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
.
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.
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.
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.
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
)
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.
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.
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.
Specify if the Q matrix is time invariant. If you unselect this option, the block includes an additional input port Q.
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.
Specify if the R matrix is time invariant. If you unselect this option, the block includes an additional input port R.
Process and measurement noise cross-covariance matrix. Specify it as a Nw-by-Ny matrix. The matrix [Q N; N^{T} R] must be positive definite.
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 and $$\widehat{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 $$\dot{\widehat{x}}(t)=A(t)\widehat{x}(t)+B(t)u(t)$$ for continuous-time Kalman filter and $$\widehat{x}[n+1|n]=A[n]\widehat{x}[n|n-1]+B[n]u[n]$$ for discrete-time.
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 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.
Add $$\widehat{y}$$ output port to the block to output the estimated model outputs. The option is cleared by default.
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.
Port Name | Port Type (In/Out) | Description |
---|---|---|
u (Optional) | In | Known inputs, specified as a real scalar or vector. |
y | In | Measured outputs, specified as a real scalar or vector. |
xhat | Out | Estimated states, returned as a real scalar or vector. |
yhat (Optional) | Out | Estimated outputs, returned as a real scalar or vector. |
P or Z (Optional) | Out | State estimation error covariance, returned as a matrix. |
A (Optional) | In | A matrix, specified as a real matrix. |
B (Optional) | In | B matrix, specified as a real matrix. |
C (Optional) | In | C matrix, specified as a real matrix. |
D (Optional) | In | D matrix, specified as a real matrix. |
G (Optional) | In | G matrix, specified as a real matrix. |
H (Optional) | In | H matrix, specified as a real matrix. |
Q (Optional) | In | Q matrix, specified as a real scalar, vector or matrix. |
R (Optional) | In | R matrix, specified as a real scalar, vector or matrix. |
N (Optional) | In | N matrix, specified as a real matrix. |
P0 (Optional) | In | P matrix at initial time, specified as a real scalar, vector, or matrix. |
X0 (Optional) | In | Initial state estimates, specified as a real scalar or vector. |
Enable (Optional) | In | Control signal to enable measurement updates, specified as a real scalar. |
Reset (Optional) | In | Control signal to reset state estimates, specified as a real scalar. |
Double-precision floating point
Single-precision floating point (for discrete-time Kalman filter only)
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.
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$$
$$(A-\overline{N}{\overline{R}}^{-1}C,\overline{Q}-\overline{N}{\overline{R}}^{-1}{\overline{N}}^{T})$$ 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(Q{H}^{T}+N)\end{array}$$
The continuous-time Kalman filter cannot be used in Function-Call Subsystems or Triggered Subsystems.
[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.