summaryrefslogtreecommitdiff
path: root/gr-digital/include
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/include')
-rw-r--r--gr-digital/include/digital_cma_equalizer_cc.h26
-rw-r--r--gr-digital/include/digital_kurtotic_equalizer_cc.h22
-rw-r--r--gr-digital/include/digital_lms_dd_equalizer_cc.h26
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