Bug-fix in UE measurements: introduce a factor of 2 in RSSI evaluation for considering all the power of RS over the symbol
authorMarco Miozzo <marco.miozzo@cttc.es>
Fri, 05 Apr 2013 12:26:57 +0200
changeset 10034 b60f1fefda78
parent 10033 46a784d48c2e
child 10035 c066a43792b3
Bug-fix in UE measurements: introduce a factor of 2 in RSSI evaluation for considering all the power of RS over the symbol
src/lte/doc/source/lte-design.rst
src/lte/model/lte-ue-phy.cc
src/lte/test/lte-test-ue-measurements.cc
src/lte/test/reference/lte_ue_measurements.m
--- a/src/lte/doc/source/lte-design.rst	Thu Apr 04 18:58:49 2013 +0200
+++ b/src/lte/doc/source/lte-design.rst	Fri Apr 05 12:26:57 2013 +0200
@@ -791,13 +791,19 @@
          = \frac{\sum_{k=0}^{K-1}\frac{(M \times P(k))}{M}}{K}
          = \frac{\sum_{k=0}^{K-1}(P(k))}{K}
 
-where :math:`P_m(k)` represents the signal power of the RE :math:`m` within the RB :math:`i`, which, as observed before, is constant within the same RB and equal to :math:`P(k)`, :math:`M` is the number of REs in a RB and :math:`K` is the number of RBs.
+where :math:`P_m(k)` represents the signal power of the RE :math:`m` within the RB :math:`k`, which, as observed before, is constant within the same RB and equal to :math:`P(k)`, :math:`M` is the number of REs in a RB and :math:`K` is the number of RBs. It is to be noted that, :math:`P(k)`, and in general all the powers defined in this section, is obtained in the simulator from the PSD of the RB (which is the standard value returned from the ``LteInterferencePowerChunkProcessor``), in detail:
+
+.. math::
+
+    P(k) = PSD_{RB}(k)*180000/12
+
+where :math:`PSD_{RB}(k)` is the power spectral density of the RB :math:`k`, :math:`180000` is the bandwidth in Hz of the RB and :math:`12` is the number of REs per RB.
 Similarly, for RSSI we have
 
 .. math::
-    RSSI = \sum_{k=0}^{K-1} \frac{\sum_{m=0}^{M-1} ( P_m(k) + I_m(k) + N_m)}{M}
-         = \sum_{k=0}^{K-1} \frac{M \times ( P(k) + I(k) + N)}{M}
-         = \sum_{k=0}^{K-1} ( P(k) + I(k) + N)
+    RSSI = \sum_{k=0}^{K-1} 2 \times \frac{\sum_{m=0}^{M-1} ( P_m(k) + I_m(k) + N_m)}{M}
+         = \sum_{k=0}^{K-1} 2 \times \frac{M \times ( P(k) + I(k) + N)}{M}
+         = \sum_{k=0}^{K-1} 2 \times ( P(k) + I(k) + N)
 
 where :math:`I_m(k)` represents the interference power of the RE :math:`m` within the RB :math:`i`, which, as observed before, is constant within the same RB and equal to :math:`P(k)`, and :math:`N_m` is the noise in the RE :math:`m` (another time constant for all the REs to :math:`N`).
 
@@ -807,7 +813,7 @@
 
     RSRP_i = \frac{\sum_{k=0}^{K-1}(P_i(k))}{K}
 
-    RSSI_i = RSSI_j = \sum_{k=0}^{K-1} ( I_j(k) + P_j(k) + N )
+    RSSI_i = RSSI_j = \sum_{k=0}^{K-1} 2 \times ( I_j(k) + P_j(k) + N )
 
     RSRQ_i^j = K \times RSRP_i / RSSI^j
 
--- a/src/lte/model/lte-ue-phy.cc	Thu Apr 04 18:58:49 2013 +0200
+++ b/src/lte/model/lte-ue-phy.cc	Fri Apr 05 12:26:57 2013 +0200
@@ -488,7 +488,7 @@
               // 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);
+              rsrqSum += (2 * (noisePowerTxW + intPowerTxW));
             }
           NS_ASSERT (rbNum == (*itPss).nRB);
           double rsrp_dBm = 10 * log10 (1000 * ((*itPss).pssPsdSum / (double)rbNum));
--- a/src/lte/test/lte-test-ue-measurements.cc	Thu Apr 04 18:58:49 2013 +0200
+++ b/src/lte/test/lte-test-ue-measurements.cc	Fri Apr 05 12:26:57 2013 +0200
@@ -70,25 +70,44 @@
   : TestSuite ("lte-ue-measurements", SYSTEM)
 {
 
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=10, d2=10000",  10.000000, 10000.000000, -53.739702, -113.739702, -3.010305, -63.010305));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=20, d2=10000",  20.000000, 10000.000000, -59.760302, -113.739702, -3.010319, -56.989719));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=10000",  50.000000, 10000.000000, -67.719102, -113.739702, -3.010421, -49.031021));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000",  100.000000, 10000.000000, -73.739702, -113.739702, -3.010783, -43.010783));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000",  200.000000, 10000.000000, -79.760302, -113.739702, -3.012232, -36.991632));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000",  100.000000, 10000.000000, -73.739702, -113.739702, -3.010783, -43.010783));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000",  200.000000, 10000.000000, -79.760302, -113.739702, -3.012232, -36.991632));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=500, d2=10000",  500.000000, 10000.000000, -87.719102, -113.739702, -3.022359, -29.042959));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=1000, d2=10000",  1000.000000, 10000.000000, -93.739702, -113.739702, -3.058336, -23.058336));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=2000, d2=10000",  2000.000000, 10000.000000, -99.760302, -113.739702, -3.199337, -17.178738));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=5000, d2=10000",  5000.000000, 10000.000000, -107.719102, -113.739702, -4.075793, -10.096393));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=10000, d2=10000",  10000.000000, 10000.000000, -113.739702, -113.739702, -6.257687, -6.257687));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=20000, d2=10000",  20000.000000, 10000.000000, -119.760302, -113.739702, -10.373365, -4.352765));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=50000, d2=10000",  50000.000000, 10000.000000, -127.719102, -113.739702, -17.605046, -3.625645));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100000, d2=10000",  100000.000000, 10000.000000, -133.739702, -113.739702, -23.511071, -3.511071));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200000, d2=10000",  200000.000000, 10000.000000, -139.760302, -113.739702, -29.502549, -3.481949));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=500000, d2=10000",  500000.000000, 10000.000000, -147.719102, -113.739702, -37.453160, -3.473760));
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=1000000, d2=10000",  1000000.000000, 10000.000000, -153.739702, -113.739702, -43.472589, -3.472589));
 
-  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));
+  
+//   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));
 
 }
 
--- a/src/lte/test/reference/lte_ue_measurements.m	Thu Apr 04 18:58:49 2013 +0200
+++ b/src/lte/test/reference/lte_ue_measurements.m	Fri Apr 05 12:26:57 2013 +0200
@@ -78,8 +78,8 @@
   rsrp2dBm = 10.*log10(1000*rsrp2);
 
   %% RSSI (linear)
-  rssi1 = (dlp*g11dl + dlp*g21dl + dln)*nrbs;
-  rssi2 = (dlp*g11dl + dlp*g21dl + dln)*nrbs;
+  rssi1 = 2*(dlp*g11dl + dlp*g21dl + dln)*nrbs;
+  rssi2 = 2*(dlp*g11dl + dlp*g21dl + dln)*nrbs;
 
   %% RSRQ (linear)
   rsrq1 = (nrbs * rsrp1) / rssi1;