From caef87fe90d566637ef2fe2e10c10b7086de5e4c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 4 Aug 2015 15:00:38 -0700 Subject: [PATCH] Refactor IIRBiquadFilter to separate configuration structure. --- firmware/baseband/dsp_iir.hpp | 18 ++++++++++-------- firmware/baseband/main.cpp | 30 ++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/firmware/baseband/dsp_iir.hpp b/firmware/baseband/dsp_iir.hpp index 9a7602e9b..8fb12f055 100644 --- a/firmware/baseband/dsp_iir.hpp +++ b/firmware/baseband/dsp_iir.hpp @@ -26,16 +26,19 @@ #include "dsp_types.hpp" +struct iir_biquad_config_t { + const std::array b; + const std::array a; +}; + class IIRBiquadFilter { public: // http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt // Assume all coefficients are normalized so that a0=1.0 constexpr IIRBiquadFilter( - std::array b, - std::array a - ) : b(b), - a(a) + const iir_biquad_config_t& config + ) : config(config) { } @@ -51,8 +54,7 @@ public: } private: - const std::array b; - const std::array a; + const iir_biquad_config_t config; std::array x { { 0.0f, 0.0f, 0.0f } }; std::array y { { 0.0f, 0.0f, 0.0f } }; @@ -63,8 +65,8 @@ private: y[0] = y[1]; y[1] = y[2]; - y[2] = b[0] * x[2] + b[1] * x[1] + b[2] * x[0] - - a[1] * y[1] - a[2] * y[0]; + y[2] = config.b[0] * x[2] + config.b[1] * x[1] + config.b[2] * x[0] + - config.a[1] * y[1] - config.a[2] * y[0]; return y[2]; } diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index e731c261f..15ff75d0a 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -175,6 +175,16 @@ private: } }; +static constexpr iir_biquad_config_t audio_hpf_config { + { 0.93346032f, -1.86687724f, 0.93346032f }, + { 1.0f , -1.97730264f, 0.97773668f } +}; + +static constexpr iir_biquad_config_t non_audio_hpf_config { + { 0.51891061f, -0.95714180f, 0.51891061f }, + { 1.0f , -0.79878302f, 0.43960231f } +}; + class FMSquelch { public: bool execute(buffer_s16_t audio) { @@ -203,10 +213,7 @@ private: // nyquist = 48000 / 2.0 // scipy.signal.iirdesign(wp=8000 / nyquist, ws= 4000 / nyquist, gpass=1, gstop=18, ftype='ellip') - IIRBiquadFilter non_audio_hpf { - { 0.51891061f, -0.95714180f, 0.51891061f }, - { 1.0f , -0.79878302f, 0.43960231f } - }; + IIRBiquadFilter non_audio_hpf { non_audio_hpf_config }; }; static volatile bool channel_spectrum_request_update { false }; @@ -332,10 +339,7 @@ private: const fir_taps_real<64>& channel_filter_taps = taps_64_lp_031_070_tfilter; dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; dsp::demodulate::AM demod; - IIRBiquadFilter audio_hpf { - { 0.93346032f, -1.86687724f, 0.93346032f }, - { 1.0f , -1.97730264f, 0.97773668f } - }; + IIRBiquadFilter audio_hpf { audio_hpf_config }; }; class NarrowbandFMAudio : public BasebandProcessor { @@ -393,10 +397,7 @@ private: dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; dsp::demodulate::FM demod { 48000, 7500 }; - IIRBiquadFilter audio_hpf { - { 0.93346032f, -1.86687724f, 0.93346032f }, - { 1.0f , -1.97730264f, 0.97773668f } - }; + IIRBiquadFilter audio_hpf { audio_hpf_config }; FMSquelch squelch; }; @@ -461,10 +462,7 @@ private: const fir_taps_real<64>& audio_filter_taps = taps_64_lp_156_198; dsp::decimate::FIR64AndDecimateBy2Real audio_filter { audio_filter_taps.taps }; - IIRBiquadFilter audio_hpf { - { 0.93346032f, -1.86687724f, 0.93346032f }, - { 1.0f , -1.97730264f, 0.97773668f } - }; + IIRBiquadFilter audio_hpf { audio_hpf_config }; }; class FSKProcessor : public BasebandProcessor {