GNU Radio 3.7.1 C++ API
gr::digital::lms_dd_equalizer_cc Class Reference

Least-Mean-Square Decision Directed Equalizer (complex in/out) More...

#include <lms_dd_equalizer_cc.h>

Inheritance diagram for gr::digital::lms_dd_equalizer_cc:

List of all members.

Public Types

typedef boost::shared_ptr
< lms_dd_equalizer_cc
sptr

Public Member Functions

virtual void set_taps (const std::vector< gr_complex > &taps)=0
virtual std::vector< gr_complextaps () const =0
virtual float gain () const =0
virtual void set_gain (float mu)=0

Static Public Member Functions

static sptr make (int num_taps, float mu, int sps, constellation_sptr cnst)

Protected Member Functions

virtual gr_complex error (const gr_complex &out)=0
virtual void update_tap (gr_complex &tap, const gr_complex &in)=0

Detailed Description

Least-Mean-Square Decision Directed Equalizer (complex in/out)

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 usualy 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.


Member Typedef Documentation


Member Function Documentation

virtual gr_complex gr::digital::lms_dd_equalizer_cc::error ( const gr_complex out) [protected, pure virtual]
virtual float gr::digital::lms_dd_equalizer_cc::gain ( ) const [pure virtual]
static sptr gr::digital::lms_dd_equalizer_cc::make ( int  num_taps,
float  mu,
int  sps,
constellation_sptr  cnst 
) [static]

Make an LMS decision-directed equalizer

Parameters:
num_tapsNumer of taps in the equalizer (channel size)
muGain of the update loop
spsNumber of samples per symbol of the input signal
cnstA constellation derived from class 'constellation'. Use base() method to get a shared pointer to this base class type.
virtual void gr::digital::lms_dd_equalizer_cc::set_gain ( float  mu) [pure virtual]
virtual void gr::digital::lms_dd_equalizer_cc::set_taps ( const std::vector< gr_complex > &  taps) [pure virtual]
virtual std::vector<gr_complex> gr::digital::lms_dd_equalizer_cc::taps ( ) const [pure virtual]
virtual void gr::digital::lms_dd_equalizer_cc::update_tap ( gr_complex tap,
const gr_complex in 
) [protected, pure virtual]

The documentation for this class was generated from the following file: