68 struct SnrEfficiencyMcs
79 SnrEfficiencyMcs snrEfficiencyMcs[] = {
80 {-5.00000, 0.08024, -1}, {-4.00000, 0.10030, -1}, {-3.00000, 0.12518, -1},
81 {-2.00000, 0.15589, 0}, {-1.00000, 0.19365, 0}, {0.00000, 0.23983, 2},
82 {1.00000, 0.29593, 2}, {2.00000, 0.36360, 2}, {3.00000, 0.44451, 4},
83 {4.00000, 0.54031, 4}, {5.00000, 0.65251, 6}, {6.00000, 0.78240, 6},
84 {7.00000, 0.93086, 8}, {8.00000, 1.09835, 8}, {9.00000, 1.28485, 10},
85 {10.00000, 1.48981, 12}, {11.00000, 1.71229, 12}, {12.00000, 1.95096, 14},
86 {13.00000, 2.20429, 14}, {14.00000, 2.47062, 16}, {15.00000, 2.74826, 18},
87 {16.00000, 3.03560, 18}, {17.00000, 3.33115, 20}, {18.00000, 3.63355, 20},
88 {19.00000, 3.94163, 22}, {20.00000, 4.25439, 22}, {21.00000, 4.57095, 24},
89 {22.00000, 4.89060, 24}, {23.00000, 5.21276, 26}, {24.00000, 5.53693, 26},
90 {25.00000, 5.86271, 28}, {26.00000, 6.18980, 28}, {27.00000, 6.51792, 28},
91 {28.00000, 6.84687, 28}, {29.00000, 7.17649, 28}, {30.00000, 7.50663, 28},
94 double txPowerDbm = 30;
95 double txPowerLin = std::pow(10, (txPowerDbm - 30) / 10);
97 double noisePowerDbm =
98 ktDbm + 10 * std::log10(25 * 180000);
99 double receiverNoiseFigureDb = 9.0;
100 double noiseLin = std::pow(10, (noisePowerDbm - 30 + receiverNoiseFigureDb) / 10);
104 double loss[] = {81.062444, 134.078605, 144.259958};
105 double dist[] = {100.0, 500.0, 1500};
107 int numOfTests =
sizeof(loss) /
sizeof(
double);
108 for (
int i = 0; i < numOfTests; i++)
112 double sinrLin = (txPowerLin / (pow(10, loss[i] / 10))) / noiseLin;
114 double sinrDb = 10 * std::log10(sinrLin);
115 NS_LOG_INFO(
" Ptx " << txPowerDbm <<
" Pn " << noisePowerDbm <<
" Fn "
116 << receiverNoiseFigureDb <<
" Pl " << loss[i] <<
" dist " << dist[i]);
119 int numSnrEfficiencyMcsEntries =
sizeof(snrEfficiencyMcs) /
sizeof(SnrEfficiencyMcs);
120 for (
int j = 0; j < numSnrEfficiencyMcsEntries && snrEfficiencyMcs[j].snrDb < sinrDb; ++j)
122 mcs = snrEfficiencyMcs[j].mcsIndex;
125 std::ostringstream name;
126 name <<
" snr= " << sinrDb <<
" dB, "
127 <<
" mcs= " << snrEfficiencyMcs[i].mcsIndex;
129 TestCase::Duration::QUICK);
178 lteHelper->SetAttribute(
"PathlossModel",
179 StringValue(
"ns3::HybridBuildingsPropagationLossModel"));
182 lteHelper->SetEnbDeviceAttribute(
"DlEarfcn",
UintegerValue(200));
183 lteHelper->SetEnbDeviceAttribute(
"UlEarfcn",
UintegerValue(18200));
184 lteHelper->SetUeDeviceAttribute(
"DlEarfcn",
UintegerValue(200));
187 lteHelper->SetPathlossModelAttribute(
"ShadowSigmaOutdoor",
DoubleValue(0.0));
188 lteHelper->SetPathlossModelAttribute(
"ShadowSigmaIndoor",
DoubleValue(0.0));
189 lteHelper->SetPathlossModelAttribute(
"ShadowSigmaExtWalls",
DoubleValue(0.0));
200 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
201 mobility.Install(allNodes);
207 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
208 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
209 ueDevs = lteHelper->InstallUeDevice(ueNodes);
212 mm_enb->SetPosition(Vector(0.0, 0.0, 30.0));
214 mm_ue->SetPosition(Vector(
m_distance, 0.0, 1.0));
218 enbPhy->SetAttribute(
"TxPower",
DoubleValue(30.0));
219 enbPhy->SetAttribute(
"NoiseFigure",
DoubleValue(5.0));
224 uePhy->SetAttribute(
"NoiseFigure",
DoubleValue(9.0));
227 lteHelper->Attach(ueDevs, enbDevs.
Get(0));
232 lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
241 uePhy->GetDownlinkSpectrumPhy()->AddCtrlSinrChunkProcessor(testSinr);
246 lteHelper->EnableMacTraces();
247 lteHelper->EnableRlcTraces();
252 double calculatedSinrDb = 10.0 * std::log10(sinrCatcher.
GetValue()->operator[](0));