[an error occurred while processing this directive]
|
Базовая теория AGC (использование русских терминов считаю кощунством :-)) может быть изложена просто. Простой аналоговый AGC состоит из
1) Voltage-controlled amplifier
2) Rectifier
3) Setpoint
4) Low-pass filter
Цифровая реализация почти полностью копирует аналоговую. Мы имеем
1) Multiplier: Yout=Yin*Gain, Первоначальное значение Gain - любое, которое кажется разумным.
2) Rectifier: Yrect=abs(Yout). Выходной сигнал "выпрямляется", отрицательные периоды сингала отражаются в положительную полуплоскость. (иначе средний уровень сигнала будет равен нулю, какой может быть регулятор Gain в жтом случае).
3) Setpoit. SPoint=XXX, XXX - требуемый уровень сигнала. Setpoint используется для задания Reference Gain, эталонный уровень сигнала. Если наш гейн больше, то он должен быть уменьшен, если нет - увеличен. Если они равны - все ОК.
4) Error. Err=SPoint-abs(Yout). Ошибка есть разница между эталонным гейном и "ректицицированным" сигналом. На основании ошибки делается предположение о том, в какую сторону корректировать Gain. Если ошибка положительная - Gain должен быть увеличен, если отрицательная - уменьшен.
5) Integrator. Gain=Gain+K*error. Gain корректируется в плюс или минус в зависимости от ошибки. K - задает скорость реакции и определяется опытным путем. Если K слишком большой - Gain будет дергаться слишком быстро. Если К слишком маленький - реакция будет слишком быстрой. Попробуйте для начала 0.01.
Напишем теперь нашу гениальную по простоте программу
while(1)
{
/* Multiplier */
Yout=Yin*Gain;
/* Error */
Error=Spoint-abs(Yout);
/* Integrator */
OldGain=Gain;
Gain=OldGain+K*Error;
}
Вот Вам и классический AGC. Остальное Вы можете сделать сами применив некоторое количество мозговых усилий.
E-mail: info@telesys.ru