Simulating the Noisy Observer

Developing Models for Kalman Filters

For purposes of studying observer models and their response to noise, we want to be able to exercise the model equations with noise having known covariance properties. The benefits of this are that we can verify that the noisy models behave reasonably like the actual system, and we can also study the effectiveness of observer gains.

Last time, we showed how to set up correlated noise generators producing random vectors with any suitable correlation. Now we will apply this, and take a look at the kind of responses to expect from the observer.

Simulating the noisy system

Start with the state transition equations in the usual form. The output of the system is a direct readout of one of the states, making it relatively easy to see how good an observer is doing at tracking that state.

% Construct the state model 
Amat = [ ...
   1.03,  0.14,  0.0,    0.0 ;  ...
  -0.10,  0.92, -0.09,   0.0 ;  ...
   0.0,   0.20,  0.88,  -0.40;  ...
   0.0,   0.0,   0.00,   0.78;   ];
Bmat = [0, 0, 0, 1.00 ]';
Cmat = [1.00, 0.00, 0.00, 0.00 ];

For purposes of studying the noise response, set the input coupling matrix B to zero — or equivalently, simply omit the input driving terms temporarily.

Establish the noise covariance matrices Q for the state noise source and R for the observation noise source. Use the Choleski decomposition to determine the "square root" triangular factors q and r for these matrices. For the special case of one output variable, specify the square root of the observation noise variance.

% Random noise correlation matrices
Wmat = [ 0.04,  0.01, -0.01, 0.00; ...
         0.01,  0.025, 0.01, 0.00; ...
        -0.01,  0.01,  0.25, 0.02; ...
         0.00,  0.00,  0.02, 0.05; ];
Vmat =  0.016;

% Factor covariance matrices for generators
wtri = (chol(Wmat))';
vtri = (chol(Vmat))';

It is now possible to run a correlated noise simulation for "noise only" effects.

% Reserve storage for the real system simulation from random state
stateN = (rand(4,1)-0.5*ones(4,1))*2.0;
XstateN = stateN';
YoutN = zeros(nrun,1);
outN  = Cmat*stateN;

% Run simulation
for iterm=1:nrun
  % Noisy system simulation, next noise terms
  noiseX = wtri * randn(4,1);
  noiseY = vtri * randn;

  % Noisy system simulation, next state
  XstateN(iterm,:) = stateN';
  YoutN(iterm) = outN;
  stateN = Amat*stateN + noiseX;
  outN = Cmat*stateN + noiseY;

To test state observer equations against this simulated system, run the observer calculations in parallel.

% Reserve storage for the observer system from zero state
stateO = zeros(4,1);
outO  = 0.0;
XstateO = zeros(nrun,4);
YoutO = zeros(nrun,1);

% Run state observer
for iterm=1:nrun
  % Observer projection step
  XstateO(iterm,:) = stateO';
  YoutO(iterm) = outO;
  stateO = Amat*stateO;

  % Observer correction
  outO = Cmat*stateO;
  Xcorr = Kmat * (outO-outN);
  stateO = stateO - Xcorr;

Let's see how the two compare using the following observer design.

% Construct the observer gains
Kmat = [  0.075  0.35  0.55  0.17 ]'
simulation result

Some things to notice about this particular plot:

  • With observer gains of zero and no driving input signal, there is nothing to displace the observer output from a "flat line" at zero. That is the "quiescent state."
  • The initial state uncertainty starts very large. If you have no better information, there is nothing that can be done about this. A bit transient is unavoidable.
  • About 100 sample intervals are required for the initial state displacement effects to settle away completely. This is a property of the system's transient response.
  • The state observer is able to bring its state estimates into proximity of the noise-disturbed system state in about 60 sampling intervals. This depends primarily on the observer settling characteristic.

This is an ordinary state observer, for the case in which noise signals are stationary and the linear model is time invariant. This covers a lot of territory, but it still isn't a Kalman Filter. So, what can the Kalman Filter add to this? Two things:

  1. if you have a very complex system with precisely known changes in the state transition matrix and in the noise variance properties at every time instant, the Kalman Filter can adjust to the specified new conditions.
  2. the Kalman Filter state estimates will converge to track the transient conditions more quickly in the initial start-up.

Those considerations could be important, or they could be irrelevant. So consider carefully what your requirements are.

Next time, we will take a closer look at a systematic approach to selecting the observer gains.




Contents of the "Developing Models for Kalman Filters" section of the website, including this page, are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License unless otherwise specifically noted. For complete information about the terms of this license, see The license allows usage and derivative works for individual or commercial purposes under certain restrictions. For permissions beyond the scope of this license, see the contact information page for this site.