ECE 722 Final Project – Satellite Position Estimation by Kalman Filter

In this project, you should use the classic non-linear near-earth space vehicle position and velocity estimation problem. Nonlinear noiseless and noisy trajectories and measurements should be simulated. This data should then be processed by algorithms for a Discrete Linearized Kalman Filter (LKF), and a Discrete Extended Kalman Filter (EKF). The results should be compared in terms of Root-Mean-Squared (RMS) error and the relative performance of the algorithms examined.

The near-earth satellite estimation problem results in the following system of nonlinear state equations (ur is random radial noise and uθ is random tangential noise):

 x2   x˙   K  1 x x 2   u g  earth's gravitational constant    1 4 2 r  x˙ 2 x     1  with R  earth's radius (6712 km)   e x˙ 3  x4     K  gR 2 x2 x4 u e x˙ 4    2    x1 x1 

This system of equations should be used to simulate the noiseless and noisy nonlinear trajectories, as well as within the EKF algorithm. However, for the LKF, further simplification of the model occurs. Assuming uθ is distributed with μ=0, the Jacobian becomes:

 0 1 0 0   2 2K  x  0 0 2x x f  4 x 3 1 4    1  x  0 0 0 1  2x x  2x  2x  2 4 4 0 2   2   x1 x1 x1 

In the case of the linearized system, the radius should be fixed and the angular velocity should be fixed (x1 & x3), and the range rate should be zero (x2). This results in a constant-valued F matrix for simulation of the nominal trajectory and actual state vector error estimation in the LKF.

 0 1 0 0   2 2K  w  0 0 2R w f  0 R 3 0 0  R  initial satellite radius   0  with 0 The 0 0 0 1 input x   w0  initial  velocity  2w coupling  0 0 0 0    matrix  R0  becomes: 0 0  0 0      1 0  1 0  G  linear case G  0 0  0 0   1   1  0  0   x1   R0  The measurement model for this problem is based on vehicle sensor measurements of horizon angle and angle to a fixed celestial body, as explained in [1]. This results in the following measurement model:

  R  z    sin 1  e  R  earth's radius 1      with e       x1  z2     0  initial fixed object angle   0  x3 

The measurement model can be linearized in fashion similar to the system model:

  R    R  h e 0 0 0 h e 0 0 0   2 2     2 2  x1 x1  Re R0 R0  Re x  0 1 0 x x1 R0  0 1 0  0  x3 w0t  0 

The noises (process and measurement) are defined as follows:

ur (t) u(t)    ~ (0,Q) u (t)

v1 (t) v(t)    ~ (0, R) v2 (t)

The earth is assumed a perfect sphere with radius Re=6712 km. The earth’s gravity constant is g=9.81 2, 2 m/sec which yields constant K=g*( Re) . The initial satellite radius (and linearized constant radius) should be chosen as R0=6912 km. The initial (and constant linearized) angular velocity is then determined by: K    0.00115686013929rad 0 3 sec R0

However, this value will not produce a circular orbit when applied to the nonlinear equations. Therefore, rad by trial and error it was adjusted to produce a very nearly circular orbit to value ωo=0.0011191 /sec. Having completed these preliminary calculations, the simulation can begin.

Simulation of Nonlinear Trajectories & Measurements

The first step requires three simulations:

 Noiseless trajectory from nonlinear system model.  Noisy trajectory from nonlinear system model.  Noisy measurements from nonlinear measurement model.

References

1 R. Brown & P. Hwang, “Introduction to Random Signals and Applied Kalman Filtering,” John Wiley & Sons, New York, 1997.

Page 2 / 3 2 M. Grewal & P. A. Andrews, “Kalman Filtering: Theory and Practice Using MATLAB®,” John Wiley & Sons, New York,

APPENDIX A – MatLab Code ‘satellite.m’ – nonlinear system of differential equations for nonlinear trajectory simulations

function dx = satellite(t,x)

%Function satellite defines the nonlinear system of equations describing %the orbit to be used with ode45 in Matlab dx = zeros(4,1); % a column vector dx(1) = x(2); dx(2) = x(1)*(x(4)^2)-(413567665920000/(x(1)^2)); dx(3) = x(4); dx(4) = -2*((x(2)*x(4))/x(1));

Page 3 / 3