#include <ue_worker.h>
|
| UeWorker (size_t tid, Config &config, Stats &shared_stats, PhyStats &shared_phy_stats, moodycamel::ConcurrentQueue< EventData > ¬ify_queue, moodycamel::ConcurrentQueue< EventData > &work_queue, moodycamel::ProducerToken &work_producer, Table< int8_t > &ul_bits_buffer, Table< int8_t > &encoded_buffer, Table< complex_float > &modul_buffer, Table< complex_float > &ifft_buffer, char *const tx_buffer, Table< char > &rx_buffer, Table< complex_float > &csi_buffer, std::vector< SimdAlignCxFltVector > &equal_buffer, std::vector< size_t > &non_null_sc_ind, Table< complex_float > &fft_buffer, PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > &demod_buffer, PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > &decoded_buffer, std::vector< std::vector< std::complex< float >>> &ue_pilot_vec) |
|
| ~UeWorker () |
|
void | Start (size_t core_offset) |
|
void | Stop () |
|
◆ UeWorker()
UeWorker::UeWorker |
( |
size_t |
tid, |
|
|
Config & |
config, |
|
|
Stats & |
shared_stats, |
|
|
PhyStats & |
shared_phy_stats, |
|
|
moodycamel::ConcurrentQueue< EventData > & |
notify_queue, |
|
|
moodycamel::ConcurrentQueue< EventData > & |
work_queue, |
|
|
moodycamel::ProducerToken & |
work_producer, |
|
|
Table< int8_t > & |
ul_bits_buffer, |
|
|
Table< int8_t > & |
encoded_buffer, |
|
|
Table< complex_float > & |
modul_buffer, |
|
|
Table< complex_float > & |
ifft_buffer, |
|
|
char *const |
tx_buffer, |
|
|
Table< char > & |
rx_buffer, |
|
|
Table< complex_float > & |
csi_buffer, |
|
|
std::vector< SimdAlignCxFltVector > & |
equal_buffer, |
|
|
std::vector< size_t > & |
non_null_sc_ind, |
|
|
Table< complex_float > & |
fft_buffer, |
|
|
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > & |
demod_buffer, |
|
|
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > & |
decoded_buffer, |
|
|
std::vector< std::vector< std::complex< float >>> & |
ue_pilot_vec |
|
) |
| |
|
explicit |
◆ ~UeWorker()
◆ DoDecodeUe()
◆ DoDemul()
void UeWorker::DoDemul |
( |
size_t |
tag | ) |
|
|
private |
Do demodulation task for a block of subcarriers (demul_block_size)
- Parameters
-
offset | offset of the first subcarrier in the block in ul_data_buffer_ Buffers: ul_data_buffer_, spm_buffer_, precoder_buffer_, equal_buffer_, demul_buffer_ Input buffer: ul_data_buffer_, precoder_buffer_ Output buffer: demul_buffer_ Intermediate buffer: spm_buffer, equal_buffer_ Offsets: ul_data_buffer_: dim1: frame index * # of data symbols per frame + data symbol index dim2: transpose block index * block size * # of antennas + antenna index * block size spm_buffer: dim1: task thread index dim2: antenna index precoder_buffer_: dim1: frame index * FFT size + subcarrier index in the current frame equal_buffer_, demul_buffer: dim1: frame index * # of data symbols per frame + data symbol index dim2: subcarrier index * # of users Event offset: offset Description:
- for each subcarrier in the block, block-wisely copy data from ul_data_buffer_ to spm_buffer_
- perform equalization with data and percoder matrixes
- perform demodulation on equalized data matrix
- add an event to the message queue to infrom main thread the completion of this task
|
◆ DoEncodeUe()
void UeWorker::DoEncodeUe |
( |
DoEncode * |
encoder, |
|
|
size_t |
tag |
|
) |
| |
|
private |
modulate data from nUEs and does spatial multiplexing by applying beamweights
◆ DoFftData()
void UeWorker::DoFftData |
( |
size_t |
tag | ) |
|
|
private |
◆ DoFftPilot()
void UeWorker::DoFftPilot |
( |
size_t |
tag | ) |
|
|
private |
Do FFT task for one OFDM symbol
- Parameters
-
tid | task thread index, used for selecting muplans and task ptok |
offset | offset of the OFDM symbol in rx_buffer_ Buffers: rx_buffer_, fft_buffer_, csi_buffer_, ul_data_buffer_ Input buffer: rx_buffer_ Output buffer: csi_buffer_ if symbol is pilot ul_data_buffer_ if symbol is data Intermediate buffer: fft_buffer_ (FFT_inputs, FFT_outputs) Offsets: rx_buffer_: dim1: socket thread index: (offset / # of OFDM symbols per thread) dim2: OFDM symbol index in this socket thread (offset - # of symbols in previous threads) FFT_inputs, FFT_outputs: dim1: frame index
- # of OFDM symbols per frame + symbol index * # of atennas + antenna index dim2: subcarrier index csi_buffer_: dim1: frame index * FFT size
- subcarrier index in the current frame dim2: user index * # of antennas + antenna index ul_data_buffer_: dim1: frame index * # of data symbols per frame + data symbol index dim2: transpose block index * block size
- # of antennas + antenna index * block size Event offset: frame index
- # of symbol per frame + symbol index Description:
- copy received data (one OFDM symbol) from rx_buffer to fft_buffer_.FFT_inputs (remove CP)
- perform FFT on fft_buffer_.FFT_inputs and store results in fft_buffer_.FFT_outputs
- if symbol is pilot, do channel estimation from fft_buffer_.FFT_outputs to csi_buffer_ if symbol is data, copy data from fft_buffer_.FFT_outputs to ul_data_buffer_ and do block transpose
- add an event to the message queue to infrom main thread the completion of this task
|
◆ DoIfft()
void UeWorker::DoIfft |
( |
size_t |
tag | ) |
|
|
private |
◆ DoIfftUe()
void UeWorker::DoIfftUe |
( |
DoIFFTClient * |
iffter, |
|
|
size_t |
tag |
|
) |
| |
|
private |
◆ DoModul()
void UeWorker::DoModul |
( |
size_t |
tag | ) |
|
|
private |
◆ Start()
void UeWorker::Start |
( |
size_t |
core_offset | ) |
|
◆ Stop()
◆ TaskThread()
void UeWorker::TaskThread |
( |
size_t |
core_offset | ) |
|
|
private |
◆ config_
◆ csi_buffer_
◆ decoded_buffer_
◆ demod_buffer_
◆ encoded_buffer_
Table<int8_t>& UeWorker::encoded_buffer_ |
|
private |
◆ equal_buffer_
◆ fft_buffer_
◆ ifft_buffer_
◆ mkl_handle_
DFTI_DESCRIPTOR_HANDLE UeWorker::mkl_handle_ |
|
private |
◆ modul_buffer_
◆ non_null_sc_ind_
std::vector<size_t>& UeWorker::non_null_sc_ind_ |
|
private |
◆ notify_queue_
◆ phy_stats_
◆ ptok_
◆ rx_buffer_
Table<char>& UeWorker::rx_buffer_ |
|
private |
◆ rx_samps_tmp_
std::complex<float>* UeWorker::rx_samps_tmp_ |
|
private |
◆ stats_
◆ thread_
std::thread UeWorker::thread_ |
|
private |
◆ tid_
◆ tx_buffer_
char* const UeWorker::tx_buffer_ |
|
private |
◆ ue_pilot_vec_
std::vector<std::vector<std::complex<float> > >& UeWorker::ue_pilot_vec_ |
|
private |
◆ ul_bits_buffer_
Table<int8_t>& UeWorker::ul_bits_buffer_ |
|
private |
◆ work_producer_token_
◆ work_queue_
The documentation for this class was generated from the following files: