37 .AddConstructor<NistErrorRateModel> ()
49 double z = std::sqrt (snr);
50 double ber = 0.5 * erfc (z);
57 double z = std::sqrt (snr / 2.0);
58 double ber = 0.5 * erfc (z);
65 double z = std::sqrt (snr / (5.0 * 2.0));
66 double ber = 0.75 * 0.5 * erfc (z);
67 NS_LOG_INFO (
"16-Qam" <<
" snr=" << snr <<
" ber=" << ber);
73 double z = std::sqrt (snr / (21.0 * 2.0));
74 double ber = 7.0 / 12.0 * 0.5 * erfc (z);
75 NS_LOG_INFO (
"64-Qam" <<
" snr=" << snr <<
" ber=" << ber);
80 uint32_t bValue)
const
88 pe = std::min (pe, 1.0);
89 double pms = std::pow (1 - pe, nbits);
94 uint32_t bValue)
const
102 pe = std::min (pe, 1.0);
103 double pms = std::pow (1 - pe, nbits);
109 double D = std::sqrt (4.0 * p * (1.0 - p));
114 pe = 0.5 * ( 36.0 * std::pow (D, 10.0)
115 + 211.0 * std::pow (D, 12.0)
116 + 1404.0 * std::pow (D, 14.0)
117 + 11633.0 * std::pow (D, 16.0)
118 + 77433.0 * std::pow (D, 18.0)
119 + 502690.0 * std::pow (D, 20.0)
120 + 3322763.0 * std::pow (D, 22.0)
121 + 21292910.0 * std::pow (D, 24.0)
122 + 134365911.0 * std::pow (D, 26.0)
125 else if (bValue == 2)
128 pe = 1.0 / (2.0 * bValue) *
129 ( 3.0 * std::pow (D, 6.0)
130 + 70.0 * std::pow (D, 7.0)
131 + 285.0 * std::pow (D, 8.0)
132 + 1276.0 * std::pow (D, 9.0)
133 + 6160.0 * std::pow (D, 10.0)
134 + 27128.0 * std::pow (D, 11.0)
135 + 117019.0 * std::pow (D, 12.0)
136 + 498860.0 * std::pow (D, 13.0)
137 + 2103891.0 * std::pow (D, 14.0)
138 + 8784123.0 * std::pow (D, 15.0)
141 else if (bValue == 3)
144 pe = 1.0 / (2.0 * bValue) *
145 ( 42.0 * std::pow (D, 5.0)
146 + 201.0 * std::pow (D, 6.0)
147 + 1492.0 * std::pow (D, 7.0)
148 + 10469.0 * std::pow (D, 8.0)
149 + 62935.0 * std::pow (D, 9.0)
150 + 379644.0 * std::pow (D, 10.0)
151 + 2253373.0 * std::pow (D, 11.0)
152 + 13073811.0 * std::pow (D, 12.0)
153 + 75152755.0 * std::pow (D, 13.0)
154 + 428005675.0 * std::pow (D, 14.0)
166 uint32_t bValue)
const
174 pe = std::min (pe, 1.0);
175 double pms = std::pow (1 - pe, static_cast<double> (nbits));
180 uint32_t bValue)
const
188 pe = std::min (pe, 1.0);
189 double pms = std::pow (1 - pe, static_cast<double> (nbits));
double GetQpskBer(double snr) const
static double GetDsssDqpskCck11SuccessRate(double sinr, uint32_t nbits)
static TypeId GetTypeId(void)
enum WifiModulationClass GetModulationClass() const
#define NS_ASSERT(condition)
static double GetDsssDqpskSuccessRate(double sinr, uint32_t nbits)
double GetFec64QamBer(double snr, uint32_t nbits, uint32_t bValue) const
double GetFec16QamBer(double snr, uint32_t nbits, uint32_t bValue) const
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
the interface for Wifi's error models
NS_LOG_COMPONENT_DEFINE("NistErrorRateModel")
double CalculatePe(double p, uint32_t bValue) const
double GetFecBpskBer(double snr, double nbits, uint32_t bValue) const
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
enum WifiCodeRate GetCodeRate(void) const
double Get16QamBer(double snr) const
uint8_t GetConstellationSize(void) const
double Get64QamBer(double snr) const
static double GetDsssDqpskCck5_5SuccessRate(double sinr, uint32_t nbits)
double GetFecQpskBer(double snr, double nbits, uint32_t bValue) const
static double GetDsssDbpskSuccessRate(double sinr, uint32_t nbits)
a unique identifier for an interface.
uint64_t GetDataRate(void) const
TypeId SetParent(TypeId tid)
virtual double GetChunkSuccessRate(WifiMode mode, double snr, uint32_t nbits) const
double GetBpskBer(double snr) const