diff options
Diffstat (limited to 'gr-digital')
22 files changed, 0 insertions, 1215 deletions
diff --git a/gr-digital/grc/digital_cma_equalizer_cc.block.yml b/gr-digital/grc/digital_cma_equalizer_cc.block.yml deleted file mode 100644 index 42d8b88c7d..0000000000 --- a/gr-digital/grc/digital_cma_equalizer_cc.block.yml +++ /dev/null @@ -1,44 +0,0 @@ -id: digital_cma_equalizer_cc -label: CMA Equalizer -category: '[Core]/Deprecated' -flags: [ python, cpp ] - -parameters: -- id: num_taps - label: Num. Taps - dtype: int -- id: modulus - label: Modulus - dtype: real -- id: mu - label: Gain - dtype: real -- id: sps - label: Samples per Symbol - dtype: int - -inputs: -- domain: stream - dtype: complex - -outputs: -- domain: stream - dtype: complex - -templates: - imports: from gnuradio import digital - make: digital.cma_equalizer_cc(${num_taps}, ${modulus}, ${mu}, ${sps}) - callbacks: - - set_gain(${mu}) - - set_modulus(${modulus}) - -cpp_templates: - includes: [ '#include <gnuradio/digital/cma_equalizer_cc.h>' ] - declarations: 'digital::cma_equalizer_cc::sptr ${id};' - make: 'this->${id} = digital::cma_equalizer_cc::make(${num_taps}, ${modulus}, ${mu}, ${sps});' - link: ['gnuradio-digital'] - callbacks: - - set_gain(${mu}) - - set_modulus(${modulus}) - -file_format: 1 diff --git a/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml b/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml deleted file mode 100644 index 122991a2cb..0000000000 --- a/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml +++ /dev/null @@ -1,36 +0,0 @@ -id: digital_kurtotic_equalizer_cc -label: Kurtotic Equalizer -category: '[Core]/Deprecated' -flags: [ python, cpp ] - -parameters: -- id: num_taps - label: Num. Taps - dtype: int -- id: mu - label: Mu - dtype: real - -inputs: -- domain: stream - dtype: complex - -outputs: -- domain: stream - dtype: complex - -templates: - imports: from gnuradio import digital - make: digital.kurtotic_equalizer_cc(${num_taps}, ${mu}) - callbacks: - - set_gain(${mu}) - -cpp_templates: - includes: ['#include <gnuradio/digital/kurtotic_equalizer_cc.h>'] - declarations: 'digital::kurtotic_equalizer_cc::sptr ${id};' - make: 'this->${id} = digital::kurtotic_equalizer_cc::make(${num_taps}, ${mu});' - link: ['gnuradio-digital'] - callbacks: - - set_gain(${mu}) - -file_format: 1 diff --git a/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml b/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml deleted file mode 100644 index 8f8cb5c016..0000000000 --- a/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml +++ /dev/null @@ -1,47 +0,0 @@ -id: digital_lms_dd_equalizer_cc -label: LMS DD Equalizer -category: '[Core]/Deprecated' -flags: [ python, cpp ] - -parameters: -- id: mu - label: Gain - dtype: real -- id: num_taps - label: Num. Taps - dtype: int -- id: sps - label: Samples per Symbol - dtype: int -- id: cnst - label: Constellation Object - dtype: raw - -inputs: -- domain: stream - dtype: complex - -outputs: -- domain: stream - dtype: complex - -templates: - imports: from gnuradio import digital - make: digital.lms_dd_equalizer_cc(${num_taps}, ${mu}, ${sps}, ${cnst}) - callbacks: - - set_gain(${mu}) - -cpp_templates: - includes: ['#include <gnuradio/digital/lms_dd_equalizer_cc.h>'] - declarations: 'digital::lms_dd_equalizer_cc::sptr ${id};' - make: |- - this->${id} = digital::lms_dd_equalizer_cc::make( - ${num_taps}, - ${mu}, - ${sps}, - ${cnst}); - link: ['gnuradio-digital'] - callbacks: - - set_gain(${mu}) - -file_format: 1 diff --git a/gr-digital/include/gnuradio/digital/CMakeLists.txt b/gr-digital/include/gnuradio/digital/CMakeLists.txt index 52e40fed3c..08abdb8ed9 100644 --- a/gr-digital/include/gnuradio/digital/CMakeLists.txt +++ b/gr-digital/include/gnuradio/digital/CMakeLists.txt @@ -20,7 +20,6 @@ install(FILES chunks_to_symbols.h clock_recovery_mm_cc.h clock_recovery_mm_ff.h - cma_equalizer_cc.h constellation.h constellation_decoder_cb.h constellation_encoder_bc.h @@ -51,10 +50,8 @@ install(FILES hdlc_framer_pb.h header_buffer.h header_payload_demux.h - kurtotic_equalizer_cc.h lfsr.h linear_equalizer.h - lms_dd_equalizer_cc.h map_bb.h metric_type.h modulate_vector.h diff --git a/gr-digital/include/gnuradio/digital/cma_equalizer_cc.h b/gr-digital/include/gnuradio/digital/cma_equalizer_cc.h deleted file mode 100644 index 4b48fef6ee..0000000000 --- a/gr-digital/include/gnuradio/digital/cma_equalizer_cc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H -#define INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/sync_decimator.h> - -namespace gr { -namespace digital { - -/*! - * \brief Implements constant modulus adaptive filter on complex stream. - * \ingroup equalizers_blk - * \ingroup deprecated_blk - * - * \details - * The error value and tap update equations (for p=2) can be found in: - * - * D. Godard, "Self-Recovering Equalization and Carrier Tracking - * in Two-Dimensional Data Communication Systems," IEEE - * Transactions on Communications, Vol. 28, No. 11, pp. 1867 - - * 1875, 1980. - */ -class DIGITAL_API cma_equalizer_cc : virtual public sync_decimator -{ -protected: - virtual gr_complex error(const gr_complex& out) = 0; - virtual void update_tap(gr_complex& tap, const gr_complex& in) = 0; - -public: - // gr::digital::cma_equalizer_cc::sptr - typedef std::shared_ptr<cma_equalizer_cc> sptr; - - /*! - * Make a CMA Equalizer block - * - * \param num_taps Number of taps in the equalizer (channel size) - * \param modulus Modulus of the modulated signals - * \param mu Gain of the update loop - * \param sps Number of samples per symbol of the input signal - */ - static sptr make(int num_taps, float modulus, float mu, int sps); - - virtual void set_taps(const std::vector<gr_complex>& taps) = 0; - virtual std::vector<gr_complex> taps() const = 0; - virtual float gain() const = 0; - virtual void set_gain(float mu) = 0; - virtual float modulus() const = 0; - virtual void set_modulus(float mod) = 0; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H */ diff --git a/gr-digital/include/gnuradio/digital/kurtotic_equalizer_cc.h b/gr-digital/include/gnuradio/digital/kurtotic_equalizer_cc.h deleted file mode 100644 index 2cb58221e2..0000000000 --- a/gr-digital/include/gnuradio/digital/kurtotic_equalizer_cc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H -#define INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/sync_decimator.h> - -namespace gr { -namespace digital { - -/*! - * \brief Implements a kurtosis-based adaptive equalizer on complex stream - * \ingroup equalizers_blk - * \ingroup deprecated_blk - * - * \details - * 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 kurtotic_equalizer_cc : virtual public sync_decimator -{ -protected: - virtual gr_complex error(const gr_complex& out) = 0; - virtual void update_tap(gr_complex& tap, const gr_complex& in) = 0; - -public: - // gr::digital::kurtotic_equalizer_cc::sptr - typedef std::shared_ptr<kurtotic_equalizer_cc> sptr; - - static sptr make(int num_taps, float mu); - - virtual float gain() const = 0; - virtual void set_gain(float mu) = 0; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H */ diff --git a/gr-digital/include/gnuradio/digital/lms_dd_equalizer_cc.h b/gr-digital/include/gnuradio/digital/lms_dd_equalizer_cc.h deleted file mode 100644 index 8a0ac765de..0000000000 --- a/gr-digital/include/gnuradio/digital/lms_dd_equalizer_cc.h +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H -#define INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/digital/constellation.h> -#include <gnuradio/sync_decimator.h> - -namespace gr { -namespace digital { - -/*! - * \brief Least-Mean-Square Decision Directed Equalizer (complex in/out) - * \ingroup equalizers_blk - * \ingroup deprecated_blk - * - * \details - * This block implements an LMS-based decision-directed equalizer. - * It uses a set of weights, w, to correlate against the inputs, - * u, and a decisions is then made from this output. The error in - * the decision is used to update the weight vector. - * - * y[n] = conj(w[n]) u[n] - * d[n] = decision(y[n]) - * e[n] = d[n] - y[n] - * w[n+1] = w[n] + mu u[n] conj(e[n]) - * - * Where mu is a gain value (between 0 and 1 and usually small, - * around 0.001 - 0.01. - * - * This block uses the digital_constellation object for making the - * decision from y[n]. Create the constellation object for - * whatever constellation is to be used and pass in the object. - * In Python, you can use something like: - * - * self.constellation = digital.constellation_qpsk() - * - * To create a QPSK constellation (see the digital_constellation - * block for more details as to what constellations are available - * or how to create your own). You then pass the object to this - * block as an sptr, or using "self.constellation.base()". - * - * The theory for this algorithm can be found in Chapter 9 of: - * S. Haykin, Adaptive Filter Theory, Upper Saddle River, NJ: - * Prentice Hall, 1996. - */ -class DIGITAL_API lms_dd_equalizer_cc : virtual public sync_decimator -{ -protected: - virtual gr_complex error(const gr_complex& out) = 0; - virtual void update_tap(gr_complex& tap, const gr_complex& in) = 0; - -public: - // gr::digital::lms_dd_equalizer_cc::sptr - typedef std::shared_ptr<lms_dd_equalizer_cc> sptr; - - /*! - * Make an LMS decision-directed equalizer - * - * \param num_taps Number of taps in the equalizer (channel size) - * \param mu Gain of the update loop - * \param sps Number of samples per symbol of the input signal - * \param cnst A constellation derived from class - * 'constellation'. Use base() method to get a shared pointer to - * this base class type. - */ - static sptr make(int num_taps, float mu, int sps, constellation_sptr cnst); - - virtual void set_taps(const std::vector<gr_complex>& taps) = 0; - virtual std::vector<gr_complex> taps() const = 0; - virtual float gain() const = 0; - virtual void set_gain(float mu) = 0; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H */ diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt index 89d7e60a27..6b449ad6e7 100644 --- a/gr-digital/lib/CMakeLists.txt +++ b/gr-digital/lib/CMakeLists.txt @@ -17,7 +17,6 @@ add_library(gnuradio-digital clock_recovery_mm_cc_impl.cc clock_recovery_mm_ff_impl.cc clock_tracking_loop.cc - cma_equalizer_cc_impl.cc constellation.cc constellation_decoder_cb_impl.cc constellation_encoder_bc_impl.cc @@ -48,9 +47,7 @@ add_library(gnuradio-digital hdlc_framer_pb_impl.cc header_buffer.cc header_payload_demux_impl.cc - kurtotic_equalizer_cc_impl.cc linear_equalizer_impl.cc - lms_dd_equalizer_cc_impl.cc map_bb_impl.cc meas_evm_cc_impl.cc modulate_vector.cc diff --git a/gr-digital/lib/cma_equalizer_cc_impl.cc b/gr-digital/lib/cma_equalizer_cc_impl.cc deleted file mode 100644 index d0dc1e0961..0000000000 --- a/gr-digital/lib/cma_equalizer_cc_impl.cc +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "cma_equalizer_cc_impl.h" -#include <gnuradio/io_signature.h> - -namespace gr { -namespace digital { - -using namespace filter::kernel; - -cma_equalizer_cc::sptr -cma_equalizer_cc::make(int num_taps, float modulus, float mu, int sps) -{ - return gnuradio::make_block_sptr<cma_equalizer_cc_impl>(num_taps, modulus, mu, sps); -} - -cma_equalizer_cc_impl::cma_equalizer_cc_impl(int num_taps, - float modulus, - float mu, - int sps) - : sync_decimator("cma_equalizer_cc", - io_signature::make(1, 1, sizeof(gr_complex)), - io_signature::make(1, 1, sizeof(gr_complex)), - sps), - fir_filter_ccc(std::vector<gr_complex>(num_taps, gr_complex(0, 0))), - d_new_taps(num_taps, gr_complex(0, 0)), - d_updated(false), - d_error(gr_complex(0, 0)) -{ - set_modulus(modulus); - set_gain(mu); - if (num_taps > 0) - d_new_taps[0] = 1.0; - fir_filter_ccc::set_taps(d_new_taps); - - set_history(num_taps); -} - -cma_equalizer_cc_impl::~cma_equalizer_cc_impl() {} - -void cma_equalizer_cc_impl::set_taps(const std::vector<gr_complex>& taps) -{ - d_new_taps = taps; - d_updated = true; -} - -std::vector<gr_complex> cma_equalizer_cc_impl::taps() const { return d_taps; } - -gr_complex cma_equalizer_cc_impl::error(const gr_complex& out) -{ - gr_complex error = out * (norm(out) - d_modulus); - float re = gr::clip(error.real(), 1.0); - float im = gr::clip(error.imag(), 1.0); - return gr_complex(re, im); -} - -void cma_equalizer_cc_impl::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; -} - -int cma_equalizer_cc_impl::work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - const gr_complex* in = (const gr_complex*)input_items[0]; - gr_complex* out = (gr_complex*)output_items[0]; - - if (d_updated) { - d_taps = d_new_taps; - set_history(d_taps.size()); - d_updated = false; - return 0; // history requirements may have changed. - } - - int j = 0; - size_t k, l = d_taps.size(); - for (int i = 0; i < noutput_items; i++) { - out[i] = filter(&in[j]); - - // Adjust taps - d_error = error(out[i]); - for (k = 0; k < l; k++) { - // Update tap locally from error. - update_tap(d_taps[k], in[j + k]); - - // Update aligned taps in filter object. - fir_filter_ccc::update_tap(d_taps[k], k); - } - - j += decimation(); - } - - return noutput_items; -} - -} /* namespace digital */ -} /* namespace gr */ diff --git a/gr-digital/lib/cma_equalizer_cc_impl.h b/gr-digital/lib/cma_equalizer_cc_impl.h deleted file mode 100644 index 8f4264e0e8..0000000000 --- a/gr-digital/lib/cma_equalizer_cc_impl.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_CMA_EQUALIZER_CC_IMPL_H -#define INCLUDED_DIGITAL_CMA_EQUALIZER_CC_IMPL_H - -#include <gnuradio/digital/cma_equalizer_cc.h> -#include <gnuradio/filter/fir_filter.h> -#include <gnuradio/math.h> -#include <stdexcept> - -namespace gr { -namespace digital { - -class cma_equalizer_cc_impl : public cma_equalizer_cc, filter::kernel::fir_filter_ccc -{ -private: - std::vector<gr_complex> d_new_taps; - bool d_updated; - gr_complex d_error; - - float d_modulus; - float d_mu; - -protected: - gr_complex error(const gr_complex& out) override; - void update_tap(gr_complex& tap, const gr_complex& in) override; - -public: - cma_equalizer_cc_impl(int num_taps, float modulus, float mu, int sps); - ~cma_equalizer_cc_impl() override; - - void set_taps(const std::vector<gr_complex>& taps) override; - std::vector<gr_complex> taps() const override; - - float gain() const override { return d_mu; } - - void set_gain(float mu) override - { - if (mu < 0.0f || mu > 1.0f) { - throw std::out_of_range( - "cma_equalizer::set_gain: Gain value must be in [0,1]"); - } - d_mu = mu; - } - - float modulus() const override { return d_modulus; } - - void set_modulus(float mod) override - { - if (mod < 0) - throw std::out_of_range( - "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) override; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_CMA_EQUALIZER_CC_IMPL_H */ diff --git a/gr-digital/lib/kurtotic_equalizer_cc_impl.cc b/gr-digital/lib/kurtotic_equalizer_cc_impl.cc deleted file mode 100644 index 002ee69f9f..0000000000 --- a/gr-digital/lib/kurtotic_equalizer_cc_impl.cc +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "kurtotic_equalizer_cc_impl.h" -#include <gnuradio/io_signature.h> -#include <volk/volk.h> - -namespace gr { -namespace digital { - -kurtotic_equalizer_cc::sptr kurtotic_equalizer_cc::make(int num_taps, float mu) -{ - return gnuradio::make_block_sptr<kurtotic_equalizer_cc_impl>(num_taps, mu); -} - -kurtotic_equalizer_cc_impl::kurtotic_equalizer_cc_impl(int num_taps, float mu) - : sync_decimator("kurtotic_equalizer_cc", - io_signature::make(1, 1, sizeof(gr_complex)), - io_signature::make(1, 1, sizeof(gr_complex)), - 1), - filter::kernel::fir_filter_ccc(std::vector<gr_complex>(num_taps, gr_complex(0, 0))) -{ - set_gain(mu); - if (num_taps > 0) - d_taps[0] = 1.0; - set_taps(d_taps); - - d_alpha_p = 0.01; - d_alpha_q = 0.01; - d_alpha_m = 0.01; - - d_p = 0.0f; - d_m = 0.0f; - d_q = gr_complex(0, 0); - d_u = gr_complex(0, 0); - - const int alignment_multiple = volk_get_alignment() / sizeof(gr_complex); - set_alignment(std::max(1, alignment_multiple)); - set_history(num_taps + 1); -} - -kurtotic_equalizer_cc_impl::~kurtotic_equalizer_cc_impl() {} - -int kurtotic_equalizer_cc_impl::work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - gr_complex* in = (gr_complex*)input_items[0]; - gr_complex* out = (gr_complex*)output_items[0]; - - int j = 0, k, l = d_taps.size(); - for (int i = 0; i < noutput_items; i++) { - out[i] = filter(&in[j]); - - // Adjust taps - d_error = error(out[i]); - for (k = 0; k < l; k++) { - update_tap(d_taps[l - k - 1], in[j + k]); - } - - j += decimation(); - } - - return noutput_items; -} - -} /* namespace digital */ -} /* namespace gr */ diff --git a/gr-digital/lib/kurtotic_equalizer_cc_impl.h b/gr-digital/lib/kurtotic_equalizer_cc_impl.h deleted file mode 100644 index ff56a7b2bd..0000000000 --- a/gr-digital/lib/kurtotic_equalizer_cc_impl.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_IMPL_H -#define INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_IMPL_H - -#include <gnuradio/digital/kurtotic_equalizer_cc.h> -#include <gnuradio/filter/fir_filter.h> -#include <gnuradio/math.h> -#include <complex> -#include <stdexcept> - -namespace gr { -namespace digital { - -class kurtotic_equalizer_cc_impl : public kurtotic_equalizer_cc, - filter::kernel::fir_filter_ccc -{ -private: - std::vector<gr_complex> d_new_taps; - gr_complex d_error; - - float d_mu; - float d_p, d_m; - gr_complex d_q, d_u; - float d_alpha_p, d_alpha_q, d_alpha_m; - - gr_complex sign(gr_complex x) - { - float re = (float)(x.real() >= 0.0f); - float im = (float)(x.imag() >= 0.0f); - return gr_complex(re, im); - } - -protected: - gr_complex error(const gr_complex& out) override - { - // p = E[|z|^2] - // q = E[z^2] - // m = E[|z|^4] - // u = E[kurtosis(z)] - - float nrm = std::norm(out); - gr_complex cnj = std::conj(out); - float epsilon_f = 1e-12; - gr_complex epsilon_c = gr_complex(1e-12, 1e-12); - - d_p = (1 - d_alpha_p) * d_p + (d_alpha_p)*nrm + epsilon_f; - d_q = (1 - d_alpha_q) * d_q + (d_alpha_q)*out * out + epsilon_c; - d_m = (1 - d_alpha_m) * d_m + (d_alpha_m)*nrm * nrm + epsilon_f; - d_u = d_m - 2.0f * (d_p * d_p) - d_q * d_q; - - gr_complex F = - (1.0f / (d_p * d_p * d_p)) * - (sign(d_u) * (nrm * cnj - 2.0f * d_p * cnj - std::conj(d_q) * out) - - std::abs(d_u) * cnj); - - float re = gr::clip(F.real(), 1.0); - float im = gr::clip(F.imag(), 1.0); - return gr_complex(re, im); - } - - void update_tap(gr_complex& tap, const gr_complex& in) override - { - tap += d_mu * in * d_error; - } - -public: - kurtotic_equalizer_cc_impl(int num_taps, float mu); - ~kurtotic_equalizer_cc_impl() override; - - float gain() const override { return d_mu; } - - void set_gain(float mu) override - { - if (mu < 0) - throw std::out_of_range( - "kurtotic_equalizer_cc_impl::set_gain: Gain value must be >= 0"); - d_mu = mu; - } - - int work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) override; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_IMPL_H */ diff --git a/gr-digital/lib/lms_dd_equalizer_cc_impl.cc b/gr-digital/lib/lms_dd_equalizer_cc_impl.cc deleted file mode 100644 index ad40171964..0000000000 --- a/gr-digital/lib/lms_dd_equalizer_cc_impl.cc +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "lms_dd_equalizer_cc_impl.h" -#include <gnuradio/io_signature.h> -#include <gnuradio/misc.h> -#include <volk/volk.h> - -namespace gr { -namespace digital { - -using namespace filter::kernel; - -lms_dd_equalizer_cc::sptr -lms_dd_equalizer_cc::make(int num_taps, float mu, int sps, constellation_sptr cnst) -{ - return gnuradio::make_block_sptr<lms_dd_equalizer_cc_impl>(num_taps, mu, sps, cnst); -} - -lms_dd_equalizer_cc_impl::lms_dd_equalizer_cc_impl(int num_taps, - float mu, - int sps, - constellation_sptr cnst) - : sync_decimator("lms_dd_equalizer_cc", - io_signature::make(1, 1, sizeof(gr_complex)), - io_signature::make(1, 1, sizeof(gr_complex)), - sps), - fir_filter_ccc(std::vector<gr_complex>(num_taps, gr_complex(0, 0))), - d_new_taps(num_taps, gr_complex(0, 0)), - d_updated(false), - d_cnst(cnst) -{ - set_gain(mu); - if (num_taps > 0) - d_new_taps[0] = 1.0; - fir_filter_ccc::set_taps(d_new_taps); - - const int alignment_multiple = volk_get_alignment() / sizeof(gr_complex); - set_alignment(std::max(1, alignment_multiple)); - - set_history(num_taps); -} - -lms_dd_equalizer_cc_impl::~lms_dd_equalizer_cc_impl() {} - -void lms_dd_equalizer_cc_impl::set_taps(const std::vector<gr_complex>& taps) -{ - d_new_taps = taps; - d_updated = true; -} - -std::vector<gr_complex> lms_dd_equalizer_cc_impl::taps() const { return d_taps; } - -gr_complex lms_dd_equalizer_cc_impl::error(const gr_complex& out) -{ - gr_complex decision, error; - // The `map_to_points` function will treat `decision` as an array pointer. - // This call is "safe" because `map_to_points` is limited by the - // dimensionality of the constellation. This class calls the - // `constellation` class default constructor, which initializes the - // dimensionality value to `1`. Thus, Only the single `gr_complex` value - // will be dereferenced. - d_cnst->map_to_points(d_cnst->decision_maker(&out), &decision); - error = decision - out; - return error; -} - -void lms_dd_equalizer_cc_impl::update_tap(gr_complex& tap, const gr_complex& in) -{ - tap += d_mu * conj(in) * d_error; -} - -int lms_dd_equalizer_cc_impl::work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - const gr_complex* in = (const gr_complex*)input_items[0]; - gr_complex* out = (gr_complex*)output_items[0]; - - if (d_updated) { - d_taps = d_new_taps; - set_history(d_taps.size()); - d_updated = false; - return 0; // history requirements may have changed. - } - - int j = 0; - size_t k, l = d_taps.size(); - for (int i = 0; i < noutput_items; i++) { - out[i] = filter(&in[j]); - - // Adjust taps - d_error = error(out[i]); - for (k = 0; k < l; k++) { - // Update tap locally from error. - update_tap(d_taps[k], in[j + k]); - - // Update aligned taps in filter object. - fir_filter_ccc::update_tap(d_taps[k], k); - } - - j += decimation(); - } - - return noutput_items; -} - -} /* namespace digital */ -} /* namespace gr */ diff --git a/gr-digital/lib/lms_dd_equalizer_cc_impl.h b/gr-digital/lib/lms_dd_equalizer_cc_impl.h deleted file mode 100644 index 4f5318b6a4..0000000000 --- a/gr-digital/lib/lms_dd_equalizer_cc_impl.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifndef INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_IMPL_H -#define INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_IMPL_H - -#include <gnuradio/digital/lms_dd_equalizer_cc.h> -#include <gnuradio/filter/fir_filter.h> -#include <stdexcept> - -namespace gr { -namespace digital { - -class lms_dd_equalizer_cc_impl : public lms_dd_equalizer_cc, - filter::kernel::fir_filter_ccc -{ -private: - std::vector<gr_complex> d_new_taps; - bool d_updated; - gr_complex d_error; - - float d_mu; - constellation_sptr d_cnst; - -protected: - gr_complex error(const gr_complex& out) override; - void update_tap(gr_complex& tap, const gr_complex& in) override; - -public: - lms_dd_equalizer_cc_impl(int num_taps, float mu, int sps, constellation_sptr cnst); - ~lms_dd_equalizer_cc_impl() override; - - void set_taps(const std::vector<gr_complex>& taps) override; - std::vector<gr_complex> taps() const override; - - float gain() const override { return d_mu; } - - void set_gain(float mu) override - { - if (mu < 0.0f || mu > 1.0f) { - throw std::out_of_range( - "lms_dd_equalizer_impl::set_mu: Gain value must in [0, 1]"); - } else { - d_mu = mu; - } - } - - int work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) override; -}; - -} /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_IMPL_H */ diff --git a/gr-digital/python/digital/bindings/CMakeLists.txt b/gr-digital/python/digital/bindings/CMakeLists.txt index ade0e251a2..cf38af030d 100644 --- a/gr-digital/python/digital/bindings/CMakeLists.txt +++ b/gr-digital/python/digital/bindings/CMakeLists.txt @@ -15,7 +15,6 @@ list(APPEND digital_python_files chunks_to_symbols_python.cc clock_recovery_mm_cc_python.cc clock_recovery_mm_ff_python.cc - cma_equalizer_cc_python.cc constellation_python.cc constellation_decoder_cb_python.cc constellation_encoder_bc_python.cc @@ -52,10 +51,8 @@ list(APPEND digital_python_files header_format_ofdm_python.cc header_payload_demux_python.cc interpolating_resampler_type_python.cc - kurtotic_equalizer_cc_python.cc lfsr_python.cc linear_equalizer_python.cc - lms_dd_equalizer_cc_python.cc map_bb_python.cc meas_evm_cc_python.cc metric_type_python.cc diff --git a/gr-digital/python/digital/bindings/cma_equalizer_cc_python.cc b/gr-digital/python/digital/bindings/cma_equalizer_cc_python.cc deleted file mode 100644 index 3daa62ee82..0000000000 --- a/gr-digital/python/digital/bindings/cma_equalizer_cc_python.cc +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -/***********************************************************************************/ -/* This file is automatically generated using bindtool and can be manually edited */ -/* The following lines can be configured to regenerate this file during cmake */ -/* If manual edits are made, the following tags should be modified accordingly. */ -/* BINDTOOL_GEN_AUTOMATIC(0) */ -/* BINDTOOL_USE_PYGCCXML(0) */ -/* BINDTOOL_HEADER_FILE(cma_equalizer_cc.h) */ -/* BINDTOOL_HEADER_FILE_HASH(3d7ebc78bf6a6c712f19f13f3e20648a) */ -/***********************************************************************************/ - -#include <pybind11/complex.h> -#include <pybind11/pybind11.h> -#include <pybind11/stl.h> - -namespace py = pybind11; - -#include <gnuradio/digital/cma_equalizer_cc.h> -// pydoc.h is automatically generated in the build directory -#include <cma_equalizer_cc_pydoc.h> - -void bind_cma_equalizer_cc(py::module& m) -{ - - using cma_equalizer_cc = ::gr::digital::cma_equalizer_cc; - - - py::class_<cma_equalizer_cc, - gr::sync_decimator, - gr::sync_block, - gr::block, - gr::basic_block, - std::shared_ptr<cma_equalizer_cc>>( - m, "cma_equalizer_cc", D(cma_equalizer_cc)) - - .def(py::init(&cma_equalizer_cc::make), - py::arg("num_taps"), - py::arg("modulus"), - py::arg("mu"), - py::arg("sps"), - D(cma_equalizer_cc, make)) - - - .def("set_taps", - &cma_equalizer_cc::set_taps, - py::arg("taps"), - D(cma_equalizer_cc, set_taps)) - - - .def("taps", &cma_equalizer_cc::taps, D(cma_equalizer_cc, taps)) - - - .def("gain", &cma_equalizer_cc::gain, D(cma_equalizer_cc, gain)) - - - .def("set_gain", - &cma_equalizer_cc::set_gain, - py::arg("mu"), - D(cma_equalizer_cc, set_gain)) - - - .def("modulus", &cma_equalizer_cc::modulus, D(cma_equalizer_cc, modulus)) - - - .def("set_modulus", - &cma_equalizer_cc::set_modulus, - py::arg("mod"), - D(cma_equalizer_cc, set_modulus)) - - ; -} diff --git a/gr-digital/python/digital/bindings/docstrings/cma_equalizer_cc_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/cma_equalizer_cc_pydoc_template.h deleted file mode 100644 index ae3a5c5df9..0000000000 --- a/gr-digital/python/digital/bindings/docstrings/cma_equalizer_cc_pydoc_template.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ -#include "pydoc_macros.h" -#define D(...) DOC(gr, digital, __VA_ARGS__) -/* - This file contains placeholders for docstrings for the Python bindings. - Do not edit! These were automatically extracted during the binding process - and will be overwritten during the build process - */ - - -static const char* __doc_gr_digital_cma_equalizer_cc = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_cma_equalizer_cc_0 = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_cma_equalizer_cc_1 = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_make = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_set_taps = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_taps = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_gain = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_set_gain = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_modulus = R"doc()doc"; - - -static const char* __doc_gr_digital_cma_equalizer_cc_set_modulus = R"doc()doc"; diff --git a/gr-digital/python/digital/bindings/docstrings/kurtotic_equalizer_cc_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/kurtotic_equalizer_cc_pydoc_template.h deleted file mode 100644 index 135c9699e8..0000000000 --- a/gr-digital/python/digital/bindings/docstrings/kurtotic_equalizer_cc_pydoc_template.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ -#include "pydoc_macros.h" -#define D(...) DOC(gr, digital, __VA_ARGS__) -/* - This file contains placeholders for docstrings for the Python bindings. - Do not edit! These were automatically extracted during the binding process - and will be overwritten during the build process - */ - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc = R"doc()doc"; - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc_kurtotic_equalizer_cc_0 = - R"doc()doc"; - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc_kurtotic_equalizer_cc_1 = - R"doc()doc"; - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc_make = R"doc()doc"; - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc_gain = R"doc()doc"; - - -static const char* __doc_gr_digital_kurtotic_equalizer_cc_set_gain = R"doc()doc"; diff --git a/gr-digital/python/digital/bindings/docstrings/lms_dd_equalizer_cc_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/lms_dd_equalizer_cc_pydoc_template.h deleted file mode 100644 index 88b45955a9..0000000000 --- a/gr-digital/python/digital/bindings/docstrings/lms_dd_equalizer_cc_pydoc_template.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ -#include "pydoc_macros.h" -#define D(...) DOC(gr, digital, __VA_ARGS__) -/* - This file contains placeholders for docstrings for the Python bindings. - Do not edit! These were automatically extracted during the binding process - and will be overwritten during the build process - */ - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc = R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_lms_dd_equalizer_cc_0 = - R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_lms_dd_equalizer_cc_1 = - R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_make = R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_set_taps = R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_taps = R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_gain = R"doc()doc"; - - -static const char* __doc_gr_digital_lms_dd_equalizer_cc_set_gain = R"doc()doc"; diff --git a/gr-digital/python/digital/bindings/kurtotic_equalizer_cc_python.cc b/gr-digital/python/digital/bindings/kurtotic_equalizer_cc_python.cc deleted file mode 100644 index e9aa8d1778..0000000000 --- a/gr-digital/python/digital/bindings/kurtotic_equalizer_cc_python.cc +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -/***********************************************************************************/ -/* This file is automatically generated using bindtool and can be manually edited */ -/* The following lines can be configured to regenerate this file during cmake */ -/* If manual edits are made, the following tags should be modified accordingly. */ -/* BINDTOOL_GEN_AUTOMATIC(0) */ -/* BINDTOOL_USE_PYGCCXML(0) */ -/* BINDTOOL_HEADER_FILE(kurtotic_equalizer_cc.h) */ -/* BINDTOOL_HEADER_FILE_HASH(9d3ee736116dcbe107ddaccf5d2ed7f6) */ -/***********************************************************************************/ - -#include <pybind11/complex.h> -#include <pybind11/pybind11.h> -#include <pybind11/stl.h> - -namespace py = pybind11; - -#include <gnuradio/digital/kurtotic_equalizer_cc.h> -// pydoc.h is automatically generated in the build directory -#include <kurtotic_equalizer_cc_pydoc.h> - -void bind_kurtotic_equalizer_cc(py::module& m) -{ - - using kurtotic_equalizer_cc = ::gr::digital::kurtotic_equalizer_cc; - - - py::class_<kurtotic_equalizer_cc, - gr::sync_decimator, - gr::sync_block, - gr::block, - gr::basic_block, - std::shared_ptr<kurtotic_equalizer_cc>>( - m, "kurtotic_equalizer_cc", D(kurtotic_equalizer_cc)) - - .def(py::init(&kurtotic_equalizer_cc::make), - py::arg("num_taps"), - py::arg("mu"), - D(kurtotic_equalizer_cc, make)) - - - .def("gain", &kurtotic_equalizer_cc::gain, D(kurtotic_equalizer_cc, gain)) - - - .def("set_gain", - &kurtotic_equalizer_cc::set_gain, - py::arg("mu"), - D(kurtotic_equalizer_cc, set_gain)) - - ; -} diff --git a/gr-digital/python/digital/bindings/lms_dd_equalizer_cc_python.cc b/gr-digital/python/digital/bindings/lms_dd_equalizer_cc_python.cc deleted file mode 100644 index db74ff1d37..0000000000 --- a/gr-digital/python/digital/bindings/lms_dd_equalizer_cc_python.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2020 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -/***********************************************************************************/ -/* This file is automatically generated using bindtool and can be manually edited */ -/* The following lines can be configured to regenerate this file during cmake */ -/* If manual edits are made, the following tags should be modified accordingly. */ -/* BINDTOOL_GEN_AUTOMATIC(0) */ -/* BINDTOOL_USE_PYGCCXML(0) */ -/* BINDTOOL_HEADER_FILE(lms_dd_equalizer_cc.h) */ -/* BINDTOOL_HEADER_FILE_HASH(2a05788ef6fd117e807fabb019bf2cac) */ -/***********************************************************************************/ - -#include <pybind11/complex.h> -#include <pybind11/pybind11.h> -#include <pybind11/stl.h> - -namespace py = pybind11; - -#include <gnuradio/digital/lms_dd_equalizer_cc.h> -// pydoc.h is automatically generated in the build directory -#include <lms_dd_equalizer_cc_pydoc.h> - -void bind_lms_dd_equalizer_cc(py::module& m) -{ - - using lms_dd_equalizer_cc = ::gr::digital::lms_dd_equalizer_cc; - - - py::class_<lms_dd_equalizer_cc, - gr::sync_decimator, - gr::sync_block, - gr::block, - gr::basic_block, - std::shared_ptr<lms_dd_equalizer_cc>>( - m, "lms_dd_equalizer_cc", D(lms_dd_equalizer_cc)) - - .def(py::init(&lms_dd_equalizer_cc::make), - py::arg("num_taps"), - py::arg("mu"), - py::arg("sps"), - py::arg("cnst"), - D(lms_dd_equalizer_cc, make)) - - - .def("set_taps", - &lms_dd_equalizer_cc::set_taps, - py::arg("taps"), - D(lms_dd_equalizer_cc, set_taps)) - - - .def("taps", &lms_dd_equalizer_cc::taps, D(lms_dd_equalizer_cc, taps)) - - - .def("gain", &lms_dd_equalizer_cc::gain, D(lms_dd_equalizer_cc, gain)) - - - .def("set_gain", - &lms_dd_equalizer_cc::set_gain, - py::arg("mu"), - D(lms_dd_equalizer_cc, set_gain)) - - ; -} diff --git a/gr-digital/python/digital/bindings/python_bindings.cc b/gr-digital/python/digital/bindings/python_bindings.cc index 2bb0070260..0cf304cf95 100644 --- a/gr-digital/python/digital/bindings/python_bindings.cc +++ b/gr-digital/python/digital/bindings/python_bindings.cc @@ -25,7 +25,6 @@ void bind_burst_shaper(py::module&); void bind_chunks_to_symbols(py::module&); void bind_clock_recovery_mm_cc(py::module&); void bind_clock_recovery_mm_ff(py::module&); -void bind_cma_equalizer_cc(py::module&); void bind_constellation(py::module&); void bind_constellation_decoder_cb(py::module&); void bind_constellation_encoder_bc(py::module&); @@ -62,10 +61,8 @@ void bind_header_format_default(py::module&); void bind_header_format_ofdm(py::module&); void bind_header_payload_demux(py::module&); void bind_interpolating_resampler_type(py::module&); -void bind_kurtotic_equalizer_cc(py::module&); void bind_lfsr(py::module&); void bind_linear_equalizer(py::module&); -void bind_lms_dd_equalizer_cc(py::module&); void bind_map_bb(py::module&); void bind_meas_evm_cc(py::module&); void bind_metric_type(py::module&); @@ -133,7 +130,6 @@ PYBIND11_MODULE(digital_python, m) bind_chunks_to_symbols(m); bind_clock_recovery_mm_cc(m); bind_clock_recovery_mm_ff(m); - bind_cma_equalizer_cc(m); bind_constellation(m); bind_constellation_decoder_cb(m); bind_constellation_encoder_bc(m); @@ -170,10 +166,8 @@ PYBIND11_MODULE(digital_python, m) bind_header_format_ofdm(m); bind_header_payload_demux(m); bind_interpolating_resampler_type(m); - bind_kurtotic_equalizer_cc(m); bind_lfsr(m); bind_linear_equalizer(m); - bind_lms_dd_equalizer_cc(m); bind_map_bb(m); bind_meas_evm_cc(m); bind_metric_type(m); |