GNU Radio's GFDM Package
gr::gfdm::receiver_kernel_cc Class Reference

Demodulate a GFDM block This class initializes and performs all operations necessary to demodulate a GFDM block. More...

#include <receiver_kernel_cc.h>

Inheritance diagram for gr::gfdm::receiver_kernel_cc:

Public Types

typedef std::complex< float > gfdm_complex
 
typedef boost::shared_ptr< receiver_kernel_ccsptr
 
- Public Types inherited from gr::gfdm::gfdm_kernel_utils
typedef std::complex< float > gfdm_complex
 

Public Member Functions

 receiver_kernel_cc (int n_timeslots, int n_subcarriers, int overlap, std::vector< gfdm_complex > frequency_taps)
 
 ~receiver_kernel_cc ()
 
void generic_work (gfdm_complex *out, const gfdm_complex *in)
 
void generic_work_equalize (gfdm_complex *out, const gfdm_complex *in, const gfdm_complex *f_eq_in)
 
void fft_filter_downsample (gfdm_complex *p_out, const gfdm_complex *p_in)
 
void fft_equalize_filter_downsample (gfdm_complex *p_out, const gfdm_complex *p_in, const gfdm_complex *f_eq_in)
 
void transform_subcarriers_to_td (gfdm_complex *p_out, const gfdm_complex *p_in)
 
void cancel_sc_interference (gfdm_complex *p_out, const gfdm_complex *p_td_in, const gfdm_complex *p_fd_in)
 
void filter_superposition (std::vector< std::vector< gfdm_complex > > &out, const gfdm_complex *in)
 
void demodulate_subcarrier (std::vector< std::vector< gfdm_complex > > &out, std::vector< std::vector< gfdm_complex > > &sc_fdomain)
 
void serialize_output (gfdm_complex out[], std::vector< std::vector< gfdm_complex > > &sc_symbols)
 
void vectorize_2d (std::vector< std::vector< gfdm_complex > > &out_vector, const gfdm_complex *p_in)
 
void remove_sc_interference (std::vector< std::vector< gfdm_complex > > &sc_symbols, std::vector< std::vector< gfdm_complex > > &sc_fdomain)
 
int block_size ()
 
std::vector< gfdm_complexfilter_taps ()
 
std::vector< gfdm_complexic_filter_taps ()
 
int timeslots ()
 
- Public Member Functions inherited from gr::gfdm::gfdm_kernel_utils
 gfdm_kernel_utils ()
 
 ~gfdm_kernel_utils ()
 
fftwf_plan initialize_fft (gfdm_complex *out_buf, gfdm_complex *in_buf, const int fft_size, bool forward)
 
float calculate_signal_energy (const gfdm_complex *p_in, const int ninput_size)
 

Detailed Description

Demodulate a GFDM block This class initializes and performs all operations necessary to demodulate a GFDM block.

The GFDM receiver kernel class provides all necessary operations to blocks which instantiate it. Further functions and methods not depending on GNU Radio should be implemented here. This receiver implementation is based on [Gas+13]. It is recommended to use overlap = 2 to make use of sparse frequency domain processing.

[Gas+13] I.S. Gaspar et al. "Low Complexity GFDM Receiver Based on Sparse Frequency Domain Processing"

Member Typedef Documentation

◆ gfdm_complex

typedef std::complex<float> gr::gfdm::receiver_kernel_cc::gfdm_complex

◆ sptr

Constructor & Destructor Documentation

◆ receiver_kernel_cc()

gr::gfdm::receiver_kernel_cc::receiver_kernel_cc ( int  n_timeslots,
int  n_subcarriers,
int  overlap,
std::vector< gfdm_complex frequency_taps 
)

◆ ~receiver_kernel_cc()

gr::gfdm::receiver_kernel_cc::~receiver_kernel_cc ( )

Member Function Documentation

◆ block_size()

int gr::gfdm::receiver_kernel_cc::block_size ( )
inline

◆ cancel_sc_interference()

void gr::gfdm::receiver_kernel_cc::cancel_sc_interference ( gfdm_complex p_out,
const gfdm_complex p_td_in,
const gfdm_complex p_fd_in 
)

◆ demodulate_subcarrier()

void gr::gfdm::receiver_kernel_cc::demodulate_subcarrier ( std::vector< std::vector< gfdm_complex > > &  out,
std::vector< std::vector< gfdm_complex > > &  sc_fdomain 
)

◆ fft_equalize_filter_downsample()

void gr::gfdm::receiver_kernel_cc::fft_equalize_filter_downsample ( gfdm_complex p_out,
const gfdm_complex p_in,
const gfdm_complex f_eq_in 
)

◆ fft_filter_downsample()

void gr::gfdm::receiver_kernel_cc::fft_filter_downsample ( gfdm_complex p_out,
const gfdm_complex p_in 
)

◆ filter_superposition()

void gr::gfdm::receiver_kernel_cc::filter_superposition ( std::vector< std::vector< gfdm_complex > > &  out,
const gfdm_complex in 
)

◆ filter_taps()

std::vector< gfdm_complex > gr::gfdm::receiver_kernel_cc::filter_taps ( )

◆ generic_work()

void gr::gfdm::receiver_kernel_cc::generic_work ( gfdm_complex out,
const gfdm_complex in 
)

◆ generic_work_equalize()

void gr::gfdm::receiver_kernel_cc::generic_work_equalize ( gfdm_complex out,
const gfdm_complex in,
const gfdm_complex f_eq_in 
)

◆ ic_filter_taps()

std::vector< gfdm_complex > gr::gfdm::receiver_kernel_cc::ic_filter_taps ( )

◆ remove_sc_interference()

void gr::gfdm::receiver_kernel_cc::remove_sc_interference ( std::vector< std::vector< gfdm_complex > > &  sc_symbols,
std::vector< std::vector< gfdm_complex > > &  sc_fdomain 
)

◆ serialize_output()

void gr::gfdm::receiver_kernel_cc::serialize_output ( gfdm_complex  out[],
std::vector< std::vector< gfdm_complex > > &  sc_symbols 
)

◆ timeslots()

int gr::gfdm::receiver_kernel_cc::timeslots ( )
inline

◆ transform_subcarriers_to_td()

void gr::gfdm::receiver_kernel_cc::transform_subcarriers_to_td ( gfdm_complex p_out,
const gfdm_complex p_in 
)

◆ vectorize_2d()

void gr::gfdm::receiver_kernel_cc::vectorize_2d ( std::vector< std::vector< gfdm_complex > > &  out_vector,
const gfdm_complex p_in 
)

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