Krotos Modules 3
Loading...
Searching...
No Matches
EarFilter.h
Go to the documentation of this file.
1#pragma once
2
3namespace krotos
4{
5 //==============================================================================
23 {
24 public:
26 EarFilter();
27
31 void configure(float sampleRate);
32
37 std::vector<float> processSignal(std::vector<float>& inputSignal);
38
39 private:
47 std::vector<float> getLowPassFilterCoefficients(float normalizedFrequency, float qualityFactor);
48
56 std::vector<float> convertToHighPass(const std::vector<float>& lowPassCoefficients);
57
68 void applyIIRFilter(const std::vector<float>& inputSignal, dsp::IIR::Filter<float>& filter,
69 std::vector<float>& filteredSignal);
70
81 void applyFIRFilter(const std::vector<float>& inputSignal, const std::vector<float>& coefficients,
82 std::vector<float>& filteredSignal);
83
90 void calculateTransferFunction(const std::vector<float> b, const std::vector<float> a, int numPoints);
91
97 std::vector<float> elementWiseDivision(const std::vector<float>& vector1, const std::vector<float>& vector2);
98
108 std::vector<float> fir2(int N, std::vector<float>& freqResponse, const std::vector<float>& gain);
109
111 std::vector<float> linspace(float start, float end, int numPoints)
112 {
113 std::vector<float> result(numPoints);
114 float step = (end - start) / (numPoints - 1);
115
116 for (int i = 0; i < numPoints; ++i)
117 {
118 result[i] = start + i * step;
119 }
120
121 return result;
122 }
123
124 float m_sampleRate{-1.0f};
125
126 const float m_maxFreq{20000.0f};
127
128 // hopSize in seconds
129 float m_hopSizeSec = 0.0058f;
131
132 // second order IIR high pass parameters
133 // Hz - corner frequency
134 float m_fc = 680.0f;
135 // quality factor
136 float m_q = 0.65f;
137 std::vector<float> m_magResponse;
138 std::vector<float> m_normalisedFreqs;
139 std::vector<float> m_freqResponse;
140 // IIR coeff vectors
141 std::vector<float> m_a;
142 std::vector<float> m_b;
143 dsp::IIR::Filter<float> m_filter;
144 std::vector<float> m_gain;
145
146 // FIR filter parameters
147 // order
148 int N = 50;
149 std::vector<float> m_firCoeffb;
150 // Killian dataset
151 std::vector<float> m_freqs = {0.0f,
152 100.0f, // Freq at Hz
153 150.0f, 200.0f, 300.0f, 400.0f, 500.0f, 700.0f, 1000.0f,
154 1500.0f, 2000.0f, 2500.0f, 3000.0f, 3500.0f, 4000.0f, 4500.0f,
155 5000.0f, 6000.0f, 7000.0f, 8000.0f, 9000.0f, 10000.0f, 20000.0f};
156
157 // Killian dataset - minimum audible field gains (linear)
158 std::vector<float> m_gains = {std::numeric_limits<float>::epsilon(),
159 0.0363078054770101f,
160 0.102329299228075f,
161 0.192752491319094f,
162 0.407380277804113f,
163 0.645654229034656f,
164 0.812830516164099f,
165 0.944060876285923f,
166 1.0f,
167 1.14815362149688f,
168 1.44543977074593f,
169 1.86208713666287f,
170 2.26464430759306f,
171 2.54097270554930f,
172 2.54097270554930f,
173 2.29086765276777f,
174 1.81970085860998f,
175 0.954992586021436f,
176 0.462381021399260f,
177 0.278612116862977f,
178 0.229086765276777f,
179 0.245470891568503f,
180 0.245470891568503f};
181 };
182} // namespace krotos
Definition EarFilter.h:23
std::vector< float > m_normalisedFreqs
Definition EarFilter.h:138
void applyIIRFilter(const std::vector< float > &inputSignal, dsp::IIR::Filter< float > &filter, std::vector< float > &filteredSignal)
Definition EarFilter.cpp:119
std::vector< float > m_magResponse
Definition EarFilter.h:137
dsp::IIR::Filter< float > m_filter
Definition EarFilter.h:143
std::vector< float > m_b
Definition EarFilter.h:142
float m_hopSizeSamples
Definition EarFilter.h:130
void applyFIRFilter(const std::vector< float > &inputSignal, const std::vector< float > &coefficients, std::vector< float > &filteredSignal)
Definition EarFilter.cpp:129
std::vector< float > getLowPassFilterCoefficients(float normalizedFrequency, float qualityFactor)
Definition EarFilter.cpp:79
std::vector< float > m_gains
Definition EarFilter.h:158
float m_q
Definition EarFilter.h:136
std::vector< float > m_freqResponse
Definition EarFilter.h:139
void calculateTransferFunction(const std::vector< float > b, const std::vector< float > a, int numPoints)
Definition EarFilter.cpp:150
std::vector< float > processSignal(std::vector< float > &inputSignal)
Definition EarFilter.cpp:60
float m_sampleRate
Definition EarFilter.h:124
const float m_maxFreq
Definition EarFilter.h:126
float m_hopSizeSec
Definition EarFilter.h:129
std::vector< float > m_gain
Definition EarFilter.h:144
std::vector< float > m_a
Definition EarFilter.h:141
EarFilter()
Definition EarFilter.cpp:4
std::vector< float > convertToHighPass(const std::vector< float > &lowPassCoefficients)
Definition EarFilter.cpp:99
int N
Definition EarFilter.h:148
float m_fc
Definition EarFilter.h:134
std::vector< float > linspace(float start, float end, int numPoints)
Definition EarFilter.h:111
std::vector< float > m_firCoeffb
Definition EarFilter.h:149
std::vector< float > elementWiseDivision(const std::vector< float > &vector1, const std::vector< float > &vector2)
Definition EarFilter.cpp:171
void configure(float sampleRate)
Definition EarFilter.cpp:7
std::vector< float > m_freqs
Definition EarFilter.h:151
std::vector< float > fir2(int N, std::vector< float > &freqResponse, const std::vector< float > &gain)
Definition EarFilter.cpp:188
Definition AirAbsorptionFilter.cpp:2