summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-blocks/include/blocks/rms_ff.h1
-rw-r--r--gr-blocks/lib/rms_cf_impl.cc14
-rw-r--r--gr-blocks/lib/rms_cf_impl.h3
-rw-r--r--gr-blocks/lib/rms_ff_impl.cc12
-rw-r--r--gr-blocks/lib/rms_ff_impl.h2
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);