38 .SetGroupName (
"Wifi")
51 double z = std::sqrt (snr);
52 double ber = 0.5 * erfc (z);
59 double z = std::sqrt (snr / 2.0);
60 double ber = 0.5 * erfc (z);
67 double z = std::sqrt (snr / (5.0 * 2.0));
68 double ber = 0.75 * 0.5 * erfc (z);
69 NS_LOG_INFO (
"16-Qam" <<
" snr=" << snr <<
" ber=" << ber);
75 double z = std::sqrt (snr / (21.0 * 2.0));
76 double ber = 7.0 / 12.0 * 0.5 * erfc (z);
77 NS_LOG_INFO (
"64-Qam" <<
" snr=" << snr <<
" ber=" << ber);
82 uint32_t bValue)
const
90 pe = std::min (pe, 1.0);
91 double pms = std::pow (1 - pe, (
double)nbits);
96 uint32_t bValue)
const
104 pe = std::min (pe, 1.0);
105 double pms = std::pow (1 - pe, (
double)nbits);
111 double D = std::sqrt (4.0 * p * (1.0 - p));
116 pe = 0.5 * ( 36.0 * std::pow (D, 10)
117 + 211.0 * std::pow (D, 12)
118 + 1404.0 * std::pow (D, 14)
119 + 11633.0 * std::pow (D, 16)
120 + 77433.0 * std::pow (D, 18)
121 + 502690.0 * std::pow (D, 20)
122 + 3322763.0 * std::pow (D, 22)
123 + 21292910.0 * std::pow (D, 24)
124 + 134365911.0 * std::pow (D, 26)
127 else if (bValue == 2)
130 pe = 1.0 / (2.0 * bValue) *
131 ( 3.0 * std::pow (D, 6)
132 + 70.0 * std::pow (D, 7)
133 + 285.0 * std::pow (D, 8)
134 + 1276.0 * std::pow (D, 9)
135 + 6160.0 * std::pow (D, 10)
136 + 27128.0 * std::pow (D, 11)
137 + 117019.0 * std::pow (D, 12)
138 + 498860.0 * std::pow (D, 13)
139 + 2103891.0 * std::pow (D, 14)
140 + 8784123.0 * std::pow (D, 15)
143 else if (bValue == 3)
146 pe = 1.0 / (2.0 * bValue) *
147 ( 42.0 * std::pow (D, 5)
148 + 201.0 * std::pow (D, 6)
149 + 1492.0 * std::pow (D, 7)
150 + 10469.0 * std::pow (D, 8)
151 + 62935.0 * std::pow (D, 9)
152 + 379644.0 * std::pow (D, 10)
153 + 2253373.0 * std::pow (D, 11)
154 + 13073811.0 * std::pow (D, 12)
155 + 75152755.0 * std::pow (D, 13)
156 + 428005675.0 * std::pow (D, 14)
159 else if (bValue == 5)
163 pe = 1.0 / (2.0 * bValue) *
164 ( 92.0 * std::pow (D, 4.0)
165 + 528.0 * std::pow (D, 5.0)
166 + 8694.0 * std::pow (D, 6.0)
167 + 79453.0 * std::pow (D, 7.0)
168 + 792114.0 * std::pow (D, 8.0)
169 + 7375573.0 * std::pow (D, 9.0)
170 + 67884974.0 * std::pow (D, 10.0)
171 + 610875423.0 * std::pow (D, 11.0)
172 + 5427275376.0 * std::pow (D, 12.0)
173 + 47664215639.0 * std::pow (D, 13.0)
185 uint32_t bValue)
const
193 pe = std::min (pe, 1.0);
194 double pms = std::pow (1 - pe, static_cast<double> (nbits));
199 uint32_t bValue)
const
207 pe = std::min (pe, 1.0);
208 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 an Object subclass with the TypeId system.
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.
A model for the error rate for different modulations.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
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.