9 #include <pf/rv_eval.h>
12 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
13 class acv_bs :
public BSFilter<nparts, dimx, dimy, resampT, float_t>
16 using ssv = Eigen::Matrix<float_t, dimx, 1>;
17 using osv = Eigen::Matrix<float_t, dimy, 1>;
18 using ssm = Eigen::Matrix<float_t, dimx, dimx>;
19 using osm = Eigen::Matrix<float_t, dimy, dimy>;
20 using esm = Eigen::Matrix<float_t, dimy,dimx>;
33 rvsamp::UnivNormSampler<float_t> m_stdNormSampler;
34 rvsamp::UnivStudTSampler<float_t> m_t_sampler;
35 rvsamp::MVNSampler<dimx,float_t> m_state_error_sampler;
38 acv_bs(float_t var_s0, float_t var_u0, float_t var_s, float_t var_u, float_t scale_y, float_t nu_y, float_t Delta);
41 float_t logQ1Ev(
const ssv &x1,
const osv &y1);
42 float_t logMuEv(
const ssv &x1);
43 float_t logGEv(
const osv &yt,
const ssv &xt);
44 auto fSamp(
const ssv &xtm1) -> ssv;
45 auto q1Samp(
const osv &y1) -> ssv;
49 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
50 acv_bs<nparts, dimx, dimy, resampT, float_t>::acv_bs( float_t var_s0, float_t var_u0, float_t var_s, float_t var_u, float_t scale_y, float_t nu_y, float_t Delta)
51 : m_var_s0(var_s0), m_var_u0(var_u0), m_nu_y(nu_y)
52 , m_A(ssm::Identity()), m_B(esm::Zero()), m_obs_shape_mat(scale_y * osm::Identity())
53 , m_t_sampler(nu_y), m_state_error_sampler(ssv::Zero(), ssm::Identity())
55 ssm state_error_cov(ssm::Zero());
56 state_error_cov(0,0) = var_s;
57 state_error_cov(1,1) = var_u;
58 state_error_cov(2,2) = var_s;
59 state_error_cov(3,3) = var_u;
60 m_state_error_sampler.setCovar(state_error_cov);
70 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
74 x1samp(0) = m_stdNormSampler.sample() * std::sqrt(m_var_s0);
75 x1samp(1) = m_stdNormSampler.sample() * std::sqrt(m_var_u0);
76 x1samp(2) = m_stdNormSampler.sample() * std::sqrt(m_var_s0);
77 x1samp(3) = m_stdNormSampler.sample() * std::sqrt(m_var_u0);
82 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
85 return m_A * xtm1 + m_state_error_sampler.sample();
89 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
92 return rveval::evalMultivT<dimy,float_t>(yt, m_B * xt, m_obs_shape_mat, m_nu_y,
true);
96 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
99 return rveval::evalUnivNorm<float_t>(x1(0),0.0,std::sqrt(m_var_s0),
true) +
100 rveval::evalUnivNorm<float_t>(x1(1),0.0,std::sqrt(m_var_u0),
true) +
101 rveval::evalUnivNorm<float_t>(x1(2),0.0,std::sqrt(m_var_s0),
true) +
102 rveval::evalUnivNorm<float_t>(x1(3),0.0,std::sqrt(m_var_u0),
true);
106 template<
size_t nparts,
size_t dimx,
size_t dimy,
typename resampT,
typename float_t>
109 return rveval::evalUnivNorm<float_t>(x1samp(0),0.0,std::sqrt(m_var_s0),
true) +
110 rveval::evalUnivNorm<float_t>(x1samp(1),0.0,std::sqrt(m_var_u0),
true) +
111 rveval::evalUnivNorm<float_t>(x1samp(2),0.0,std::sqrt(m_var_s0),
true) +
112 rveval::evalUnivNorm<float_t>(x1samp(3),0.0,std::sqrt(m_var_u0),
true);