22 #include "ns3/simulator.h"
24 #include "ns3/string.h"
25 #include "ns3/double.h"
27 #include "ns3/boolean.h"
28 #include "ns3/mobility-helper.h"
29 #include "ns3/lte-helper.h"
30 #include "ns3/ff-mac-scheduler.h"
32 #include "ns3/lte-enb-phy.h"
33 #include "ns3/lte-enb-net-device.h"
35 #include "ns3/lte-ue-phy.h"
36 #include "ns3/lte-ue-net-device.h"
49 uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
50 uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
52 testcase->
DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
57 uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
58 uint8_t mcs, uint16_t sizeTb)
60 testcase->
UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
71 AddTestCase (
new LteInterferenceTestCase (
"d1=3000, d2=6000", 3000.000000, 6000.000000, 3.844681, 1.714583, 0.761558, 0.389662, 6, 4),
TestCase::QUICK);
72 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=10", 50.000000, 10.000000, 0.040000, 0.040000, 0.010399, 0.010399, 0, 0),
TestCase::QUICK);
73 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=20", 50.000000, 20.000000, 0.160000, 0.159998, 0.041154, 0.041153, 0, 0),
TestCase::QUICK);
74 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=50", 50.000000, 50.000000, 0.999997, 0.999907, 0.239828, 0.239808, 2, 2),
TestCase::QUICK);
75 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=100", 50.000000, 100.000000, 3.999955, 3.998520, 0.785259, 0.785042, 6, 6),
TestCase::QUICK);
76 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=200", 50.000000, 200.000000, 15.999282, 15.976339, 1.961072, 1.959533, 14, 14),
TestCase::QUICK);
77 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=500", 50.000000, 500.000000, 99.971953, 99.082845, 4.254003, 4.241793, 22, 22),
TestCase::QUICK);
78 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=1000", 50.000000, 1000.000000, 399.551632, 385.718468, 6.194952, 6.144825, 28, 28),
TestCase::QUICK);
79 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=10000", 50.000000, 10000.000000, 35964.181431, 8505.970614, 12.667381, 10.588084, 28, 28),
TestCase::QUICK);
80 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=100000", 50.000000, 100000.000000, 327284.773828, 10774.181090, 15.853097, 10.928917, 28, 28),
TestCase::QUICK);
81 AddTestCase (
new LteInterferenceTestCase (
"d1=50, d2=1000000", 50.000000, 1000000.000000, 356132.574152, 10802.988445, 15.974963, 10.932767, 28, 28),
TestCase::QUICK);
82 AddTestCase (
new LteInterferenceTestCase (
"d1=4500, d2=12600", 4500.000000, 12600.000000, 6.654462, 1.139831, 1.139781, 0.270399, 8, 2),
TestCase::QUICK);
83 AddTestCase (
new LteInterferenceTestCase (
"d1=5400, d2=12600", 5400.000000, 12600.000000, 4.621154, 0.791549, 0.876368, 0.193019, 6, 0),
TestCase::QUICK);
99 m_dlSinrDb (10 * std::log10 (dlSinr)),
100 m_ulSinrDb (10 * std::log10 (ulSinr)),
120 lteHelper->SetAttribute (
"PathlossModel",
StringValue (
"ns3::FriisSpectrumPropagationLossModel"));
121 lteHelper->SetAttribute (
"UseIdealRrc",
BooleanValue (
false));
141 positionAlloc->Add (
Vector (0.0, 0.0, 0.0));
154 lteHelper->SetSchedulerType (
"ns3::RrFfMacScheduler");
156 enbDevs = lteHelper->InstallEnbDevice (enbNodes);
157 ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
158 ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
160 lteHelper->Attach (ueDevs1, enbDevs.
Get (0));
161 lteHelper->Attach (ueDevs2, enbDevs.
Get (1));
166 lteHelper->ActivateDataRadioBearer (ueDevs1, bearer);
167 lteHelper->ActivateDataRadioBearer (ueDevs2, bearer);
175 ue1Phy->GetDownlinkSpectrumPhy ()->AddDataSinrChunkProcessor (testDlSinr1);
179 enb1phy->GetUplinkSpectrumPhy ()->AddDataSinrChunkProcessor (testUlSinr1);
192 ue2Phy->GetDownlinkSpectrumPhy ()->AddDataSinrChunkProcessor (testDlSinr2);
196 enb1phy->GetUplinkSpectrumPhy ()->AddDataSinrChunkProcessor (testUlSinr2);
210 double dlSinr1Db = 10.0 * std::log10 (testDlSinr1->GetSinr ()->operator[] (0));
213 double dlSinr2Db = 10.0 * std::log10 (testDlSinr2->GetSinr ()->operator[] (0));
218 double ulSinr1Db = 10.0 * std::log10 (testUlSinr1->GetSinr ()->operator[] (0));
221 double ulSinr2Db = 10.0 * std::log10 (testUlSinr2->GetSinr ()->operator[] (0));
232 uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
243 uint8_t mcs, uint16_t sizeTb)
void LteTestUlSchedulingCallback(LteInterferenceTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
smart pointer class similar to boost::intrusive_ptr
void LteTestDlSchedulingCallback(LteInterferenceTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
hold variables of type string
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
#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...
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Build bound Callbacks which take varying numbers of arguments, and potentially returning a value...
static LteInterferenceTestSuite lteLinkAdaptationWithInterferenceTestSuite
void DlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
virtual void DoRun(void)
Implementation to actually run this TestCase.
static void Run(void)
Run the simulation until one of:
void Connect(std::string path, const CallbackBase &cb)
This class contains the specification of EPS Bearers.
LteInterferenceTestCase(std::string name, double d1, double d2, double dlSinr, double ulSinr, double dlSe, double ulSe, uint16_t dlMcs, uint16_t ulMcs)
TestCase.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
hold variables of type 'enum'
LteInterferenceTestSuite()
TestSuite.
holds a vector of ns3::NetDevice pointers
Test that SINR calculation and MCS selection works fine in a multi-cell interference scenario...
NS_LOG_COMPONENT_DEFINE("LteInterferenceTest")
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
void SetDefault(std::string name, const AttributeValue &value)
keep track of a set of node pointers.
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
virtual ~LteInterferenceTestCase()
static Time Now(void)
Return the "current simulation time".
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
void UlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
Helper class used to assign positions and mobility models to nodes.
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
std::string GetName(void) const
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
Hold a floating point type.
The eNodeB device implementation.
Ptr< T > GetObject(void) const
The LtePhy models the physical layer of LTE.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
The LteUeNetDevice class implements the UE net device.