24 #include "ns3/nist-error-rate-model.h" 25 #include "ns3/yans-error-rate-model.h" 26 #include "ns3/dsss-error-rate-model.h" 27 #include "ns3/wifi-phy.h" 28 #include "ns3/wifi-utils.h" 29 #include "ns3/table-based-error-rate-model.h" 40 double noisePowerDbw = -100.5522786 + 7;
42 double sinrDb = rssDbw - noisePowerDbw;
44 return pow (10.0, sinrDb / 10.0);
60 virtual void DoRun (
void);
64 :
TestCase (
"WifiErrorRateModel test case DSSS")
76 uint64_t size = (1024 + 40 + 14) * 8;
81 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-105.0), size);
83 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-100.0), size);
85 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-99.0), size);
87 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-98.0), size);
89 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-97.0), size);
91 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-96.0), size);
93 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-95.0), size);
95 value = DsssErrorRateModel::GetDsssDbpskSuccessRate (
FromRss (-90.0), size);
100 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-96.0), size);
102 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-95.0), size);
104 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-94.0), size);
106 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-93.0), size);
108 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-92.0), size);
110 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-91.0), size);
112 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-90.0), size);
114 value = DsssErrorRateModel::GetDsssDqpskSuccessRate (
FromRss (-89.0), size);
119 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-94.0), size);
121 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-93.0), size);
123 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-92.0), size);
125 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-91.0), size);
127 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-90.0), size);
129 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-89.0), size);
131 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-88.0), size);
133 value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (
FromRss (-87.0), size);
137 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-91.0), size);
139 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-90.0), size);
141 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-89.0), size);
143 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-88.0), size);
145 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-87.0), size);
147 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-86.0), size);
149 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-85.0), size);
151 value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (
FromRss (-84.0), size);
169 virtual void DoRun (
void);
173 :
TestCase (
"WifiErrorRateModel test case NIST")
184 uint32_t frameSize = 2000;
301 using InterferenceHelper::InterferenceHelper;
302 using InterferenceHelper::CalculateChunkSuccessRate;
303 using InterferenceHelper::CalculateSnr;
319 virtual void DoRun (
void);
323 :
TestCase (
"WifiErrorRateModel test case MIMO")
336 WifiMode mode = WifiPhy::GetHtMcs0 ();
350 double initialSnr = 4.0;
356 double sisoChunkSuccess = chunkSuccess;
463 {std::make_pair (0, 1458), {
536 {std::make_pair (0, 32), {
608 {std::make_pair (0, 1000), {
680 {std::make_pair (0, 1), {
752 {std::make_pair (0, 2000), {
824 {std::make_pair (7, 1500), {
896 {std::make_pair (8, 1500), {
989 virtual void DoRun (
void);
998 m_testName (testName),
1020 for (
double snr = -4.0; snr <= 30.0; snr += 0.5)
1022 double expectedValue = 0;
1033 auto itValue = it->second.find (snr);
1034 if (itValue != it->second.end ())
1036 expectedValue = itValue->second;
1049 NS_LOG_INFO (
m_testName <<
": snr=" << snr <<
"dB per=" << per <<
" expectedPER=" << expectedValue);
1067 :
TestSuite (
"wifi-error-rate-models", UNIT)
Simulation virtual time values and global simulation resolution.
Smart pointer class similar to boost::intrusive_ptr.
static double FromRss(double rssDbw)
void SetNumberOfReceiveAntennas(uint8_t rx)
Set the number of RX antennas in the receiver corresponding to this interference helper.
WifiErrorRateModelsTestCaseNist()
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
static WifiErrorRateModelsTestSuite wifiErrorRateModelsTestSuite
the test suite
TableBasedErrorRateTestCase(const std::string &testName, WifiMode mode, uint32_t size)
Constructor.
void SetChannelWidth(uint16_t channelWidth)
Sets the selected channelWidth (in MHz)
const uint8_t ERROR_TABLE_BCC_MAX_NUM_MCS
handles interference calculations
virtual void DoRun(void)
Implementation to actually run this TestCase.
virtual void DoRun(void)
Implementation to actually run this TestCase.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Set the error rate model for this interference helper.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
uint8_t GetNss(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the number of spatial streams.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
virtual void DoRun(void)
Implementation to actually run this TestCase.
Wifi Table-based Error Rate Models Test Case.
double CalculateChunkSuccessRate(double snir, Time duration, WifiMode mode, WifiTxVector txVector) const
Calculate the success rate of the chunk given the SINR, duration, and Wi-Fi mode. ...
virtual ~WifiErrorRateModelsTestCaseNist()
uint32_t m_size
The size (in bytes) to test.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
std::map< std::pair< uint8_t, uint32_t >, std::map< double, double > > expectedTableValues
map of PER values that have been manually computed for a given MCS, size (in bytes) and SNR (in dB) i...
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
std::string m_testName
The name of the test to run.
void SetNss(uint8_t nss)
Sets the number of Nss.
virtual ~WifiErrorRateModelsTestCaseDsss()
Every class exported by the ns3 library is enclosed in the ns3 namespace.
WifiMode m_mode
The WifiMode to test.
void SetTxPowerLevel(uint8_t powerlevel)
Sets the selected transmission power level.
void SetNTx(uint8_t nTx)
Sets the number of TX antennas.
double DbToRatio(double dB)
Convert from dB to ratio.
double RatioToDb(double ratio)
Convert from ratio to dB.
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
double GetChunkSuccessRate(WifiMode mode, WifiTxVector txVector, double snr, uint64_t nbits) const
This method returns the probability that the given 'chunk' of the packet will be successfully receive...
virtual ~TableBasedErrorRateTestCase()
Wifi Error Rate Models Test Case MIMO.
virtual void DoRun(void)
Implementation to actually run this TestCase.
WifiErrorRateModelsTestCaseMimo()
void SetNoiseFigure(double value)
Set the noise figure.
Wifi Error Rate Models Test Case Nist.
double CalculateSnr(Ptr< Event > event, uint16_t channelWidth, uint8_t nss, WifiSpectrumBand band) const
Calculate the SNIR for the event (starting from now until the event end).
WifiErrorRateModelsTestCaseDsss()
uint16_t GetChannelWidth(void) const
WifiErrorRateModelsTestSuite()
Wifi Error Rate Models Test Suite.
#define NS_TEST_ASSERT_MSG_GT(actual, limit, msg)
Test that an actual value is greater than a limit and report and abort if not.
uint8_t GetMcsValue(void) const
Wifi Error Rate Models Test Case Dsss.
virtual ~WifiErrorRateModelsTestCaseMimo()