diff options
Diffstat (limited to 'gr-digital/include')
-rw-r--r-- | gr-digital/include/digital_cma_equalizer_cc.h | 26 | ||||
-rw-r--r-- | gr-digital/include/digital_kurtotic_equalizer_cc.h | 22 | ||||
-rw-r--r-- | gr-digital/include/digital_lms_dd_equalizer_cc.h | 26 |
3 files changed, 51 insertions, 23 deletions
diff --git a/gr-digital/include/digital_cma_equalizer_cc.h b/gr-digital/include/digital_cma_equalizer_cc.h index 79e84ca4b3..551048afd4 100644 --- a/gr-digital/include/digital_cma_equalizer_cc.h +++ b/gr-digital/include/digital_cma_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,9 +24,11 @@ #define INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H #include <digital_api.h> -#include <gr_adaptive_fir_ccc.h> +#include <gr_sync_decimator.h> +#include <filter/adaptive_fir.h> #include <gr_math.h> #include <iostream> +#include <stdexcept> class digital_cma_equalizer_cc; typedef boost::shared_ptr<digital_cma_equalizer_cc> digital_cma_equalizer_cc_sptr; @@ -45,21 +47,23 @@ digital_make_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps); * Two-Dimensional Data Communication Systems," IEEE Transactions on * Communications, Vol. 28, No. 11, pp. 1867 - 1875, 1980." */ -class DIGITAL_API digital_cma_equalizer_cc : public gr_adaptive_fir_ccc +class DIGITAL_API digital_cma_equalizer_cc : + public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc { private: float d_modulus; float d_mu; - friend DIGITAL_API digital_cma_equalizer_cc_sptr digital_make_cma_equalizer_cc(int num_taps, - float modulus, - float mu, - int sps); + friend DIGITAL_API digital_cma_equalizer_cc_sptr + digital_make_cma_equalizer_cc(int num_taps, + float modulus, + float mu, + int sps); digital_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps); protected: - virtual gr_complex error(const gr_complex &out) + gr_complex error(const gr_complex &out) { gr_complex error = out*(norm(out) - d_modulus); float re = gr_clip(error.real(), 1.0); @@ -67,7 +71,7 @@ protected: return gr_complex(re, im); } - virtual void update_tap(gr_complex &tap, const gr_complex &in) + void update_tap(gr_complex &tap, const gr_complex &in) { // Hn+1 = Hn - mu*conj(Xn)*zn*(|zn|^2 - 1) tap -= d_mu*conj(in)*d_error; @@ -98,6 +102,10 @@ public: throw std::out_of_range("digital_cma_equalizer::set_modulus: Modulus value must be >= 0"); d_modulus = mod; } + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); }; #endif diff --git a/gr-digital/include/digital_kurtotic_equalizer_cc.h b/gr-digital/include/digital_kurtotic_equalizer_cc.h index fed88c3741..27098f4083 100644 --- a/gr-digital/include/digital_kurtotic_equalizer_cc.h +++ b/gr-digital/include/digital_kurtotic_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,9 +24,11 @@ #define INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H #include <digital_api.h> -#include <gr_adaptive_fir_ccc.h> +#include <gr_sync_decimator.h> +#include <filter/adaptive_fir.h> #include <gr_math.h> #include <iostream> +#include <stdexcept> class digital_kurtotic_equalizer_cc; typedef boost::shared_ptr<digital_kurtotic_equalizer_cc> digital_kurtotic_equalizer_cc_sptr; @@ -39,11 +41,14 @@ digital_make_kurtotic_equalizer_cc(int num_taps, float mu); * \ingroup eq_blk * \ingroup digital * + * WARNING: This block does not yet work. + * * "Y. Guo, J. Zhao, Y. Sun, "Sign kurtosis maximization based blind * equalization algorithm," IEEE Conf. on Control, Automation, * Robotics and Vision, Vol. 3, Dec. 2004, pp. 2052 - 2057." */ -class DIGITAL_API digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc +class DIGITAL_API digital_kurtotic_equalizer_cc : + public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc { private: float d_mu; @@ -51,8 +56,9 @@ private: gr_complex d_q, d_u; float d_alpha_p, d_alpha_q, d_alpha_m; - friend DIGITAL_API digital_kurtotic_equalizer_cc_sptr digital_make_kurtotic_equalizer_cc(int num_taps, - float mu); + friend DIGITAL_API digital_kurtotic_equalizer_cc_sptr + digital_make_kurtotic_equalizer_cc(int num_taps, float mu); + digital_kurtotic_equalizer_cc(int num_taps, float mu); gr_complex sign(gr_complex x) @@ -108,6 +114,12 @@ public: throw std::out_of_range("digital_kurtotic_equalizer::set_gain: Gain value must be >= 0"); d_mu = mu; } + + float gain() const { return d_mu; } + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); }; #endif diff --git a/gr-digital/include/digital_lms_dd_equalizer_cc.h b/gr-digital/include/digital_lms_dd_equalizer_cc.h index 56871fa678..a993776c03 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,12 +70,14 @@ 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; @@ -113,6 +118,9 @@ public: } } + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); }; #endif |