23 #ifndef INCLUDED_ANALOG_AGC_H
24 #define INCLUDED_ANALOG_AGC_H
52 agc_cc(
float rate = 1e-4,
float reference = 1.0,
53 float gain = 1.0,
float max_gain = 0.0)
54 : _rate(rate), _reference(reference),
55 _gain(gain), _max_gain(max_gain) {};
59 float rate()
const {
return _rate; }
61 float gain()
const {
return _gain; }
73 _gain += _rate * (_reference - sqrt(output.real()*output.real() +
74 output.imag()*output.imag()));
75 if(_max_gain > 0.0 && _gain > _max_gain) {
83 for(
unsigned i = 0; i < n; i++) {
84 output[i] = scale (input[i]);
111 agc_ff(
float rate = 1e-4,
float reference = 1.0,
112 float gain = 1.0,
float max_gain = 0.0)
113 : _rate(rate), _reference(reference), _gain(gain),
114 _max_gain(max_gain) {};
118 float rate ()
const {
return _rate; }
120 float gain ()
const {
return _gain; }
130 float output = input * _gain;
131 _gain += (_reference - fabsf (output)) * _rate;
132 if(_max_gain > 0.0 && _gain > _max_gain)
137 void scaleN(
float output[],
const float input[],
unsigned n)
139 for(
unsigned i = 0; i < n; i++)
140 output[i] = scale (input[i]);