static float gaincalculate(float siglevel)
{
float adjsig = maxf(siglevel, minout);
float agcfactor = - 1 - OUTRANGE / INPRANGE;
// valelin - Уровень сигнала, начиная с которого производится регулировка
// valelin = levelfence * db2ratio(- INPRANGE)
float gain;
//if (adjsig > valelin)
{
// Для больших (больше чем valelin) уровней сигнала
// Увеличению сигнала на INPRANGE децибел должно соответствоват увеличение выхода приёмника на OUTRANGE децтибел
gain = valelout / adjsig * powf(10.0f, log10f(adjsig / valelin) * - 0.2);
//gain = powf(10.0f, log10f(adjsig / levelfence) * - 0.5);
//gain = powf(10, log10f(adjsig / levelfence) * agcfactor);
//gain = powf(10, log10f(adjsig / valelout) * agcfactor);
return gain;
}
//else
{
// В данном случае выходной сигнал не может стать больше valelout
// valelout = levelfence * db2ratio(- OUTRANGE);
//gain = valelout / adjsig;
}
return minf(manualrfgain, gain);
}