GNU Radio's GFDM Package
|
Demodulate a GFDM block This class initializes and performs all operations necessary to demodulate a GFDM block. More...
#include <receiver_kernel_cc.h>
Public Types | |
typedef std::complex< float > | gfdm_complex |
typedef boost::shared_ptr< receiver_kernel_cc > | sptr |
![]() | |
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_complex > | filter_taps () |
std::vector< gfdm_complex > | ic_filter_taps () |
int | timeslots () |
![]() | |
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) |
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"
typedef std::complex<float> gr::gfdm::receiver_kernel_cc::gfdm_complex |
typedef boost::shared_ptr<receiver_kernel_cc> gr::gfdm::receiver_kernel_cc::sptr |
gr::gfdm::receiver_kernel_cc::receiver_kernel_cc | ( | int | n_timeslots, |
int | n_subcarriers, | ||
int | overlap, | ||
std::vector< gfdm_complex > | frequency_taps | ||
) |
gr::gfdm::receiver_kernel_cc::~receiver_kernel_cc | ( | ) |
|
inline |
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 | ||
) |
void gr::gfdm::receiver_kernel_cc::demodulate_subcarrier | ( | std::vector< std::vector< gfdm_complex > > & | out, |
std::vector< std::vector< gfdm_complex > > & | sc_fdomain | ||
) |
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 | ||
) |
void gr::gfdm::receiver_kernel_cc::fft_filter_downsample | ( | gfdm_complex * | p_out, |
const gfdm_complex * | p_in | ||
) |
void gr::gfdm::receiver_kernel_cc::filter_superposition | ( | std::vector< std::vector< gfdm_complex > > & | out, |
const gfdm_complex * | in | ||
) |
std::vector< gfdm_complex > gr::gfdm::receiver_kernel_cc::filter_taps | ( | ) |
void gr::gfdm::receiver_kernel_cc::generic_work | ( | gfdm_complex * | out, |
const gfdm_complex * | in | ||
) |
void gr::gfdm::receiver_kernel_cc::generic_work_equalize | ( | gfdm_complex * | out, |
const gfdm_complex * | in, | ||
const gfdm_complex * | f_eq_in | ||
) |
std::vector< gfdm_complex > gr::gfdm::receiver_kernel_cc::ic_filter_taps | ( | ) |
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 | ||
) |
void gr::gfdm::receiver_kernel_cc::serialize_output | ( | gfdm_complex | out[], |
std::vector< std::vector< gfdm_complex > > & | sc_symbols | ||
) |
|
inline |
void gr::gfdm::receiver_kernel_cc::transform_subcarriers_to_td | ( | gfdm_complex * | p_out, |
const gfdm_complex * | p_in | ||
) |
void gr::gfdm::receiver_kernel_cc::vectorize_2d | ( | std::vector< std::vector< gfdm_complex > > & | out_vector, |
const gfdm_complex * | p_in | ||
) |