Re: [Bayes++] Bayes++ w/EKF and a non-linear equation: How to model?
Brought to you by:
mistevens
From: Michael S. <ms...@21...> - 2006-12-12 21:42:26
|
Michael Stevens wrote: > On Monday, 11. December 2006 17:24, Michael Simon wrote: >> Hello, everyone. >> >> I am attempting to use the Covariance_filter as an EKF for a non-linear >> model. However, I do not understand which type of model class to use, >> and how to specify the data for the models, even after looking at the >> Bayesian Filtering overview. I'm pretty sure I need to use a >> linrz_predict_model (or something like that) but beyond that... > > 'Linrz_predict_model' is definately what you want. > >> The main problem is that the elements of the f function I want to use >> for the model are exponential. It's non-linear, with noise, but no >> control (it's essentially 'the object I'm trying to predict is walking >> around randomly, but within the laws of physics') How do you specify >> that? > > No-control is fine. Control inputs just make the implementation more complex! > I don't understand how you model can be 'exponential' when the physics are of > something moving around at random. Or do you mean that you have exponentially > correlated noise in you model? Actually, after sketching the algorithms out by hand, I don't understand it either. ;) I do want a model that would be sufficient to track something that might move at random, but the formula I had down clearly wouldn't give it. >> I've been looking at the Welch and Bishop introduction and trying >> to compare back to Bayes++, but with no avail. I'm fairly sure I could >> use the libraries if my model was linear, but I don't quite see how to >> put the non-linearity in there. > > I not sure of where you are stubling. Would it be possible to post the > equations that model your system? As I mentioned above, I was using the wrong formulas. At the time I was reading a report about EKF that purported to be using unconstrained Brownian Motion for modeling and trying to reproduce their results, but the formulas they gave don't produce anything approaching that, at least, not how I read them. (One example: x_k = exp(-1/4(x_(k-1) + 1.5 (deltax_(k-1)) from http://page.mi.fu-berlin.de/~zaldivar/files/tr-b-05-12.pdf ) > The Covariance_filter implements the EKF in a fairly standard form. It should > be usable for any non-linear problem that can be solved by an EKF. > You need to turn the maths of you model into 3 things: > f(x) : This should be easy once you have discrete time state equation of the > system! I suppose this is where my biggest problem was when the question was asked, but after some rooting through the code, I am under the impression you are supposed to replace the virtual f function with a function that takes x, computes f(x), computes the Jacobian for that time step and puts it in Fx, and returns the new value. Is that correct? > Fx : Is the Jacobian of f(x) > GqG' : This is often written as the symmetric matrix Q and is the covariance > of the addative noise in you discrete state equations. Generally it is > possible (an physically more meaningful) to write this a coupling matrix G > and an noise variance q. If this is not possible then you can numerically > obtain G and q from Q with the following: > > // Equivalent de-correlated form as GqG' > Float rcond = Bayesian_filter_matrix::UdUfactor (Qtemp, Q); > rclimit.check_PSD(rcond, "decorrelating Q not PSD"); > Bayesian_filter_matrix::UdUseperate (G, q, Qtemp); The two above things are simply variables to be set, yes? > > Hope this helps you in the right direction, > Michael Yes, this has been helpful so far, thanks. Michael S. |