# HG changeset patch # Parent b625b10e6b954a523280e796b15e7eba476c0083 # User Tommaso Pecorella # Date 1393802375 -3600 Bug 1276 - optimize NistErrorRateModel diff --git a/src/wifi/model/nist-error-rate-model.cc b/src/wifi/model/nist-error-rate-model.cc --- a/src/wifi/model/nist-error-rate-model.cc +++ b/src/wifi/model/nist-error-rate-model.cc @@ -77,7 +77,7 @@ return ber; } double -NistErrorRateModel::GetFecBpskBer (double snr, double nbits, +NistErrorRateModel::GetFecBpskBer (double snr, uint32_t nbits, uint32_t bValue) const { double ber = GetBpskBer (snr); @@ -87,11 +87,11 @@ } double pe = CalculatePe (ber, bValue); pe = std::min (pe, 1.0); - double pms = std::pow (1 - pe, nbits); + double pms = std::pow (1 - pe, static_cast (nbits)); return pms; } double -NistErrorRateModel::GetFecQpskBer (double snr, double nbits, +NistErrorRateModel::GetFecQpskBer (double snr, uint32_t nbits, uint32_t bValue) const { double ber = GetQpskBer (snr); @@ -101,7 +101,7 @@ } double pe = CalculatePe (ber, bValue); pe = std::min (pe, 1.0); - double pms = std::pow (1 - pe, nbits); + double pms = std::pow (1 - pe, static_cast (nbits)); return pms; } double @@ -112,31 +112,31 @@ if (bValue == 1) { // code rate 1/2, use table 3.1.1 - pe = 0.5 * ( 36.0 * std::pow (D, 10.0) - + 211.0 * std::pow (D, 12.0) - + 1404.0 * std::pow (D, 14.0) - + 11633.0 * std::pow (D, 16.0) - + 77433.0 * std::pow (D, 18.0) - + 502690.0 * std::pow (D, 20.0) - + 3322763.0 * std::pow (D, 22.0) - + 21292910.0 * std::pow (D, 24.0) - + 134365911.0 * std::pow (D, 26.0) + pe = 0.5 * ( 36.0 * std::pow (D, 10) + + 211.0 * std::pow (D, 12) + + 1404.0 * std::pow (D, 14) + + 11633.0 * std::pow (D, 16) + + 77433.0 * std::pow (D, 18) + + 502690.0 * std::pow (D, 20) + + 3322763.0 * std::pow (D, 22) + + 21292910.0 * std::pow (D, 24) + + 134365911.0 * std::pow (D, 26) ); } else if (bValue == 2) { // code rate 2/3, use table 3.1.2 pe = 1.0 / (2.0 * bValue) * - ( 3.0 * std::pow (D, 6.0) - + 70.0 * std::pow (D, 7.0) - + 285.0 * std::pow (D, 8.0) - + 1276.0 * std::pow (D, 9.0) - + 6160.0 * std::pow (D, 10.0) - + 27128.0 * std::pow (D, 11.0) - + 117019.0 * std::pow (D, 12.0) - + 498860.0 * std::pow (D, 13.0) - + 2103891.0 * std::pow (D, 14.0) - + 8784123.0 * std::pow (D, 15.0) + ( 3.0 * std::pow (D, 6) + + 70.0 * std::pow (D, 7) + + 285.0 * std::pow (D, 8) + + 1276.0 * std::pow (D, 9) + + 6160.0 * std::pow (D, 10) + + 27128.0 * std::pow (D, 11) + + 117019.0 * std::pow (D, 12) + + 498860.0 * std::pow (D, 13) + + 2103891.0 * std::pow (D, 14) + + 8784123.0 * std::pow (D, 15) ); } else if (bValue == 3) diff --git a/src/wifi/model/nist-error-rate-model.h b/src/wifi/model/nist-error-rate-model.h --- a/src/wifi/model/nist-error-rate-model.h +++ b/src/wifi/model/nist-error-rate-model.h @@ -89,7 +89,7 @@ * \param bValue * \return BER of BPSK at the given SNR after applying FEC */ - double GetFecBpskBer (double snr, double nbits, + double GetFecBpskBer (double snr, uint32_t nbits, uint32_t bValue) const; /** * Return BER of QPSK at the given SNR after applying FEC. @@ -99,7 +99,7 @@ * \param bValue * \return BER of QPSK at the given SNR after applying FEC */ - double GetFecQpskBer (double snr, double nbits, + double GetFecQpskBer (double snr, uint32_t nbits, uint32_t bValue) const; /** * Return BER of QAM16 at the given SNR after applying FEC. diff --git a/src/wifi/model/yans-error-rate-model.cc b/src/wifi/model/yans-error-rate-model.cc --- a/src/wifi/model/yans-error-rate-model.cc +++ b/src/wifi/model/yans-error-rate-model.cc @@ -65,7 +65,7 @@ double EbNo = snr * signalSpread / phyRate; double z = std::sqrt ((1.5 * Log2 (m) * EbNo) / (m - 1.0)); double z1 = ((1.0 - 1.0 / std::sqrt (m)) * erfc (z)); - double z2 = 1 - std::pow ((1 - z1), 2.0); + double z2 = 1 - std::pow ((1 - z1), 2); double ber = z2 / Log2 (m); NS_LOG_INFO ("Qam m=" << m << " rate=" << phyRate << " snr=" << snr << " ber=" << ber); return ber;