50    NS_LOG_INFO(
"creating LenaTestFdBetFfMacSchedulerSuite");
 
   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> estThrFdBetUl;
 
  177    estThrFdBetUl.push_back(469000); 
 
  178    estThrFdBetUl.push_back(157000); 
 
  179    estThrFdBetUl.push_back(125000); 
 
  180    estThrFdBetUl.push_back(85000);  
 
  181    estThrFdBetUl.push_back(26000);  
 
  184        TestCase::Duration::QUICK);
 
 
  246    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  256    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  257    mobility.Install(enbNodes);
 
  258    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  259    mobility.Install(ueNodes);
 
  264    lteHelper->SetSchedulerType(
"ns3::FdBetFfMacScheduler");
 
  266    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  267    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  270    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  275    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
  279    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  280    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  283    for (
int i = 0; i < 
m_nUser; i++)
 
  287        mm->SetPosition(Vector(
m_dist, 0.0, 0.0));
 
  291        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  294    double statsStartTime = 0.300; 
 
  295    double statsDuration = 0.6;
 
  296    double tolerance = 0.1;
 
  299    lteHelper->EnableMacTraces();
 
  300    lteHelper->EnableRlcTraces();
 
  311    std::vector<uint64_t> dlDataRxed;
 
  312    for (
int i = 0; i < 
m_nUser; i++)
 
  318        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  319        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)dlDataRxed.at(i)
 
  320                              << 
"  thr " << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  329    for (
int i = 0; i < 
m_nUser; i++)
 
  334                                  " Unfair Throughput!");
 
  341    std::vector<uint64_t> ulDataRxed;
 
  342    for (
int i = 0; i < 
m_nUser; i++)
 
  348        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  349        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)ulDataRxed.at(i)
 
  350                              << 
"  thr " << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  359    for (
int i = 0; i < 
m_nUser; i++)
 
  364                                  " Unfair Throughput!");
 
 
  428    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  438    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  439    mobility.Install(enbNodes);
 
  440    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  441    mobility.Install(ueNodes);
 
  446    lteHelper->SetSchedulerType(
"ns3::FdBetFfMacScheduler");
 
  448    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  449    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  452    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  457    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
  461    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  462    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  465    for (
int i = 0; i < 
m_nUser; i++)
 
  469        mm->SetPosition(Vector(
m_dist.at(i), 0.0, 0.0));
 
  473        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  476    double statsStartTime = 0.300; 
 
  477    double statsDuration = 0.4;
 
  478    double tolerance = 0.1;
 
  481    lteHelper->EnableMacTraces();
 
  482    lteHelper->EnableRlcTraces();
 
  490    std::vector<uint64_t> dlDataRxed;
 
  491    double totalData = 0;
 
  492    double estTotalThr = 0;
 
  494    for (
int i = 0; i < 
m_nUser; i++)
 
  500        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  501        totalData += (
double)dlDataRxed.at(i);
 
  503        NS_LOG_INFO(
"\tUser " << i << 
" dist " << 
m_dist.at(i) << 
" imsi " << imsi << 
" bytes rxed " 
  504                              << (
double)dlDataRxed.at(i) << 
"  thr " 
  505                              << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " << 
m_nUser);
 
  508    estTotalThr = 
m_nUser * (1 / estTotalThr);
 
  509    estUeThr = estTotalThr / 
m_nUser;
 
  514    for (
int i = 0; i < 
m_nUser; i++)
 
  516        double thrRatio = 1.0 / 
m_nUser;
 
  517        double estThrRatio = (
double)dlDataRxed.at(i) / totalData;
 
  518        NS_LOG_INFO(
"\tUser " << i << 
" thrRatio " << thrRatio << 
" estThrRatio " << estThrRatio);
 
  522                                  estUeThr * tolerance,
 
  523                                  " Unfair Throughput!");
 
  531    std::vector<uint64_t> ulDataRxed;
 
  532    for (
int i = 0; i < 
m_nUser; i++)
 
  538        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  540                              << (
double)ulDataRxed.at(i) << 
"  thr " 
  541                              << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  546                                  " Unfair Throughput!");