00001
00002
00003 #ifndef FILTER_PARTICLE_FILTER_HPP
00004 #define FILTER_PARTICLE_FILTER_HPP
00005
00006 #include "jmath/jblas.hpp"
00007 #include "jmath/random.hpp"
00008
00009 #include "filter/predictModel.hpp"
00010 #include "filter/observeModel.hpp"
00011
00012 namespace jafar {
00013 namespace filter {
00014
00015
00018 class ParticleFilter {
00019 public:
00020
00021
00022
00023 typedef std::vector<jblas::vec>::iterator STATE_IT;
00024 typedef std::vector<jblas::vec>::const_iterator STATE_CONST_IT;
00025
00030
00031
00032
00033
00034
00035
00036
00037
00044 ParticleFilter(std::size_t nbParticles_, std::size_t sizeState_,
00045 const jblas::vec& stateMin_, const jblas::vec& stateMax_);
00046
00047 ~ParticleFilter();
00048
00049 inline std::size_t sizeState() const {return _sizeState;};
00050 inline std::size_t getNbParticles() const {return nbParticles;};
00051
00052 double getWeight(std::size_t index_) const;
00053 const jblas::vec& getState(std::size_t index_) const;
00054
00055 void predict(LinearPredictModel& m_);
00056
00063
00064 void update(jafar::filter::JacobianObserveModel& m_, double z_);
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 const jblas::vec& getStateMean();
00077
00079 const jblas::sym_mat& getStateCov();
00080
00081 protected:
00082
00083 std::size_t nbParticles;
00084 std::size_t _sizeState;
00085
00086 jblas::vec weight;
00087 std::vector<jblas::vec> states;
00088
00089 jblas::vec stateMean;
00090 jblas::sym_mat stateCov;
00091 bool meanAndCovUpToDate;
00092
00093 jafar::jmath::MultiDimNormalDistribution predictNoise;
00094
00095 void computeMeanAndCov();
00096
00097 };
00098
00099 }
00100 }
00101
00102 #endif // FILTER_PARTICLE_FILTER_HPP