This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.


Kalman filter design, Kalman estimator


[kest,L,P] = kalman(sys,Qn,Rn,Nn)
[kest,L,P] = kalman(sys,Qn,Rn,Nn,sensors,known)
[kest,L,P,M,Z] = kalman(sys,Qn,Rn,...,type)


kalman designs a Kalman filter or Kalman state estimator given a state-space model of the plant and the process and measurement noise covariance data. The Kalman estimator provides the optimal solution to the following continuous or discrete estimation problems.

Continuous-Time Estimation

Given the continuous plant


with known inputs u, white process noise w, and white measurement noise v satisfying


construct a state estimate x^(t) that minimizes the steady-state error covariance

The optimal solution is the Kalman filter with equations


The filter gain L is determined by solving an algebraic Riccati equation to be




and P solves the corresponding algebraic Riccati equation.

The estimator uses the known inputs u and the measurements y to generate the output and state estimates y^ and x^. Note that y^ estimates the true plant output


Discrete-Time Estimation

Given the discrete plant


and the noise covariance data


The estimator has the following state equation:


The gain matrix L is derived by solving a discrete Riccati equation to be




There are two variants of discrete-time Kalman estimators:

  • The current estimator generates output estimates y^[n|n] and state estimates x^[n|n] using all available measurements up to y[n]. This estimator has the output equation


    where the innovation gains Mx and My are defined as:


    Mx updates the prediction x^[n|n1] using the new measurement y[n].


    When H = 0, My=CMx and y[n|n]=Cx[n|n]+Du[n].

  • The delayed estimator generates output estimates y^[n|n1] and state estimates x^[n|n1] using measurements only up to yv[n–1]. This estimator is easier to implement inside control loops and has the output equation


[kest,L,P] = kalman(sys,Qn,Rn,Nn) creates a state-space model kest of the Kalman estimator given the plant model sys and the noise covariance data Qn, Rn, Nn (matrices Q, R, N described in Description). sys must be a state-space model with matrices A,[BG],C,[DH].

The resulting estimator kest has inputs [u;y] and outputs [y^;x^] (or their discrete-time counterparts). You can omit the last input argument Nn when N = 0.

The function kalman handles both continuous and discrete problems and produces a continuous estimator when sys is continuous and a discrete estimator otherwise. In continuous time, kalman also returns the Kalman gain L and the steady-state error covariance matrix P. P solves the associated Riccati equation.

[kest,L,P] = kalman(sys,Qn,Rn,Nn,sensors,known) handles the more general situation when

  • Not all outputs of sys are measured.

  • The disturbance inputs w are not the last inputs of sys.

The index vectors sensors and known specify which outputs y of sys are measured and which inputs u are known (deterministic). All other inputs of sys are assumed stochastic.

[kest,L,P,M,Z] = kalman(sys,Qn,Rn,...,type) specifies the estimator type for discrete-time plants sys. The type argument is either 'current' (default) or 'delayed'. For discrete-time plants, kalman returns the estimator and innovation gains L and M and the steady-state error covariances



See LQG Design for the x-Axis and Kalman Filtering for examples that use the kalman function.

Related Examples


The plant and noise data must satisfy:

  • (C,A) detectable

  • R¯>0 and Q¯N¯R¯1N¯T0

  • (AN¯R¯1C,Q¯N¯R¯1N¯T) has no uncontrollable mode on the imaginary axis (or unit circle in discrete time) with the notation



[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.

Introduced before R2006a

Was this topic helpful?