diff options
Diffstat (limited to 'gr-digital/include/digital_lms_dd_equalizer_cc.h')
-rw-r--r-- | gr-digital/include/digital_lms_dd_equalizer_cc.h | 37 |
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 |