diff options
Diffstat (limited to 'gr-analog/include/analog/agc.h')
-rw-r--r-- | gr-analog/include/analog/agc.h | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/gr-analog/include/analog/agc.h b/gr-analog/include/analog/agc.h deleted file mode 100644 index 92d777fa1..000000000 --- a/gr-analog/include/analog/agc.h +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_ANALOG_AGC_H -#define INCLUDED_ANALOG_AGC_H - -#include <analog/api.h> -#include <gr_complex.h> -#include <math.h> - -namespace gr { - namespace analog { - namespace kernel { - - /*! - * \brief high performance Automatic Gain Control class for complex signals. - * - * For Power the absolute value of the complex number is used. - */ - class ANALOG_API agc_cc - { - public: - agc_cc(float rate = 1e-4, float reference = 1.0, - float gain = 1.0, float max_gain = 0.0) - : _rate(rate), _reference(reference), - _gain(gain), _max_gain(max_gain) {}; - - virtual ~agc_cc() {}; - - float rate() const { return _rate; } - float reference() const { return _reference; } - float gain() const { return _gain; } - float max_gain() const { return _max_gain; } - - void set_rate(float rate) { _rate = rate; } - void set_reference(float reference) { _reference = reference; } - void set_gain(float gain) { _gain = gain; } - void set_max_gain(float max_gain) { _max_gain = max_gain; } - - gr_complex scale(gr_complex input) - { - gr_complex output = input * _gain; - - _gain += _rate * (_reference - sqrt(output.real()*output.real() + - output.imag()*output.imag())); - if(_max_gain > 0.0 && _gain > _max_gain) { - _gain = _max_gain; - } - return output; - } - - void scaleN(gr_complex output[], const gr_complex input[], unsigned n) - { - for(unsigned i = 0; i < n; i++) { - output[i] = scale (input[i]); - } - } - - protected: - float _rate; // adjustment rate - float _reference; // reference value - float _gain; // current gain - float _max_gain; // max allowable gain - }; - - /*! - * \brief high performance Automatic Gain Control class for float signals. - * - * Power is approximated by absolute value - */ - class ANALOG_API agc_ff - { - public: - agc_ff(float rate = 1e-4, float reference = 1.0, - float gain = 1.0, float max_gain = 0.0) - : _rate(rate), _reference(reference), _gain(gain), - _max_gain(max_gain) {}; - - ~agc_ff() {}; - - float rate () const { return _rate; } - float reference () const { return _reference; } - float gain () const { return _gain; } - float max_gain () const { return _max_gain; } - - void set_rate (float rate) { _rate = rate; } - void set_reference (float reference) { _reference = reference; } - void set_gain (float gain) { _gain = gain; } - void set_max_gain (float max_gain) { _max_gain = max_gain; } - - float scale (float input) - { - float output = input * _gain; - _gain += (_reference - fabsf (output)) * _rate; - if(_max_gain > 0.0 && _gain > _max_gain) - _gain = _max_gain; - return output; - } - - void scaleN(float output[], const float input[], unsigned n) - { - for(unsigned i = 0; i < n; i++) - output[i] = scale (input[i]); - } - - protected: - float _rate; // adjustment rate - float _reference; // reference value - float _gain; // current gain - float _max_gain; // maximum gain - }; - - } /* namespace kernel */ - } /* namespace analog */ -} /* namespace gr */ - -#endif /* INCLUDED_ANALOG_AGC_H */ |