27 #include <ns3/object.h> 
   28 #include <ns3/spectrum-interference.h> 
   29 #include <ns3/spectrum-error-model.h> 
   32 #include <ns3/simulator.h> 
   33 #include <ns3/packet.h> 
   35 #include "ns3/radio-bearer-stats-calculator.h" 
   36 #include <ns3/constant-position-mobility-model.h> 
   37 #include <ns3/eps-bearer.h> 
   38 #include <ns3/node-container.h> 
   39 #include <ns3/mobility-helper.h> 
   40 #include <ns3/net-device-container.h> 
   41 #include <ns3/lte-ue-net-device.h> 
   42 #include <ns3/lte-enb-net-device.h> 
   43 #include <ns3/lte-ue-rrc.h> 
   44 #include <ns3/lte-helper.h> 
   45 #include "ns3/string.h" 
   46 #include "ns3/double.h" 
   47 #include <ns3/lte-enb-phy.h> 
   48 #include <ns3/lte-ue-phy.h> 
   49 #include <ns3/boolean.h> 
   59   : 
TestSuite (
"lte-fdbet-ff-mac-scheduler", SYSTEM)
 
   61   NS_LOG_INFO (
"creating LenaTestFdBetFfMacSchedulerSuite");
 
   63   bool errorModel = 
false;
 
  150   std::vector<uint16_t> dist;
 
  152   dist.push_back (4800);    
 
  153   dist.push_back (6000);    
 
  154   dist.push_back (10000);    
 
  155   dist.push_back (20000);    
 
  156   std::vector<uint32_t> estAchievableRateDl;
 
  157   estAchievableRateDl.push_back (2196000);
 
  158   estAchievableRateDl.push_back (1383000);
 
  159   estAchievableRateDl.push_back (775000);
 
  160   estAchievableRateDl.push_back (421000);
 
  161   estAchievableRateDl.push_back (421000);
 
  162   std::vector<uint32_t> estThrFdBetUl;
 
  163   estThrFdBetUl.push_back (469000); 
 
  164   estThrFdBetUl.push_back (157000); 
 
  165   estThrFdBetUl.push_back (125000); 
 
  166   estThrFdBetUl.push_back (85000);  
 
  167   estThrFdBetUl.push_back (26000);  
 
  180   std::ostringstream oss;
 
  181   oss << nUser << 
" UEs, distance " << dist << 
" m";
 
  186   : 
TestCase (BuildNameString (nUser, dist)),
 
  190     m_thrRefDl (thrRefDl),
 
  191     m_thrRefUl (thrRefUl),
 
  192     m_errorModelEnabled (errorModelEnabled)
 
  240   lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
 
  250   enbPhy->SetAttribute (
"NoiseFigure", 
DoubleValue (5.0));
 
  253   for (
int i = 0; i < 
m_nUser; i++)
 
  259       uePhy->SetAttribute (
"TxPower", 
DoubleValue (23.0));
 
  260       uePhy->SetAttribute (
"NoiseFigure", 
DoubleValue (9.0));
 
  263   double statsStartTime = 0.300; 
 
  264   double statsDuration = 0.6;
 
  265   double tolerance = 0.1;
 
  280   std::vector <uint64_t> dlDataRxed;
 
  281   for (
int i = 0; i < 
m_nUser; i++)
 
  287       dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
 
  288       NS_LOG_INFO (
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)dlDataRxed.at (i) << 
"  thr " << (double)dlDataRxed.at (i) / statsDuration << 
" ref " << 
m_thrRefDl);
 
  296   for (
int i = 0; i < 
m_nUser; i++)
 
  305   std::vector <uint64_t> ulDataRxed;
 
  306   for (
int i = 0; i < 
m_nUser; i++)
 
  312       ulDataRxed.push_back (rlcStats->
GetUlRxData (imsi, lcId));
 
  313       NS_LOG_INFO (
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)ulDataRxed.at (i) << 
"  thr " << (double)ulDataRxed.at (i) / statsDuration << 
" ref " << 
m_thrRefUl);
 
  321   for (
int i = 0; i < 
m_nUser; i++)
 
  337   std::ostringstream oss;
 
  338   oss << 
"distances (m) = [ " ;
 
  339   for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
 
  349   : 
TestCase (BuildNameString (dist.size (), dist)),
 
  350     m_nUser (dist.size ()),
 
  352     m_achievableRateDl (estAchievableRateDl),
 
  353     m_estThrFdBetUl (estThrFdBetUl),
 
  354     m_errorModelEnabled (errorModelEnabled)
 
  404   lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
 
  414   enbPhy->SetAttribute (
"NoiseFigure", 
DoubleValue (5.0));
 
  417   for (
int i = 0; i < 
m_nUser; i++)
 
  423       uePhy->SetAttribute (
"TxPower", 
DoubleValue (23.0));
 
  424       uePhy->SetAttribute (
"NoiseFigure", 
DoubleValue (9.0));
 
  428   double statsStartTime = 0.300; 
 
  429   double statsDuration = 0.4;
 
  430   double tolerance = 0.1;
 
  441   NS_LOG_INFO (
"DL - Test with " << m_nUser << 
" user(s)");
 
  442   std::vector <uint64_t> dlDataRxed;
 
  443   double totalData = 0;
 
  444   double estTotalThr = 0;
 
  446   for (
int i = 0; i < 
m_nUser; i++)
 
  452       dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
 
  453       totalData += (double)dlDataRxed.at (i);
 
  455       NS_LOG_INFO (
"\tUser " << i << 
" dist " << 
m_dist.at (i) << 
" imsi " << imsi << 
" bytes rxed " << (double)dlDataRxed.at (i) << 
"  thr " << (double)dlDataRxed.at (i) / statsDuration << 
" ref " << 
m_nUser);
 
  458   estTotalThr = m_nUser * (1 / estTotalThr);
 
  459   estUeThr = estTotalThr / 
m_nUser;
 
  464   for (
int i = 0; i < 
m_nUser; i++)
 
  466       double thrRatio = (double) 1 / m_nUser;
 
  467       double estThrRatio = (double)dlDataRxed.at (i) / totalData;
 
  468       NS_LOG_INFO (
"\tUser " << i << 
" thrRatio " << thrRatio << 
" estThrRatio " << estThrRatio);
 
  470       NS_TEST_ASSERT_MSG_EQ_TOL ((
double)dlDataRxed.at (i) / statsDuration, estUeThr, estUeThr * tolerance, 
" Unfair Throughput!");
 
  479   std::vector <uint64_t> ulDataRxed;
 
  480   for (
int i = 0; i < 
m_nUser; i++)
 
  486       ulDataRxed.push_back (rlcStats->
GetUlRxData (imsi, lcId));
 
  487       NS_LOG_INFO (
"\tUser " << i << 
" dist " << 
m_dist.at (i) << 
" bytes rxed " << (double)ulDataRxed.at (i) << 
"  thr " << (double)ulDataRxed.at (i) / statsDuration << 
" ref " << (double)
m_estThrFdBetUl.at (i));