00001 #ifndef _BAYES_FILTER_ITERATED_COVARIANCE
00002 #define _BAYES_FILTER_ITERATED_COVARIANCE
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "bayesFlt.hpp"
00026
00027
00028 namespace Bayesian_filter
00029 {
00030
00031 class Iterated_covariance_scheme;
00032
00033 class Iterated_observe_model : virtual public Observe_model_base
00034
00035
00036
00037 {
00038 protected:
00039 Iterated_observe_model ()
00040 {}
00041 public:
00042 virtual void relinearise (const FM::Vec& x) = 0;
00043
00044 };
00045
00046
00047 class Iterated_terminator : public Bayes_base
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 {
00060 public:
00061 virtual bool term_or_relinearize (const Iterated_covariance_scheme& f)
00062 {
00063 return true;
00064 }
00065 };
00066
00067 class Counted_iterated_terminator : public Iterated_terminator
00068
00069
00070
00071 {
00072 public:
00073 Counted_iterated_terminator (Iterated_observe_model& model, unsigned iterations) :
00074 m(model), i(iterations)
00075 {}
00076 bool term_or_relinearize (const Iterated_covariance_scheme& f);
00077 Iterated_observe_model& m;
00078 unsigned i;
00079 };
00080
00081
00082
00083 class Iterated_covariance_scheme : public Linrz_kalman_filter
00084 {
00085 public:
00086 Iterated_covariance_scheme (std::size_t x_size, std::size_t z_initialsize = 0);
00087
00088
00089 Iterated_covariance_scheme& operator= (const Iterated_covariance_scheme&);
00090
00091
00092 void init ();
00093 void update ();
00094 Float predict (Linrz_predict_model& f);
00095
00096 Float observe (Linrz_uncorrelated_observe_model& h, Iterated_terminator& term, const FM::Vec& z);
00097 Float observe (Linrz_correlated_observe_model& h, Iterated_terminator& term, const FM::Vec& z);
00098
00099 Float observe (Linrz_uncorrelated_observe_model& h, const FM::Vec& z)
00100 {
00101 Iterated_terminator term;
00102 return observe (h, term, z);
00103 }
00104 Float observe (Linrz_correlated_observe_model& h, const FM::Vec& z)
00105 {
00106 Iterated_terminator term;
00107 return observe (h, term, z);
00108 }
00109
00110 public:
00111 FM::SymMatrix S, SI;
00112
00113 protected:
00114 FM::RowMatrix tempX;
00115
00116 protected:
00117 std::size_t last_z_size;
00118 void observe_size (std::size_t z_size);
00119
00120 FM::Vec s;
00121 FM::Matrix HxT;
00122 };
00123
00124
00125 }
00126 #endif