43 20.0f, 22.4f, 25.2f, 28.3f, 31.7f, 35.6f,
44 40.0f, 44.9f, 50.4f, 56.6f, 63.5f, 71.3f,
45 80.0f, 89.8f, 100.8f, 113.1f, 127.0f, 142.5f,
46 160.0f, 179.6f, 201.6f, 226.3f, 254.0f, 285.1f,
47 320.0f, 359.1f, 403.1f, 452.5f, 508.0f, 570.2f,
48 640.0f, 718.3f, 806.3f, 905.1f, 1016.0f, 1140.4f,
49 1280.0f, 1436.5f, 1612.5f, 1810.2f, 2032.0f, 2280.8f,
50 2560.0f, 2873.1f, 3225.0f, 3620.4f, 4064.0f, 4561.6f,
51 5120.0f, 5746.1f, 6450.0f, 7240.8f, 8128.0f, 9123.2f,
52 10240.0f, 11492.2f, 12900.0f, 14481.6f, 16256.1f, 18246.5f,
66 3.50f, 3.20f, 2.90f, 2.60f, 2.30f, 2.00f,
68 1.74f, 1.55f, 1.40f, 1.28f, 1.18f, 1.12f,
70 1.07f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
72 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
74 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
76 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
78 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
80 1.00f, 0.99f, 0.98f, 0.97f, 0.96f, 0.95f,
82 0.93f, 0.90f, 0.87f, 0.83f, 0.80f, 0.78f,
84 0.76f, 0.75f, 0.76f, 0.80f, 0.88f, 0.95f,
94 3.80f, 3.50f, 3.10f, 2.80f, 2.50f, 2.20f,
96 1.90f, 1.65f, 1.45f, 1.30f, 1.20f, 1.13f,
98 1.08f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
100 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
102 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
104 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
106 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
108 0.98f, 0.96f, 0.93f, 0.91f, 0.89f, 0.87f,
110 0.85f, 0.83f, 0.81f, 0.80f, 0.79f, 0.78f,
112 0.77f, 0.77f, 0.78f, 0.80f, 0.83f, 0.87f,
122 2.80f, 2.60f, 2.40f, 2.20f, 2.00f, 1.80f,
124 1.60f, 1.45f, 1.32f, 1.22f, 1.15f, 1.10f,
126 1.06f, 1.03f, 1.01f, 1.00f, 1.00f, 1.00f,
128 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
130 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
132 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
134 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
136 0.98f, 0.96f, 0.94f, 0.93f, 0.92f, 0.91f,
138 0.90f, 0.89f, 0.88f, 0.87f, 0.86f, 0.85f,
140 0.84f, 0.84f, 0.85f, 0.87f, 0.90f, 0.93f,
148 3.65f, 3.35f, 3.00f, 2.70f, 2.40f, 2.10f,
150 1.82f, 1.60f, 1.42f, 1.29f, 1.19f, 1.12f,
152 1.07f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
154 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
156 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
158 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
160 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
162 0.99f, 0.97f, 0.95f, 0.94f, 0.92f, 0.91f,
164 0.89f, 0.86f, 0.84f, 0.81f, 0.79f, 0.78f,
166 0.76f, 0.76f, 0.77f, 0.80f, 0.85f, 0.91f,
173 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
174 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
175 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
176 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
177 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
178 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
179 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
180 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
181 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
182 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
296 if (numBins <= 0)
return;
301 for (
int i = 0; i < numBins; ++i) {
302 if (binCenters[i] > 0.0f) {
307 float f_ref = (validCount > 0)
308 ?
fl::expf(logSum /
static_cast<float>(validCount))
312 for (
int i = 0; i < numBins; ++i) {
317 static constexpr float kMaxPinkNoiseGain = 3.0f;
318 for (
int i = 0; i < numBins; ++i) {
319 if (out[i] > kMaxPinkNoiseGain) {
320 out[i] = kMaxPinkNoiseGain;
325 float outLogSum = 0.0f;
326 for (
int i = 0; i < numBins; ++i) {
331 float geoMean =
fl::expf(outLogSum /
static_cast<float>(numBins));
332 if (geoMean > 0.001f) {
333 for (
int i = 0; i < numBins; ++i) {
void downsampleMicResponse(const MicResponseCurve &curve, const float *binCenters, int numBins, float *out) FL_NO_EXCEPT
Downsample a high-resolution mic response curve to N output bins.