5G-LENA nr-v3.3-120-gdac69c56
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.
 
virtual 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.
 

Additional Inherited Members

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.

Introspection did not find any typical Config paths.

Attributes

  • CodebookType: Codebook class to be used
    • Set with class: ns3::TypeIdValue
    • Underlying type: TypeId
    • Initial value: ns3::NrCbTwoPort
    • Flags: construct write

Attributes defined in parent class ns3::NrPmSearch

  • RankLimit: Max MIMO rank is minimum of num UE ports, num gNB ports, and RankLimit
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 1:255
    • Initial value: 255
    • Flags: construct write read
  • RankTechnique: Technique used to determine the MIMO Rank
    • Set with class: ns3::EnumValue<N3ns310NrPmSearch13RankTechniqueE>
    • Underlying type: SVD|WaterFilling|Sasaoka
    • Initial value: SVD
    • Flags: construct write read
  • RankThreshold: Rank threshold for SVD selection
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 2.22045e-16
    • Flags: construct write read
  • SubbandSize: Size of subband in PRBs for downsampling
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 1:32
    • Initial value: 1
    • Flags: construct write read
  • DownsamplingTechnique: Algorithm used to downsample PRBs into SBs
    • Set with class: ns3::EnumValue<N3ns310NrPmSearch21DownsamplingTechniqueE>
    • Underlying type: FirstPRB|RandomPRB|AveragePRB
    • Initial value: FirstPRB
    • Flags: construct write read
  • SubbandCqiClamping: Clamp sub-band CQI range to wideband CQI [-1,+2], according to 3GPP 2-bit information overhead limit
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: construct write read

No TraceSources are defined for this type.
Size of this type is 232 bytes (on a 64-bit architecture).

Definition at line 23 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 297 of file nr-pm-search-full.cc.

References ns3::NrIntfNormChanMat::ComputeSinrForPrecoding().

Referenced by ns3::NrPmSearchMaleki::CreateCqiFeedbackMimo(), FindOptSubbandPrecoding(), and ns3::NrPmSearchFast::GetWidebandI1().

+ 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 108 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.

Reimplemented in ns3::NrPmSearchIdeal, ns3::NrPmSearchMaleki, and ns3::NrPmSearchSasaoka.

Definition at line 66 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 167 of file nr-pm-search-full.cc.

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

Referenced by ns3::NrPmSearchFast::CreateCqiFeedbackMimo(), CreateCqiFeedbackMimo(), ns3::NrPmSearchIdeal::CreateCqiFeedbackMimo(), ns3::NrPmSearchMaleki::CreateCqiFeedbackMimo(), and ns3::NrPmSearchSasaoka::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 260 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 277 of file nr-pm-search-full.cc.

◆ FindOptSubbandPrecoding()

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

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.

Reimplemented in ns3::NrPmSearchSasaoka.

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

References ComputeCapacityForPrecoders(), and CreateSubbandPrecoders().

Referenced by ns3::NrPmSearchFast::CreateCqiFeedbackMimo(), ns3::NrPmSearchMaleki::CreateCqiFeedbackMimo(), 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 20 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 40 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 34 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 122 of file nr-pm-search-full.cc.

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

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 152 of file nr-pm-search-full.cc.

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

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 108 of file nr-pm-search-full.h.

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

◆ m_rankParams


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