2

I have a non-linear system described by a collection of first-order, non-linear difference equations:

x(k) = f(x(k-1)) + u(k-1)
y(k) = h(x(k)) + v(k)

where u(k-1) and v(k) are independent, zero-mean Gaussian noise processes with covariances Q and R, respectively.

I would like to use the kalman function in matlab to estimate x given y. However, the interface in the matlab control system toolbox is:

[K,L,P]= kalman(sys, Q, R, N)

where sys is the state-space model. My question is: how do I define sys for my system of first-order, non-linear difference equations in matlab?

M Wellington
  • 123
  • 7
  • Kalman filter can only be used for linear systems since the theory does not hold for non linear system. If your non linear system is operating around an equilibrium point you can linearize the system at that point and then use Kalman Filter for estimation. You may want to see https://en.wikipedia.org/wiki/Extended_Kalman_filter – Some Guy Aug 16 '16 at 20:11
  • I agree. You need to use extended Kalman filter in which `f` and `h` will be linearized around previously estimated state. – Mahsa.Ghasemi Aug 16 '16 at 20:48

1 Answers1

3

As mentioned by others, the kalman function is only for linear systems. However, for highly non-linear systems, the extended kalman filter (EKF) may be a poor estimator. In these cases, the unscented kalman filter (UKF) may be better. So, you may want to try both.

Matlab code for either (EKF or UKF) may be found in the EKF/UKF Toolbox for Matlab here. Another UKF implementation that is suited for your additive noise model can be found at Matlab Central.

Hope this helps.

aichao
  • 7,375
  • 3
  • 16
  • 18