previous
this
next
contents
reference
index
search
A Discrete Kalman-Bucy Filtering Example
Introduction
Discrete Kalman-Bucy filtering and smoothing
are important data analysis tools.
A lot of time is spent
designing these filters for all
sorts of applications.
The KBF program is a graphical user interface
to a discrete Kalman-Bucy filtering and smoothing tool.
This section contains a review an example filter
constructed using KBF.
This as an introduction both to
discrete Kalman-Bucy filtering and the KBF program.
Loading the Example
If you installed KBF in C:\KBF
and you run the O-Matrix program C:\KBF\KBF.OMS,
the KBF command window will be displayed.
If you then load EXAMPLE.KBF file,
the O-Matrix main window appear as follows:
The following table contains
a brief description of the subwindows above.
A more detailed description is contained in the other sections
of this users manual.
|
Name |
Description |
|
KBF COMMAND |
overall control of KBF |
|
NOTES |
brief description of the
problem
|
|
MEAS |
defines the
measurement model
|
|
TRAN |
defines the
transition model
|
|
DATA |
some KBF
input values
|
|
SIM |
used to create simulated data |
|
Z1 Table |
table of first data column versus time index |
|
Z1 PLot |
plot of first data column versus time index |
|
State Table |
table of second state components versus time index |
|
State PLot |
plot of second state component versus time index |
|
|
Fitting and Plotting
For this example,
the State Table window contains the variable x2.
The value for this variable is originally -1e+300
because that is the bad data flag.
In addition, the State Plot window is empty.
Step 1: select the Fit button in the KBF COMMAND window and
the following dialog will appear:
Step 2: select the Iterated smoother option and leave
the Number of iterations field at 2. Then select the Ok button.
Step 3:
A dialog will be left on the screen reporting the results of the
fit. Select the Close button in this dialog.
If you now inspect the State Plot window,
you will see the following plot:
If you inspect the Z1 Plot window,
you will see the following plot:
This is the measurement values corresponding to the
first component of the measurement vector.
You can add a curve corresponding to the model
for the expected value of the measurements as follows:
Step 4:
Select the Plot button in the KBF COMMAND window.
The following dialog will appear:
Step 5:
In this dialog make the following changes:,
|
Old Value |
New Value |
Description |
|
z1 |
z1, h1 |
add variable corresponding to expected value for z1 |
|
na |
na, bl |
plot this variable using the color black |
|
++ |
++, so |
use a solid line to plot this variable |
|
|
The Z1 Plot window will now contain the following plot:
Problem Statement
In the example, we measure the range from the ship
to two shore stations at know locations.
Our problem is to determine the location of the
ship as a function of time.
The following table defines some mathematical notation
that we use to describe our filter:
|
Name |
Description |
Dimension |
A |
position of first shore station |
2 x 1 |
B |
position of second shore station |
2 x 1 |
S |
position of the ship |
2 x 1 |
V |
velocity of the ship |
2 x 1 |
r1 |
range from S to A |
1 x 1 |
r2 |
range from S to B |
1 x 1 |
|
|
We include both the ships position and velocity in the state vector.
This enable us to model the expected value of the data from the state vector
and to model the expected change in the position as linear with respect to time.
The corresponding state vector at time index k is
/ S(1) \
x = | S(2) |
| V(1) |
\ V(2) /
The KBF Notes window is used to store general comments
about the particular Kalman-Bucy filter.
The Notes window for our example is:
Input Values
The following is a list of the KBF input values described in this section:
|
Name |
Description |
bad |
bad data flag |
xi |
initial state estimate |
Pi |
covariance of initial state estimate |
Z |
matrix of measurement values |
|
|
The following is a list of the rest of the KBF input values
which are described in subsequent sections:
|
Name |
Description |
hk |
expected measurement model |
Rk |
covariance of measurement noise |
hk |
model for expected measurement |
Rk |
covariance of measurement noise |
gk |
model for expected transition |
Qk |
covariance of transition noise |
|
|
The bad data flag for our example is
-1d+300
Before the Fit or Sim commands are executed,
some of the variables are not yet defined.
These variables appear in the Table
windows with the value
-1e+300 and they do not appear in the Plot windows.
The estimate for the value of the state vector
at time index k = 1 is
/ S(1) \ / 50 \
xi = | S(2) | = | 0 |
| V(1) | | 1 |
\ V(2) / \ 0 /
The accuracy of this initial estimate is
specified by the covariance matrix
/ 16 0 0 0 \
Pi = | 0 16 0 0 |
| 0 0 1 0 |
\ 0 0 0 1 /
Note that because the matrix Pi is diagonal,
the components of xi are independent.
Using delta to denote
the corresponding standard deviations,
delta S(1) = 4
delta S(2) = 4
delta V(1) = 1
delta V(2) = 1
Neither of the measurement columns are modulo a base value
so the corresponding field in the Data window is
0 0
The file
KBF\DATA\TMP\DATA.VAL
contains the values
119.372 107.759
122.161 104.008
120.752 104.096
121.608 108.792
114.187 114.778
109.812 120.034
106.191 124.459
108.104 121.789
110.782 121.566
115.898 115.941
The first column corresponding to the measurements for r1
and the second column corresponds to the measurements for r2.
The kth row corresponds to the measurements for the kth
time point.
The Data window for our example is:
Measurement Model
Each Kalman-Bucy filter has a model that
relates the state vector to the measurements.
The general form of this model is
z = h (x ) + v
k k k k
where the last term is the mean zero random measurement noise.
For our example, the covariance of the measurement noise is given by
/ 4 0 \
R = | |
k \ 0 4 /
Note that because this matrix is diagonal,
the components of the measurement noise are independent.
Using delta to denote
the corresponding standard deviations,
delta v (1) = 2
k
delta v (2) = 2
k
The expected value of the measurements are modelled by
r1(x) = |S - A|
__________________________________
= \/ [x(1) - A(1)]^2 + [x(2) - A(2)]^2
r2(x) = |S - B|
__________________________________
= \/ [x(1) - B(1)]^2 + [x(2) - B(2)]^2
/ r1(x) \
h(x) = | |
\ r2(x) /
(Note that we are able to drop the dependence of h on
k for our example.)
We use the notation D_j to denote the partial
derivative with respect to the jth component of x.
Using this notation and the fact that
d __ 1
-- \/ s = ----------
ds ___
2 \/ s
we obtain
D_1 r1(x) = [S(1) - A(1)] / r1(x)
D_2 r1(x) = [S(2) - A(2)] / r1(x)
D_3 r1(x) = 0
D_4 r1(x) = 0
A similar formula holds for the partial derivatives of r2(x).
It follows that
d / D_1 r1(x) D_2 r1(x) D_3 r1(x) D_4 r1(x) \
-- h(x) = | |
dx \ D_1 r2(x) D_2 r2(x) D_3 r2(x) D_4 r2(x) /
/ [S(1)-A(1)]/r1(x) [S(2)-A(2)]/r1(x) 0 0 \
= | |
\ [S(1)-B(1)]/r2(x) [S(2)-B(2)]/r2(x) 0 0 /
This measurement model is specified
by a function called meas
in the Measurement window of the KBF program.
The function meas has the following input and output:
|
Name |
Description |
Dimension |
Type
|
k |
time index |
1 x 1 |
Input
|
xk |
current state value |
4 x 1 |
Input
|
hk |
h(xk) |
2 x 1 |
Output
|
dhk |
derivative of h(xk) |
2 x 4 |
Output
|
Rk |
covariance of measurement noise |
2 x 2 |
Output
|
|
|
The Measurement window for our example is:
Transition Model
A Kalman-Bucy filter also has a model that
relates the state vector at one time
to its value at the next time.
The general form of this model is
x = g (x ) + w
k+1 k k k
where the last term is the mean zero random transition noise.
For our example, the covariance of the transition noise is given by
/ 1 0 0 0 \
Q = | 0 1 0 0 |
k | 0 0 .4 0 |
\ 0 0 0 .4 /
Note that because this matrix is diagonal,
the components of the transition noise are independent.
Using delta to denote
the corresponding standard deviations,
delta w (1) = 1
k
delta w (2) = 1
k __
delta w (3) = \/.4
k __
delta w (4) = \/.4
k
Let Dt spacing between time point in our example.
The expected value of the next state vector as a function of the current is
modelled as
/ x(1) + x(3) Dt \
g(x) = | x(2) + x(4) Dt |
| x(3) |
\ x(4) /
(Note that we are able to drop the dependence of g on
k for our example.)
It follows that
d / 1 0 Dt 0 \
-- g(x) = | 0 1 0 Dt |
dx | 0 0 1 0 |
\ 0 0 0 1 /
This transition model is specified
by a function called tran
in the Transition window of the KBF program.
The function tran has the following input and output:
|
Name |
Description |
Dimension |
Type
|
k |
time index |
1 x 1 |
Input
|
xk |
current state value |
4 x 1 |
Input
|
gk |
g(xk) |
4 x 1 |
Output
|
dgk |
derivative of g(xk) |
4 x 4 |
Output
|
Qk |
covariance of transition noise |
4 x 4 |
Output
|
|
|
The Transition window for our example is: