From 9d5e5c76c731890899f5487d944c8c8e82688378 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 26 Aug 2016 02:01:29 +0200 Subject: [PATCH] Fixed MovingAverage uint to uint32_t and template type conversions --- sdrbase/dsp/movingaverage.h | 39 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/sdrbase/dsp/movingaverage.h b/sdrbase/dsp/movingaverage.h index dfe284856..6d1199f98 100644 --- a/sdrbase/dsp/movingaverage.h +++ b/sdrbase/dsp/movingaverage.h @@ -1,6 +1,7 @@ #ifndef INCLUDE_MOVINGAVERAGE_H #define INCLUDE_MOVINGAVERAGE_H +#include #include #include "dsp/dsptypes.h" @@ -9,46 +10,54 @@ public: MovingAverage() : m_history(), m_sum(0), - m_ptr(0) + m_index(0) { } MovingAverage(int historySize, Type initial) : m_history(historySize, initial), m_sum((float) historySize * initial), - m_ptr(0) + m_index(0) { } void resize(int historySize, Type initial) { m_history.resize(historySize); - for(size_t i = 0; i < m_history.size(); i++) + + for(size_t i = 0; i < m_history.size(); i++) { m_history[i] = initial; - m_sum = (float) m_history.size() * initial; - m_ptr = 0; + } + + m_sum = (Type) m_history.size() * initial; + m_index = 0; } void feed(Type value) { - m_sum -= m_history[m_ptr]; - m_history[m_ptr] = value; - m_sum += value; - m_ptr++; - if(m_ptr >= m_history.size()) - m_ptr = 0; + Type& oldest = m_history[m_index]; + m_sum += value - oldest; + oldest = value; + + m_index++; + + if(m_index >= m_history.size()) { + m_index = 0; + } } void fill(Type value) { - for(size_t i = 0; i < m_history.size(); i++) + for(size_t i = 0; i < m_history.size(); i++) { m_history[i] = value; - m_sum = (float) m_history.size() * value; + } + + m_sum = (Type) m_history.size() * value; } Type average() const { - return m_sum / (float) m_history.size(); + return m_sum / (Type) m_history.size(); } Type sum() const @@ -59,7 +68,7 @@ public: protected: std::vector m_history; Type m_sum; - uint m_ptr; + uint32_t m_index; }; #endif // INCLUDE_MOVINGAVERAGE_H