summaryrefslogtreecommitdiff
path: root/gr-digital/include/digital_lms_dd_equalizer_cc.h
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/include/digital_lms_dd_equalizer_cc.h')
-rw-r--r--gr-digital/include/digital_lms_dd_equalizer_cc.h37
1 files changed, 22 insertions, 15 deletions
diff --git a/gr-digital/include/digital_lms_dd_equalizer_cc.h b/gr-digital/include/digital_lms_dd_equalizer_cc.h
index 56871fa678..3bb9e935ad 100644
--- a/gr-digital/include/digital_lms_dd_equalizer_cc.h
+++ b/gr-digital/include/digital_lms_dd_equalizer_cc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,15 +24,18 @@
#define INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H
#include <digital_api.h>
-#include <gr_adaptive_fir_ccc.h>
+#include <gr_sync_decimator.h>
+#include <filter/adaptive_fir.h>
#include <digital_constellation.h>
+#include <stdexcept>
class digital_lms_dd_equalizer_cc;
typedef boost::shared_ptr<digital_lms_dd_equalizer_cc> digital_lms_dd_equalizer_cc_sptr;
-DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+DIGITAL_API digital_lms_dd_equalizer_cc_sptr
+digital_make_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
/*!
* \brief Least-Mean-Square Decision Directed Equalizer (complex in/out)
@@ -67,24 +70,25 @@ DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (i
* Prentice Hall, 1996.
*
*/
-class DIGITAL_API digital_lms_dd_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_lms_dd_equalizer_cc :
+ public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc
{
private:
- friend DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+ friend DIGITAL_API digital_lms_dd_equalizer_cc_sptr
+ digital_make_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
float d_mu;
- std::vector<gr_complex> d_taps;
digital_constellation_sptr d_cnst;
- digital_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+ digital_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
protected:
- virtual gr_complex error(const gr_complex &out)
+ gr_complex error(const gr_complex &out)
{
gr_complex decision, error;
d_cnst->map_to_points(d_cnst->decision_maker(&out), &decision);
@@ -92,7 +96,7 @@ protected:
return error;
}
- virtual void update_tap(gr_complex &tap, const gr_complex &in)
+ void update_tap(gr_complex &tap, const gr_complex &in)
{
tap += d_mu*conj(in)*d_error;
}
@@ -113,6 +117,9 @@ public:
}
}
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
#endif