22 #include <ns3/object.h> 23 #include <ns3/spectrum-interference.h> 24 #include <ns3/spectrum-error-model.h> 27 #include <ns3/simulator.h> 28 #include <ns3/packet.h> 31 #include <ns3/radio-bearer-stats-calculator.h> 32 #include <ns3/mobility-building-info.h> 33 #include <ns3/hybrid-buildings-propagation-loss-model.h> 34 #include <ns3/eps-bearer.h> 35 #include <ns3/node-container.h> 36 #include <ns3/mobility-helper.h> 37 #include <ns3/net-device-container.h> 38 #include <ns3/lte-ue-net-device.h> 39 #include <ns3/lte-enb-net-device.h> 40 #include <ns3/lte-ue-rrc.h> 41 #include <ns3/lte-helper.h> 42 #include <ns3/string.h> 43 #include <ns3/double.h> 44 #include <ns3/lte-enb-phy.h> 45 #include <ns3/lte-ue-phy.h> 46 #include <ns3/config.h> 47 #include <ns3/boolean.h> 49 #include <ns3/integer.h> 50 #include <ns3/unused.h> 51 #include <ns3/ff-mac-scheduler.h> 52 #include <ns3/buildings-helper.h> 61 :
TestSuite (
"lte-phy-error-model", SYSTEM)
63 NS_LOG_INFO (
"creating LenaTestPhyErrorModelTestCase");
66 for (uint32_t rngRun = 1; rngRun <= 3; ++rngRun)
80 (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
84 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
88 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
92 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
105 (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
109 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
113 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
117 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
121 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
126 (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
137 std::ostringstream oss;
138 oss <<
"DataPhyErrorModel " << nUser <<
" UEs, distance " << dist <<
" m, RngRun " << rngRun;
143 uint16_t nUser, uint16_t dist,
double blerRef,
144 uint16_t toleranceRxPackets,
Time statsStartTime, uint32_t rngRun)
145 :
TestCase (BuildNameString (nUser, dist, rngRun)),
149 m_toleranceRxPackets (toleranceRxPackets),
150 m_statsStartTime (statsStartTime),
189 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
191 BuildingsHelper::Install (enbNodes);
192 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
194 BuildingsHelper::Install (ueNodes);
224 enbPhy->SetAttribute (
"TxPower",
DoubleValue (43.0));
225 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
231 for (
int i = 0; i <
m_nUser; i++)
237 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
238 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
251 NS_LOG_INFO (
"\tTest downlink data shared channels (PDSCH)");
253 for (
int i = 0; i <
m_nUser; i++)
261 double dlBler = 1.0 - (dlRxPackets/dlTxPackets);
262 double expectedDlRxPackets = dlTxPackets -dlTxPackets*
m_blerRef;
263 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" DOWNLINK" 264 <<
" pkts rx " << dlRxPackets <<
" tx " << dlTxPackets
265 <<
" BLER " << dlBler <<
" Err " << std::fabs (
m_blerRef - dlBler)
266 <<
" expected rx " << expectedDlRxPackets
267 <<
" difference " << std::abs (expectedDlRxPackets - dlRxPackets)
273 double expectedDlTxPackets =
static_cast<double> (statsDuration.
GetMilliSeconds ());
275 " too different DL TX packets reported");
279 " too different DL RX packets reported");
283 Simulator::Destroy ();
292 std::ostringstream oss;
293 oss <<
"DlCtrlPhyErrorModel " << nEnb <<
" eNBs, distance " << dist <<
" m, RngRun " << rngRun;
299 uint16_t nEnb, uint16_t dist,
double blerRef,
300 uint16_t toleranceRxPackets,
Time statsStartTime, uint32_t rngRun)
301 :
TestCase (BuildNameString (nEnb, dist, rngRun)),
305 m_toleranceRxPackets (toleranceRxPackets),
306 m_statsStartTime (statsStartTime),
348 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
350 BuildingsHelper::Install (enbNodes);
351 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
353 BuildingsHelper::Install (ueNodes);
381 for (
int i = 0; i <
m_nEnb; i++)
388 enbPhy->SetAttribute (
"TxPower",
DoubleValue (43.0));
389 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
397 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
398 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
410 NS_LOG_INFO (
"\tTest downlink control channels (PCFICH+PDCCH)");
413 for (
int i = 0; i < nUser; i++)
420 double dlBler = 1.0 - (dlRxPackets/dlTxPackets);
421 double expectedDlRxPackets = dlTxPackets -dlTxPackets*
m_blerRef;
422 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" DOWNLINK" 423 <<
" pkts rx " << dlRxPackets <<
" tx " << dlTxPackets
424 <<
" BLER " << dlBler <<
" Err " << std::fabs (
m_blerRef - dlBler)
425 <<
" expected rx " << expectedDlRxPackets
426 <<
" difference " << std::abs (expectedDlRxPackets - dlRxPackets)
432 double expectedDlTxPackets =
static_cast<double> (statsDuration.
GetMilliSeconds ());
434 " too different DL TX packets reported");
438 "too different DL RX packets reported");
442 Simulator::Destroy ();
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Simulation virtual time values and global simulation resolution.
void SetPathlossModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the path loss models to be created.
AttributeValue implementation for Boolean.
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Hold variables of type string.
virtual void DoRun(void)
Implementation to actually run this TestCase.
LenaDlCtrlPhyErrorModelTestCase(uint16_t nEnb, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
Constructor.
static LenaTestPhyErrorModelSuite lenaTestPhyErrorModelSuite
double m_dist
the distance between nodes
uint32_t m_rngRun
the rng run
LenaTestPhyErrorModelSuite()
virtual ~LenaDlCtrlPhyErrorModelTestCase()
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
uint32_t GetDlRxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
#define NS_UNUSED(x)
Mark a local variable as unused.
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS...
LenaDataPhyErrorModelTestCase(uint16_t nUser, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
Constructor.
uint16_t m_nEnb
the number of ENB nodes
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used.
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
virtual ~LenaDataPhyErrorModelTestCase()
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
This system test program creates different test cases with a single eNB and several UEs...
virtual void DoRun(void)
Implementation to actually run this TestCase.
double m_dist
the distance between nodes
Keep track of the current position and velocity of an object.
Lena Dl Ctrl Phy Error Model Test Case.
uint16_t m_toleranceRxPackets
receive packet tolerance loss
Hold variables of type enum.
AttributeValue implementation for Time.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
double m_blerRef
the expected BLER
Hold an unsigned integer type.
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
uint16_t m_nUser
number of UE nodes
holds a vector of ns3::NetDevice pointers
Ptr< LteEnbPhy > GetPhy(void) const
#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...
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Lena Test Phy Error Model Suite.
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
Builds the test name string based on provided parameter values.
Ptr< LteUePhy > GetPhy(void) const
Get the Phy.
This class contains the specification of EPS Bearers.
void SetPosition(const Vector &position)
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Helper class used to assign positions and mobility models to nodes.
void SetGlobal(std::string name, const AttributeValue &value)
uint32_t GetDlTxPackets(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted downlink data bytes.
int64_t GetMilliSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
Build name string.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
uint16_t m_toleranceRxPackets
receive packet tolerance loss
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
The eNodeB device implementation.
uint32_t m_rngRun
the rng run number
double m_blerRef
the expected BLER
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS...
The LteUeNetDevice class implements the UE net device.