42 20.0f, 22.4f, 25.2f, 28.3f, 31.7f, 35.6f,
43 40.0f, 44.9f, 50.4f, 56.6f, 63.5f, 71.3f,
44 80.0f, 89.8f, 100.8f, 113.1f, 127.0f, 142.5f,
45 160.0f, 179.6f, 201.6f, 226.3f, 254.0f, 285.1f,
46 320.0f, 359.1f, 403.1f, 452.5f, 508.0f, 570.2f,
47 640.0f, 718.3f, 806.3f, 905.1f, 1016.0f, 1140.4f,
48 1280.0f, 1436.5f, 1612.5f, 1810.2f, 2032.0f, 2280.8f,
49 2560.0f, 2873.1f, 3225.0f, 3620.4f, 4064.0f, 4561.6f,
50 5120.0f, 5746.1f, 6450.0f, 7240.8f, 8128.0f, 9123.2f,
51 10240.0f, 11492.2f, 12900.0f, 14481.6f, 16256.1f, 18246.5f,
65 3.50f, 3.20f, 2.90f, 2.60f, 2.30f, 2.00f,
67 1.74f, 1.55f, 1.40f, 1.28f, 1.18f, 1.12f,
69 1.07f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
71 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
73 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
75 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
77 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
79 1.00f, 0.99f, 0.98f, 0.97f, 0.96f, 0.95f,
81 0.93f, 0.90f, 0.87f, 0.83f, 0.80f, 0.78f,
83 0.76f, 0.75f, 0.76f, 0.80f, 0.88f, 0.95f,
93 3.80f, 3.50f, 3.10f, 2.80f, 2.50f, 2.20f,
95 1.90f, 1.65f, 1.45f, 1.30f, 1.20f, 1.13f,
97 1.08f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
99 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
101 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
103 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
105 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
107 0.98f, 0.96f, 0.93f, 0.91f, 0.89f, 0.87f,
109 0.85f, 0.83f, 0.81f, 0.80f, 0.79f, 0.78f,
111 0.77f, 0.77f, 0.78f, 0.80f, 0.83f, 0.87f,
121 2.80f, 2.60f, 2.40f, 2.20f, 2.00f, 1.80f,
123 1.60f, 1.45f, 1.32f, 1.22f, 1.15f, 1.10f,
125 1.06f, 1.03f, 1.01f, 1.00f, 1.00f, 1.00f,
127 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
129 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
131 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
133 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
135 0.98f, 0.96f, 0.94f, 0.93f, 0.92f, 0.91f,
137 0.90f, 0.89f, 0.88f, 0.87f, 0.86f, 0.85f,
139 0.84f, 0.84f, 0.85f, 0.87f, 0.90f, 0.93f,
147 3.65f, 3.35f, 3.00f, 2.70f, 2.40f, 2.10f,
149 1.82f, 1.60f, 1.42f, 1.29f, 1.19f, 1.12f,
151 1.07f, 1.04f, 1.02f, 1.01f, 1.00f, 1.00f,
153 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
155 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
157 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
159 1.00f, 1.00f, 1.00f, 1.00f, 1.00f, 1.00f,
161 0.99f, 0.97f, 0.95f, 0.94f, 0.92f, 0.91f,
163 0.89f, 0.86f, 0.84f, 0.81f, 0.79f, 0.78f,
165 0.76f, 0.76f, 0.77f, 0.80f, 0.85f, 0.91f,
172 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
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,
295 if (numBins <= 0)
return;
300 for (
int i = 0; i < numBins; ++i) {
301 if (binCenters[i] > 0.0f) {
306 float f_ref = (validCount > 0)
307 ?
fl::expf(logSum /
static_cast<float>(validCount))
311 for (
int i = 0; i < numBins; ++i) {
316 static constexpr float kMaxPinkNoiseGain = 3.0f;
317 for (
int i = 0; i < numBins; ++i) {
318 if (out[i] > kMaxPinkNoiseGain) {
319 out[i] = kMaxPinkNoiseGain;
324 float outLogSum = 0.0f;
325 for (
int i = 0; i < numBins; ++i) {
330 float geoMean =
fl::expf(outLogSum /
static_cast<float>(numBins));
331 if (geoMean > 0.001f) {
332 for (
int i = 0; i < numBins; ++i) {
void downsampleMicResponse(const MicResponseCurve &curve, const float *binCenters, int numBins, float *out)
Downsample a high-resolution mic response curve to N output bins.