From 4f726e02853e641d5c571d34d3b676d961ef244b Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Mon, 22 Dec 2014 17:36:24 +0000 Subject: [PATCH] - FirComplex: Added static process() git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@105 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- radio/Equalizer.hpp | 8 ++++---- radio/FirComplex.hpp | 24 +++++++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/radio/Equalizer.hpp b/radio/Equalizer.hpp index dc5aaea..e3f8400 100644 --- a/radio/Equalizer.hpp +++ b/radio/Equalizer.hpp @@ -71,7 +71,7 @@ public: void update(ComplexScalar const &e, RealScalar const &mu) { - m_w += m_x * conj(e) * mu; + m_w += m_state * conj(e) * mu; } private: @@ -97,7 +97,7 @@ public: RealScalar x1, x2; x1 = abs(x); - x2 = abs(m_x[m_numTaps-1]); + x2 = abs(m_state[m_numTaps-1]); m_power = max(RealScalar(0), m_power + (x1*x1 - m_xLast)); m_xLast = x2*x2; @@ -175,10 +175,10 @@ public: ComplexScalar process(ComplexScalar const &xs, ComplexScalar const &xh) { int32_t i; - CVec &x = m_x; + CVec &x = m_state; // x(0:size-1) = [xs, x(0:m_numFeedforward-2), xh, x(m_numFeedforward:size-2)] - m_x.reverse() << m_x.segment(m_numFeedforward-1, m_numFeedBack).reverse(),xh,m_x.segment(0, m_numFeedforward-2).reverse(),xs; + m_state.reverse() << m_state.segment(m_numFeedforward-1, m_numFeedBack).reverse(),xh,m_state.segment(0, m_numFeedforward-2).reverse(),xs; return FirComplex::process(m_w); } diff --git a/radio/FirComplex.hpp b/radio/FirComplex.hpp index 70f3e98..c2f0c83 100644 --- a/radio/FirComplex.hpp +++ b/radio/FirComplex.hpp @@ -18,7 +18,7 @@ class FirComplex public: FirComplex(uint32_t numTaps = 0) : m_numTaps(numTaps) - , m_x(numTaps) + , m_state(numTaps) { } virtual ~FirComplex() @@ -29,28 +29,38 @@ public: void setNumTaps(uint32_t numTaps) { m_numTaps = numTaps; - m_x.resize(numTaps); - m_x.fill(ComplexScalar(0,0)); + m_state.resize(numTaps); + m_state.fill(ComplexScalar(0,0)); } void feed(ComplexScalar const &x) { - m_x.reverse() << m_x.head(m_numTaps-1).reverse(), x; + m_state.reverse() << m_state.head(m_numTaps-1).reverse(), x; + } + + static void feed(CVec &state, ComplexScalar const &x) + { + state.reverse() << state.head(state.size()-1).reverse(), x; } ComplexScalar process(CVec const &coeff) { - return m_x.transpose() * coeff.conjugate(); + return m_state.transpose() * coeff.conjugate(); } ComplexScalar processReal(RVec const &coeff) { - return m_x.transpose() * coeff; + return m_state.transpose() * coeff; + } + + static ComplexScalar processReal(CVec const &state, RVec const &coeff) + { + return state.transpose() * coeff; } protected: uint32_t m_numTaps; - CVec m_x; + CVec m_state; };