5G-LENA nr-v3.3-161-gad18933f
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-amc.h
1// Copyright (c) 2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4
5#ifndef NR_AMC_H
6#define NR_AMC_H
7
8#include "nr-error-model.h"
9#include "nr-phy-mac-common.h"
10
11namespace ns3
12{
13
36class NrAmc : public Object
37{
38 public:
43 static TypeId GetTypeId();
44
48 NrAmc();
49
53 ~NrAmc() override;
54
62 void SetDlMode();
63
71 void SetUlMode();
72
83
89 uint8_t GetMcsFromCqi(uint8_t cqi) const;
90
94 uint8_t GetNumRefScPerRb() const;
95
104 void SetNumRefScPerRb(uint8_t nref);
105
124 uint8_t CreateCqiFeedbackSiso(const SpectrumValue& sinr, uint8_t& mcsWb) const;
125
131 uint8_t GetCqiFromSpectralEfficiency(double s) const;
132
138 uint8_t GetMcsFromSpectralEfficiency(double s) const;
139
144 uint32_t GetMaxMcs() const;
145
150 void SetAmcModel(AmcModel m);
155 AmcModel GetAmcModel() const;
156
161 void SetErrorModelType(const TypeId& type);
166 TypeId GetErrorModelType() const;
167
180 uint32_t CalculateTbSize(uint8_t mcs, uint8_t rank, uint32_t nprb) const;
181
189 uint32_t GetPayloadSize(uint8_t mcs, uint8_t rank, uint32_t nprb) const;
190
191 static constexpr size_t NR_AMC_NUM_SYMBOLS_DEFAULT = 12;
192
195 {
196 uint8_t mcs{};
197 uint8_t wbCqi{};
198 std::vector<uint8_t> sbCqis{};
199 uint32_t tbSize{};
200 };
201
206 McsParams GetMaxMcsParams(const NrSinrMatrix& sinrMat, size_t subbandSize) const;
207
212 std::vector<uint8_t> GetSbMcs(const size_t subbandSize, const NrSinrMatrix& sinrMat) const;
213
217 uint8_t GetMcs(const NrSinrMatrix& sinrMat) const;
218
224 const NrSinrMatrix& sinrMat) const;
225
230 NrSinrMatrix ExtractSbFromMat(const uint8_t sbIndex,
231 const size_t subbandSize,
232 const NrSinrMatrix& sinrMat) const;
233
239 double GetSpectralEfficiencyForCqi(uint8_t cqi) const
240 {
241 return m_errorModel->GetSpectralEfficiencyForCqi(cqi);
242 }
243
249 double GetSpectralEfficiencyForSinr(double sinr) const;
250
256 double GetSinrFromSpectralEfficiency(double spectralEff) const;
257
258 private:
262 uint8_t GetMaxMcsForErrorModel(const NrSinrMatrix& sinrMat) const;
263
267 uint8_t GetWbCqiFromMcs(uint8_t mcs) const;
268
273 uint32_t CalcTbSizeForMimoMatrix(uint8_t mcs, const NrSinrMatrix& sinrMat) const;
274
279 double CalcTblerForMimoMatrix(uint8_t mcs, const NrSinrMatrix& sinrMat) const;
280
285 double GetBer() const;
286
287 private:
288 AmcModel m_amcModel;
289 Ptr<NrErrorModel> m_errorModel;
290 TypeId m_errorModelType;
291 uint8_t m_numRefScPerRb{1};
293 static const unsigned int m_crcLen = 24 / 8;
294 mutable std::unordered_map<uint8_t, uint8_t> m_cachedCqiToMcsMap;
295};
296
297} // end namespace ns3
298
299#endif /* NR_AMC_H */
Adaptive Modulation and Coding class for the NR module.
Definition nr-amc.h:37
void SetErrorModelType(const TypeId &type)
Set Error model type.
Definition nr-amc.cc:317
void SetAmcModel(AmcModel m)
Set the AMC model type.
Definition nr-amc.cc:303
std::vector< uint8_t > GetSbMcs(const size_t subbandSize, const NrSinrMatrix &sinrMat) const
Find Sb MCS supported for this channel.
Definition nr-amc.cc:370
TypeId GetErrorModelType() const
Get the error model type.
Definition nr-amc.cc:330
uint8_t GetNumRefScPerRb() const
Definition nr-amc.cc:102
NrAmc()
NrAmc constructor.
Definition nr-amc.cc:25
void SetUlMode()
Set the object to be in "UL" mode.
Definition nr-amc.cc:42
double GetSpectralEfficiencyForSinr(double sinr) const
Compute spectral efficient for a given SINR according to Shannon's capacity.
Definition nr-amc.cc:533
static TypeId GetTypeId()
GetTypeId.
Definition nr-amc.cc:49
double GetSpectralEfficiencyForCqi(uint8_t cqi) const
Compute spectral efficient for a given CQI according to the error model.
Definition nr-amc.h:239
AmcModel GetAmcModel() const
Get the AMC model type.
Definition nr-amc.cc:310
uint32_t GetPayloadSize(uint8_t mcs, uint8_t rank, uint32_t nprb) const
Calculate the Payload Size (in bytes) from MCS and the number of RB.
Definition nr-amc.cc:152
NrSinrMatrix ExtractSbFromMat(const uint8_t sbIndex, const size_t subbandSize, const NrSinrMatrix &sinrMat) const
Extract sub-band sinr value from the sinrMatrix.
Definition nr-amc.cc:386
NrSinrMatrix CreateSinrMatForSb(const NrSinrMatrix &avgSinrSb, const NrSinrMatrix &sinrMat) const
Create wide-band matrix based on average sinr of particular sub-band.
Definition nr-amc.cc:403
double GetSinrFromSpectralEfficiency(double spectralEff) const
Compute SINR for a given spectral efficiency according to Shannon's capacity.
Definition nr-amc.cc:547
static constexpr size_t NR_AMC_NUM_SYMBOLS_DEFAULT
Num OFDM syms for TB size.
Definition nr-amc.h:191
McsParams GetMaxMcsParams(const NrSinrMatrix &sinrMat, size_t subbandSize) const
Find maximum MCS supported for this channel and obtain related parameters.
Definition nr-amc.cc:352
uint32_t CalculateTbSize(uint8_t mcs, uint8_t rank, uint32_t nprb) const
Calculate the TransportBlock size (in bytes) giving the MCS and the number of RB assigned.
Definition nr-amc.cc:116
void SetDlMode()
Set the object to be in "DL" mode.
Definition nr-amc.cc:35
uint8_t GetCqiFromSpectralEfficiency(double s) const
Get CQI from a SpectralEfficiency value.
Definition nr-amc.cc:267
uint8_t GetMcsFromSpectralEfficiency(double s) const
Get MCS from a SpectralEfficiency value.
Definition nr-amc.cc:281
uint8_t CreateCqiFeedbackSiso(const SpectrumValue &sinr, uint8_t &mcsWb) const
Create a CQI/MCS wideband feedback from SINR values.
Definition nr-amc.cc:163
AmcModel
Valid types of the model used to create a cqi feedback.
Definition nr-amc.h:79
@ ErrorModel
Error Model version (can use different error models, see NrErrorModel)
Definition nr-amc.h:81
@ ShannonModel
Shannon based model (very conservative)
Definition nr-amc.h:80
void SetNumRefScPerRb(uint8_t nref)
Set the the number of subcarriers carrying reference signals per resource block.
Definition nr-amc.cc:109
uint8_t GetMcsFromCqi(uint8_t cqi) const
Get the MCS value from a CQI value.
Definition nr-amc.cc:79
uint8_t GetMcs(const NrSinrMatrix &sinrMat) const
Find MCS supported for this channel.
Definition nr-amc.cc:418
uint32_t GetMaxMcs() const
Get the maximum MCS (depends on the underlying error model)
Definition nr-amc.cc:296
~NrAmc() override
~NrAmc deconstructor
Definition nr-amc.cc:30
Mode
Indicate the mode (UL or DL)
NrSinrMatrix stores the MIMO SINR matrix, with dimension rank x nRbs.
Parameters related to MCS selection.
Definition nr-amc.h:195
uint8_t wbCqi
Wideband CQI.
Definition nr-amc.h:197
uint8_t mcs
MCS value.
Definition nr-amc.h:196
uint32_t tbSize
Expected transport block size.
Definition nr-amc.h:199
std::vector< uint8_t > sbCqis
Subband CQI values.
Definition nr-amc.h:198