// -*- C++ -*- #include #include "kalman_exp.hpp" #include namespace gr { namespace digitalhf { filter_update::sptr kalman_exp::make(float r, float lambda) { return filter_update::sptr(new kalman_exp(r, lambda)); } kalman_exp::kalman_exp(float r, float lambda) : _r(r) , _lambda(lambda) , _gain() , _p() , _temp() , _t1() { } kalman_exp::~kalman_exp() { } void kalman_exp::resize(size_t n) { if (_gain.size() == n && _p.size() == n*n && _temp.size() == n*n && _t1.size() == n*n) return; _gain.resize(n); _p.resize(n*n); _temp.resize(n*n); _t1.resize(n*n); reset(); } void kalman_exp::reset() { size_t const n = _gain.size(); std::fill_n(_gain.begin(), n, 0); std::fill_n(_p.begin(), n*n, 0); for (size_t i=0; i 0); unsigned const n = end - beg; resize(n); // P = P/lambda volk_32f_s32f_multiply_32f((float*)&_p[0], (float const*)&_p[0], 1.0f/_lambda, 2*n*n); // gain = P*H^{\dagger} for (unsigned i=0; i const& p) { _r = p.at("r"); _lambda = p.at("lambda"); } } // namespace digitalhf } // namespace gr