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, (
double)nbits);
94 uint32_t bValue)
const
102 pe = std::min (pe, 1.0);
103 double pms = std::pow (1 - pe, (
double)nbits);
109 double D = std::sqrt (4.0 * p * (1.0 - p));
114 pe = 0.5 * ( 36.0 * std::pow (D, 10)
115 + 211.0 * std::pow (D, 12)
116 + 1404.0 * std::pow (D, 14)
117 + 11633.0 * std::pow (D, 16)
118 + 77433.0 * std::pow (D, 18)
119 + 502690.0 * std::pow (D, 20)
120 + 3322763.0 * std::pow (D, 22)
121 + 21292910.0 * std::pow (D, 24)
122 + 134365911.0 * std::pow (D, 26)
125 else if (bValue == 2)
128 pe = 1.0 / (2.0 * bValue) *
129 ( 3.0 * std::pow (D, 6)
130 + 70.0 * std::pow (D, 7)
131 + 285.0 * std::pow (D, 8)
132 + 1276.0 * std::pow (D, 9)
133 + 6160.0 * std::pow (D, 10)
134 + 27128.0 * std::pow (D, 11)
135 + 117019.0 * std::pow (D, 12)
136 + 498860.0 * std::pow (D, 13)
137 + 2103891.0 * std::pow (D, 14)
138 + 8784123.0 * std::pow (D, 15)
141 else if (bValue == 3)
144 pe = 1.0 / (2.0 * bValue) *
145 ( 42.0 * std::pow (D, 5)
146 + 201.0 * std::pow (D, 6)
147 + 1492.0 * std::pow (D, 7)
148 + 10469.0 * std::pow (D, 8)
149 + 62935.0 * std::pow (D, 9)
150 + 379644.0 * std::pow (D, 10)
151 + 2253373.0 * std::pow (D, 11)
152 + 13073811.0 * std::pow (D, 12)
153 + 75152755.0 * std::pow (D, 13)
154 + 428005675.0 * std::pow (D, 14)
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
Return BER of QPSK at the given SNR.
static double GetDsssDqpskCck11SuccessRate(double sinr, uint32_t nbits)
Return the chunk success rate of the differential encoded QPSK for 11Mbps data rate.
static TypeId GetTypeId(void)
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
enum WifiModulationClass GetModulationClass() const
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
static double GetDsssDqpskSuccessRate(double sinr, uint32_t nbits)
Return the chunk success rate of the differential encoded QPSK.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
double GetFec64QamBer(double snr, uint32_t nbits, uint32_t bValue) const
Return BER of QAM64 at the given SNR after applying FEC.
double GetFec16QamBer(double snr, uint32_t nbits, uint32_t bValue) const
Return BER of QAM16 at the given SNR after applying FEC.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
the interface for Wifi's error models
double CalculatePe(double p, uint32_t bValue) const
Return the coded BER for the given p and b.
enum WifiCodeRate GetCodeRate(void) const
double Get16QamBer(double snr) const
Return BER of QAM16 at the given SNR.
uint8_t GetConstellationSize(void) const
double GetFecQpskBer(double snr, uint32_t nbits, uint32_t bValue) const
Return BER of QPSK at the given SNR after applying FEC.
double Get64QamBer(double snr) const
Return BER of QAM64 at the given SNR.
static double GetDsssDqpskCck5_5SuccessRate(double sinr, uint32_t nbits)
Return the chunk success rate of the differential encoded QPSK for 5.5Mbps data rate.
double GetFecBpskBer(double snr, uint32_t nbits, uint32_t bValue) const
Return BER of BPSK at the given SNR after applying FEC.
static double GetDsssDbpskSuccessRate(double sinr, uint32_t nbits)
Return the chunk success rate of the differential BPSK.
a unique identifier for an interface.
uint64_t GetDataRate(void) const
TypeId SetParent(TypeId tid)
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
virtual double GetChunkSuccessRate(WifiMode mode, double snr, uint32_t nbits) const
A pure virtual method that must be implemented in the subclass.
double GetBpskBer(double snr) const
Return BER of BPSK at the given SNR.