GNU Radio Manual and C++ API Reference  v3.9.2.0-89-gb7c7001e
The Free & Open Software Radio Ecosystem
cma_equalizer_cc.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2011,2012 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 #ifndef INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H
12 #define INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H
13 
14 #include <gnuradio/digital/api.h>
16 
17 namespace gr {
18 namespace digital {
19 
20 /*!
21  * \brief Implements constant modulus adaptive filter on complex stream.
22  * \ingroup equalizers_blk
23  * \ingroup deprecated_blk
24  *
25  * \details
26  * The error value and tap update equations (for p=2) can be found in:
27  *
28  * D. Godard, "Self-Recovering Equalization and Carrier Tracking
29  * in Two-Dimensional Data Communication Systems," IEEE
30  * Transactions on Communications, Vol. 28, No. 11, pp. 1867 -
31  * 1875, 1980.
32  */
34 {
35 protected:
36  virtual gr_complex error(const gr_complex& out) = 0;
37  virtual void update_tap(gr_complex& tap, const gr_complex& in) = 0;
38 
39 public:
40  // gr::digital::cma_equalizer_cc::sptr
41  typedef std::shared_ptr<cma_equalizer_cc> sptr;
42 
43  /*!
44  * Make a CMA Equalizer block
45  *
46  * \param num_taps Number of taps in the equalizer (channel size)
47  * \param modulus Modulus of the modulated signals
48  * \param mu Gain of the update loop
49  * \param sps Number of samples per symbol of the input signal
50  */
51  static sptr make(int num_taps, float modulus, float mu, int sps);
52 
53  virtual void set_taps(const std::vector<gr_complex>& taps) = 0;
54  virtual std::vector<gr_complex> taps() const = 0;
55  virtual float gain() const = 0;
56  virtual void set_gain(float mu) = 0;
57  virtual float modulus() const = 0;
58  virtual void set_modulus(float mod) = 0;
59 };
60 
61 } /* namespace digital */
62 } /* namespace gr */
63 
64 #endif /* INCLUDED_DIGITAL_CMA_EQUALIZER_CC_H */
Implements constant modulus adaptive filter on complex stream.
Definition: cma_equalizer_cc.h:34
virtual float gain() const =0
virtual void set_taps(const std::vector< gr_complex > &taps)=0
virtual std::vector< gr_complex > taps() const =0
static sptr make(int num_taps, float modulus, float mu, int sps)
virtual gr_complex error(const gr_complex &out)=0
virtual void set_gain(float mu)=0
std::shared_ptr< cma_equalizer_cc > sptr
Definition: cma_equalizer_cc.h:41
virtual float modulus() const =0
virtual void set_modulus(float mod)=0
virtual void update_tap(gr_complex &tap, const gr_complex &in)=0
synchronous N:1 input to output with history
Definition: sync_decimator.h:26
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:18
std::complex< float > gr_complex
Definition: gr_complex.h:15
static constexpr float taps[NSTEPS+1][NTAPS]
Definition: interpolator_taps.h:9
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29