Agora  1.2.0
Agora project
DoPrecode Class Reference

#include <doprecode.h>

Inheritance diagram for DoPrecode:
Collaboration diagram for DoPrecode:

Public Member Functions

 DoPrecode (Config *in_config, int in_tid, PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &dl_beam_matrices_, Table< complex_float > &in_dl_ifft_buffer, Table< int8_t > &dl_encoded_or_raw_data, Stats *in_stats_manager)
 
 ~DoPrecode () override
 
EventData Launch (size_t tag) override
 
void LoadInputData (size_t symbol_idx_dl, size_t total_data_symbol_idx, size_t user_id, size_t sc_id, size_t sc_id_in_block)
 
void PrecodingPerSc (size_t frame_slot, size_t sc_id, size_t sc_id_in_block)
 
- 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

PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & dl_beam_matrices_
 
Table< complex_float > & dl_ifft_buffer_
 
Table< int8_t > & dl_raw_data_
 
Table< float > qam_table_
 
DurationStatduration_stat_
 
complex_floatmodulated_buffer_temp_
 
complex_floatprecoded_buffer_temp_
 

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

◆ DoPrecode()

DoPrecode::DoPrecode ( Config in_config,
int  in_tid,
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &  dl_beam_matrices_,
Table< complex_float > &  in_dl_ifft_buffer,
Table< int8_t > &  dl_encoded_or_raw_data,
Stats in_stats_manager 
)
Here is the call graph for this function:

◆ ~DoPrecode()

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

Member Function Documentation

◆ Launch()

EventData DoPrecode::Launch ( size_t  tag)
overridevirtual

Do demodulation task for a block of subcarriers (demul_block_size)

Parameters
tidtask thread index, used for selecting spm_buffer and task ptok
offsetoffset of the first subcarrier in the block in data_buffer_ Buffers: data_buffer_, spm_buffer_, precoder_buffer_, equal_buffer_, demul_hard_buffer_ Input buffer: data_buffer_, precoder_buffer_ Output buffer: demul_hard_buffer_ Intermediate buffer: spm_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 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:
  1. for each subcarrier in the block, block-wisely copy data from data_buffer_ to spm_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:

◆ LoadInputData()

void DoPrecode::LoadInputData ( size_t  symbol_idx_dl,
size_t  total_data_symbol_idx,
size_t  user_id,
size_t  sc_id,
size_t  sc_id_in_block 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrecodingPerSc()

void DoPrecode::PrecodingPerSc ( size_t  frame_slot,
size_t  sc_id,
size_t  sc_id_in_block 
)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ dl_beam_matrices_

PtrGrid<kFrameWnd, kMaxDataSCs, complex_float>& DoPrecode::dl_beam_matrices_
private

◆ dl_ifft_buffer_

Table<complex_float>& DoPrecode::dl_ifft_buffer_
private

◆ dl_raw_data_

Table<int8_t>& DoPrecode::dl_raw_data_
private

◆ duration_stat_

DurationStat* DoPrecode::duration_stat_
private

◆ modulated_buffer_temp_

complex_float* DoPrecode::modulated_buffer_temp_
private

◆ precoded_buffer_temp_

complex_float* DoPrecode::precoded_buffer_temp_
private

◆ qam_table_

Table<float> DoPrecode::qam_table_
private

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