From 7cfcc61bd38a8632c8a67a68e6153126102b9943 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 18 Oct 2019 12:11:18 +0200 Subject: [PATCH] Doxygen/style, test for div/0 --- src/blacksound/dsp/biquadfilter.cpp | 28 +++++++++++++++++----------- src/blacksound/dsp/biquadfilter.h | 28 +++++++++++++++++----------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/blacksound/dsp/biquadfilter.cpp b/src/blacksound/dsp/biquadfilter.cpp index e19a2e74a..9e8ca2c9d 100644 --- a/src/blacksound/dsp/biquadfilter.cpp +++ b/src/blacksound/dsp/biquadfilter.cpp @@ -7,10 +7,14 @@ */ #include "biquadfilter.h" +#include "blackmisc/verify.h" +#include "blackconfig/buildconfig.h" #include #include +using namespace BlackMisc; +using namespace BlackConfig; namespace BlackSound { @@ -19,27 +23,29 @@ namespace BlackSound float BiQuadFilter::transform(float inSample) { // compute result - double result = a0 * inSample + a1 * x1 + a2 * x2 - a3 * y1 - a4 * y2; + double result = m_a0 * inSample + m_a1 * m_x1 + m_a2 * m_x2 - m_a3 * m_y1 - m_a4 * m_y2; // shift x1 to x2, sample to x1 - x2 = x1; - x1 = inSample; + m_x2 = m_x1; + m_x1 = inSample; // shift y1 to y2, result to y1 - y2 = y1; - y1 = static_cast(result); + m_y2 = m_y1; + m_y1 = static_cast(result); - return y1; + return m_y1; } void BiQuadFilter::setCoefficients(double aa0, double aa1, double aa2, double b0, double b1, double b2) { + if (CBuildConfig::isLocalDeveloperDebugBuild()) { BLACK_VERIFY_X(qAbs(aa0) > 1E-06, Q_FUNC_INFO, "Div by zero?"); } + // precompute the coefficients - a0 = b0 / aa0; - a1 = b1 / aa0; - a2 = b2 / aa0; - a3 = aa1 / aa0; - a4 = aa2 / aa0; + m_a0 = b0 / aa0; + m_a1 = b1 / aa0; + m_a2 = b2 / aa0; + m_a3 = aa1 / aa0; + m_a4 = aa2 / aa0; } void BiQuadFilter::setLowPassFilter(float sampleRate, float cutoffFrequency, float q) diff --git a/src/blacksound/dsp/biquadfilter.h b/src/blacksound/dsp/biquadfilter.h index d0281d1c3..51c840bcc 100644 --- a/src/blacksound/dsp/biquadfilter.h +++ b/src/blacksound/dsp/biquadfilter.h @@ -8,8 +8,8 @@ //! \file -#ifndef BIQUADFILTER_H -#define BIQUADFILTER_H +#ifndef BLACKSOUND_DSP_BIQUADFILTER_H +#define BLACKSOUND_DSP_BIQUADFILTER_H #include "blacksound/blacksoundexport.h" @@ -24,28 +24,34 @@ namespace BlackSound //! Ctor BiQuadFilter() = default; + //! Transform float transform(float inSample); + + //! Set filter parameters @{ void setCoefficients(double aa0, double aa1, double aa2, double b0, double b1, double b2); void setLowPassFilter(float sampleRate, float cutoffFrequency, float q); void setPeakingEq(float sampleRate, float centreFrequency, float q, float dbGain); void setHighPassFilter(float sampleRate, float cutoffFrequency, float q); + //! @} + //! Get filters @{ static BiQuadFilter lowPassFilter(float sampleRate, float cutoffFrequency, float q); static BiQuadFilter highPassFilter(float sampleRate, float cutoffFrequency, float q); static BiQuadFilter peakingEQ(float sampleRate, float centreFrequency, float q, float dbGain); + //! @} private: - double a0; - double a1; - double a2; - double a3; - double a4; + double m_a0 = 0.0; + double m_a1 = 0.0; + double m_a2 = 0.0; + double m_a3 = 0.0; + double m_a4 = 0.0; // state - float x1 = 0.0; - float x2 = 0.0; - float y1 = 0.0; - float y2 = 0.0; + float m_x1 = 0.0; + float m_x2 = 0.0; + float m_y1 = 0.0; + float m_y2 = 0.0; }; } // ns } // ns