![]() |
5G-LENA nr-v3.3-120-gdac69c56
The 5G/NR module for the ns-3 simulator
|
Eesm error model. More...
#include "nr-eesm-error-model.h"
Public Types | |
typedef std::tuple< DoubleVector, DoubleVector > | DoubleTuple |
typedef std::vector< double > | DoubleVector |
typedef std::vector< std::vector< std::map< uint32_t, DoubleTuple > > > | SimulatedBlerFromSINR |
![]() | |
enum | Mode { DL , UL } |
Indicate the mode (UL or DL) More... | |
typedef std::vector< Ptr< NrErrorModelOutput > > | NrErrorModelHistory |
Vector of previous output. | |
Public Member Functions | |
NrEesmErrorModel () | |
NrEesmErrorModel constructor. | |
~NrEesmErrorModel () override | |
~NrEesmErrorModel | |
uint32_t | GetMaxCbSize (uint32_t tbSize, uint8_t mcs) const override |
Get the maximum code block size in Bytes, as per NR. It depends on the LDPC base graph type. | |
uint8_t | GetMaxMcs () const override |
Get the maximum MCS. It depends on NR tables being used. | |
uint32_t | GetPayloadSize (uint32_t usefulSc, uint8_t mcs, uint8_t rank, uint32_t rbNum, Mode mode) const override |
Get the payload size in Bytes, following the MCSs in NR. It follows TS 38.214 Section 5.1.3.2 (DL) and 6.1.4.2 (UL) but without including quantizations and and limits (i.e., only up to Step 2) | |
double | GetSpectralEfficiencyForCqi (uint8_t cqi) override |
Get the SE for a given CQI, following the CQIs in NR Table1/Table2 in TS38.214. | |
double | GetSpectralEfficiencyForMcs (uint8_t mcs) const override |
Get the SE for a given MCS, following the MCSs in NR Table1/Table2 in TS38.214. | |
Ptr< NrErrorModelOutput > | GetTbDecodificationStats (const SpectrumValue &sinr, const std::vector< int > &map, uint32_t size, uint8_t mcs, const NrErrorModelHistory &sinrHistory) override |
Get an output for the decodification error probability of a given transport block, assuming the EESM method, NR LDPC coding and block segmentation, MCSs Table1/Table2 in NR, and HARQ based on CC. | |
![]() | |
NrErrorModel () | |
NrErrorModel default constructor. | |
~NrErrorModel () override | |
deconstructor | |
virtual NrSinrMatrix | ComputeAvgSinrMimo (const std::vector< MimoSinrChunk > &sinrChunks) |
Compute an average SINR matrix. | |
std::vector< int > | CreateVectorizedRbMap (std::vector< int > map, uint8_t rank) |
Create an equivalent RB index map for vectorized SINR values Matches layer-to-codeword mapping in TR 38.211, Table 7.3.1.3-1 If map contains index "j", the output vectorized map contains {j * rank, j * rank + 1, ..., j * rank + rank - 1}. Example: input RB map = {0, 1, 7, 11}, rank = 2 vectorizedMap = {0, 1, 2, 3, 14, 15, 22, 23}. | |
virtual Ptr< NrErrorModelOutput > | GetTbDecodificationStatsMimo (const std::vector< MimoSinrChunk > &mimoChunks, const std::vector< int > &map, uint32_t size, uint8_t mcs, uint8_t rank, const NrErrorModelHistory &history) |
Get an output for the decoding error probability of a given transport block. This method is not purely virtual. If derived ErrorModel does not override, the MIMO matrix is converted to a linear SpectrumValue, and the non-MIMO method is called. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
GetTypeId. | |
![]() | |
static TypeId | GetTypeId () |
GetTypeId. | |
Public Attributes | |
friend | NrL2smEesmTestCase |
Protected Member Functions | |
virtual double | ComputeSINR (const SpectrumValue &sinr, const std::vector< int > &map, uint8_t mcs, uint32_t sizeBit, const NrErrorModel::NrErrorModelHistory &sinrHistory) const =0 |
Compute the effective SINR after retransmission combining. | |
virtual const std::vector< double > * | GetBetaTable () const =0 |
virtual const std::vector< double > * | GetMcsEcrTable () const =0 |
virtual double | GetMcsEq (uint8_t mcsTx) const =0 |
Get the "Equivalent MCS" after retransmission combining. | |
virtual const std::vector< uint8_t > * | GetMcsMTable () const =0 |
virtual const SimulatedBlerFromSINR * | GetSimulatedBlerFromSINR () const =0 |
virtual const std::vector< double > * | GetSpectralEfficiencyForCqi () const =0 |
virtual const std::vector< double > * | GetSpectralEfficiencyForMcs () const =0 |
std::string | PrintMap (const std::vector< int > &map) const |
function to print the RB map | |
double | SinrEff (const SpectrumValue &sinr, const std::vector< int > &map, uint8_t mcs, double a, double b) const |
compute the effective SINR for the specified MCS and SINR, according to the EESM method. | |
double | SinrExp (const SpectrumValue &sinr, const std::vector< int > &map, uint8_t mcs) const |
compute the sum of exponential SINRs for the specified MCS and SINR, according to the EESM method, used in HARQ-IR | |
Eesm error model.
This class provides the BLER estimation based on EESM metrics, assuming LDPC coding with block segmentation as per TS 38.212 Sect. 5.2.2, and modulation and coding of MCS Table1/Table2 in TS 38.214 including up to 256-QAM. The MCS and CQI Tables of NR (Table1/Table2) are specified in McsTable. The BLER-SINR curves are obtained from a link level simulator (from ID) that uses LDPC coding and said MCSs. In case of HARQ, the model currently follows HARQ with Chase Combining, so that the SINReff is updated, but not the ECR, as per IEEE 802.16m-08/004r2.
The classes to use in your simulations are:
We provide the implementation of the Chase Combining-HARQ and the IR-HARQ in NrEesmCc and NrEesmIr, respectively.
Introspection did not find any typical Config paths.
No Attributes are defined for this type.
No TraceSources are defined for this type.
Size of this type is 56 bytes (on a 64-bit architecture).
Definition at line 77 of file nr-eesm-error-model.h.
typedef std::tuple<DoubleVector, DoubleVector> ns3::NrEesmErrorModel::DoubleTuple |
Definition at line 155 of file nr-eesm-error-model.h.
typedef std::vector<double> ns3::NrEesmErrorModel::DoubleVector |
Definition at line 154 of file nr-eesm-error-model.h.
typedef std::vector<std::vector<std::map<uint32_t, DoubleTuple> > > ns3::NrEesmErrorModel::SimulatedBlerFromSINR |
Definition at line 156 of file nr-eesm-error-model.h.
ns3::NrEesmErrorModel::NrEesmErrorModel | ( | ) |
NrEesmErrorModel constructor.
Definition at line 33 of file nr-eesm-error-model.cc.
|
override |
~NrEesmErrorModel
Definition at line 39 of file nr-eesm-error-model.cc.
|
protectedpure virtual |
Compute the effective SINR after retransmission combining.
sinr | SINR of the new transmission |
map | RB map |
mcs | MCS of the transmission |
sizeBit | size (in bit) of the transmission |
sinrHistory | history of the SINR of the previous transmission |
Called in GetTbBitDecodificationStats(). Please implement this function in a way that calculating the SINR of the new transmission takes in consideration the sinr history.
Implemented in ns3::NrEesmCc, and ns3::NrEesmIr.
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
Referenced by SinrEff(), and SinrExp().
|
overridevirtual |
Get the maximum code block size in Bytes, as per NR. It depends on the LDPC base graph type.
tbSize | Transport block size in Bytes |
mcs | MCS |
Implements ns3::NrErrorModel.
Definition at line 396 of file nr-eesm-error-model.cc.
|
overridevirtual |
Get the maximum MCS. It depends on NR tables being used.
Implements ns3::NrErrorModel.
Definition at line 408 of file nr-eesm-error-model.cc.
References GetMcsEcrTable().
Referenced by GetSpectralEfficiencyForMcs().
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
Referenced by ns3::NrEesmIr::ComputeSINR(), GetMaxMcs(), ns3::NrEesmIr::GetMcsEq(), and GetPayloadSize().
|
protectedpure virtual |
Get the "Equivalent MCS" after retransmission combining.
mcsTx | MCS of the transmission |
Called in GetTbDecodificationStats()
Implemented in ns3::NrEesmCc, and ns3::NrEesmIr.
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
Referenced by ns3::NrEesmIr::GetMcsEq(), and GetPayloadSize().
|
overridevirtual |
Get the payload size in Bytes, following the MCSs in NR. It follows TS 38.214 Section 5.1.3.2 (DL) and 6.1.4.2 (UL) but without including quantizations and and limits (i.e., only up to Step 2)
usefulSc | the number of useful subcarrier per RB, subtracting DMRS overhead |
mcs | MCS |
rank | the MIMO rank |
rbNum | the number of RBs (time x frequency) |
mode | Mode |
Implements ns3::NrErrorModel.
Definition at line 378 of file nr-eesm-error-model.cc.
References GetMcsEcrTable(), and GetMcsMTable().
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
Referenced by GetSpectralEfficiencyForCqi().
|
overridevirtual |
Get the SE for a given CQI, following the CQIs in NR Table1/Table2 in TS38.214.
Implements ns3::NrErrorModel.
Definition at line 358 of file nr-eesm-error-model.cc.
References GetSpectralEfficiencyForCqi().
|
protectedpure virtual |
Implemented in ns3::NrEesmCcT1, ns3::NrEesmCcT2, ns3::NrEesmIrT1, and ns3::NrEesmIrT2.
Referenced by GetSpectralEfficiencyForMcs().
|
overridevirtual |
Get the SE for a given MCS, following the MCSs in NR Table1/Table2 in TS38.214.
Implements ns3::NrErrorModel.
Definition at line 368 of file nr-eesm-error-model.cc.
References GetMaxMcs(), and GetSpectralEfficiencyForMcs().
|
overridevirtual |
Get an output for the decodification error probability of a given transport block, assuming the EESM method, NR LDPC coding and block segmentation, MCSs Table1/Table2 in NR, and HARQ based on CC.
sinr | SINR vector |
map | RB map |
size | Transport block size in Bytes |
mcs | MCS |
sinrHistory | History of the retransmission |
Implements ns3::NrErrorModel.
Definition at line 254 of file nr-eesm-error-model.cc.
|
static |
|
protected |
function to print the RB map
map | the RB map |
Definition at line 264 of file nr-eesm-error-model.cc.
Referenced by ns3::NrEesmCc::ComputeSINR().
|
protected |
compute the effective SINR for the specified MCS and SINR, according to the EESM method.
The effective SINR computation follows a general formula, valid for HARQ-CC and HARQ-IR: SINReff = - beta * ln [1/b * (sum (exp (-sinr/beta)) + a)]. Its implementation here is parametrized based on two parameters, a and b, whose value will depend on the HARQ method. For HARQ-CC, "a" MUST be 0.0, and "b" corresponds to the number of REGs to combine. For HARQ-IR, "a" corresponds to the sum of exponential SINRs up to previous retransmission, and "b" is the sum of REGs over the different retx.
sinr | the perceived sinrs in the whole bandwidth (vector, per RB) |
map | the actives RBs for the TB |
mcs | the MCS of the TB |
a | the sum term to the exponential SINR |
b | the denominator for the exponentials sum |
Definition at line 52 of file nr-eesm-error-model.cc.
References GetBetaTable(), and SinrExp().
Referenced by ns3::NrEesmCc::ComputeSINR(), and ns3::NrEesmIr::ComputeSINR().
|
protected |
compute the sum of exponential SINRs for the specified MCS and SINR, according to the EESM method, used in HARQ-IR
sinr | the perceived sinrs in the whole bandwidth (vector, per RB) |
map | the actives RBs for the TB |
mcs | the MCS of the TB |
Definition at line 73 of file nr-eesm-error-model.cc.
References GetBetaTable().
Referenced by SinrEff().
friend ns3::NrEesmErrorModel::NrL2smEesmTestCase |
Definition at line 80 of file nr-eesm-error-model.h.