Agora  1.2.0
Agora project
DoDemul Class Reference

#include <dodemul.h>

Inheritance diagram for DoDemul:
Collaboration diagram for DoDemul:

Public Member Functions

 DoDemul (Config *config, int tid, Table< complex_float > &data_buffer, PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &ul_beam_matrices, Table< complex_float > &ue_spec_pilot_buffer, Table< complex_float > &equal_buffer, PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > &demod_buffers_, PhyStats *in_phy_stats, Stats *in_stats_manager)
 
 ~DoDemul () override
 
EventData Launch (size_t tag) override
 
- Public Member Functions inherited from Doer
virtual bool TryLaunch (moodycamel::ConcurrentQueue< EventData > &task_queue, moodycamel::ConcurrentQueue< EventData > &complete_task_queue, moodycamel::ProducerToken *worker_ptok)
 
virtual EventData Launch (size_t tag, EventType event_type)
 

Private Attributes

Table< complex_float > & data_buffer_
 
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & ul_beam_matrices_
 
Table< complex_float > & ue_spec_pilot_buffer_
 
Table< complex_float > & equal_buffer_
 
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > & demod_buffers_
 
DurationStatduration_stat_
 
PhyStatsphy_stats_
 
complex_floatdata_gather_buffer_
 
complex_floatequaled_buffer_temp_
 
complex_floatequaled_buffer_temp_transposed_
 
arma::cx_fmat ue_pilot_data_
 
int ue_num_simd256_
 

Additional Inherited Members

- Protected Member Functions inherited from Doer
 Doer (Config *in_config, int in_tid)
 
virtual ~Doer ()=default
 
- Protected Attributes inherited from Doer
Configcfg_
 
int tid_
 

Constructor & Destructor Documentation

◆ DoDemul()

DoDemul::DoDemul ( Config config,
int  tid,
Table< complex_float > &  data_buffer,
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &  ul_beam_matrices,
Table< complex_float > &  ue_spec_pilot_buffer,
Table< complex_float > &  equal_buffer,
PtrCube< kFrameWnd, kMaxSymbols, kMaxUEs, int8_t > &  demod_buffers_,
PhyStats in_phy_stats,
Stats in_stats_manager 
)
Here is the call graph for this function:

◆ ~DoDemul()

DoDemul::~DoDemul ( )
override
Here is the call graph for this function:

Member Function Documentation

◆ Launch()

EventData DoDemul::Launch ( size_t  tag)
overridevirtual

Do demodulation task for a block of subcarriers (demul_block_size)

Parameters
tidtask thread index, used for selecting data_gather_buffer and task ptok
offsetoffset of the first subcarrier in the block in data_buffer_ Buffers: data_buffer_, data_gather_buffer_, precoder_buffer_, equal_buffer_, demod_hard_buffer_ Input buffer: data_buffer_, precoder_buffer_ Output buffer: demod_hard_buffer_ Intermediate buffer: data_gather_buffer, equal_buffer_ Offsets: 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 data_gather_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:
    1. for each subcarrier in the block, block-wisely copy data from data_buffer_ to data_gather_buffer_
    2. perform equalization with data and percoder matrixes
    3. perform demodulation on equalized data matrix
    4. add an event to the message queue to infrom main thread the completion of this task

Reimplemented from Doer.

Here is the call graph for this function:

Member Data Documentation

◆ data_buffer_

Table<complex_float>& DoDemul::data_buffer_
private

◆ data_gather_buffer_

complex_float* DoDemul::data_gather_buffer_
private

Intermediate buffer to gather raw data. Size = subcarriers per cacheline times number of antennas

◆ demod_buffers_

PtrCube<kFrameWnd, kMaxSymbols, kMaxUEs, int8_t>& DoDemul::demod_buffers_
private

◆ duration_stat_

DurationStat* DoDemul::duration_stat_
private

◆ equal_buffer_

Table<complex_float>& DoDemul::equal_buffer_
private

◆ equaled_buffer_temp_

complex_float* DoDemul::equaled_buffer_temp_
private

◆ equaled_buffer_temp_transposed_

complex_float* DoDemul::equaled_buffer_temp_transposed_
private

◆ phy_stats_

PhyStats* DoDemul::phy_stats_
private

◆ ue_num_simd256_

int DoDemul::ue_num_simd256_
private

◆ ue_pilot_data_

arma::cx_fmat DoDemul::ue_pilot_data_
private

◆ ue_spec_pilot_buffer_

Table<complex_float>& DoDemul::ue_spec_pilot_buffer_
private

◆ ul_beam_matrices_

PtrGrid<kFrameWnd, kMaxDataSCs, complex_float>& DoDemul::ul_beam_matrices_
private

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