diff --git a/src/lte/model/lte-ue-phy.cc b/src/lte/model/lte-ue-phy.cc index 942a49e6f..c87208cef 100644 --- a/src/lte/model/lte-ue-phy.cc +++ b/src/lte/model/lte-ue-phy.cc @@ -448,8 +448,10 @@ LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr) Values::const_iterator it; for (it = m_rsReceivedPower.ConstValuesBegin (); it != m_rsReceivedPower.ConstValuesEnd (); it++) { - // convert PSD [W/Hz] to linear power [W] - double powerTxW = (*it) * (m_dlBandwidth * 180000); + // convert PSD [W/Hz] to linear power [W] for the single RE + // we consider only one RE for the RS since the channel is + // flat within the same RB + double powerTxW = ((*it) * 180000.0) / 12.0; sum += powerTxW; rbNum++; } @@ -483,13 +485,13 @@ LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr) for (itPj = m_rsReceivedPower.ConstValuesBegin (); itPj != m_rsReceivedPower.ConstValuesEnd (); itIntN++, itPj++) { rbNum++; - // convert PSD [W/Hz] to linear power [W] - double noisePowerTxW = (*itIntN) * (m_dlBandwidth * 180000); - double intPowerTxW = (*itPj) * (m_dlBandwidth * 180000); + // convert PSD [W/Hz] to linear power [W] for the single RE + double noisePowerTxW = ((*itIntN) * 180000.0) / 12.0; + double intPowerTxW = ((*itPj) * 180000.0) / 12.0; rsrqSum += (noisePowerTxW + intPowerTxW); } NS_ASSERT (rbNum == (*itPss).nRB); - double rsrp_dBm = 10 * log10 (1000 * (*itPss).pssPsdSum / (double)rbNum); + double rsrp_dBm = 10 * log10 (1000 * ((*itPss).pssPsdSum / (double)rbNum)); double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum); if (rsrq_dB > m_pssReceptionThreshold) @@ -854,8 +856,8 @@ LteUePhy::ReceivePss (uint16_t cellId, Ptr p) Values::const_iterator itPi; for (itPi = p->ConstValuesBegin (); itPi != p->ConstValuesEnd (); itPi++) { - // convert PSD [W/Hz] to linear power [W] - double powerTxW = (*itPi) * (m_dlBandwidth * 180000); + // convert PSD [W/Hz] to linear power [W] for the single RE + double powerTxW = ((*itPi) * 180000.0) / 12.0; sum += powerTxW; nRB++; } diff --git a/src/lte/test/lte-test-ue-measurements.cc b/src/lte/test/lte-test-ue-measurements.cc index b397a935c..bc7330f9c 100644 --- a/src/lte/test/lte-test-ue-measurements.cc +++ b/src/lte/test/lte-test-ue-measurements.cc @@ -70,19 +70,25 @@ LteUeMeasurementsTestSuite::LteUeMeasurementsTestSuite () : TestSuite ("lte-ue-measurements", SYSTEM) { - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=10", 50.000000, 10.000000, -42.947889, -28.968489, -14.149733, -0.170333)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=20", 50.000000, 20.000000, -42.947889, -34.989089, -8.603380, -0.644580)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=50", 50.000000, 50.000000, -42.947889, -42.947889, -3.010300, -3.010300)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=100", 50.000000, 100.000000, -42.947889, -48.968489, -0.969101, -6.989700)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=200", 50.000000, 200.000000, -42.947889, -54.989089, -0.263290, -12.304490)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=500", 50.000000, 500.000000, -42.947889, -62.947889, -0.043214, -20.043214)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=1000", 50.000000, 1000.000000, -42.947889, -68.968489, -0.010844, -26.031444)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=10000", 50.000000, 10000.000000, -42.947889, -88.968489, -0.000109, -46.020709)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=100000", 50.000000, 100000.000000, -42.947889, -108.968489, -0.000002, -66.020601)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=1000000", 50.000000, 1000000.000000, -42.947889, -128.968489, -0.000000, -86.020600)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=4500, d2=12600", 4500.000000, 12600.000000, -82.032740, -90.975900, -0.524862, -9.468022)); - AddTestCase (new LteUeMeasurementsTestCase ("d1=5400, d2=12600", 5400.000000, 12600.000000, -83.616365, -90.975900, -0.737119, -8.096655)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=10, d2=10000", 10.000000, 10000.000000, -53.739702, -113.739702, -0.000005, -60.000005)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=20, d2=10000", 20.000000, 10000.000000, -59.760302, -113.739702, -0.000019, -53.979419)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=10000", 50.000000, 10000.000000, -67.719102, -113.739702, -0.000121, -46.020721)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000", 100.000000, 10000.000000, -73.739702, -113.739702, -0.000483, -40.000483)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000", 200.000000, 10000.000000, -79.760302, -113.739702, -0.001932, -33.981332)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000", 100.000000, 10000.000000, -73.739702, -113.739702, -0.000483, -40.000483)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000", 200.000000, 10000.000000, -79.760302, -113.739702, -0.001932, -33.981332)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=500, d2=10000", 500.000000, 10000.000000, -87.719102, -113.739702, -0.012059, -26.032659)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=1000, d2=10000", 1000.000000, 10000.000000, -93.739702, -113.739702, -0.048036, -20.048036)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=2000, d2=10000", 2000.000000, 10000.000000, -99.760302, -113.739702, -0.189037, -14.168438)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=5000, d2=10000", 5000.000000, 10000.000000, -107.719102, -113.739702, -1.065494, -7.086093)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=10000, d2=10000", 10000.000000, 10000.000000, -113.739702, -113.739702, -3.247387, -3.247387)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=20000, d2=10000", 20000.000000, 10000.000000, -119.760302, -113.739702, -7.363065, -1.342465)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=50000, d2=10000", 50000.000000, 10000.000000, -127.719102, -113.739702, -14.594746, -0.615346)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=100000, d2=10000", 100000.000000, 10000.000000, -133.739702, -113.739702, -20.500771, -0.500771)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=200000, d2=10000", 200000.000000, 10000.000000, -139.760302, -113.739702, -26.492249, -0.471649)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=500000, d2=10000", 500000.000000, 10000.000000, -147.719102, -113.739702, -34.442860, -0.463460)); + AddTestCase (new LteUeMeasurementsTestCase ("d1=1000000, d2=10000", 1000000.000000, 10000.000000, -153.739702, -113.739702, -40.462289, -0.462289)); } diff --git a/src/lte/test/reference/lte_ue_measurements.m b/src/lte/test/reference/lte_ue_measurements.m index 712275708..22c4bce52 100644 --- a/src/lte/test/reference/lte_ue_measurements.m +++ b/src/lte/test/reference/lte_ue_measurements.m @@ -70,11 +70,11 @@ for d2 = [10000] %% RSRP (linear) - rsrp1 = g11dl.*dlp + rsrp1 = g11dl.*dlp; rsrp2 = g21dl.*dlp; %% RSRP (dBm) - rsrp1dBm = 10.*log10(1000*rsrp1) + rsrp1dBm = 10.*log10(1000*rsrp1); rsrp2dBm = 10.*log10(1000*rsrp2); %% RSSI (linear) @@ -90,24 +90,13 @@ for d2 = [10000] rsrq2dB = 10.*log10(rsrq2); %% SINR (linear) - dlsinr = dlp*g11dl / (dlp*g21dl + dln) + dlsinr = dlp*g11dl / (dlp*g21dl + dln); % ulsinr = ulp*g11ul / (ulp*g21ul + uln); %% SINR (dB) dlsinrdB = 10.*log10(dlsinr); % ulsinrdB = 10.*log10(ulsinr); - - %% Spectal Efficiency -% dlse = log2(1 + dlsinr./gamma); -% ulse = log2(1 + ulsinr./gamma); - - %% to get the MCS, you need to do a manual lookup into 3GPP R1-081483 - %% starting from the spectral efficiency value. - %% See the Testing section in the LTE module documentation for more info - %% on how this is done. You might as well look into lte_amc.m - - printf("AddTestCase (new LteUeMeasurementsTestCase (\"d1=%d, d2=%d\", % f, %f, % f, %f, % f, %f));\n", \ d1, d2, d1, d2, rsrp1dBm, rsrp2dBm, rsrq1dB, rsrq2dB)