From a8efd95db70069ab6ecc3e8619666ce911270aa6 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 29 Aug 2015 18:39:29 +0200 Subject: [PATCH] Deep redesign: Bandpass and lowpass filter Valgrind optimization --- include-gpl/dsp/bandpass.h | 20 +++++++++++++------- include-gpl/dsp/lowpass.h | 38 +++++++++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/include-gpl/dsp/bandpass.h b/include-gpl/dsp/bandpass.h index fb632079c..844efc365 100644 --- a/include-gpl/dsp/bandpass.h +++ b/include-gpl/dsp/bandpass.h @@ -76,26 +76,31 @@ public: Type acc = 0; int a = m_ptr; int b = a - 1; - int i; + int i, size; m_samples[m_ptr] = sample; - while(b < 0) { + while(b < 0) + { b += m_samples.size(); } - for(i = 0; i < (int)m_taps.size() - 1; i++) + size = (int) m_taps.size() - 1; // Valgrind optim + + for(i = 0; i < size; i++) { - acc += (m_samples[a] + m_samples[b]) * m_taps[i]; + acc += (m_samples[a] + m_samples[b]) * m_taps[i]; a++; - while(a >= (int)m_samples.size()) { + while(a >= (int)m_samples.size()) + { a -= m_samples.size(); } b--; - while(b < 0) { + while(b < 0) + { b += m_samples.size(); } } @@ -104,7 +109,8 @@ public: m_ptr++; - while(m_ptr >= (int)m_samples.size()) { + while(m_ptr >= (int)m_samples.size()) + { m_ptr -= m_samples.size(); } diff --git a/include-gpl/dsp/lowpass.h b/include-gpl/dsp/lowpass.h index c415a9484..1d6705b4e 100644 --- a/include-gpl/dsp/lowpass.h +++ b/include-gpl/dsp/lowpass.h @@ -54,27 +54,43 @@ public: Type acc = 0; int a = m_ptr; int b = a - 1; - int i; + int i, size; m_samples[m_ptr] = sample; - while(b < 0) + while (b < 0) + { b += m_samples.size(); - - for(i = 0; i < (int)m_taps.size() - 1; i++) { - acc += (m_samples[a] + m_samples[b]) * m_taps[i]; - a++; - while(a >= (int)m_samples.size()) - a -= m_samples.size(); - b--; - while(b < 0) - b += m_samples.size(); } + + size = (int) m_taps.size() - 1; // Valgrind optim + + for (i = 0; i < size; i++) + { + acc += (m_samples[a] + m_samples[b]) * m_taps[i]; + a++; + + while (a >= (int)m_samples.size()) + { + a -= m_samples.size(); + } + + b--; + + while(b < 0) + { + b += m_samples.size(); + } + } + acc += m_samples[a] * m_taps[i]; m_ptr++; + while(m_ptr >= (int)m_samples.size()) + { m_ptr -= m_samples.size(); + } return acc; }