20 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug=false>
26 using ssv = Eigen::Matrix<float_t, dimx, 1>;
28 using osv = Eigen::Matrix<float_t, dimy, 1>;
30 using Mat = Eigen::Matrix<float_t,Eigen::Dynamic,Eigen::Dynamic>;
72 void filter(
const osv &data,
const std::vector<std::function<
const Mat(
const ssv&)> >& fs = std::vector<std::function<
const Mat(
const ssv&)> >());
106 virtual float_t
logGEv (
const osv &yt,
const ssv &xt ) = 0;
115 virtual float_t
logFEv (
const ssv &xt,
const ssv &xtm1 ) = 0;
134 virtual float_t
logQEv (
const ssv &xt,
const ssv &xtm1,
const osv &yt ) = 0;
168 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
178 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
182 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
189 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
196 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
206 float_t maxOldLogUnNormWts(-std::numeric_limits<float_t>::infinity());
207 for(
size_t ii = 0; ii < nparts; ++ii)
230 float_t sumExp1(0.0);
231 float_t sumExp2(0.0);
232 for(
size_t i = 0; i < nparts; ++i){
234 sumExp2 += std::exp(oldLogUnNormWts[i] - maxOldLogUnNormWts);
236 m_logLastCondLike = maxNumer + std::log(sumExp1) - maxOldLogUnNormWts - std::log(sumExp2);
240 float_t weightNormConst(0.0);
244 unsigned int rows = testOut.rows();
245 unsigned int cols = testOut.cols();
246 Mat numer = Mat::Zero(rows,cols);
249 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
257 std::cout <<
"transposed expectation " << fId <<
": " <<
m_expectations[fId].transpose() <<
"\n";
274 for(
size_t ii = 0; ii < nparts; ++ii)
291 for(
size_t i = 0; i < nparts; ++i){
302 unsigned int rows = testOut.rows();
303 unsigned int cols = testOut.cols();
304 Mat numer = Mat::Zero(rows,cols);
307 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
315 std::cout <<
"transposed expectation " << fId <<
": " <<
m_expectations[fId].transpose() <<
"\n";
337 #endif //SISR_FILTER_H std::array< ssv, nparts > arrayStates
Definition: sisr_filter.h:32
arrayfloat_t m_logUnNormWeights
particle weights
Definition: sisr_filter.h:142
unsigned int m_now
current time point
Definition: sisr_filter.h:145
std::vector< Mat > m_expectations
expectations E[h(x_t) | y_{1:t}] for user defined "h"s
Definition: sisr_filter.h:154
float_t m_logLastCondLike
log p(y_t|y_{1:t-1}) or log p(y1)
Definition: sisr_filter.h:148
Eigen::Matrix< float_t, dimy, 1 > osv
Definition: sisr_filter.h:28
resamp_t m_resampler
resampling object
Definition: sisr_filter.h:151
SISRFilter(const unsigned int &rs=1)
The (one and only) constructor.
Definition: sisr_filter.h:169
virtual ~SISRFilter()
The (virtual) destructor.
Definition: sisr_filter.h:179
virtual float_t logQ1Ev(const ssv &x1, const osv &y1)=0
Calculate q1Ev or log q1Ev.
Eigen::Matrix< float_t, dimx, 1 > ssv
Definition: sisr_filter.h:26
std::array< float_t, nparts > arrayfloat_t
Definition: sisr_filter.h:34
Eigen::Matrix< float_t, Eigen::Dynamic, Eigen::Dynamic > Mat
Definition: sisr_filter.h:30
virtual ssv q1Samp(const osv &y1)=0
Samples from time 1 proposal.
virtual ssv qSamp(const ssv &xtm1, const osv &yt)=0
Samples from the proposal/instrumental/importance density at time t.
All non Rao-Blackwellized particle filters inherit from this.
static constexpr unsigned int num_particles
Definition: sisr_filter.h:36
void filter(const osv &data, const std::vector< std::function< const Mat(const ssv &)> > &fs=std::vector< std::function< const Mat(const ssv &)> >())
updates filtering distribution on a new datapoint. Optionally stores expectations of functionals...
Definition: sisr_filter.h:197
virtual float_t logQEv(const ssv &xt, const ssv &xtm1, const osv &yt)=0
Evaluates the proposal/instrumental/importance density/pmf.
virtual float_t logFEv(const ssv &xt, const ssv &xtm1)=0
Evaluates the state transition density.
float_t getLogCondLike() const
Returns the most recent (log-) conditiona likelihood.
Definition: sisr_filter.h:183
std::vector< Mat > getExpectations() const
return all stored expectations (taken with respect to $p(x_t|y_{1:t})$
Definition: sisr_filter.h:190
virtual float_t logGEv(const osv &yt, const ssv &xt)=0
Calculate gEv or logGEv.
virtual float_t logMuEv(const ssv &x1)=0
Calculate muEv or logmuEv.
A base class for the Sequential Important Sampling with Resampling (SISR).
Definition: sisr_filter.h:21
unsigned int m_resampSched
resampling schedule (e.g. resample every __ time points)
Definition: sisr_filter.h:157
arrayStates m_particles
particle samples
Definition: sisr_filter.h:139