Krotos Modules 3
Loading...
Searching...
No Matches
BiquadFilter.cpp
Go to the documentation of this file.
1#include "BiquadFilter.h"
2
3//=====================================================================================
4krotos::BiquadFilter::BiquadFilter() : a1(0), a2(0), b0(0), b1(0), b2(0), d0_1(0), d1_1(0)
5{
6 //
7}
8
9//=====================================================================================
10void krotos::BiquadFilter::configure(double rate, FilterType filter_type)
11{
12
13 switch (filter_type)
14 {
16 const double G = 3.99984385397;
17 const double Q = 0.7071752369554193;
18 const double fc = 1681.9744509555319;
19
20 const double K = std::tanh(M_PI * fc / rate);
21 const double Vh = std::pow(10.0, G / 20.0);
22 const double Vb = std::pow(Vh, 0.499666774155);
23 const double a0_ = 1.0 + K / Q + K * K;
24
25 b0 = static_cast<float>((Vh + Vb * K / Q + K * K) / a0_);
26 b1 = static_cast<float>(2.0 * (K * K - Vh) / a0_);
27 b2 = static_cast<float>((Vh - Vb * K / Q + K * K) / a0_);
28
29 a1 = static_cast<float>(2.0 * (K * K - 1.0) / a0_);
30 a2 = static_cast<float>((1.0 - K / Q + K * K) / a0_);
31
32 configured = true;
33
34 break;
35 }
37 const double Q = 0.5003270373253953;
38 const double fc = 38.13547087613982;
39
40 const double K = std::tanh(M_PI * fc / rate);
41
42 b0 = 1.f;
43 b1 = -2.f;
44 b2 = 1.f;
45
46 a1 = static_cast<float>(2.0 * (K * K - 1.0) / (1.0 + K / Q + K * K));
47 a2 = static_cast<float>((1.0 - K / Q + K * K) / (1.0 + K / Q + K * K));
48
49 configured = true;
50
51 break;
52 }
53 }
54}
55
56//=====================================================================================
58{
59 assert(configured);
60
61 // direct II transposed structure
62 // https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html
63
64 const float y = b0 * x + d0_1;
65 const float d0 = b1 * x - a1 * y + d1_1;
66 const float d1 = b2 * x - a2 * y;
67
68 d0_1 = d0;
69 d1_1 = d1;
70
71 return y;
72}
float processSample(float x)
Definition BiquadFilter.cpp:57
BiquadFilter()
Definition BiquadFilter.cpp:4
void configure(double rate, FilterType filter_type)
Definition BiquadFilter.cpp:10
FilterType
Definition BiquadFilter.h:17
@ HighPassDeMan
Definition BiquadFilter.h:19
@ HighShelfDeMan
Definition BiquadFilter.h:18
#define M_PI
Definition windowing.h:9