22 #include <ns3/simulator.h>
24 #include <ns3/callback.h>
25 #include <ns3/config.h>
26 #include <ns3/string.h>
27 #include <ns3/double.h>
29 #include <ns3/boolean.h>
30 #include <ns3/pointer.h>
32 #include "ns3/mobility-helper.h"
33 #include "ns3/lte-helper.h"
34 #include "ns3/point-to-point-epc-helper.h"
35 #include "ns3/internet-module.h"
36 #include "ns3/point-to-point-module.h"
37 #include "ns3/applications-module.h"
39 #include <ns3/ff-mac-scheduler.h>
40 #include <ns3/lte-enb-net-device.h>
41 #include <ns3/lte-enb-phy.h>
42 #include <ns3/lte-enb-rrc.h>
43 #include <ns3/lte-ue-net-device.h>
44 #include <ns3/lte-ue-phy.h>
45 #include <ns3/lte-ue-rrc.h>
49 #include <ns3/lte-common.h>
63 :
TestSuite (
"lte-frequency-reuse", SYSTEM)
68 std::vector<bool> availableDlRb;
69 std::vector<bool> availableUlRb;
70 for (uint32_t i = 0; i < 12; i++)
72 availableDlRb.push_back (
true);
73 availableUlRb.push_back (
true);
75 for (uint32_t i = 12; i < 25; i++)
77 availableDlRb.push_back (
false);
78 availableUlRb.push_back (
false);
81 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrPf1", 1,
"ns3::PfFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
82 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrPf2", 5,
"ns3::PfFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
83 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrPss1", 1,
"ns3::PssFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
84 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrPss2", 5,
"ns3::PssFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
85 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrCqa1", 1,
"ns3::CqaFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
86 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrCqa2", 5,
"ns3::CqaFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
87 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrFdTbfq1", 1,
"ns3::FdTbfqFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
88 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrFdTbfq2", 5,
"ns3::FdTbfqFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
89 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrTdTbfq1", 1,
"ns3::TdTbfqFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
90 AddTestCase (
new LteHardFrTestCase (
"DownlinkHardFrTdTbfq2", 5,
"ns3::TdTbfqFfMacScheduler", 25, 25, 0, 12, 0, 12, availableDlRb, availableUlRb), TestCase::QUICK);
92 availableDlRb.clear ();
93 availableUlRb.clear ();
94 for (uint32_t i = 0; i < 6; i++)
96 availableDlRb.push_back (
true);
97 availableUlRb.push_back (
true);
99 for (uint32_t i = 6; i < 12; i++)
101 availableDlRb.push_back (
false);
102 availableUlRb.push_back (
false);
104 for (uint32_t i = 12; i < 18; i++)
106 availableDlRb.push_back (
true);
107 availableUlRb.push_back (
true);
109 for (uint32_t i = 18; i < 25; i++)
111 availableDlRb.push_back (
false);
112 availableUlRb.push_back (
false);
115 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrPf1", 1,
"ns3::PfFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
116 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrPf2", 5,
"ns3::PfFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
117 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrPss1", 1,
"ns3::PssFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
118 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrPss2", 5,
"ns3::PssFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
119 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqa1", 1,
"ns3::CqaFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
120 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqa2", 5,
"ns3::CqaFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
121 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqaFdTbfq1", 1,
"ns3::FdTbfqFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
122 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqaFdTbfq2", 5,
"ns3::FdTbfqFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
123 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqaTdTbfq1", 1,
"ns3::TdTbfqFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
124 AddTestCase (
new LteStrictFrTestCase (
"DownlinkStrictFrCqaTdTbfq2", 5,
"ns3::TdTbfqFfMacScheduler", 25, 25, 6, 6, 6, 6, 6, 6, availableDlRb, availableUlRb), TestCase::QUICK);
178 uint32_t userNum,uint16_t dlBandwidth,uint16_t ulBandwidth,
179 std::vector<bool> availableDlRb, std::vector<bool> availableUlRb)
182 m_dlBandwidth (dlBandwidth),
183 m_ulBandwidth (ulBandwidth),
184 m_availableDlRb (availableDlRb),
185 m_usedMutedDlRbg (false),
186 m_availableUlRb (availableUlRb),
187 m_usedMutedUlRbg (false)
199 Values::const_iterator it;
218 Values::const_iterator it;
240 std::string schedulerType,
241 uint16_t dlBandwidth, uint16_t ulBandwidth,
242 uint8_t dlSubBandOffset, uint16_t dlSubBandwidth,
243 uint8_t ulSubBandOffset, uint16_t ulSubBandwidth,
244 std::vector<bool> availableDlRb, std::vector<bool> availableUlRb)
245 :
LteFrTestCase (name, userNum, dlBandwidth, ulBandwidth, availableDlRb, availableUlRb),
246 m_schedulerType (schedulerType),
247 m_dlSubBandOffset (dlSubBandOffset),
248 m_dlSubBandwidth (dlSubBandwidth),
249 m_ulSubBandOffset (ulSubBandOffset),
250 m_ulSubBandwidth (ulSubBandwidth)
289 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
300 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
323 dlChannel->AddRx (testDlSpectrumPhy);
334 ulChannel->AddRx (testUlSpectrumPhy);
339 Simulator::Stop (
Seconds (0.500));
343 "Scheduler used DL RBG muted by FFR Algorithm");
346 "Scheduler used UL RBG muted by FFR Algorithm");
348 Simulator::Destroy ();
354 std::string schedulerType,
355 uint16_t dlBandwidth, uint16_t ulBandwidth,
356 uint16_t dlCommonSubBandwidth, uint8_t dlEdgeSubBandOffset, uint16_t dlEdgeSubBandwidth,
357 uint16_t ulCommonSubBandwidth, uint8_t ulEdgeSubBandOffset, uint16_t ulEdgeSubBandwidth,
358 std::vector<bool> availableDlRb, std::vector<bool> availableUlRb)
359 :
LteFrTestCase (name, userNum, dlBandwidth, ulBandwidth, availableDlRb, availableUlRb),
360 m_schedulerType (schedulerType),
361 m_dlCommonSubBandwidth (dlCommonSubBandwidth),
362 m_dlEdgeSubBandOffset (dlEdgeSubBandOffset),
363 m_dlEdgeSubBandwidth (dlEdgeSubBandwidth),
364 m_ulCommonSubBandwidth (ulCommonSubBandwidth),
365 m_ulEdgeSubBandOffset (ulEdgeSubBandOffset),
366 m_ulEdgeSubBandwidth (ulEdgeSubBandwidth)
406 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
417 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
441 dlChannel->AddRx (testDlSpectrumPhy);
452 ulChannel->AddRx (testUlSpectrumPhy);
457 Simulator::Stop (
Seconds (0.500));
461 "Scheduler used DL RBG muted by FFR Algorithm");
464 "Scheduler used UL RBG muted by FFR Algorithm");
466 Simulator::Destroy ();
485 m_schedulerType (schedulerType)
505 Values::const_iterator it;
510 NS_LOG_DEBUG (
"RB " << i <<
" POWER: " <<
" " << power);
521 "Wrong Data Channel DL Power level");
537 Values::const_iterator it;
539 uint32_t numActiveRbs = 0;
554 NS_LOG_DEBUG (
"Total number of active RBs = " << numActiveRbs);
560 double power = (*it) * (numActiveRbs * 180000);
569 "Wrong Data Channel UL Power level" <<
Simulator::Now ().As (Time::S));
579 NS_LOG_DEBUG (
"Teleport UE to : (" <<
x <<
", " << y <<
", 0)");
586 std::vector<bool> expectedDlRb)
589 NS_LOG_DEBUG (
"Teleport UE to : (" <<
x <<
", " << y <<
", 0)");
598 std::vector<bool> expectedDlRb)
601 NS_LOG_DEBUG (
"Teleport UE to : (" <<
x <<
", " << y <<
", 0)");
649 double eNbTxPower = 30;
679 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
680 positionAlloc->
Add (Vector (1000, 0.0, 0.0));
681 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
682 positionAlloc->
Add (Vector (1020, 0.0, 0.0));
684 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
685 mobility.SetPositionAllocator (positionAlloc);
724 lteHelper->
Attach (ueDevs1, enbDevs.
Get (0));
725 lteHelper->
Attach (ueDevs2, enbDevs.
Get (1));
750 dlChannel->AddRx (testDlSpectrumPhy);
763 ulChannel->AddRx (testUlSpectrumPhy);
770 std::vector<bool> expectedDlRbCenterArea;
772 std::vector<bool> expectedUlRbCenterArea;
774 for (uint32_t i = 0; i < 6; i++)
776 expectedDlRbCenterArea[i] =
true;
777 expectedUlRbCenterArea[i] =
true;
780 std::vector<bool> expectedDlRbEdgeArea;
782 std::vector<bool> expectedUlRbEdgeArea;
784 for (uint32_t i = 12; i < 18; i++)
786 expectedDlRbEdgeArea[i] =
true;
787 expectedUlRbEdgeArea[i] =
true;
805 Simulator::Stop (
Seconds (1.500));
809 "Scheduler used DL RB muted by FFR Algorithm");
811 "Scheduler used UL RB muted by FFR Algorithm");
813 Simulator::Destroy ();
835 double eNbTxPower = 30;
865 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
866 positionAlloc->
Add (Vector (1000, 0.0, 0.0));
867 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
868 positionAlloc->
Add (Vector (1020, 0.0, 0.0));
870 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
871 mobility.SetPositionAllocator (positionAlloc);
908 lteHelper->
Attach (ueDevs1, enbDevs.
Get (0));
909 lteHelper->
Attach (ueDevs2, enbDevs.
Get (1));
933 dlChannel->AddRx (testDlSpectrumPhy);
946 ulChannel->AddRx (testUlSpectrumPhy);
954 std::vector<bool> expectedDlRbCenterArea;
956 std::vector<bool> expectedUlRbCenterArea;
958 for (uint32_t i = 0; i < 8; i++)
960 expectedDlRbCenterArea[i] =
true;
961 expectedUlRbCenterArea[i] =
true;
963 for (uint32_t i = 16; i < 25; i++)
965 expectedDlRbCenterArea[i] =
true;
968 std::vector<bool> expectedDlRbEdgeArea;
970 std::vector<bool> expectedUlRbEdgeArea;
972 for (uint32_t i = 8; i < 16; i++)
974 expectedDlRbEdgeArea[i] =
true;
975 expectedUlRbEdgeArea[i] =
true;
993 Simulator::Stop (
Seconds (1.500));
998 "Scheduler used DL RBG muted by FFR Algorithm");
1002 "Scheduler used UL RB muted by FFR Algorithm");
1004 Simulator::Destroy ();
1026 double eNbTxPower = 30;
1056 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
1057 positionAlloc->
Add (Vector (1000, 0.0, 0.0));
1058 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
1059 positionAlloc->
Add (Vector (1020, 0.0, 0.0));
1061 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
1062 mobility.SetPositionAllocator (positionAlloc);
1104 lteHelper->
Attach (ueDevs1, enbDevs.
Get (0));
1105 lteHelper->
Attach (ueDevs2, enbDevs.
Get (1));
1129 dlChannel->AddRx (testDlSpectrumPhy);
1142 ulChannel->AddRx (testUlSpectrumPhy);
1149 double expectedDlPowerCenterArea = 0.5;
1150 std::vector<bool> expectedDlRbCenterArea;
1152 std::vector<bool> expectedUlRbCenterArea;
1154 for (uint32_t i = 6; i < 12; i++)
1156 expectedDlRbCenterArea[i] =
true;
1157 expectedUlRbCenterArea[i] =
true;
1159 for (uint32_t i = 18; i < 25; i++)
1161 expectedDlRbCenterArea[i] =
true;
1162 expectedUlRbCenterArea[i] =
true;
1165 double expectedDlPowerMiddleArea = 1.0;
1166 std::vector<bool> expectedDlRbMiddleArea;
1168 std::vector<bool> expectedUlRbMiddleArea;
1170 for (uint32_t i = 0; i < 6; i++)
1172 expectedDlRbMiddleArea[i] =
true;
1173 expectedUlRbMiddleArea[i] =
true;
1176 double expectedDlPowerEdgeArea = 2.0;
1177 std::vector<bool> expectedDlRbEdgeArea;
1179 std::vector<bool> expectedUlRbEdgeArea;
1181 for (uint32_t i = 12; i < 18; i++)
1183 expectedDlRbEdgeArea[i] =
true;
1184 expectedUlRbEdgeArea[i] =
true;
1189 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1195 expectedDlPowerMiddleArea, expectedDlRbMiddleArea );
1201 expectedDlPowerEdgeArea, expectedDlRbEdgeArea );
1207 expectedDlPowerMiddleArea, expectedDlRbMiddleArea );
1213 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1217 Simulator::Stop (
Seconds (2.500));
1221 "Scheduler used DL RBG muted by FFR Algorithm");
1224 "Scheduler used UL RB muted by FFR Algorithm");
1226 Simulator::Destroy ();
1233 NS_LOG_INFO (
"Creating LteEnhancedFfrAreaTestCase");
1250 double eNbTxPower = 30;
1281 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
1282 positionAlloc->
Add (Vector (1000, 0.0, 0.0));
1283 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
1284 positionAlloc->
Add (Vector (1020, 0.0, 0.0));
1286 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
1287 mobility.SetPositionAllocator (positionAlloc);
1333 lteHelper->
Attach (ueDevs1, enbDevs.
Get (0));
1334 lteHelper->
Attach (ueDevs2, enbDevs.
Get (1));
1358 dlChannel->AddRx (testDlSpectrumPhy);
1371 ulChannel->AddRx (testUlSpectrumPhy);
1378 double expectedDlPowerCenterArea = 0.251189;
1379 std::vector<bool> expectedDlRbCenterArea;
1381 std::vector<bool> expectedUlRbCenterArea;
1383 for (uint32_t i = 0; i < 8; i++)
1385 expectedDlRbCenterArea[i] =
true;
1386 expectedUlRbCenterArea[i] =
true;
1388 for (uint32_t i = 12; i < 16; i++)
1390 expectedDlRbCenterArea[i] =
true;
1391 expectedUlRbCenterArea[i] =
true;
1393 for (uint32_t i = 20; i < 24; i++)
1395 expectedDlRbCenterArea[i] =
true;
1396 expectedUlRbCenterArea[i] =
true;
1399 double expectedDlPowerMiddleArea = 0.251189;
1400 std::vector<bool> expectedDlRbMiddleArea;
1402 std::vector<bool> expectedUlRbMiddleArea;
1404 for (uint32_t i = 4; i < 8; i++)
1406 expectedDlRbMiddleArea[i] =
true;
1407 expectedUlRbMiddleArea[i] =
true;
1410 double expectedDlPowerEdgeArea = 1.0;
1411 std::vector<bool> expectedDlRbEdgeArea;
1413 std::vector<bool> expectedUlRbEdgeArea;
1415 for (uint32_t i = 0; i < 4; i++)
1417 expectedDlRbEdgeArea[i] =
true;
1418 expectedUlRbEdgeArea[i] =
true;
1423 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1429 expectedDlPowerMiddleArea, expectedDlRbMiddleArea );
1435 expectedDlPowerEdgeArea, expectedDlRbEdgeArea );
1441 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1447 expectedDlPowerMiddleArea, expectedDlRbMiddleArea );
1451 Simulator::Stop (
Seconds (2.500));
1455 "Scheduler used DL RBG muted by FFR Algorithm");
1458 "Scheduler used UL RB muted by FFR Algorithm");
1460 Simulator::Destroy ();
1467 NS_LOG_INFO (
"Creating LteDistributedFfrAreaTestCase");
1484 double eNbTxPower = 30;
1498 uint16_t bandwidth = 25;
1509 remoteHostContainer.
Create (1);
1512 internet.
Install (remoteHostContainer);
1521 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
1553 positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
1554 positionAlloc->
Add (Vector (1000, 0.0, 0.0));
1556 positionAlloc->
Add (Vector (200, 0.0, 0.0));
1557 positionAlloc->
Add (Vector (200, 0.0, 0.0));
1558 positionAlloc->
Add (Vector (800, 0.0, 0.0));
1561 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
1562 mobility.SetPositionAllocator (positionAlloc);
1590 ueLteDevs.
Add (ueDevs1);
1591 ueLteDevs.
Add (ueDevs2);
1601 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
1610 lteHelper->
Attach (ueDevs1, enbDevs.
Get (0));
1611 lteHelper->
Attach (ueDevs2, enbDevs.
Get (1));
1615 uint16_t dlPort = 10000;
1616 uint16_t ulPort = 20000;
1625 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
1632 for (uint32_t b = 0; b < 1; ++b)
1693 dlChannel->AddRx (testDlSpectrumPhy);
1706 ulChannel->AddRx (testUlSpectrumPhy);
1713 double expectedDlPowerCenterArea = 1.0;
1714 std::vector<bool> expectedDlRbCenterArea;
1716 std::vector<bool> expectedUlRbCenterArea;
1720 expectedDlRbCenterArea[i] =
true;
1721 expectedUlRbCenterArea[i] =
true;
1724 double expectedDlPowerEdgeArea = 2.0;
1725 std::vector<bool> expectedDlRbEdgeArea;
1727 std::vector<bool> expectedUlRbEdgeArea;
1729 for (uint32_t i = 0; i < 6; i++)
1731 expectedDlRbEdgeArea[i] =
true;
1732 expectedUlRbEdgeArea[i] =
true;
1735 std::vector<bool> expectedDlRbEdgeArea2;
1737 std::vector<bool> expectedUlRbEdgeArea2;
1739 for (uint32_t i = 6; i < 12; i++)
1741 expectedDlRbEdgeArea2[i] =
true;
1742 expectedUlRbEdgeArea2[i] =
true;
1748 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1754 expectedDlPowerEdgeArea, expectedDlRbEdgeArea );
1760 expectedDlPowerEdgeArea, expectedDlRbEdgeArea2 );
1766 expectedDlPowerEdgeArea, expectedDlRbEdgeArea );
1772 expectedDlPowerCenterArea, expectedDlRbCenterArea );
1776 Simulator::Stop (
Seconds (2.500));
1781 "Scheduler used DL RBG muted by FFR Algorithm");
1785 "Scheduler used UL RB muted by FFR Algorithm");
1787 Simulator::Destroy ();