GNU Radio Manual and C++ API Reference  3.7.13.4
The Free & Open Software Radio Ecosystem

Simple decision feedback equalizer for OFDM. More...

#include <gnuradio/digital/ofdm_equalizer_simpledfe.h>

Public Types

typedef boost::shared_ptr< ofdm_equalizer_simpledfesptr
 
- Public Types inherited from gr::digital::ofdm_equalizer_1d_pilots
typedef boost::shared_ptr< ofdm_equalizer_1d_pilotssptr
 
- Public Types inherited from gr::digital::ofdm_equalizer_base
typedef boost::shared_ptr< ofdm_equalizer_basesptr
 

Public Member Functions

 ofdm_equalizer_simpledfe (int fft_len, const gr::digital::constellation_sptr &constellation, const std::vector< std::vector< int > > &occupied_carriers=std::vector< std::vector< int > >(), const std::vector< std::vector< int > > &pilot_carriers=std::vector< std::vector< int > >(), const std::vector< std::vector< gr_complex > > &pilot_symbols=std::vector< std::vector< gr_complex > >(), int symbols_skipped=0, float alpha=0.1, bool input_is_shifted=true)
 
 ~ofdm_equalizer_simpledfe ()
 
void equalize (gr_complex *frame, int n_sym, const std::vector< gr_complex > &initial_taps=std::vector< gr_complex >(), const std::vector< tag_t > &tags=std::vector< tag_t >())
 Run the actual equalization. More...
 
- Public Member Functions inherited from gr::digital::ofdm_equalizer_1d_pilots
 ofdm_equalizer_1d_pilots (int fft_len, const std::vector< std::vector< int > > &occupied_carriers, const std::vector< std::vector< int > > &pilot_carriers, const std::vector< std::vector< gr_complex > > &pilot_symbols, int symbols_skipped, bool input_is_shifted)
 
 ~ofdm_equalizer_1d_pilots ()
 
void reset ()
 Reset the channel information state knowledge. More...
 
void get_channel_state (std::vector< gr_complex > &taps)
 Return the current channel state. More...
 
- Public Member Functions inherited from gr::digital::ofdm_equalizer_base
 ofdm_equalizer_base (int fft_len)
 
virtual ~ofdm_equalizer_base ()
 
int fft_len ()
 
sptr base ()
 

Static Public Member Functions

static sptr make (int fft_len, const gr::digital::constellation_sptr &constellation, const std::vector< std::vector< int > > &occupied_carriers=std::vector< std::vector< int > >(), const std::vector< std::vector< int > > &pilot_carriers=std::vector< std::vector< int > >(), const std::vector< std::vector< gr_complex > > &pilot_symbols=std::vector< std::vector< gr_complex > >(), int symbols_skipped=0, float alpha=0.1, bool input_is_shifted=true)
 

Additional Inherited Members

- Protected Attributes inherited from gr::digital::ofdm_equalizer_1d_pilots
std::vector< bool > d_occupied_carriers
 If d_occupied_carriers[k][l] is true, symbol k, carrier l is carrying data. More...
 
std::vector< std::vector< bool > > d_pilot_carriers
 If d_pilot_carriers[k][l] is true, symbol k, carrier l is carrying data. More...
 
std::vector< std::vector< gr_complex > > d_pilot_symbols
 If d_pilot_carriers[k][l] is true, d_pilot_symbols[k][l] is its tx'd value. More...
 
int d_symbols_skipped
 In case the frame doesn't begin with OFDM symbol 0, this is the index of the first symbol. More...
 
int d_pilot_carr_set
 The current position in the set of pilot symbols. More...
 
std::vector< gr_complexd_channel_state
 Vector of length d_fft_len saving the current channel state (on the occupied carriers) More...
 
- Protected Attributes inherited from gr::digital::ofdm_equalizer_base
int d_fft_len
 

Detailed Description

Simple decision feedback equalizer for OFDM.

Equalizes an OFDM signal symbol by symbol using knowledge of the complex modulations symbols. For every symbol, the following steps are performed:

  • On every sub-carrier, decode the modulation symbol
  • Use the difference between the decoded symbol and the received symbol to update the channel state on this carrier
  • Whenever a pilot symbol is found, it uses the known pilot symbol to update the channel state.

This equalizer makes a lot of assumptions:

  • The initial channel state is good enough to decode the first symbol without error (unless the first symbol only consists of pilot tones)
  • The channel changes only very slowly, such that the channel state from one symbol is enough to decode the next
  • SNR low enough that equalization will always suffice to correctly decode a symbol If these assumptions are not met, the most common error is that the channel state is estimated incorrectly during equalization; after that, all subsequent symbols will be completely wrong.

Note that the equalized symbols are exact points on the constellation. This means soft information of the modulation symbols is lost after the equalization, which is suboptimal for channel codes that use soft decision.

Member Typedef Documentation

Constructor & Destructor Documentation

gr::digital::ofdm_equalizer_simpledfe::ofdm_equalizer_simpledfe ( int  fft_len,
const gr::digital::constellation_sptr &  constellation,
const std::vector< std::vector< int > > &  occupied_carriers = std::vector< std::vector< int > >(),
const std::vector< std::vector< int > > &  pilot_carriers = std::vector< std::vector< int > >(),
const std::vector< std::vector< gr_complex > > &  pilot_symbols = std::vector< std::vector< gr_complex > >(),
int  symbols_skipped = 0,
float  alpha = 0.1,
bool  input_is_shifted = true 
)
gr::digital::ofdm_equalizer_simpledfe::~ofdm_equalizer_simpledfe ( )

Member Function Documentation

void gr::digital::ofdm_equalizer_simpledfe::equalize ( gr_complex frame,
int  n_sym,
const std::vector< gr_complex > &  initial_taps = std::vector< gr_complex >(),
const std::vector< tag_t > &  tags = std::vector< tag_t >() 
)
virtual

Run the actual equalization.

Implements gr::digital::ofdm_equalizer_base.

static sptr gr::digital::ofdm_equalizer_simpledfe::make ( int  fft_len,
const gr::digital::constellation_sptr &  constellation,
const std::vector< std::vector< int > > &  occupied_carriers = std::vector< std::vector< int > >(),
const std::vector< std::vector< int > > &  pilot_carriers = std::vector< std::vector< int > >(),
const std::vector< std::vector< gr_complex > > &  pilot_symbols = std::vector< std::vector< gr_complex > >(),
int  symbols_skipped = 0,
float  alpha = 0.1,
bool  input_is_shifted = true 
)
static

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