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

Model the error rate for different modulations. More...

#include <Ieee80211YansErrorModel.h>

Inheritance diagram for inet::physicallayer::Ieee80211YansErrorModel:
inet::physicallayer::Ieee80211ErrorModelBase inet::physicallayer::ErrorModelBase inet::physicallayer::IErrorModel inet::IPrintableObject

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 getBpskBer (double snr, Hz signalSpread, bps phyRate) const
 
double getQamBer (double snr, unsigned int m, Hz signalSpread, bps phyRate) const
 
uint32_t factorial (uint32_t k) const
 
double binomialCoefficient (uint32_t k, double p, uint32_t n) const
 
double calculatePdOdd (double ber, unsigned int d) const
 
double calculatePdEven (double ber, unsigned int d) const
 
double calculatePd (double ber, unsigned int d) const
 
double getFecBpskBer (double snr, double nbits, Hz signalSpread, bps phyRate, uint32_t dFree, uint32_t adFree) const
 
double getFecQamBer (double snr, uint32_t nbits, Hz signalSpread, bps phyRate, uint32_t m, uint32_t dfree, uint32_t adFree, uint32_t adFreePlusOne) const
 
virtual double getOFDMAndERPOFDMChunkSuccessRate (const ApskModulationBase *subcarrierModulation, const ConvolutionalCode *convolutionalCode, unsigned int bitLength, bps gorssBitrate, Hz bandwidth, double snr) const
 
virtual double getDSSSAndHrDSSSChunkSuccessRate (bps bitrate, unsigned int bitLength, double snr) const
 
virtual double getHeaderSuccessRate (const IIeee80211Mode *mode, unsigned int bitLength, 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

Model the error rate for different modulations.

A packet of interest (e.g., a packet can potentially be received by the MAC) is divided into chunks. Each chunk is related to an start/end receiving event. For each chunk, it calculates the ratio (SINR) between received power of packet of interest and summation of noise and interfering power of all the other incoming packets. Then, it will calculate the success rate of the chunk based on BER of the modulation. The success reception rate of the packet is derived from the success rate of all chunks.

The 802.11b modulations:

  • 1 Mbps mode is based on DBPSK. BER is from equation 5.2-69 from John G. Proakis Digitial Communications, 2001 edition
  • 2 Mbps model is based on DQPSK. Equation 8 from "Tight bounds and accurate approximations for dqpsk transmission bit error rate", G. Ferrari and G.E. Corazza ELECTRONICS LETTERS, 40(20):1284-1285, September 2004
  • 5.5 Mbps and 11 Mbps are based on equations (18) and (17) from "Properties and performance of the ieee 802.11b complementarycode-key signal sets", Michael B. Pursley and Thomas C. Royster. IEEE TRANSACTIONS ON COMMUNICATIONS, 57(2):440-449, February 2009.
  • More detailed description and validation can be found in http://www.nsnam.org/~pei/80211b.pdf

Member Function Documentation

◆ binomialCoefficient()

double inet::physicallayer::Ieee80211YansErrorModel::binomialCoefficient ( uint32_t  k,
double  p,
uint32_t  n 
) const
protected
63 {
64  double retval = factorial(n) / (factorial(k) * factorial(n - k)) * pow(p, (int)k) * pow(1 - p, (int)(n - k));
65  return retval;
66 }

Referenced by calculatePdEven(), and calculatePdOdd().

◆ calculatePd()

double inet::physicallayer::Ieee80211YansErrorModel::calculatePd ( double  ber,
unsigned int  d 
) const
protected
97 {
98  double pd;
99  if ((d % 2) == 0) {
100  pd = calculatePdEven(ber, d);
101  }
102  else {
103  pd = calculatePdOdd(ber, d);
104  }
105  return pd;
106 }

Referenced by getFecBpskBer(), and getFecQamBer().

◆ calculatePdEven()

double inet::physicallayer::Ieee80211YansErrorModel::calculatePdEven ( double  ber,
unsigned int  d 
) const
protected
82 {
83  ASSERT((d % 2) == 0);
84  unsigned int dstart = d / 2 + 1;
85  unsigned int dend = d;
86  double pd = 0;
87 
88  for (unsigned int i = dstart; i < dend; i++) {
89  pd += binomialCoefficient(i, ber, d);
90  }
91  pd += 0.5 * binomialCoefficient(d / 2, ber, d);
92 
93  return pd;
94 }

Referenced by calculatePd().

◆ calculatePdOdd()

double inet::physicallayer::Ieee80211YansErrorModel::calculatePdOdd ( double  ber,
unsigned int  d 
) const
protected
69 {
70  ASSERT((d % 2) == 1);
71  unsigned int dstart = (d + 1) / 2;
72  unsigned int dend = d;
73  double pd = 0;
74 
75  for (unsigned int i = dstart; i < dend; i++) {
76  pd += binomialCoefficient(i, ber, d);
77  }
78  return pd;
79 }

Referenced by calculatePd().

◆ factorial()

uint32_t inet::physicallayer::Ieee80211YansErrorModel::factorial ( uint32_t  k) const
protected
53 {
54  uint32_t fact = 1;
55  while (k > 0) {
56  fact *= k;
57  k--;
58  }
59  return fact;
60 }

Referenced by binomialCoefficient().

◆ getBpskBer()

double inet::physicallayer::Ieee80211YansErrorModel::getBpskBer ( double  snr,
Hz  signalSpread,
bps  phyRate 
) const
protected
33 {
34  double EbNo = snr * signalSpread.get() / phyRate.get();
35  double z = sqrt(EbNo);
36  double ber = 0.5 * erfc(z);
37  EV << "bpsk snr=" << snr << " ber=" << ber << endl;
38  return ber;
39 }

Referenced by getFecBpskBer().

◆ getDataSuccessRate()

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

Implements inet::physicallayer::Ieee80211ErrorModelBase.

239 {
240  double successRate = 0;
241  if (auto ofdmMode = dynamic_cast<const Ieee80211OfdmMode *>(mode))
242  successRate = getOFDMAndERPOFDMChunkSuccessRate(ofdmMode->getDataMode()->getModulation()->getSubcarrierModulation(),
243  ofdmMode->getDataMode()->getCode()->getConvolutionalCode(),
244  bitLength + b(ofdmMode->getHeaderMode()->getServiceFieldLength()).get(),
245  ofdmMode->getDataMode()->getGrossBitrate(),
246  ofdmMode->getHeaderMode()->getBandwidth(),
247  snr);
248  else if (auto htMode = dynamic_cast<const Ieee80211HtMode *>(mode))
249  successRate = getOFDMAndERPOFDMChunkSuccessRate(htMode->getDataMode()->getModulation()->getSubcarrierModulation(),
250  htMode->getDataMode()->getCode()->getForwardErrorCorrection(),
251  //bitLength + b(htMode->getHeaderMode()->getHTLengthLength()).get(),
252  bitLength,
253  htMode->getDataMode()->getGrossBitrate(),
254  htMode->getDataMode()->getBandwidth(),
255  snr);
256  else if (auto vhtMode = dynamic_cast<const Ieee80211VhtMode *>(mode))
257  successRate = getOFDMAndERPOFDMChunkSuccessRate(vhtMode->getDataMode()->getModulation()->getSubcarrierModulation(),
258  vhtMode->getDataMode()->getCode()->getForwardErrorCorrection(),
259  //bitLength + b(vhtMode->getHeaderMode()->getHTLengthLength()).get(),
260  bitLength,
261  vhtMode->getDataMode()->getGrossBitrate(),
262  vhtMode->getDataMode()->getBandwidth(),
263  snr);
264  else if (auto dsssMode = dynamic_cast<const Ieee80211DsssMode *>(mode))
265  successRate = getDSSSAndHrDSSSChunkSuccessRate(dsssMode->getDataMode()->getNetBitrate(), bitLength, snr);
266  else if (auto hrDsssMode = dynamic_cast<const Ieee80211HrDsssMode *>(mode))
267  successRate = getDSSSAndHrDSSSChunkSuccessRate(hrDsssMode->getDataMode()->getNetBitrate(), bitLength, snr);
268  else
269  throw cRuntimeError("Unsupported 802.11 mode");
270  EV_DEBUG << "SNIR = " << snr << ", data bit length = " << bitLength << ", data error rate = " << 1 - successRate << endl;
271  if (successRate >= 1)
272  successRate = 1;
273  return successRate;
274 }

◆ getDSSSAndHrDSSSChunkSuccessRate()

double inet::physicallayer::Ieee80211YansErrorModel::getDSSSAndHrDSSSChunkSuccessRate ( bps  bitrate,
unsigned int  bitLength,
double  snr 
) const
protectedvirtual
177 {
178  switch ((int)bitrate.get()) {
179  case 1000000:
180  return getDsssDbpskSuccessRate(bitLength, snr);
181  case 2000000:
182  return getDsssDqpskSuccessRate(bitLength, snr);
183  case 5500000:
184  return getDsssDqpskCck5_5SuccessRate(bitLength, snr);
185  case 11000000:
186  return getDsssDqpskCck11SuccessRate(bitLength, snr);
187  }
188  throw cRuntimeError("Unsupported bitrate");
189 }

Referenced by getDataSuccessRate(), and getHeaderSuccessRate().

◆ getFecBpskBer()

double inet::physicallayer::Ieee80211YansErrorModel::getFecBpskBer ( double  snr,
double  nbits,
Hz  signalSpread,
bps  phyRate,
uint32_t  dFree,
uint32_t  adFree 
) const
protected
109 {
110  double ber = getBpskBer(snr, signalSpread, phyRate);
111  if (ber == 0.0) {
112  return 1.0;
113  }
114  double pd = calculatePd(ber, dFree);
115  double pmu = adFree * pd;
116  pmu = math::minnan(pmu, 1.0);
117  double pms = pow(1 - pmu, nbits);
118  return pms;
119 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getFecQamBer()

double inet::physicallayer::Ieee80211YansErrorModel::getFecQamBer ( double  snr,
uint32_t  nbits,
Hz  signalSpread,
bps  phyRate,
uint32_t  m,
uint32_t  dfree,
uint32_t  adFree,
uint32_t  adFreePlusOne 
) const
protected
122 {
123  double ber = getQamBer(snr, m, signalSpread, phyRate);
124  if (ber == 0.0) {
125  return 1.0;
126  }
127  /* first term */
128  double pd = calculatePd(ber, dFree);
129  double pmu = adFree * pd;
130  /* second term */
131  pd = calculatePd(ber, dFree + 1);
132  pmu += adFreePlusOne * pd;
133  pmu = math::minnan(pmu, 1.0);
134  double pms = pow(1 - pmu, (int)nbits);
135  return pms;
136 }

Referenced by getOFDMAndERPOFDMChunkSuccessRate().

◆ getHeaderSuccessRate()

double inet::physicallayer::Ieee80211YansErrorModel::getHeaderSuccessRate ( const IIeee80211Mode mode,
unsigned int  bitLength,
double  snr 
) const
overrideprotectedvirtual

Implements inet::physicallayer::Ieee80211ErrorModelBase.

192 {
193  double successRate = 0;
194  if (auto ofdmMode = dynamic_cast<const Ieee80211OfdmMode *>(mode)) {
195  int chunkLength = bitLength - b(ofdmMode->getHeaderMode()->getServiceFieldLength()).get();
196  ASSERT(chunkLength == 24);
197  successRate = getOFDMAndERPOFDMChunkSuccessRate(ofdmMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
198  ofdmMode->getHeaderMode()->getCode()->getConvolutionalCode(),
199  chunkLength,
200  ofdmMode->getHeaderMode()->getGrossBitrate(),
201  ofdmMode->getHeaderMode()->getBandwidth(),
202  snr);
203  }
204  else if (auto htMode = dynamic_cast<const Ieee80211HtMode *>(mode)) {
205 // int chunkLength = bitLength - b(htMode->getHeaderMode()->getHTLengthLength()).get();
206 // ASSERT(chunkLength == 24);
207  int chunkLength = bitLength;
208  successRate = getOFDMAndERPOFDMChunkSuccessRate(htMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
209  htMode->getHeaderMode()->getCode()->getForwardErrorCorrection(),
210  chunkLength,
211  htMode->getHeaderMode()->getGrossBitrate(),
212  htMode->getHeaderMode()->getBandwidth(),
213  snr);
214  }
215  else if (auto vhtMode = dynamic_cast<const Ieee80211VhtMode *>(mode)) {
216 // int chunkLength = bitLength - b(vhtMode->getHeaderMode()->getHTLengthLength()).get();
217 // ASSERT(chunkLength == 24);
218  int chunkLength = bitLength;
219  successRate = getOFDMAndERPOFDMChunkSuccessRate(vhtMode->getHeaderMode()->getModulation()->getSubcarrierModulation(),
220  vhtMode->getHeaderMode()->getCode()->getForwardErrorCorrection(),
221  chunkLength,
222  vhtMode->getHeaderMode()->getGrossBitrate(),
223  vhtMode->getHeaderMode()->getBandwidth(),
224  snr);
225  }
226  else if (auto dsssMode = dynamic_cast<const Ieee80211DsssMode *>(mode))
227  successRate = getDSSSAndHrDSSSChunkSuccessRate(dsssMode->getHeaderMode()->getNetBitrate(), bitLength, snr);
228  else if (auto hrDsssMode = dynamic_cast<const Ieee80211HrDsssMode *>(mode))
229  successRate = getDSSSAndHrDSSSChunkSuccessRate(hrDsssMode->getHeaderMode()->getNetBitrate(), bitLength, snr);
230  else
231  throw cRuntimeError("Unsupported 802.11 mode");
232  EV_DEBUG << "SNIR = " << snr << ", header bit length = " << bitLength << ", header error rate = " << 1 - successRate << endl;
233  if (successRate >= 1)
234  successRate = 1;
235  return successRate;
236 }

◆ getOFDMAndERPOFDMChunkSuccessRate()

double inet::physicallayer::Ieee80211YansErrorModel::getOFDMAndERPOFDMChunkSuccessRate ( const ApskModulationBase subcarrierModulation,
const ConvolutionalCode convolutionalCode,
unsigned int  bitLength,
bps  gorssBitrate,
Hz  bandwidth,
double  snr 
) const
protectedvirtual
139 {
140  if (subcarrierModulation == &BpskModulation::singleton || subcarrierModulation == &QbpskModulation::singleton) {
141  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
142  return getFecBpskBer(snr, bitLength, bandwidth, grossBitrate, 10, 11);
143  else
144  return getFecBpskBer(snr, bitLength, bandwidth, grossBitrate, 5, 8);
145  }
146  else if (subcarrierModulation == &QpskModulation::singleton) {
147  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
148  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 4, 10, 11, 0);
149  else
150  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 4, 5, 8, 31);
151  }
152  else if (subcarrierModulation == &Qam16Modulation::singleton) {
153  if (convolutionalCode->getCodeRatePuncturingK() == 1 && convolutionalCode->getCodeRatePuncturingN() == 2)
154  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 16, 10, 11, 0);
155  else
156  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 16, 5, 8, 31);
157  }
158  else if (subcarrierModulation == &Qam64Modulation::singleton) {
159  if (convolutionalCode->getCodeRatePuncturingK() == 2 && convolutionalCode->getCodeRatePuncturingN() == 3)
160  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 64, 6, 1, 16);
161  else if (convolutionalCode->getCodeRatePuncturingK() == 5 && convolutionalCode->getCodeRatePuncturingN() == 6)
162  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 64, 4, 14, 69);
163  else
164  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 64, 5, 8, 31);
165  }
166  else if (subcarrierModulation == &Qam256Modulation::singleton) {
167  if (convolutionalCode->getCodeRatePuncturingK() == 5 && convolutionalCode->getCodeRatePuncturingN() == 6)
168  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 256, 4, 14, 69);
169  else
170  return getFecQamBer(snr, bitLength, bandwidth, grossBitrate, 256, 5, 8, 31);
171  }
172  else
173  throw cRuntimeError("Unknown modulation");
174 }

Referenced by getDataSuccessRate(), and getHeaderSuccessRate().

◆ getQamBer()

double inet::physicallayer::Ieee80211YansErrorModel::getQamBer ( double  snr,
unsigned int  m,
Hz  signalSpread,
bps  phyRate 
) const
protected
42 {
43  double EbNo = snr * signalSpread.get() / phyRate.get();
44  double z = sqrt((1.5 * log2(m) * EbNo) / (m - 1.0));
45  double z1 = ((1.0 - 1.0 / sqrt((double)m)) * erfc(z));
46  double z2 = 1 - pow((1 - z1), 2.0);
47  double ber = z2 / log2(m);
48  EV << "Qam m=" << m << " rate=" << phyRate << " snr=" << snr << " ber=" << ber << endl;
49  return ber;
50 }

Referenced by getFecQamBer().

◆ printToStream()

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

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

66 { return stream << "Ieee80211YansErrorModel"; }

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::Ieee80211ErrorModelBase::getDsssDqpskCck11SuccessRate
virtual double getDsssDqpskCck11SuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:98
inet::physicallayer::Ieee80211YansErrorModel::getQamBer
double getQamBer(double snr, unsigned int m, Hz signalSpread, bps phyRate) const
Definition: Ieee80211YansErrorModel.cc:41
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::physicallayer::Ieee80211YansErrorModel::calculatePd
double calculatePd(double ber, unsigned int d) const
Definition: Ieee80211YansErrorModel.cc:96
inet::units::sqrt
value< Value, pow< Unit, 1, 2 > > sqrt(const value< Value, Unit > &a)
Definition: Units.h:272
inet::physicallayer::Ieee80211YansErrorModel::calculatePdOdd
double calculatePdOdd(double ber, unsigned int d) const
Definition: Ieee80211YansErrorModel.cc:68
inet::physicallayer::BpskModulation::singleton
static const BpskModulation singleton
Definition: BpskModulation.h:25
inet::physicallayer::Ieee80211YansErrorModel::factorial
uint32_t factorial(uint32_t k) const
Definition: Ieee80211YansErrorModel.cc:52
inet::physicallayer::Ieee80211YansErrorModel::calculatePdEven
double calculatePdEven(double ber, unsigned int d) const
Definition: Ieee80211YansErrorModel.cc:81
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::Ieee80211ErrorModelBase::getDsssDbpskSuccessRate
virtual double getDsssDbpskSuccessRate(unsigned int bitLength, double snir) const
Definition: Ieee80211ErrorModelBase.cc:67
inet::physicallayer::k
const double k
Definition: Qam1024Modulation.cc:14
inet::physicallayer::Ieee80211YansErrorModel::getDSSSAndHrDSSSChunkSuccessRate
virtual double getDSSSAndHrDSSSChunkSuccessRate(bps bitrate, unsigned int bitLength, double snr) const
Definition: Ieee80211YansErrorModel.cc:176
inet::physicallayer::Ieee80211YansErrorModel::getFecQamBer
double getFecQamBer(double snr, uint32_t nbits, Hz signalSpread, bps phyRate, uint32_t m, uint32_t dfree, uint32_t adFree, uint32_t adFreePlusOne) const
Definition: Ieee80211YansErrorModel.cc:121
inet::physicallayer::Ieee80211YansErrorModel::getFecBpskBer
double getFecBpskBer(double snr, double nbits, Hz signalSpread, bps phyRate, uint32_t dFree, uint32_t adFree) const
Definition: Ieee80211YansErrorModel.cc:108
inet::physicallayer::Ieee80211YansErrorModel::getBpskBer
double getBpskBer(double snr, Hz signalSpread, bps phyRate) const
Definition: Ieee80211YansErrorModel.cc:32
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::Ieee80211YansErrorModel::binomialCoefficient
double binomialCoefficient(uint32_t k, double p, uint32_t n) const
Definition: Ieee80211YansErrorModel.cc:62
inet::units::values::m
value< double, units::m > m
Definition: Units.h:1233
inet::physicallayer::Qam16Modulation::singleton
static const Qam16Modulation singleton
Definition: Qam16Modulation.h:26
inet::physicallayer::Ieee80211YansErrorModel::getOFDMAndERPOFDMChunkSuccessRate
virtual double getOFDMAndERPOFDMChunkSuccessRate(const ApskModulationBase *subcarrierModulation, const ConvolutionalCode *convolutionalCode, unsigned int bitLength, bps gorssBitrate, Hz bandwidth, double snr) const
Definition: Ieee80211YansErrorModel.cc:138
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