|
| 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, bool enable_soft_output=false) |
|
| ~ofdm_equalizer_simpledfe () override |
|
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 >()) override |
| Run the actual equalization. More...
|
|
| 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 () override |
|
void | reset () override |
| Reset the channel information state knowledge. More...
|
|
void | get_channel_state (std::vector< gr_complex > &taps) override |
| Return the current channel state. More...
|
|
| ofdm_equalizer_base (int fft_len) |
|
virtual | ~ofdm_equalizer_base () |
|
virtual void | reset ()=0 |
| Reset the channel information state knowledge. More...
|
|
virtual 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 >())=0 |
| Run the actual equalization. More...
|
|
virtual void | get_channel_state (std::vector< gr_complex > &taps)=0 |
| Return the current channel state. More...
|
|
int | fft_len () |
|
sptr | base () |
|
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, by default, the equalized symbols are exact points on the constellation. This means that soft information of the modulation symbols is lost after the equalization, which is suboptimal for channel codes that use soft decision. If this behaviour is not desired, set the enable_soft_output
parameter to true.