38 .AddConstructor<YansErrorRateModel> ()
50 return std::log (val) / std::log (2.0);
55 double EbNo = snr * signalSpread / phyRate;
56 double z = std::sqrt (EbNo);
57 double ber = 0.5 * erfc (z);
64 double EbNo = snr * signalSpread / phyRate;
65 double z = std::sqrt ((1.5 *
Log2 (m) * EbNo) / (m - 1.0));
66 double z1 = ((1.0 - 1.0 / std::sqrt (m)) * erfc (z));
67 double z2 = 1 - std::pow ((1 - z1), 2.0);
68 double ber = z2 /
Log2 (m);
69 NS_LOG_INFO (
"Qam m=" << m <<
" rate=" << phyRate <<
" snr=" << snr <<
" ber=" << ber);
86 double retval =
Factorial (n) / (
Factorial (k) *
Factorial (n - k)) * std::pow (p, static_cast<double> (k)) * std::pow (1 - p, static_cast<double> (n - k));
93 unsigned int dstart = (d + 1) / 2;
94 unsigned int dend = d;
97 for (
unsigned int i = dstart; i < dend; i++)
107 unsigned int dstart = d / 2 + 1;
108 unsigned int dend = d;
111 for (
unsigned int i = dstart; i < dend; i++)
115 pd += 0.5 *
Binomial (d / 2, ber, d);
137 uint32_t signalSpread, uint32_t phyRate,
138 uint32_t dFree, uint32_t adFree)
const
140 double ber =
GetBpskBer (snr, signalSpread, phyRate);
146 double pmu = adFree * pd;
147 pmu = std::min (pmu, 1.0);
148 double pms = std::pow (1 - pmu, nbits);
154 uint32_t signalSpread,
156 uint32_t m, uint32_t dFree,
157 uint32_t adFree, uint32_t adFreePlusOne)
const
159 double ber =
GetQamBer (snr, m, signalSpread, phyRate);
166 double pmu = adFree * pd;
169 pmu += adFreePlusOne * pd;
170 pmu = std::min (pmu, 1.0);
171 double pms = std::pow (1 - pmu, static_cast<double> (nbits));
static TypeId GetTypeId(void)
double CalculatePdEven(double ber, unsigned int d) const
static double GetDsssDqpskCck11SuccessRate(double sinr, uint32_t nbits)
double CalculatePd(double ber, unsigned int d) const
double GetFecBpskBer(double snr, double nbits, uint32_t signalSpread, uint32_t phyRate, uint32_t dFree, uint32_t adFree) const
enum WifiModulationClass GetModulationClass() const
#define NS_ASSERT(condition)
double CalculatePdOdd(double ber, unsigned int d) const
double GetQamBer(double snr, unsigned int m, uint32_t signalSpread, uint32_t phyRate) const
static double GetDsssDqpskSuccessRate(double sinr, uint32_t nbits)
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 GetFecQamBer(double snr, uint32_t nbits, uint32_t signalSpread, uint32_t phyRate, uint32_t m, uint32_t dfree, uint32_t adFree, uint32_t adFreePlusOne) const
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
enum WifiCodeRate GetCodeRate(void) const
virtual double GetChunkSuccessRate(WifiMode mode, double snr, uint32_t nbits) const
uint32_t GetBandwidth(void) const
NS_LOG_COMPONENT_DEFINE("YansErrorRateModel")
uint8_t GetConstellationSize(void) const
uint64_t GetPhyRate(void) const
double Log2(double val) const
uint32_t Factorial(uint32_t k) const
static double GetDsssDqpskCck5_5SuccessRate(double sinr, uint32_t nbits)
double GetBpskBer(double snr, uint32_t signalSpread, uint32_t phyRate) const
double Binomial(uint32_t k, double p, uint32_t n) const
static double GetDsssDbpskSuccessRate(double sinr, uint32_t nbits)
a unique identifier for an interface.
uint64_t GetDataRate(void) const
TypeId SetParent(TypeId tid)