![]() |
5G-LENA nr-v3.3-159-ga6832aa7
The 5G/NR module for the ns-3 simulator
|
LENA error model. More...
#include "lena-error-model.h"
Public Member Functions | |
LenaErrorModel () | |
NrLteMiErrorModel constructor. | |
~LenaErrorModel () override | |
~NrLteMiErrorModel | |
uint32_t | GetPayloadSize (uint32_t usefulSC, uint8_t mcs, uint8_t rank, uint32_t rbNum, Mode mode) const override |
Get the payload size, following the MCSs in LTE. | |
![]() | |
NrLteMiErrorModel () | |
NrLteMiErrorModel constructor. | |
~NrLteMiErrorModel () override | |
~NrLteMiErrorModel | |
uint32_t | GetMaxCbSize (uint32_t tbSize, uint8_t mcs) const override |
Get the maximum code block size, as per LTE. | |
uint8_t | GetMaxMcs () const override |
Get the maximum MCS. | |
uint32_t | GetPayloadSize (uint32_t usefulSC, uint8_t mcs, uint8_t rank, uint32_t rbNum, Mode mode) const override |
Get the payload size, following the MCSs in LTE. | |
double | GetSpectralEfficiencyForCqi (uint8_t cqi) override |
Get the SE for a given CQI, following the CQIs in LTE. | |
double | GetSpectralEfficiencyForMcs (uint8_t mcs) const override |
Get the SE for a given MCS, following the MCSs in LTE. | |
Ptr< NrErrorModelOutput > | GetTbDecodificationStats (const SpectrumValue &sinr, const std::vector< int > &map, uint32_t size, uint8_t mcs, const NrErrorModelHistory &history) override |
Get an output for the decodification error probability of a given transport block, assuming the MIESM method, NR TC coding and block segmentation, MCSs in LTE, and HARQ based on IR. | |
![]() | |
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. | |
![]() | |
static TypeId | GetTypeId () |
GetTypeId. | |
Additional Inherited Members | |
![]() | |
enum | Mode { DL , UL } |
Indicate the mode (UL or DL) More... | |
typedef std::vector< Ptr< NrErrorModelOutput > > | NrErrorModelHistory |
Vector of previous output. | |
LENA error model.
LENA is calculating the transport block sizes in a different way than we employ in our module. In particular, it uses tables that come from the standard. This error model is created to have the same values as used in LENA.
Please note that, since LENA always assigns all the available symbols to the UE, the transport block calculation is way more limited than in NR. To account for symbol granularity, in NR we are calling the function GetPayloadSize() by passing the number of RB in frequency, multiplied by the number of symbols assigned. To avoid a costly API rewrite through the NR module, we assume that the code that will be calling this function (hopefully, and OFDMA scheduler) will assign all the symbols except the single DL or UL CTRL symbol.
For matching the two RB values, we divide by 13 (hence, assuming 1 CTRL symbol) the value of RB that is coming as input. As example, imagine that the scheduler is assigning 2 RB over 13 symbols. In LENA, the function GetPayloadSize() would have been called with the input parameter RB set to 2; in NR, we call it with the same input parameter set to 26. To be able to retrieve the same value from the table, we have to adapt it, and here is explained why we divide by 13 the RB number.
Please note that we assume 1 symbol for CTRL. If you use more than one, then the calculation will be wrong.
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 40 of file lena-error-model.h.
ns3::LenaErrorModel::LenaErrorModel | ( | ) |
NrLteMiErrorModel constructor.
Definition at line 17 of file lena-error-model.cc.
|
override |
~NrLteMiErrorModel
Definition at line 23 of file lena-error-model.cc.
|
overridevirtual |
Get the payload size, following the MCSs in LTE.
usefulSC | Useful Subcarriers (ignored) |
mcs | MCS |
rank | MIMO rank |
rbNum | Resource Block number (please pay attention) |
mode | UL or DL |
The RB value will be divided by 13.
Implements ns3::NrErrorModel.
Definition at line 29 of file lena-error-model.cc.
References ns3::NrErrorModel::DL, ns3::NrLteAmc::GetDlTbSizeFromMcs(), and ns3::NrLteAmc::GetUlTbSizeFromMcs().
|
static |
GetTypeId.
Definition at line 84 of file lena-error-model.cc.
Referenced by ns3::NrAmc::CalculateTbSize().