diff --git a/.vscode/.server-controller-port.log b/.vscode/.server-controller-port.log index 64895c9..665d8b0 100644 --- a/.vscode/.server-controller-port.log +++ b/.vscode/.server-controller-port.log @@ -1,5 +1,5 @@ { "port": 13452, - "time": 1743282530729, + "time": 1743284210487, "version": "0.0.3" } \ No newline at end of file diff --git a/src/fm95.c b/src/fm95.c index 40e9a4c..8be0611 100644 --- a/src/fm95.c +++ b/src/fm95.c @@ -527,11 +527,15 @@ int main(int argc, char **argv) { float mpower = measure_mpx(&power, output[i] * 75000); if (mpower > mpx_power) { - float excess = mpower - mpx_power; - float attenuation_db = excess * 0.75f; - float attenuation_linear = dbr_to_deviation(attenuation_db)/75000; - output[i] *= attenuation_linear; - printf("Overpower! %f*%f/%f\n", mpower, attenuation_linear, mpx_power); + float excess_power = mpower - mpx_power; + float reduction_factor_db = excess_power; + + float reduction_factor_linear = powf(10.0f, -reduction_factor_db / 20.0f); + + output[i] *= reduction_factor_linear; + + mpower = measure_mpx(&power, output[i] * 75000); + printf("Reduced overpower: %f -> %f (target: %f)\n", mpower + excess_power, mpower, mpx_power); } output[i] *= master_volume;