135 auto valFp = (int16_t)(val * 8);
143 double valD = ((int16_t)val) / 8.0;
157 0, 10, 12, 14, 17, 19, 22, 26, 31, 36, 42, 49, 57,
158 67, 78, 91, 107, 125, 146, 171, 200, 234, 274, 321, 376, 440,
159 515, 603, 706, 826, 967, 1132, 1326, 1552, 1817, 2127, 2490, 2915, 3413,
160 3995, 4677, 5476, 6411, 7505, 8787, 10287, 12043, 14099, 16507, 19325, 22624, 26487,
161 31009, 36304, 42502, 49759, 58255, 68201, 79846, 93749, 109439, 128125, 150000, 150000,
218 NS_ASSERT_MSG(range <= 97,
"value " << range <<
" is out of range");
219 return (
double)range - 141.0;
226 double range = std::min(std::max(std::floor(dbm + 141), 0.0), 97.0);
227 return (uint8_t)range;
234 NS_ASSERT_MSG(range <= 34,
"value " << (uint16_t)range <<
" is out of range");
235 return ((
double)range - 40.0) * 0.5;
242 double range = std::min(std::max(std::floor(db * 2 + 40), 0.0), 34.0);
243 return (uint8_t)range;
261 if (hysteresisIeValue > 30)
264 <<
" is out of the allowed range (0..30)"
265 <<
" for Hysteresis IE value");
268 double actual =
static_cast<double>(hysteresisIeValue) * 0.5;
277 if ((hysteresisDb < 0.0) || (hysteresisDb > 15.0))
279 NS_FATAL_ERROR(
"The value " << hysteresisDb <<
" is out of the allowed range (0..15) dB"
280 <<
" for hysteresis");
283 uint8_t ieValue = lround(hysteresisDb * 2.0);
291 if ((a3OffsetIeValue < -30) || (a3OffsetIeValue > 30))
294 <<
" is out of the allowed range (-30..30)"
295 <<
" for a3-Offset IE value");
298 double actual =
static_cast<double>(a3OffsetIeValue) * 0.5;
307 if ((a3OffsetDb < -15.0) || (a3OffsetDb > 15.0))
309 NS_FATAL_ERROR(
"The value " << a3OffsetDb <<
" is out of the allowed range (-15..15) dB"
310 <<
" for A3 Offset");
313 int8_t ieValue = lround(a3OffsetDb * 2.0);
322 if ((qRxLevMinIeValue < -70) || (qRxLevMinIeValue > -22))
325 <<
" is out of the allowed range (-70..-22)"
326 <<
" for Q-RxLevMin IE value");
329 double actual =
static_cast<double>(qRxLevMinIeValue) * 2;
338 if ((qQualMinIeValue < -34) || (qQualMinIeValue > -3))
341 <<
" is out of the allowed range (-34..-3)"
342 <<
" for Q-QualMin IE value");
345 auto actual =
static_cast<double>(qQualMinIeValue);
static uint8_t BufferSize2BsrId(uint32_t val)
Convert Buffer size to BSR ID.
static uint32_t BsrId2BufferSize(uint8_t val)
Convert BSR ID to buffer size.
static double QuantizeRsrp(double v)
Quantize an RSRP value according to the measurement mapping of TS 36.133.
static int8_t ActualA3Offset2IeValue(double a3OffsetDb)
Returns the IE value of a3-Offset.
static uint8_t Dbm2RsrpRange(double dbm)
convert an RSRP value in dBm to the corresponding range as per 3GPP TS 36.133 section 9....
static uint8_t ActualHysteresis2IeValue(double hysteresisDb)
Returns the IE value of hysteresis.
static double RsrpRange2Dbm(uint8_t range)
converts an RSRP range to dBm as per 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
static double RsrqRange2Db(uint8_t range)
converts an RSRQ range to dB as per 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
static double QuantizeRsrq(double v)
Quantize an RSRQ value according to the measurement mapping of TS 36.133.
static double IeValue2ActualQQualMin(int8_t qQualMinIeValue)
Returns the actual value of an Q-QualMin parameter.
static double IeValue2ActualQRxLevMin(int8_t qRxLevMinIeValue)
Returns the actual value of an Q-RxLevMin parameter.
static double IeValue2ActualHysteresis(uint8_t hysteresisIeValue)
Returns the actual value of a hysteresis parameter.
static uint8_t Db2RsrqRange(double db)
convert an RSRQ value in dB to the corresponding range as per 3GPP TS 36.133 section 9....
static double IeValue2ActualA3Offset(int8_t a3OffsetIeValue)
Returns the actual value of an a3-Offset parameter.
static double getMinFpS11dot3Value()
Get minimum fixed point S11.3 value.
static uint16_t double2fpS11dot3(double val)
Convert from double to fixed point S11.3 notation.
static double fpS11dot3toDouble(uint16_t val)
Convert from fixed point S11.3 notation to double.
static uint8_t TxMode2LayerNum(uint8_t txMode)
Transmit mode 2 layer number.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator==(const EventId &a, const EventId &b)
static const uint32_t BufferSizeLevelBsrTable[64]
Buffer size level BSR table.
bool operator<(const EventId &a, const EventId &b)
Parameters for configuring the UE.