Krotos Modules 3
Loading...
Searching...
No Matches
AirAbsorptionFilter.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
7 {
8 public:
10
11 void prepare(double sampleRate, int samplesPerBlock);
12 float process(float inputSample, int numChannel);
13
14 void setDistance(float distance);
15
16 private:
17 constexpr float linear_interpolate(float y1, float y2, float mu) { return y1 + mu * (y2 - y1); }
18
19 float m_gain{1.0f};
20
21 // Digital Filter for Modeling Air Absorption in Real Time (Petruzzellis & Zanghieri 2013)
22 // Temperature 0, relative humidity 60%
23 float m_a1{0.43f};
24 float m_a2{0.6f};
25 std::array<float, 8> m_b1{0.04f, 0.13f, 0.25f, 0.36f, 0.5f, 0.65f, 0.76f, 0.76f};
26 std::array<float, 8> m_b2{0.15f, 0.22f, 0.25f, 0.3f, 0.3f, 0.3f, 0.52f, 0.52f};
27
29 {
30 modified_lowpass(float a = 0.0f, float b = 0.0f);
31
32 float operator()(float s);
33
34 void config(float a_, float b_);
35
36 void reset();
37
38 // Coefficients
39 float a, b;
40
41 // Sample delays
42 float x1, y1;
43 };
44
45 // We need a separate filter for each channel, and two filters in series.
48
49 void test_impulse_response(std::size_t index, String outfile);
50
52 };
53} // namespace krotos
Definition AirAbsorptionFilter.h:7
std::array< float, 8 > m_b1
Definition AirAbsorptionFilter.h:25
void test_impulse_response(std::size_t index, String outfile)
Definition AirAbsorptionFilter.cpp:49
AirAbsorptionFilter()
Definition AirAbsorptionFilter.cpp:3
float m_gain
Definition AirAbsorptionFilter.h:19
float m_a2
Definition AirAbsorptionFilter.h:24
float process(float inputSample, int numChannel)
Definition AirAbsorptionFilter.cpp:24
void setDistance(float distance)
Definition AirAbsorptionFilter.cpp:33
float m_a1
Definition AirAbsorptionFilter.h:23
void prepare(double sampleRate, int samplesPerBlock)
Definition AirAbsorptionFilter.cpp:12
modified_lowpass m_filter2[2]
Definition AirAbsorptionFilter.h:47
constexpr float linear_interpolate(float y1, float y2, float mu)
Definition AirAbsorptionFilter.h:17
bool m_bypass
Definition AirAbsorptionFilter.h:51
std::array< float, 8 > m_b2
Definition AirAbsorptionFilter.h:26
modified_lowpass m_filter1[2]
Definition AirAbsorptionFilter.h:46
Definition AirAbsorptionFilter.cpp:2
Definition AirAbsorptionFilter.h:29
float operator()(float s)
Definition AirAbsorptionFilter.cpp:96
void config(float a_, float b_)
Definition AirAbsorptionFilter.cpp:110
float x1
Definition AirAbsorptionFilter.h:42
float a
Definition AirAbsorptionFilter.h:39
modified_lowpass(float a=0.0f, float b=0.0f)
Definition AirAbsorptionFilter.cpp:94
float y1
Definition AirAbsorptionFilter.h:42
float b
Definition AirAbsorptionFilter.h:39
void reset()
Definition AirAbsorptionFilter.cpp:116