Size: a a a

2020 August 06

a

aum in Deus Volt!
формулу попробовать развернуть для коэффициентов под логарифмом и степенью так, чтоб считать без их использования
источник

GZ

Genadi Zawidowski in Deus Volt!
Команданте, прости за офтоп
источник

GZ

Genadi Zawidowski in Deus Volt!
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);
}
источник

И

Илья in Deus Volt!
Ды по теме и без политоты норм😄
источник

GZ

Genadi Zawidowski in Deus Volt!
Это макет...
источник

И

Илья in Deus Volt!
Реализация нашная! Приятно смотреть на отсутствие термосоплей)
источник

GZ

Genadi Zawidowski in Deus Volt!
aum
формулу попробовать развернуть для коэффициентов под логарифмом и степенью так, чтоб считать без их использования
gain = valelout / adjsig * powf(10.0f, log10f(adjsig / valelin) * - 0.2)
источник

GZ

Genadi Zawidowski in Deus Volt!
понятно, основание не обяательно 10
источник

a

aum in Deus Volt!
это вроде как просто
gain = -valelout/(5*valelin)
источник

a

aum in Deus Volt!
в общем, так выяснится, что в итоге всю вашу конструкцию можно атмегой 8ми битной заменить :)
источник

GZ

Genadi Zawidowski in Deus Volt!
aum
это вроде как просто
gain = -valelout/(5*valelin)
не дало того же результата
источник

a

aum in Deus Volt!
а, пардон, ошибка, не увидел, что 0.2 в степени участвует
источник

GZ

Genadi Zawidowski in Deus Volt!
это как раз параметр от настройки зависит
источник

GZ

Genadi Zawidowski in Deus Volt!
adjsig это входное значение
источник

GZ

Genadi Zawidowski in Deus Volt!
...  и этот расчет с частотой 48000 раз в секунду для двух трактов
источник

a

aum in Deus Volt!
ну, пока не вижу, как можно упростить, но возможно, что это можно сделать
источник

a

aum in Deus Volt!
Так, проверьте:
powf(10.0f, log10f(adjsig / valelin) * - 0.2)
это
(adjsig / valelin)^-0.2
это уже оставляет только степень, и для вычисления корня или степени можно поискать быстрые алгоритмы
источник

GZ

Genadi Zawidowski in Deus Volt!
УРА! результат совпал!!!!
источник

GZ

Genadi Zawidowski in Deus Volt!
ВЫкинуть из рилтайма логарифм это здорово поможет
источник

GZ

Genadi Zawidowski in Deus Volt!
Останется расчёт параметра из заданного в децибелах закона изменения - но это не рилтайм.
источник