From 11e4298310604d99e3019afbc27fa15eb05f4ed2 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 15 Jun 2024 09:59:49 +0200 Subject: [PATCH] add block processing --- filter/chebyshev.h | 48 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/filter/chebyshev.h b/filter/chebyshev.h index 45fde43..941e161 100644 --- a/filter/chebyshev.h +++ b/filter/chebyshev.h @@ -6,15 +6,20 @@ namespace trnr { class chebyshev { public: + chebyshev() {} + + chebyshev(double _samplerate, double _frequency) + { + set_samplerate(_samplerate); + set_frequency(_frequency); + } + void set_samplerate(double _samplerate) { samplerate = _samplerate; } - void process_sample(double& input, double frequency) + void set_frequency(double _frequency) { - - if (frequency >= 20000.f) { frequency = 20000.f; } - // First calculate the prewarped digital frequency : - auto K = tanf(M_PI * frequency / samplerate); + auto K = tanf(M_PI * _frequency / samplerate); // Now we calc some Coefficients : auto sg = sinh(passband_ripple); @@ -44,8 +49,17 @@ public: b3 = a3 * K; b4 = 2 * b3; b5 = b3; + } - // Then calculate the output as follows: + void reset(double _samplerate, double _frequency) + { + set_samplerate(_samplerate); + set_frequency(_frequency); + } + + template + void process_sample(t_sample& input) + { auto Stage1 = b0 * input + state0; state0 = b1 * input + a1 * Stage1 + state1; state1 = b2 * input + a2 * Stage1; @@ -54,8 +68,28 @@ public: state3 = b5 * Stage1 + a5 * input; } + template + void process_sample(t_sample& input, double frequency) + { + set_frequency(frequency); + + process_sample(input); + } + + template + void process_block(t_sample* input, int blockSize) + { + t_sample output = 0; + + for (int i = 0; i < blockSize; i++) { + output = input[i]; + process_sample(output); + input[i] = output; + } + } + private: - double samplerate = 0; + double samplerate = 20000; double a0 = 0; double a1 = 0; double a2 = 0;