Добрый день.
Пытаюсь реализовать на С++ Desktop алгоритм автоматической регулировки усиления.
Единственные найденные мною алгоритмы для цифрового(дискретного случая) были найдены в книге
RF Architectures & Digital Signal Processing Aspect of Digital Wireless Transreceivers за авторством Mohamed Nezami
Там представлены несколько алгоритмов - линейный, логарифмический и экспоненциальный.
Формула для логарифмического выглядит вот так
Собственно вопрос: а правильно ли, что при входе 0 мы не получим ничего потому что у нас будет бесконечность?
Так же интересуют ещё материалы по АРУ(AGC) в дискретном исполнении.
Спасибо.
Автоматическая регулировка уровня (АРУ, AGC)
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Автоматическая регулировка уровня (АРУ, AGC)
не получим ничего ибо ноль умноженный на любое конечное число есть ноль
Re: Автоматическая регулировка уровня (АРУ, AGC)
Точнее я бы хотел заметить: что в реализации представленной схемы я вижу проблему, которую не могу решить и прошу помощи.Бахурин Сергей писал(а):не получим ничего ибо ноль умноженный на любое конечное число есть ноль
Код: Выделить всё
double alpha = _logarithmicAGCAlpha;
double R = 16000; // this is for making whole range 32000
R = (volume/100)*R; // correcting RANGE value with volume level
double A = alpha*R;
for (unsigned int i=0;i<length_pts;i++){
out[i] = in[i]*A;
A = exp( log(A) + alpha*(log(R) - log(std::abs ( sqrt (in[i]*A) ) ) );
}
можно ли как-то подкорректировать схему?
Re: Автоматическая регулировка уровня (АРУ, AGC)
Условие не подойдёт?
Код: Выделить всё
if (in[i]!=0) A = exp(....);
else A=0;