INET Framework for OMNeT++/OMNEST
inet::physicallayer::Ieee80211NistErrorModel Class Reference

A model for the error rate for different modulations. More...

#include <Ieee80211NistErrorModel.h>

Inheritance diagram for inet::physicallayer::Ieee80211NistErrorModel:
inet::physicallayer::Ieee80211ErrorModelBase inet::physicallayer::ErrorModelBase inet::physicallayer::IErrorModel inet::IPrintableObject inet::physicallayer::Ieee80211OfdmErrorModel

Public Member Functions

virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
- Public Member Functions inherited from inet::physicallayer::Ieee80211ErrorModelBase
 Ieee80211ErrorModelBase ()
 
virtual double computePacketErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the packet error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics. More...
 
virtual double computeBitErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the bit error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics. More...
 
virtual double computeSymbolErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the symbol error rate based on SNIR, modulation, and any other physical layer characteristics. More...
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 

Protected Member Functions

double calculatePe (double p, uint32_t bValue) const
 
double getBpskBer (double snr) const
 
double getQpskBer (double snr) const
 
double get16QamBer (double snr) const
 
double get64QamBer (double snr) const
 
double get256QamBer (double snr) const
 
double get1024QamBer (double snr) const
 
double getFecBpskBer (double snr, double nbits, uint32_t bValue) const
 
double getFecQpskBer (double snr, double nbits, uint32_t bValue) const
 
double getFec16QamBer (double snr, uint32_t nbits, uint32_t bValue) const
 
double getFec64QamBer (double snr, uint32_t nbits, uint32_t bValue) const
 
double getFec256QamBer (double snr, uint64_t nbits, uint32_t bValue) const
 
double getFec1024QamBer (double snr, uint64_t nbits, uint32_t bValue) const
 
virtual double getOFDMAndERPOFDMChunkSuccessRate (const ApskModulationBase *subcarrierModulation, const ConvolutionalCode *convolutionalCode, unsigned int bitLength, double snr) const
 
virtual double getDSSSAndHrDSSSChunkSuccessRate (bps bitrate, unsigned int bitLength, double snr) const
 
virtual double getHeaderSuccessRate (const IIeee80211Mode *mode, unsigned int headerBitLength, double snr) const override
 
virtual double getDataSuccessRate (const IIeee80211Mode *mode, unsigned int bitLength, double snr) const override
 
- Protected Member Functions inherited from inet::physicallayer::Ieee80211ErrorModelBase
virtual PacketcomputeCorruptedPacket (const Packet *packet, double ber) const override
 
virtual double getDsssDbpskSuccessRate (unsigned int bitLength, double snir) const
 
virtual double getDsssDqpskSuccessRate (unsigned int bitLength, double snir) const
 
virtual double getDsssDqpskCck5_5SuccessRate (unsigned int bitLength, double snir) const
 
virtual double getDsssDqpskCck11SuccessRate (unsigned int bitLength, double snir) const
 
- Protected Member Functions inherited from inet::physicallayer::ErrorModelBase
virtual void initialize (int stage) override
 
virtual double getScalarSnir (const ISnir *snir) const
 
virtual bool hasProbabilisticError (b length, double ber) const
 
virtual PacketcorruptBits (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptBytes (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptChunks (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptPacket (const Packet *packet, bool &isCorrupted) const
 
virtual PacketcomputeCorruptedPacket (const ISnir *snir) const override
 

Additional Inherited Members

- Public Types inherited from inet::physicallayer::ErrorModelBase
enum  CorruptionMode {
  CorruptionMode::CM_UNDEFINED = -1, CorruptionMode::CM_PACKET, CorruptionMode::CM_CHUNK, CorruptionMode::CM_BYTE,
  CorruptionMode::CM_BIT
}
 
enum  SnirMode { SnirMode::SM_UNDEFINED = -1, SnirMode::SM_MIN, SnirMode::SM_MEAN }
 
- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 
- Protected Attributes inherited from inet::physicallayer::Ieee80211ErrorModelBase
double spectralEfficiency1bit = 2000000.0 / 1000000.0
 
double spectralEfficiency2bit = 2000000.0 / 1000000.0 / 2.0
 
double sirPerfect = 10.0
 
double sirImpossible = 0.1
 
- Protected Attributes inherited from inet::physicallayer::ErrorModelBase
CorruptionMode corruptionMode = CorruptionMode::CM_UNDEFINED
 
SnirMode snirMode = SnirMode::SM_UNDEFINED
 
double snirOffset = NaN
 

Detailed Description

A model for the error rate for different modulations.

For OFDM modulation, the model description and validation can be found in http://www.nsnam.org/~pei/80211ofdm.pdf. For DSSS modulations (802.11b), the model uses a separate error model.

Member Function Documentation

◆ calculatePe()

double inet::physicallayer::Ieee80211NistErrorModel::calculatePe ( double  p,
uint32_t  bValue 
) const
protected
105 {
106  double D = sqrt(4.0 * p * (1.0 - p));
107  double pe = 1.0;
108  if (bValue == 1) {
109  // code rate 1/2, use table 3.1.1
110  pe = 0.5
111  * (36.0 * pow(D, 10.0) + 211.0 * pow(D, 12.0) + 1404.0 * pow(D, 14.0) + 11633.0 * pow(D, 16.0)
112  + 77433.0 * pow(D, 18.0) + 502690.0 * pow(D, 20.0) + 3322763.0 * pow(D, 22.0)
113  + 21292910.0 * pow(D, 24.0) + 134365911.0 * pow(D, 26.0));
114  }
115  else if (bValue == 2) {
116  // code rate 2/3, use table 3.1.2
117  pe = 1.0 / (2.0 * bValue)
118  * (3.0 * pow(D, 6.0) + 70.0 * pow(D, 7.0) + 285.0 * pow(D, 8.0) + 1276.0 * pow(D, 9.0)
119  + 6160.0 * pow(D, 10.0) + 27128.0 * pow(D, 11.0) + 117019.0 * pow(D, 12.0)
120  + 498860.0 * pow(D, 13.0) + 2103891.0 * pow(D, 14.0) + 8784123.0 * pow(D, 15.0));
121  }
122  else if (bValue == 3) {
123  // code rate 3/4, use table 3.1.2
124  pe = 1.0 / (2.0 * bValue)
125  * (42.0 * pow(D, 5.0) + 201.0 * pow(D, 6.0) + 1492.0 * pow(D, 7.0) + 10469.0 * pow(D, 8.0)
126  + 62935.0 * pow(D, 9.0) + 379644.0 * pow(D, 10.0) + 2253373.0 * pow(D, 11.0)
127  + 13073811.0 * pow(D, 12.0) + 75152755.0 * pow(D, 13.0) + 428005675.0 * pow(D, 14.0));
128  }
129  else if (bValue == 5) {
130  // code rate 5/6, use table V from D. Haccoun and G. Begin, "High-Rate Punctured Convolutional Codes
131  // for Viterbi Sequential Decoding", IEEE Transactions on Communications, Vol. 32, Issue 3, pp.315-319.
132  pe = 1.0 / (2.0 * bValue)
133  * (92.0 * pow(D, 4.0) + 528.0 * pow(D, 5.0) + 8694.0 * pow(D, 6.0) + 79453.0 * pow(D, 7.0)
134  + 792114.0 * pow(D, 8.0) + 7375573.0 * pow(D, 9.0) + 67884974.0 * pow(D, 10.0)
135  + 610875423.0 * pow(D, 11.0) + 5427275376.0 * pow(D, 12.0) + 47664215639.0 * pow(D, 13.0));
136  }
137  else {
138  ASSERT(false);
139  }
140  return pe;
141 }

Referenced by getFec1024QamBer(), getFec16QamBer(), getFec256QamBer(), getFec64QamBer(), getFecBpskBer(), and getFecQpskBer().

◆ get1024QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::get1024QamBer ( double  snr) const
protected
73 {
74  double z = std::sqrt(snr / (341.0 * 2.0));
75  double ber = 31.0 / 160.0 * 0.5 * erfc(z);
76  EV << "1024-Qam" << " snr=" << snr << " ber=" << ber;
77  return ber;
78 }

Referenced by getFec1024QamBer().

◆ get16QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::get16QamBer ( double  snr) const
protected
49 {
50  double z = sqrt(snr / (5.0 * 2.0));
51  double ber = 0.75 * 0.5 * erfc(z);
52  EV << "16-Qam" << " snr=" << snr << " ber=" << ber << "\n";
53  return ber;
54 }

Referenced by getFec16QamBer().

◆ get256QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::get256QamBer ( double  snr) const
protected
65 {
66  double z = std::sqrt(snr / (85.0 * 2.0));
67  double ber = 15.0 / 32.0 * 0.5 * erfc(z);
68  EV << "256-Qam" << " snr=" << snr << " ber=" << ber;
69  return ber;
70 }

Referenced by getFec256QamBer().

◆ get64QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::get64QamBer ( double  snr) const
protected
57 {
58  double z = sqrt(snr / (21.0 * 2.0));
59  double ber = 7.0 / 12.0 * 0.5 * erfc(z);
60  EV << "64-Qam" << " snr=" << snr << " ber=" << ber << "\n";
61  return ber;
62 }

Referenced by getFec64QamBer().

◆ getBpskBer()

double inet::physicallayer::Ieee80211NistErrorModel::getBpskBer ( double  snr) const
protected
33 {
34  double z = sqrt(snr);
35  double ber = 0.5 * erfc(z);
36  EV << "bpsk snr=" << snr << " ber=" << ber << "\n";
37  return ber;
38 }

Referenced by getFecBpskBer().

◆ getDataSuccessRate()

double inet::physicallayer::Ieee80211NistErrorModel::getDataSuccessRate ( const IIeee80211Mode mode,
unsigned int  bitLength,
double  snr 
) const
overrideprotectedvirtual

Implements inet::physicallayer::Ieee80211ErrorModelBase.

286 {
287  double successRate = 0;
288  if (auto ofdmMode = dynamic_cast<const Ieee80211OfdmMode *>(mode))
289  successRate = getOFDMAndERPOFDMChunkSuccessRate(ofdmMode->getDataMode()->getModulation()->getSubcarrierModulation(),
290  ofdmMode->getDataMode()->getCode()->getConvolutionalCode(),
291  bitLength + b(ofdmMode->getHeaderMode()->getServiceFieldLength()).get(),
292  snr);
293  else if (auto htMode = dynamic_cast<const Ieee80211HtMode *>(mode))
294  successRate = getOFDMAndERPOFDMChunkSuccessRate(htMode->getDataMode()->getModulation()->getSubcarrierModulation(),
295  htMode->getDataMode()->getCode()->getForwardErrorCorrection(),
296  //bitLength + b(htMode->getHeaderMode()->getHTLengthLength()).get(),
297  bitLength,
298  snr);
299  else if (auto vhtMode = dynamic_cast<const Ieee80211VhtMode *>(mode))
300  successRate = getOFDMAndERPOFDMChunkSuccessRate(vhtMode->getDataMode()->getModulation()->getSubcarrierModulation(),
301  vhtMode->getDataMode()->getCode()->getForwardErrorCorrection(),
302  //bitLength + b(vhtMode->getHeaderMode()->getHTLengthLength()).get(),
303  bitLength,
304  snr);
305  else if (auto dsssMode = dynamic_cast<const Ieee80211DsssMode *>(mode))
306  successRate = getDSSSAndHrDSSSChunkSuccessRate(dsssMode->getDataMode()->getNetBitrate(), bitLength, snr);
307  else if (auto hrDsssMode = dynamic_cast<const Ieee80211HrDsssMode *>(mode))
308  successRate = getDSSSAndHrDSSSChunkSuccessRate(hrDsssMode->getDataMode()->getNetBitrate(), bitLength, snr);
309  else
310  throw cRuntimeError("Unsupported 802.11 mode");
311  EV_DEBUG << "SNIR = " << snr << ", bit length = " << bitLength << ", data error rate = " << 1 - successRate << endl;
312  if (successRate >= 1)
313  successRate = 1;
314  return successRate;
315 }

◆ getDSSSAndHrDSSSChunkSuccessRate()

double inet::physicallayer::Ieee80211NistErrorModel::getDSSSAndHrDSSSChunkSuccessRate ( bps  bitrate,
unsigned int  bitLength,
double  snr 
) const
protectedvirtual
230 {
231  switch ((int)bitrate.get()) {
232  case 1000000:
233  return getDsssDbpskSuccessRate(bitLength, snr);
234  case 2000000:
235  return getDsssDqpskSuccessRate(bitLength, snr);
236  case 5500000:
237  return getDsssDqpskCck5_5SuccessRate(bitLength, snr);
238  case 11000000:
239  return getDsssDqpskCck11SuccessRate(bitLength, snr);
240  }
241  throw cRuntimeError("Unsupported bitrate");
242 }

Referenced by getDataSuccessRate(), and getHeaderSuccessRate().

◆ getFec1024QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFec1024QamBer ( double  snr,
uint64_t  nbits,
uint32_t  bValue 
) const
protected
180 {
181  double ber = get1024QamBer(snr);
182  if (ber == 0.0) {
183  return 1.0;
184  }
185  double pe = calculatePe(ber, bValue);
186  pe = math::minnan(pe, 1.0);
187  double pms = std::pow(1 - pe, nbits);
188  return pms;
189 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFec16QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFec16QamBer ( double  snr,
uint32_t  nbits,
uint32_t  bValue 
) const
protected
144 {
145  double ber = get16QamBer(snr);
146  if (ber == 0.0) {
147  return 1.0;
148  }
149  double pe = calculatePe(ber, bValue);
150  pe = math::minnan(pe, 1.0);
151  double pms = pow(1 - pe, (double)nbits);
152  return pms;
153 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFec256QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFec256QamBer ( double  snr,
uint64_t  nbits,
uint32_t  bValue 
) const
protected
168 {
169  double ber = get256QamBer(snr);
170  if (ber == 0.0) {
171  return 1.0;
172  }
173  double pe = calculatePe(ber, bValue);
174  pe = math::minnan(pe, 1.0);
175  double pms = std::pow(1 - pe, nbits);
176  return pms;
177 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFec64QamBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFec64QamBer ( double  snr,
uint32_t  nbits,
uint32_t  bValue 
) const
protected
156 {
157  double ber = get64QamBer(snr);
158  if (ber == 0.0) {
159  return 1.0;
160  }
161  double pe = calculatePe(ber, bValue);
162  pe = math::minnan(pe, 1.0);
163  double pms = pow(1 - pe, (double)nbits);
164  return pms;
165 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFecBpskBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFecBpskBer ( double  snr,
double  nbits,
uint32_t  bValue 
) const
protected
81 {
82  double ber = getBpskBer(snr);
83  if (ber == 0.0) {
84  return 1.0;
85  }
86  double pe = calculatePe(ber, bValue);
87  pe = math::minnan(pe, 1.0);
88  double pms = pow(1 - pe, nbits);
89  return pms;
90 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFecQpskBer()

double inet::physicallayer::Ieee80211NistErrorModel::getFecQpskBer ( double  snr,
double  nbits,
uint32_t  bValue 
) const
protected
93 {
94  double ber = getQpskBer(snr);
95  if (ber == 0.0) {
96  return 1.0;
97  }
98  double pe = calculatePe(ber, bValue);
99  pe = math::minnan(pe, 1.0);
100  double pms = pow(1 - pe, nbits);
101  return pms;
102 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getHeaderSuccessRate()

double inet::physicallayer::Ieee80211NistErrorModel::getHeaderSuccessRate ( const IIeee80211Mode mode,
unsigned int  headerBitLength,
double  snr 
) const
overrideprotectedvirtual

Implements inet::physicallayer::Ieee80211ErrorModelBase.

245 {
246  double successRate = 0;
247  if (auto ofdmMode = dynamic_cast<const Ieee80211OfdmMode *>(mode)) {
248  int chunkLength = bitLength - b(ofdmMode->getHeaderMode()->getServiceFieldLength()).get();
249  ASSERT(chunkLength == 24);
250  successRate = getOFDMAndERPOFDMChunkSuccessRate(ofdmMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
251  ofdmMode->getHeaderMode()->getCode()->getConvolutionalCode(),
252  chunkLength,
253  snr);
254  }
255  else if (auto htMode = dynamic_cast<const Ieee80211HtMode *>(mode)) {
256 // int chunkLength = bitLength - b(htMode->getHeaderMode()->getHTLengthLength()).get();
257 // ASSERT(chunkLength == 24);
258  int chunkLength = bitLength;
259  successRate = getOFDMAndERPOFDMChunkSuccessRate(htMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
260  htMode->getHeaderMode()->getCode()->getForwardErrorCorrection(),
261  chunkLength,
262  snr);
263  }
264  else if (auto vhtMode = dynamic_cast<const Ieee80211VhtMode *>(mode)) {
265 // int chunkLength = bitLength - b(vhtMode->getHeaderMode()->getHTLengthLength()).get();
266 // ASSERT(chunkLength == 24);
267  int chunkLength = bitLength;
268  successRate = getOFDMAndERPOFDMChunkSuccessRate(vhtMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
269  vhtMode->getHeaderMode()->getCode()->getForwardErrorCorrection(),
270  chunkLength,
271  snr);
272  }
273  else if (auto dsssMode = dynamic_cast<const Ieee80211DsssMode *>(mode))
274  successRate = getDSSSAndHrDSSSChunkSuccessRate(dsssMode->getHeaderMode()->getNetBitrate(), bitLength, snr);
275  else if (auto hrDsssMode = dynamic_cast<const Ieee80211HrDsssMode *>(mode))
276  successRate = getDSSSAndHrDSSSChunkSuccessRate(hrDsssMode->getHeaderMode()->getNetBitrate(), bitLength, snr);
277  else
278  throw cRuntimeError("Unsupported 802.11 mode");
279  EV_DEBUG << "SNIR = " << snr << ", bit length = " << bitLength << ", header error rate = " << 1 - successRate << endl;
280  if (successRate >= 1)
281  successRate = 1;
282  return successRate;
283 }

◆ getOFDMAndERPOFDMChunkSuccessRate()

double inet::physicallayer::Ieee80211NistErrorModel::getOFDMAndERPOFDMChunkSuccessRate ( const ApskModulationBase subcarrierModulation,
const ConvolutionalCode convolutionalCode,
unsigned int  bitLength,
double  snr 
) const
protectedvirtual
192 {
193  if (subcarrierModulation == &BpskModulation::singleton || subcarrierModulation == &QbpskModulation::singleton) {
194  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
195  return getFecBpskBer(snr, bitLength, 1);
196  return getFecBpskBer(snr, bitLength, 3);
197  }
198  else if (subcarrierModulation == &QpskModulation::singleton) {
199  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
200  return getFecQpskBer(snr, bitLength, 1);
201  return getFecQpskBer(snr, bitLength, 3);
202  }
203  else if (subcarrierModulation == &Qam16Modulation::singleton) {
204  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
205  return getFec16QamBer(snr, bitLength, 1);
206  return getFec16QamBer(snr, bitLength, 3);
207  }
208  else if (subcarrierModulation == &Qam64Modulation::singleton) {
209  if (convolutionalCode->getCodeRatePuncturingK() == 2 && convolutionalCode->getCodeRatePuncturingN() == 3)
210  return getFec64QamBer(snr, bitLength, 2);
211  else if (convolutionalCode->getCodeRatePuncturingK() == 5 && convolutionalCode->getCodeRatePuncturingN() == 6)
212  return getFec64QamBer(snr, bitLength, 2);
213  return getFec64QamBer(snr, bitLength, 3);
214  }
215  else if (subcarrierModulation == &Qam256Modulation::singleton) {
216  if (convolutionalCode->getCodeRatePuncturingK() == 5 && convolutionalCode->getCodeRatePuncturingN() == 6)
217  return getFec256QamBer(snr, bitLength, 5);
218  return getFec256QamBer(snr, bitLength, 3);
219  }
220  else if (subcarrierModulation == &Qam1024Modulation::singleton) {
221  if (convolutionalCode->getCodeRatePuncturingK() == 5 && convolutionalCode->getCodeRatePuncturingN() == 6)
222  return getFec1024QamBer(snr, bitLength, 5);
223  return getFec1024QamBer(snr, bitLength, 3);
224  }
225  else
226  throw cRuntimeError("Unknown modulation");
227 }

Referenced by getDataSuccessRate(), and getHeaderSuccessRate().

◆ getQpskBer()

double inet::physicallayer::Ieee80211NistErrorModel::getQpskBer ( double  snr) const
protected
41 {
42  double z = sqrt(snr / 2.0);
43  double ber = 0.5 * erfc(z);
44  EV << "qpsk snr=" << snr << " ber=" << ber << "\n";
45  return ber;
46 }

Referenced by getFecQpskBer().

◆ printToStream()

virtual std::ostream& inet::physicallayer::Ieee80211NistErrorModel::printToStream ( std::ostream &  stream,
int  level,
int  evFlags = 0 
) const
inlineoverridevirtual

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

Reimplemented in inet::physicallayer::Ieee80211OfdmErrorModel.

51 { return stream << "Ieee80211NistErrorModel"; }

The documentation for this class was generated from the following files:
inet::physicallayer::QbpskModulation::singleton
static const QbpskModulation singleton
Definition: QbpskModulation.h:24
inet::physicallayer::Ieee80211NistErrorModel::getFec16QamBer
double getFec16QamBer(double snr, uint32_t nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:143
inet::physicallayer::Ieee80211ErrorModelBase::getDsssDqpskCck11SuccessRate
virtual double getDsssDqpskCck11SuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:98
inet::physicallayer::Ieee80211NistErrorModel::getFec256QamBer
double getFec256QamBer(double snr, uint64_t nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:167
inet::physicallayer::Ieee80211NistErrorModel::getBpskBer
double getBpskBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:32
inet::physicallayer::Ieee80211NistErrorModel::get16QamBer
double get16QamBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:48
inet::physicallayer::Ieee80211ErrorModelBase::getDsssDqpskCck5_5SuccessRate
virtual double getDsssDqpskCck5_5SuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:81
inet::physicallayer::QpskModulation::singleton
static const QpskModulation singleton
Definition: QpskModulation.h:25
inet::units::sqrt
value< Value, pow< Unit, 1, 2 > > sqrt(const value< Value, Unit > &a)
Definition: Units.h:272
inet::physicallayer::Ieee80211NistErrorModel::calculatePe
double calculatePe(double p, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:104
inet::physicallayer::Ieee80211NistErrorModel::getQpskBer
double getQpskBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:40
inet::physicallayer::BpskModulation::singleton
static const BpskModulation singleton
Definition: BpskModulation.h:25
inet::physicallayer::Ieee80211NistErrorModel::get64QamBer
double get64QamBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:56
inet::physicallayer::Ieee80211NistErrorModel::getFecQpskBer
double getFecQpskBer(double snr, double nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:92
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::physicallayer::Qam64Modulation::singleton
static const Qam64Modulation singleton
Definition: Qam64Modulation.h:26
inet::physicallayer::Ieee80211NistErrorModel::getFec64QamBer
double getFec64QamBer(double snr, uint32_t nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:155
inet::physicallayer::Ieee80211ErrorModelBase::getDsssDbpskSuccessRate
virtual double getDsssDbpskSuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:67
inet::physicallayer::Ieee80211NistErrorModel::getFecBpskBer
double getFecBpskBer(double snr, double nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:80
inet::physicallayer::Ieee80211NistErrorModel::getOFDMAndERPOFDMChunkSuccessRate
virtual double getOFDMAndERPOFDMChunkSuccessRate(const ApskModulationBase *subcarrierModulation, const ConvolutionalCode *convolutionalCode, unsigned int bitLength, double snr) const
Definition: Ieee80211NistErrorModel.cc:191
inet::physicallayer::Qam1024Modulation::singleton
static const Qam1024Modulation singleton
Definition: Qam1024Modulation.h:26
inet::math::minnan
const T minnan(const T &a, const T &b)
This function properly and symmetrically handles NaNs in contrast with std::min and std::fmin.
Definition: INETMath.h:216
inet::physicallayer::Ieee80211NistErrorModel::get256QamBer
double get256QamBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:64
inet::physicallayer::Ieee80211NistErrorModel::getDSSSAndHrDSSSChunkSuccessRate
virtual double getDSSSAndHrDSSSChunkSuccessRate(bps bitrate, unsigned int bitLength, double snr) const
Definition: Ieee80211NistErrorModel.cc:229
inet::physicallayer::Qam16Modulation::singleton
static const Qam16Modulation singleton
Definition: Qam16Modulation.h:26
inet::physicallayer::Ieee80211NistErrorModel::get1024QamBer
double get1024QamBer(double snr) const
Definition: Ieee80211NistErrorModel.cc:72
inet::physicallayer::Ieee80211ErrorModelBase::getDsssDqpskSuccessRate
virtual double getDsssDqpskSuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:74
inet::physicallayer::Qam256Modulation::singleton
static const Qam256Modulation singleton
Definition: Qam256Modulation.h:26
inet::physicallayer::Ieee80211NistErrorModel::getFec1024QamBer
double getFec1024QamBer(double snr, uint64_t nbits, uint32_t bValue) const
Definition: Ieee80211NistErrorModel.cc:179