23 #ifndef INCLUDED_ANALOG_AGC_H
24 #define INCLUDED_ANALOG_AGC_H
43 agc_cc(
float rate = 1e-4,
float reference = 1.0,
44 float gain = 1.0,
float max_gain = 0.0)
45 : _rate(rate), _reference(reference),
46 _gain(gain), _max_gain(max_gain) {};
50 float rate()
const {
return _rate; }
52 float gain()
const {
return _gain; }
64 _gain += _rate * (_reference - sqrt(output.real()*output.real() +
65 output.imag()*output.imag()));
66 if(_max_gain > 0.0 && _gain > _max_gain) {
74 for(
unsigned i = 0; i < n; i++) {
75 output[i] = scale (input[i]);
94 agc_ff(
float rate = 1e-4,
float reference = 1.0,
95 float gain = 1.0,
float max_gain = 0.0)
96 : _rate(rate), _reference(reference), _gain(gain),
97 _max_gain(max_gain) {};
101 float rate ()
const {
return _rate; }
103 float gain ()
const {
return _gain; }
111 float scale (
float input)
113 float output = input * _gain;
114 _gain += (_reference - fabsf (output)) * _rate;
115 if(_max_gain > 0.0 && _gain > _max_gain)
120 void scaleN(
float output[],
const float input[],
unsigned n)
122 for(
unsigned i = 0; i < n; i++)
123 output[i] = scale (input[i]);