00001 #ifndef INDII_ML_FILTER_UNSCENTEDKALMANFILTERMODEL_HPP 00002 #define INDII_ML_FILTER_UNSCENTEDKALMANFILTERMODEL_HPP 00003 00004 #include "../aux/GaussianPdf.hpp" 00005 00006 namespace indii { 00007 namespace ml { 00008 namespace filter { 00009 00010 /** 00011 * UnscentedKalmanFilter compatible model. 00012 * 00013 * @author Lawrence Murray <lawrence@indii.org> 00014 * @version $Rev: 544 $ 00015 * @date $Date: 2008-09-01 15:04:39 +0100 (Mon, 01 Sep 2008) $ 00016 * 00017 * @param T The type of time. 00018 * 00019 * @see indii::ml::filter for general usage guidelines. 00020 */ 00021 template <class T = unsigned int> 00022 class UnscentedKalmanFilterModel { 00023 public: 00024 /** 00025 * Destructor. 00026 */ 00027 virtual ~UnscentedKalmanFilterModel() = 0; 00028 00029 /** 00030 * Get number of dimensions in state. 00031 * 00032 * @return Number of dimensions in state. 00033 */ 00034 virtual unsigned int getStateSize() = 0; 00035 00036 /** 00037 * Get system noise. 00038 * 00039 * @return \f$\mathbf{w}\f$; system noise. 00040 */ 00041 virtual indii::ml::aux::GaussianPdf& getSystemNoise() = 0; 00042 00043 /** 00044 * Get measurement noise. 00045 * 00046 * @return \f$\mathbf{v}\f$; measurement noise. 00047 */ 00048 virtual indii::ml::aux::GaussianPdf& getMeasurementNoise() = 0; 00049 00050 /** 00051 * Propagate sample through the state transition function. 00052 * 00053 * @param x \f$\mathbf{x}^*\f$; state sample. 00054 * @param w \f$\mathbf{w}^*\f$; noise sample. 00055 * @param delta \f$\Delta t\f$; time step. 00056 * 00057 * @return \f$f(\mathbf{x}^*,\mathbf{w}^*,\Delta t)\f$; propagation 00058 * of \f$\mathbf{x}^*\f$ through the transition function, given 00059 * noise of \f$\mathbf{w}^*\f$. 00060 */ 00061 virtual indii::ml::aux::vector transition(const indii::ml::aux::vector& x, 00062 const indii::ml::aux::vector& w, T delta) = 0; 00063 00064 /** 00065 * Propagate sample through the measurement function. 00066 * 00067 * @param x \f$\mathbf{x}^*\f$; state sample. 00068 * @param v \f$\mathbf{v}^*\f$; noise sample. 00069 * 00070 * @return \f$g(\mathbf{x}^*,\mathbf{v}^*)\f$; propagation of 00071 * \f$\mathbf{x}^*\f$ through the measurement function, given noise 00072 * of \f$\mathbf{v}^*\f$. 00073 */ 00074 virtual indii::ml::aux::vector measure(const indii::ml::aux::vector& x, 00075 const indii::ml::aux::vector& v) = 0; 00076 00077 }; 00078 00079 } 00080 } 00081 } 00082 00083 template <class T> 00084 indii::ml::filter::UnscentedKalmanFilterModel<T>::~UnscentedKalmanFilterModel() { 00085 // 00086 } 00087 00088 #endif
1.5.3