23 #ifndef INCLUDED_ANALOG_AGC_H
24 #define INCLUDED_ANALOG_AGC_H
42 agc_cc(
float rate = 1e-4,
float reference = 1.0,
43 float gain = 1.0,
float max_gain = 0.0)
44 : _rate(rate), _reference(reference),
45 _gain(gain), _max_gain(max_gain) {};
49 float rate()
const {
return _rate; }
51 float gain()
const {
return _gain; }
63 _gain += _rate * (_reference - sqrt(output.real()*output.real() +
64 output.imag()*output.imag()));
65 if(_max_gain > 0.0 && _gain > _max_gain) {
73 for(
unsigned i = 0; i < n; i++) {
74 output[i] = scale (input[i]);
93 agc_ff(
float rate = 1e-4,
float reference = 1.0,
94 float gain = 1.0,
float max_gain = 0.0)
95 : _rate(rate), _reference(reference), _gain(gain),
96 _max_gain(max_gain) {};
100 float rate ()
const {
return _rate; }
102 float gain ()
const {
return _gain; }
110 float scale (
float input)
112 float output = input * _gain;
113 _gain += (_reference - fabsf (output)) * _rate;
114 if(_max_gain > 0.0 && _gain > _max_gain)
119 void scaleN(
float output[],
const float input[],
unsigned n)
121 for(
unsigned i = 0; i < n; i++)
122 output[i] = scale (input[i]);