Agora  1.2.0
Agora project
DoBeamWeights Class Reference

#include <dobeamweights.h>

Inheritance diagram for DoBeamWeights:
Collaboration diagram for DoBeamWeights:

Public Member Functions

 DoBeamWeights (Config *in_config, int tid, PtrGrid< kFrameWnd, kMaxUEs, complex_float > &csi_buffers, Table< complex_float > &calib_dl_buffer, Table< complex_float > &calib_ul_buffer, Table< complex_float > &calib_dl_msum_buffer, Table< complex_float > &calib_ul_msum_buffer, PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &ul_beam_matrices_, PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &dl_beam_matrices_, PhyStats *in_phy_stats, Stats *stats_manager)
 
 ~DoBeamWeights () 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 Member Functions

void ComputePartialCsiBeams (size_t tag)
 
float ComputePrecoder (size_t frame_id, size_t cur_sc_id, const arma::cx_fmat &mat_csi, const arma::cx_fvec &calib_sc_vec, const float noise, complex_float *ul_beam_mem, complex_float *dl_beam_mem)
 
void ComputeCalib (size_t frame_id, size_t sc_id, arma::cx_fvec &calib_sc_vec)
 
void ComputeFullCsiBeams (size_t tag)
 
void Predict (size_t offset)
 

Private Attributes

PtrGrid< kFrameWnd, kMaxUEs, complex_float > & csi_buffers_
 
complex_floatpred_csi_buffer_
 
Table< complex_float > & calib_dl_buffer_
 
Table< complex_float > & calib_ul_buffer_
 
Table< complex_float > & calib_dl_msum_buffer_
 
Table< complex_float > & calib_ul_msum_buffer_
 
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & ul_beam_matrices_
 
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > & dl_beam_matrices_
 
DurationStatduration_stat_
 
complex_floatcsi_gather_buffer_
 
complex_floatcalib_gather_buffer_
 
std::unique_ptr< arma::cx_fvec > calib_sc_vec_ptr_
 
PhyStatsphy_stats_
 
arma::uvec ext_ref_id_
 
size_t num_ext_ref_
 

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

◆ DoBeamWeights()

DoBeamWeights::DoBeamWeights ( Config in_config,
int  tid,
PtrGrid< kFrameWnd, kMaxUEs, complex_float > &  csi_buffers,
Table< complex_float > &  calib_dl_buffer,
Table< complex_float > &  calib_ul_buffer,
Table< complex_float > &  calib_dl_msum_buffer,
Table< complex_float > &  calib_ul_msum_buffer,
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &  ul_beam_matrices_,
PtrGrid< kFrameWnd, kMaxDataSCs, complex_float > &  dl_beam_matrices_,
PhyStats in_phy_stats,
Stats stats_manager 
)
Here is the call graph for this function:

◆ ~DoBeamWeights()

DoBeamWeights::~DoBeamWeights ( )
override

Member Function Documentation

◆ ComputeCalib()

void DoBeamWeights::ComputeCalib ( size_t  frame_id,
size_t  sc_id,
arma::cx_fvec &  calib_sc_vec 
)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeFullCsiBeams()

void DoBeamWeights::ComputeFullCsiBeams ( size_t  tag)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputePartialCsiBeams()

void DoBeamWeights::ComputePartialCsiBeams ( size_t  tag)
private
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputePrecoder()

float DoBeamWeights::ComputePrecoder ( size_t  frame_id,
size_t  cur_sc_id,
const arma::cx_fmat &  mat_csi,
const arma::cx_fvec &  calib_sc_vec,
const float  noise,
complex_float ul_beam_mem,
complex_float dl_beam_mem 
)
private

Compute the uplink mMIMO detector matrix and/or the downlink mMIMO precoder using this CSI matrix and calibration buffer

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Launch()

EventData DoBeamWeights::Launch ( size_t  tag)
overridevirtual

Do Beamweight Computation task for one subcarrier with all pilots in a frame

Parameters
tidtask thread index, used for selecting task ptok
offsetoffset of the subcarrier in csi_buffer_ Buffers: csi_buffer_, precoder_buffer_ Input buffer: csi_buffer_ Output buffer: precoder_buffer_ Offsets: csi_buffer_, precoder_buffer_: dim1: frame index * FFT size + subcarrier index in the current frame Event offset: offset Description:
  1. perform beamweight calculation using csi_buffer_ and store results in precoder_buffer_
  2. 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:

◆ Predict()

void DoBeamWeights::Predict ( size_t  offset)
private

Do prediction task for one subcarrier

Parameters
tidtask thread index, used for selecting task ptok
offsetoffset of the subcarrier in csi_buffer_ Buffers: csi_buffer_, pred_csi_buffer_, precoder_buffer_ Input buffer: csi_buffer_ Output buffer: precoder_buffer_ Intermediate buffer: pred_csi_buffer_ Offsets: csi_buffer_: dim1: frame index * FFT size + subcarrier index in the current frame pred_csi_buffer: dim1: subcarrier index in the current frame precoder_buffer_: dim1: (frame index + 1) * FFT size + subcarrier index in the current frame Event offset: offset Description:
  1. predict CSI (copy CSI from the current frame if prediction is based on stale CSI)
  2. perform pseudo-inverse (pinv) on pred_csi_buffer_ and store results in precoder_buffer_
  3. add an event to the message queue to infrom main thread the completion of this task

Member Data Documentation

◆ calib_dl_buffer_

Table<complex_float>& DoBeamWeights::calib_dl_buffer_
private

◆ calib_dl_msum_buffer_

Table<complex_float>& DoBeamWeights::calib_dl_msum_buffer_
private

◆ calib_gather_buffer_

complex_float* DoBeamWeights::calib_gather_buffer_
private

◆ calib_sc_vec_ptr_

std::unique_ptr<arma::cx_fvec> DoBeamWeights::calib_sc_vec_ptr_
private

◆ calib_ul_buffer_

Table<complex_float>& DoBeamWeights::calib_ul_buffer_
private

◆ calib_ul_msum_buffer_

Table<complex_float>& DoBeamWeights::calib_ul_msum_buffer_
private

◆ csi_buffers_

PtrGrid<kFrameWnd, kMaxUEs, complex_float>& DoBeamWeights::csi_buffers_
private

◆ csi_gather_buffer_

complex_float* DoBeamWeights::csi_gather_buffer_
private

◆ dl_beam_matrices_

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

◆ duration_stat_

DurationStat* DoBeamWeights::duration_stat_
private

◆ ext_ref_id_

arma::uvec DoBeamWeights::ext_ref_id_
private

◆ num_ext_ref_

size_t DoBeamWeights::num_ext_ref_
private

◆ phy_stats_

PhyStats* DoBeamWeights::phy_stats_
private

◆ pred_csi_buffer_

complex_float* DoBeamWeights::pred_csi_buffer_
private

◆ ul_beam_matrices_

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

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