50    NS_LOG_INFO(
"creating LenaTestTdBetFfMacSchedulerSuite");
 
   52    bool errorModel = 
false;
 
   70                TestCase::Duration::EXTENSIVE);
 
   72                TestCase::Duration::EXTENSIVE);
 
   74                TestCase::Duration::EXTENSIVE);
 
   76                TestCase::Duration::EXTENSIVE);
 
   90                TestCase::Duration::EXTENSIVE);
 
   92                TestCase::Duration::EXTENSIVE);
 
   94                TestCase::Duration::EXTENSIVE);
 
   96                TestCase::Duration::EXTENSIVE);
 
  109                TestCase::Duration::EXTENSIVE);
 
  111                TestCase::Duration::EXTENSIVE);
 
  113                TestCase::Duration::EXTENSIVE);
 
  115                TestCase::Duration::EXTENSIVE);
 
  129                TestCase::Duration::EXTENSIVE);
 
  131                TestCase::Duration::EXTENSIVE);
 
  133                TestCase::Duration::EXTENSIVE);
 
  135                TestCase::Duration::EXTENSIVE);
 
  149                TestCase::Duration::EXTENSIVE);
 
  151                TestCase::Duration::EXTENSIVE);
 
  153                TestCase::Duration::EXTENSIVE);
 
  155                TestCase::Duration::EXTENSIVE);
 
  160                TestCase::Duration::QUICK);
 
  164    std::vector<double> dist;
 
  166    dist.push_back(4800);  
 
  167    dist.push_back(6000);  
 
  168    dist.push_back(10000); 
 
  169    dist.push_back(20000); 
 
  170    std::vector<uint32_t> estAchievableRateDl;
 
  171    estAchievableRateDl.push_back(2196000);
 
  172    estAchievableRateDl.push_back(1383000);
 
  173    estAchievableRateDl.push_back(775000);
 
  174    estAchievableRateDl.push_back(421000);
 
  175    estAchievableRateDl.push_back(421000);
 
  176    std::vector<uint32_t> estThrTdBetUl;
 
  177    estThrTdBetUl.push_back(469000); 
 
  178    estThrTdBetUl.push_back(157000); 
 
  179    estThrTdBetUl.push_back(125000); 
 
  180    estThrTdBetUl.push_back(85000);  
 
  181    estThrTdBetUl.push_back(26000);  
 
  184        TestCase::Duration::QUICK);
 
 
  249    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  259    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  260    mobility.Install(enbNodes);
 
  261    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  262    mobility.Install(ueNodes);
 
  267    lteHelper->SetSchedulerType(
"ns3::TdBetFfMacScheduler");
 
  269    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  270    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  273    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  278    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
  282    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  283    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  286    for (
int i = 0; i < 
m_nUser; i++)
 
  290        mm->SetPosition(Vector(
m_dist, 0.0, 0.0));
 
  294        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  297    double statsStartTime = 0.300; 
 
  298    double statsDuration = 0.6;
 
  299    double tolerance = 0.1;
 
  302    lteHelper->EnableMacTraces();
 
  303    lteHelper->EnableRlcTraces();
 
  316    std::vector<uint64_t> dlDataRxed;
 
  317    for (
int i = 0; i < 
m_nUser; i++)
 
  323        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  324        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)dlDataRxed.at(i)
 
  325                              << 
"  thr " << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  334    for (
int i = 0; i < 
m_nUser; i++)
 
  339                                  " Unfair Throughput!");
 
  346    std::vector<uint64_t> ulDataRxed;
 
  347    for (
int i = 0; i < 
m_nUser; i++)
 
  353        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  354        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)ulDataRxed.at(i)
 
  355                              << 
"  thr " << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  364    for (
int i = 0; i < 
m_nUser; i++)
 
  369                                  " Unfair Throughput!");
 
 
  433    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  443    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  444    mobility.Install(enbNodes);
 
  445    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  446    mobility.Install(ueNodes);
 
  451    lteHelper->SetSchedulerType(
"ns3::TdBetFfMacScheduler");
 
  453    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  454    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  457    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  462    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
  466    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  467    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  470    for (
int i = 0; i < 
m_nUser; i++)
 
  474        mm->SetPosition(Vector(
m_dist.at(i), 0.0, 0.0));
 
  478        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  481    double statsStartTime = 0.300; 
 
  482    double statsDuration = 0.4;
 
  483    double tolerance = 0.1;
 
  486    lteHelper->EnableMacTraces();
 
  487    lteHelper->EnableRlcTraces();
 
  495    std::vector<uint64_t> dlDataRxed;
 
  496    double totalData = 0;
 
  497    double estTotalThr = 0;
 
  499    for (
int i = 0; i < 
m_nUser; i++)
 
  505        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  506        totalData += (
double)dlDataRxed.at(i);
 
  508        NS_LOG_INFO(
"\tUser " << i << 
" dist " << 
m_dist.at(i) << 
" imsi " << imsi << 
" bytes rxed " 
  509                              << (
double)dlDataRxed.at(i) << 
"  thr " 
  510                              << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " << 
m_nUser);
 
  513    estTotalThr = 
m_nUser * (1 / estTotalThr);
 
  514    estUeThr = estTotalThr / 
m_nUser;
 
  519    for (
int i = 0; i < 
m_nUser; i++)
 
  521        double thrRatio = 1.0 / 
m_nUser;
 
  522        double estThrRatio = (
double)dlDataRxed.at(i) / totalData;
 
  523        NS_LOG_INFO(
"\tUser " << i << 
" thrRatio " << thrRatio << 
" estThrRatio " << estThrRatio);
 
  527                                  estUeThr * tolerance,
 
  528                                  " Unfair Throughput!");
 
  536    std::vector<uint64_t> ulDataRxed;
 
  537    for (
int i = 0; i < 
m_nUser; i++)
 
  543        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  545                              << (
double)ulDataRxed.at(i) << 
"  thr " 
  546                              << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  551                                  " Unfair Throughput!");