diff options
-rw-r--r-- | gr-blocks/include/blocks/rms_ff.h | 1 | ||||
-rw-r--r-- | gr-blocks/lib/rms_cf_impl.cc | 14 | ||||
-rw-r--r-- | gr-blocks/lib/rms_cf_impl.h | 3 | ||||
-rw-r--r-- | gr-blocks/lib/rms_ff_impl.cc | 12 | ||||
-rw-r--r-- | gr-blocks/lib/rms_ff_impl.h | 2 |
5 files changed, 18 insertions, 14 deletions
diff --git a/gr-blocks/include/blocks/rms_ff.h b/gr-blocks/include/blocks/rms_ff.h index 19fb0016d4..b945096907 100644 --- a/gr-blocks/include/blocks/rms_ff.h +++ b/gr-blocks/include/blocks/rms_ff.h @@ -19,6 +19,7 @@ * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ + #ifndef INCLUDED_BLOCKS_RMS_FF_H #define INCLUDED_BLOCKS_RMS_FF_H diff --git a/gr-blocks/lib/rms_cf_impl.cc b/gr-blocks/lib/rms_cf_impl.cc index d956b45f1a..9b2c031e10 100644 --- a/gr-blocks/lib/rms_cf_impl.cc +++ b/gr-blocks/lib/rms_cf_impl.cc @@ -38,12 +38,12 @@ namespace gr { (new rms_cf_impl(alpha)); } - rms_cf_impl::rms_cf_impl (double alpha) + rms_cf_impl::rms_cf_impl(double alpha) : gr_sync_block("rms_cf", gr_make_io_signature(1, 1, sizeof(gr_complex)), - gr_make_io_signature(1, 1, sizeof(float))), - d_iir(alpha) + gr_make_io_signature(1, 1, sizeof(float))) { + set_alpha(alpha); } rms_cf_impl::~rms_cf_impl() @@ -53,7 +53,9 @@ namespace gr { void rms_cf_impl::set_alpha(double alpha) { - d_iir.set_taps(alpha); + d_alpha = alpha; + d_beta = 1 - d_alpha; + d_avg = 0; } int @@ -66,8 +68,8 @@ namespace gr { for(int i = 0; i < noutput_items; i++) { double mag_sqrd = in[i].real()*in[i].real() + in[i].imag()*in[i].imag(); - double f = d_iir.filter(mag_sqrd); - out[i] = sqrt(f); + d_avg = d_beta*d_avg + d_alpha*mag_sqrd; + out[i] = sqrt(d_avg); } return noutput_items; diff --git a/gr-blocks/lib/rms_cf_impl.h b/gr-blocks/lib/rms_cf_impl.h index 438b8549db..316ab2f304 100644 --- a/gr-blocks/lib/rms_cf_impl.h +++ b/gr-blocks/lib/rms_cf_impl.h @@ -24,7 +24,6 @@ #define INCLUDED_BLOCKS_RMS_CF_IMPL_H #include <blocks/rms_cf.h> -#include <gr_single_pole_iir.h> namespace gr { namespace blocks { @@ -36,7 +35,7 @@ namespace gr { class rms_cf_impl : public rms_cf { private: - gr_single_pole_iir<double,double,double> d_iir; + double d_alpha, d_beta, d_avg; public: rms_cf_impl(double alpha = 0.0001); diff --git a/gr-blocks/lib/rms_ff_impl.cc b/gr-blocks/lib/rms_ff_impl.cc index 2b8cdc34e7..8e004ad61e 100644 --- a/gr-blocks/lib/rms_ff_impl.cc +++ b/gr-blocks/lib/rms_ff_impl.cc @@ -41,9 +41,9 @@ namespace gr { rms_ff_impl::rms_ff_impl(double alpha) : gr_sync_block("rms_ff", gr_make_io_signature(1, 1, sizeof(float)), - gr_make_io_signature(1, 1, sizeof(float))), - d_iir(alpha) + gr_make_io_signature(1, 1, sizeof(float))) { + set_alpha(alpha); } rms_ff_impl::~rms_ff_impl() @@ -53,7 +53,9 @@ namespace gr { void rms_ff_impl::set_alpha(double alpha) { - d_iir.set_taps(alpha); + d_alpha = alpha; + d_beta = 1 - d_alpha; + d_avg = 0; } int @@ -66,8 +68,8 @@ namespace gr { for(int i = 0; i < noutput_items; i++) { double mag_sqrd = in[i]*in[i]; - double f = d_iir.filter(mag_sqrd); - out[i] = sqrt(f); + d_avg = d_beta*d_avg + d_alpha*mag_sqrd; + out[i] = sqrt(d_avg); } return noutput_items; diff --git a/gr-blocks/lib/rms_ff_impl.h b/gr-blocks/lib/rms_ff_impl.h index 82ecbda52d..e0ea868c3b 100644 --- a/gr-blocks/lib/rms_ff_impl.h +++ b/gr-blocks/lib/rms_ff_impl.h @@ -36,7 +36,7 @@ namespace gr { class rms_ff_impl : public rms_ff { private: - gr_single_pole_iir<double,double,double> d_iir; + double d_alpha, d_beta, d_avg; public: rms_ff_impl(double alpha = 0.0001); |