5G-LENA nr-v3.0-32-g83aee33
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
ns3::NrPmSearchFull Class Reference

An implementation of NrPmSearch that uses exhaustive search for 3GPP Type-I codebooks. This class creates a CQI/PMI/RI feedback message by looping over all ranks and selecting the rank that results in the largest achievable TB size. When a PMI update is requested, the optimal precoding matrices (PMI) are updated using exhaustive search over all possible precoding matrices specified in a codebook that is compatible to 3GPP TS 38.214 Type-I. More...

#include "nr-pm-search-full.h"

+ Inheritance diagram for ns3::NrPmSearchFull:
+ Collaboration diagram for ns3::NrPmSearchFull:

Classes

struct  RankParams
 

Public Member Functions

PmCqiInfo CreateCqiFeedbackMimo (const NrMimoSignal &rxSignalRb, PmiUpdate pmiUpdate) override
 Create CQI feedback with optimal rank, optimal PMI, and corresponding CQI values. Optimal rank is considered as the rank that maximizes the achievable TB size when using the optimal PMI. The optimal WB/SB PMI values are updated based on pmiUpdate. If there is no update to the PMI values, the previously found PMI values are used.
 
void InitCodebooks () override
 Create and initialize the codebook for each rank.
 
void SetCodebookAttribute (const std::string &attrName, const AttributeValue &attrVal)
 Set the ns-3 attribute of the codebook (NrCbTypeOne).
 
void SetCodebookTypeId (const TypeId &typeId)
 Set the TypeId of the codebook (NrCbTypeOne) to be used.
 

Static Public Member Functions

static TypeId GetTypeId ()
 Get TypeId.
 

Protected Member Functions

DoubleMatrixArray ComputeCapacityForPrecoders (const NrIntfNormChanMat &sbNormChanMat, std::vector< ComplexMatrixArray > allPrecMats) const
 Compute the Shannon capacity for each possible precoding matrix in each subband.
 
void ConditionallyUpdatePrecoding (const NrIntfNormChanMat &rbNormChanMat, PmiUpdate pmiUpdate)
 Update the WB and/or SB PMI, or neither.
 
PmCqiInfo CreateCqiForRank (uint8_t rank, const NrIntfNormChanMat &rbNormChanMat) const
 Create CQI feedback message for a particular rank.
 
std::vector< ComplexMatrixArray > CreateSubbandPrecoders (size_t i1, uint8_t rank, size_t nSubbands) const
 Create the subband precoding matrices for the given wideband precoding.
 
Ptr< PrecMatParamsFindOptSubbandPrecoding (const NrIntfNormChanMat &sbNormChanMat, size_t i1, uint8_t rank) const
 Find the optimal subband precoding matrix for the given wideband precoding.
 
void UpdateAllPrecoding (const NrIntfNormChanMat &rbNormChanMat)
 For all ranks, update the optimum precoding matrices (wideband and subband).
 
void UpdateSubbandPrecoding (const NrIntfNormChanMat &rbNormChanMat)
 For all ranks, update the opt subband PMI assuming previous value of wideband PMI.
 

Static Protected Member Functions

static ComplexMatrixArray ExpandPrecodingMatrix (ComplexMatrixArray basePrecMat, size_t nSubbands)
 

Protected Attributes

ObjectFactory m_cbFactory
 The factory used to create the codebooks.
 
std::vector< RankParamsm_rankParams
 The parameters (PMI values, codebook) for each rank.
 

Detailed Description

An implementation of NrPmSearch that uses exhaustive search for 3GPP Type-I codebooks. This class creates a CQI/PMI/RI feedback message by looping over all ranks and selecting the rank that results in the largest achievable TB size. When a PMI update is requested, the optimal precoding matrices (PMI) are updated using exhaustive search over all possible precoding matrices specified in a codebook that is compatible to 3GPP TS 38.214 Type-I.

Definition at line 25 of file nr-pm-search-full.h.

Member Function Documentation

◆ ComputeCapacityForPrecoders()

DoubleMatrixArray ns3::NrPmSearchFull::ComputeCapacityForPrecoders ( const NrIntfNormChanMat sbNormChanMat,
std::vector< ComplexMatrixArray >  allPrecMats 
) const
protected

Compute the Shannon capacity for each possible precoding matrix in each subband.

Parameters
sbNormChanMatthe interference-normed channel matrix per subband
allPrecMatsa vector of all possible subband precoding matrices for fixed i1 and rank
Returns
a matrix with the capacity values (nSubbands x allPrecMats.size())

Definition at line 272 of file nr-pm-search-full.cc.

References ns3::NrIntfNormChanMat::ComputeSinrForPrecoding().

Referenced by FindOptSubbandPrecoding().

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

◆ ConditionallyUpdatePrecoding()

void ns3::NrPmSearchFull::ConditionallyUpdatePrecoding ( const NrIntfNormChanMat rbNormChanMat,
PmiUpdate  pmiUpdate 
)
protected

Update the WB and/or SB PMI, or neither.

Parameters
rbNormChanMatthe interference-normed channel matrix per RB
pmiUpdatethe struct defining if updates to SB or WB PMI are necessary

Definition at line 101 of file nr-pm-search-full.cc.

References UpdateAllPrecoding(), ns3::NrPmSearch::PmiUpdate::updateSb, UpdateSubbandPrecoding(), and ns3::NrPmSearch::PmiUpdate::updateWb.

Referenced by CreateCqiFeedbackMimo().

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

◆ CreateCqiFeedbackMimo()

PmCqiInfo ns3::NrPmSearchFull::CreateCqiFeedbackMimo ( const NrMimoSignal rxSignalRb,
PmiUpdate  pmiUpdate 
)
overridevirtual

Create CQI feedback with optimal rank, optimal PMI, and corresponding CQI values. Optimal rank is considered as the rank that maximizes the achievable TB size when using the optimal PMI. The optimal WB/SB PMI values are updated based on pmiUpdate. If there is no update to the PMI values, the previously found PMI values are used.

Parameters
rxSignalRbthe receive signal parameters (channel and interference matrices)
pmiUpdatestruct that defines if WB/SB PMIs need to be updated
Returns
the CQI feedback message that contains the optimum CQI, RI, PMI, and full precoding matrix (dimensions: nGnbPorts * rank * nRbs)

Implements ns3::NrPmSearch.

Definition at line 68 of file nr-pm-search-full.cc.

References ns3::NrCovMat::CalcIntfNormChannel(), ConditionallyUpdatePrecoding(), CreateCqiForRank(), ns3::NrMimoSignal::m_chanMat, ns3::NrMimoSignal::m_covMat, ns3::NrPmSearch::m_nGnbPorts, ns3::NrPmSearch::m_nRxPorts, and ns3::NrPmSearch::m_ranks.

+ Here is the call graph for this function:

◆ CreateCqiForRank()

PmCqiInfo ns3::NrPmSearchFull::CreateCqiForRank ( uint8_t  rank,
const NrIntfNormChanMat rbNormChanMat 
) const
protected

Create CQI feedback message for a particular rank.

Parameters
rankthe rank for which to create the CQI feedback
rbNormChanMatthe interference-normed channel matrix per RB
Returns
the CQI message with PMI and CQI values, as well as expected TB size

Definition at line 159 of file nr-pm-search-full.cc.

References ns3::NrIntfNormChanMat::ComputeSinrForPrecoding(), ns3::NrPmSearch::m_amc, ns3::PmCqiInfo::m_mcs, m_rankParams, and ns3::NrPmSearch::m_subbandSize.

Referenced by CreateCqiFeedbackMimo().

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

◆ CreateSubbandPrecoders()

std::vector< ComplexMatrixArray > ns3::NrPmSearchFull::CreateSubbandPrecoders ( size_t  i1,
uint8_t  rank,
size_t  nSubbands 
) const
protected

Create the subband precoding matrices for the given wideband precoding.

Parameters
i1the index of the wideband precoding matrix W1
rankthe rank (number of MIMO layers)
nSubbandsthe number of subbands (desired number of pages in each precoding matrix)
Returns
a vector of all possible precoding matrices for fixed i1 and rank

Definition at line 235 of file nr-pm-search-full.cc.

References m_rankParams.

Referenced by FindOptSubbandPrecoding().

+ Here is the caller graph for this function:

◆ ExpandPrecodingMatrix()

ComplexMatrixArray ns3::NrPmSearchFull::ExpandPrecodingMatrix ( ComplexMatrixArray  basePrecMat,
size_t  nSubbands 
)
staticprotected

Definition at line 252 of file nr-pm-search-full.cc.

◆ FindOptSubbandPrecoding()

Ptr< NrPmSearchFull::PrecMatParams > ns3::NrPmSearchFull::FindOptSubbandPrecoding ( const NrIntfNormChanMat sbNormChanMat,
size_t  i1,
uint8_t  rank 
) const
protected

Find the optimal subband precoding matrix for the given wideband precoding.

Parameters
sbNormChanMatthe interference-normed channel matrix per subband
i1the index of the wideband precoding matrix W1
rankthe rank (number of MIMO layers)
Returns
a struct containing wideband and subband PMIs, and full precoding matrix.

Definition at line 189 of file nr-pm-search-full.cc.

References ComputeCapacityForPrecoders(), and CreateSubbandPrecoders().

Referenced by UpdateAllPrecoding(), and UpdateSubbandPrecoding().

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

◆ GetTypeId()

TypeId ns3::NrPmSearchFull::GetTypeId ( )
static

Get TypeId.

Returns
the TypeId

Definition at line 22 of file nr-pm-search-full.cc.

References ns3::NrCbTwoPort::GetTypeId(), and SetCodebookTypeId().

Referenced by ns3::NrHelper::GetTypeId(), and ns3::NrHelper::SetupMimoPmi().

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

◆ InitCodebooks()

void ns3::NrPmSearchFull::InitCodebooks ( )
overridevirtual

◆ SetCodebookAttribute()

void ns3::NrPmSearchFull::SetCodebookAttribute ( const std::string &  attrName,
const AttributeValue &  attrVal 
)

Set the ns-3 attribute of the codebook (NrCbTypeOne).

Parameters
attrNamethe name of the attribute
attrValthe value of the attribute

Definition at line 42 of file nr-pm-search-full.cc.

References m_cbFactory.

◆ SetCodebookTypeId()

void ns3::NrPmSearchFull::SetCodebookTypeId ( const TypeId &  typeId)

Set the TypeId of the codebook (NrCbTypeOne) to be used.

Parameters
typeIdthe TypeId of the codebook

Definition at line 36 of file nr-pm-search-full.cc.

References m_cbFactory.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ UpdateAllPrecoding()

void ns3::NrPmSearchFull::UpdateAllPrecoding ( const NrIntfNormChanMat rbNormChanMat)
protected

For all ranks, update the optimum precoding matrices (wideband and subband).

Parameters
rbNormChanMatthe interference-normed channel matrix per RB

Definition at line 115 of file nr-pm-search-full.cc.

References FindOptSubbandPrecoding(), m_rankParams, ns3::NrPmSearch::m_ranks, and ns3::NrPmSearch::m_subbandSize.

Referenced by ConditionallyUpdatePrecoding().

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

◆ UpdateSubbandPrecoding()

void ns3::NrPmSearchFull::UpdateSubbandPrecoding ( const NrIntfNormChanMat rbNormChanMat)
protected

For all ranks, update the opt subband PMI assuming previous value of wideband PMI.

Parameters
rbNormChanMatthe interference-normed channel matrix per RB

Definition at line 144 of file nr-pm-search-full.cc.

References FindOptSubbandPrecoding(), m_rankParams, ns3::NrPmSearch::m_ranks, and ns3::NrPmSearch::m_subbandSize.

Referenced by ConditionallyUpdatePrecoding().

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

Member Data Documentation

◆ m_cbFactory

ObjectFactory ns3::NrPmSearchFull::m_cbFactory
protected

The factory used to create the codebooks.

Definition at line 110 of file nr-pm-search-full.h.

Referenced by InitCodebooks(), SetCodebookAttribute(), and SetCodebookTypeId().

◆ m_rankParams

std::vector<RankParams> ns3::NrPmSearchFull::m_rankParams
protected

The parameters (PMI values, codebook) for each rank.

Definition at line 109 of file nr-pm-search-full.h.

Referenced by CreateCqiForRank(), CreateSubbandPrecoders(), InitCodebooks(), UpdateAllPrecoding(), and UpdateSubbandPrecoding().


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