Bug-fix in LteMiErrorModel on BLER curves of MCS 10, 14, 17 and 18 (bug 1628 of bugzilla)
authorMarco Miozzo <marco.miozzo@cttc.es>
Mon, 15 Jul 2013 13:38:53 +0200
changeset 10096 e7367028d8a6
parent 10095 77825e6792b2
child 10097 b7d9a6de6e94
child 10098 6eae0980db76
Bug-fix in LteMiErrorModel on BLER curves of MCS 10, 14, 17 and 18 (bug 1628 of bugzilla)
src/lte/doc/source/lte-testing.rst
src/lte/model/lte-mi-error-model.cc
src/lte/test/lte-test-harq.cc
src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- a/src/lte/doc/source/lte-testing.rst	Wed Jun 26 18:42:17 2013 +0200
+++ b/src/lte/doc/source/lte-testing.rst	Mon Jul 15 13:38:53 2013 +0200
@@ -634,13 +634,13 @@
 
    \mathrm{T_{test-1}} = 0.0 \times 1 + 0.77 \times 2 + 0.23 \times 3 = 2.23
 
-   \mathrm{T_{test-2}} = 0.0 \times 1 + 0.9862 \times 2 + 0.0138 \times 3 = 2.0138
+   \mathrm{T_{test-2}} = 0.0 \times 1 + 0.995 \times 2 + 0.005 \times 3 = 2.005
 
 The expected throughput is calculted by counting the number of transmission slots available during the simulation (e.g., the number of TTIs) and the size of the TB in the simulation, in detail:
 
 .. math::
 
-   \mathrm{Thr_{test-i}} = \frac{TTI_{NUM}}{T_{test-i}} TB_{size} = \left\{ \begin{array}{lll} \dfrac{1000}{2.23}41 = 18375\mbox{ bps} & \mbox{ for test-1} \\ & \\ \dfrac{1000}{2.0138}469 = 236096\mbox{ bps} & \mbox{ for test-2}\end{array} \right.
+   \mathrm{Thr_{test-i}} = \frac{TTI_{NUM}}{T_{test-i}} TB_{size} = \left\{ \begin{array}{lll} \dfrac{1000}{2.23}41 = 18375\mbox{ bps} & \mbox{ for test-1} \\ & \\ \dfrac{1000}{2.005}597 = 297755\mbox{ bps} & \mbox{ for test-2}\end{array} \right.
 
 where :math:`TTI_{NUM}` is the total number of TTIs in 1 second.
 The test is performed both for Round Robin scheduler. The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. This tolerance is needed to account for the transient behavior at the beginning of the simulation and the on-fly blocks at the end of the simulation.
--- a/src/lte/model/lte-mi-error-model.cc	Wed Jun 26 18:42:17 2013 +0200
+++ b/src/lte/model/lte-mi-error-model.cc	Mon Jul 15 13:38:53 2013 +0200
@@ -193,7 +193,7 @@
     -1.000, -1.000, 0.01048, // QPSK retx
     0.1257, 0.1528, 0.1667, 0.2188, 0.2680, 0.3229, 0.3818, 0.4607, 0.5373, 0.6081, // QPSK
     0.07198, 0.16632, 0.3737, // 16 QAM retx
-    0.7451, 0.4049, 0.4472, 0.4975, -1.000, -1.000, -1.000, //16QAM
+    0.3783, 0.4049, 0.4472, 0.4975, 0.5556, -1.000, -1.000, //16QAM
     -1.000, -1.000, -1.000, // 64QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000  // 64QAM
   },
@@ -202,36 +202,36 @@
     -1.000, -1.000, 0.01026, // QPSK retx
     0.1224, 0.1497, 0.1638, 0.2139, 0.2636, 0.3195, 0.3768, 0.4520, 0.5269, 0.5963, // QPSK
     0.07228, 0.1652, 0.36928, // 16QAM retx
-    0.7412, 0.3979, 0.4399, 0.4894, 0.6422, 0.6034, 0.6619, // 16QAM
+    0.3754, 0.3979, 0.4399, 0.4894, 0.5464, 0.6034, 0.6619, // 16QAM
     0.21138, 0.42448, 0.77898, // 64QAM retx
-    0.7538, 0.7743, 0.5627, 0.6089, 0.6577, 0.7049, 0.7508, -1.000, -1.000, -1.000, -1.000, -1.000  //64QAM
+    0.50662, 0.52226, 0.5627, 0.6089, 0.6577, 0.7049, 0.7508, -1.000, -1.000, -1.000, -1.000, -1.000  //64QAM
   },
   // CB of 2560
   {
      -1.000, -1.000, 0.01008, // QPSK retx
     0.1211, 0.1480, 0.1615, 0.2119, 0.2611, 0.3157, 0.3735, 0.4458, 0.5205, 0.5902, // QPSK
     0.0592, 0.15188, 0.36016, // 16 QAM retx
-    0.7376, 0.3939, 0.4351, 0.4851, 0.6365, 0.5976, 0.6554, // 16QAM
+    0.3729, 0.3939, 0.4351, 0.4851, 0.5416, 0.5976, 0.6554, // 16QAM
     0.20886, 0.41926, 0.76674, // 64 QAM retx
-    0.7442, 0.7701, 0.5619, 0.6056, 0.6521, 0.6982, 0.7441, 0.7874, 0.8315, 0.8735, 0.9089, 0.9369  // 64QAM
+    0.50028, 0.51888, 0.5619, 0.6056, 0.6521, 0.6982, 0.7441, 0.7874, 0.8315, 0.8735, 0.9089, 0.9369  // 64QAM
   },
   // CB of 4032
   {
     -1.000, -1.000, 0.01008, // QPSK retx
     0.1208, 0.1477, 0.1612, 0.2112, 0.2606, 0.3153, 0.3728, 0.4441, 0.5185, 0.5882,  // QPSK
     0.06074, 0.1527, 0.36034, // 16 QAM retx
-    0.7349, 0.3921, 0.4338, 0.4871, 0.6535, 0.5940, 0.6527,  // 16QAM
+    0.3864, 0.3921, 0.4338, 0.4871, 0.5386, 0.5940, 0.6527,  // 16QAM
     0.2088, 0.41928, 0.76588, // 64QAM retx
-    0.7430, 0.7699, 0.5591, 0.6027, 0.6512, 0.6981, 0.7437, 0.7873, 0.8301, 0.8702, 0.9082, 0.9339  // 64QAM
+    0.50316, 0.51872, 0.5591, 0.6027, 0.6512, 0.6981, 0.7437, 0.7873, 0.8301, 0.8702, 0.9082, 0.9339  // 64QAM
   },
   // CB of 6144
   {
     -1.000, -1.000, 0.01006, // QPSK retx
     0.1207, 0.1474, 0.1612, 0.2111, 0.2605, 0.3153, 0.3726, 0.4439, 0.5193, 0.5882,  // QPSK
     0.06302, 0.15566, 0.36364, // 16QAM retx
-    0.7369, 0.3921, 0.4339, 0.4833, 0.6339, 0.5952, 0.6528, // 16QAM
+    0.3724, 0.3921, 0.4339, 0.4833, 0.5407, 0.5952, 0.6528, // 16QAM
     0.20874, 0.41872, 0.76562,  // 64QAM retx
-    0.7420, 0.7664, 0.5600, 0.6027, 0.6494, 0.6948, 0.7407, 0.7842, 0.8284, 0.8692, 0.9058, 0.9325  // 64QAM
+    0.49780, 0.51606, 0.5600, 0.6027, 0.6494, 0.6948, 0.7407, 0.7842, 0.8284, 0.8692, 0.9058, 0.9325  // 64QAM
   },
 };
   
@@ -278,7 +278,7 @@
     -1.000, -1.000, 0.00091, // QPSK retx
     0.0085, 0.0106, 0.0109, 0.0140, 0.0178, 0.0217, 0.0219, 0.0249, 0.0270, 0.0292, // QPSK
     0.00797, 0.01357, 0.0234, // 16QAM retx
-    0.0293, 0.0206, 0.0220, 0.0235, 0.0257, -1.000, -1.000, // 16 QAM
+    0.0202, 0.0206, 0.0220, 0.0235, 0.0236, -1.000, -1.000, // 16 QAM
     -1.000, -1.000, -1.000, // 64QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000
   },
@@ -287,36 +287,36 @@
     -1.000, -1.000, 0.00059, // QPSK retx
     0.0061, 0.0074, 0.0078, 0.0102, 0.0121, 0.0138, 0.0163, 0.0178, 0.0207, 0.0198, // QPSK
     0.00615, 0.01013, 0.01681, // 16QAM retx
-    0.0203, 0.0137, 0.0154, 0.0164, 0.0183, 0.0188, 0.0188, // 16QAM
+    0.0141, 0.0137, 0.0154, 0.0164, 0.0175, 0.0188, 0.0188, // 16QAM
     0.01053, 0.01869, 0.02261, // 64QAM retx
-    0.0220, 0.0215, 0.0157, 0.0169, 0.0185, 0.0189, 0.0200, -1.000, -1.000, -1.000, -1.000, -1.000 // 64QAM
+    0.01661, 0.01655, 0.0157, 0.0169, 0.0185, 0.0189, 0.0200, -1.000, -1.000, -1.000, -1.000, -1.000 // 64QAM
   },
   // CB of 2560 bits
   {
     -1.000, -1.000, 0.00039, // QPSK retx
     0.0040, 0.0047, 0.0050, 0.0063, 0.0079, 0.0091, 0.0101, 0.0117, 0.0123, 0.0129, // QPSK
     0.00213, 0.00475, 0.00921, // 16QAM retx
-    0.0123, 0.0091, 0.0095, 0.0102, 0.0116, 0.0114, 0.0119, // 16QAM
+    0.0083, 0.0091, 0.0095, 0.0102, 0.0112, 0.0114, 0.0119, // 16QAM
     0.00637, 0.01161, 0.01273, // 64QAM retx
-    0.0116, 0.0123, 0.0096, 0.0104, 0.0109, 0.0108, 0.0118, 0.0122, 0.0117, 0.0110, 0.0097, 0.0085 // 64QAM
+    0.00951, 0.00943, 0.0096, 0.0104, 0.0109, 0.0108, 0.0118, 0.0122, 0.0117, 0.0110, 0.0097, 0.0085 // 64QAM
   },
   // CB of 4032 bits
   {
     -1.000, -1.000, 0.00029, // QPSK retx
     0.0032, 0.0038, 0.0039, 0.0051, 0.0063, 0.0072, 0.0079, 0.0084, 0.0100, 0.0106, // QPSK
     0.00193, 0.00405, 0.00777, // 16QAM retx
-    0.0106, 0.0074, 0.0078, 0.0090, 0.0095, 0.0089, 0.0092, // 16 QAM
+    0.0092, 0.0074, 0.0078, 0.0090, 0.0084, 0.0089, 0.0092, // 16 QAM
     0.00565, 0.00981, 0.01143, // 64QAM retx
-    0.0101, 0.0096, 0.0080, 0.0081, 0.0090, 0.0091, 0.0095, 0.0096, 0.0094, 0.0086, 0.0078, 0.0071 // 64QAM
+    0.00795, 0.0080, 0.0080, 0.0081, 0.0090, 0.0091, 0.0095, 0.0096, 0.0094, 0.0086, 0.0078, 0.0071 // 64QAM
   },
   // CB of 6144 bits
   {
     -1.000, -1.000, 0.00025, // QPSK retx
     0.0025, 0.0032, 0.0032, 0.0042, 0.0054, 0.0059, 0.0064, 0.0073, 0.0081, 0.0076, // QPSK
     0.00175, 0.00367, 0.006223, // 16QAM retx
-    0.0083, 0.0058, 0.0064, 0.0070, 0.0077, 0.0074, 0.0080, // 16QAM
+    0.0056, 0.0058, 0.0064, 0.0070, 0.0068, 0.0074, 0.0080, // 16QAM
     0.00437, 0.00785, 0.00873,
-    0.0080, 0.0080, 0.0061, 0.0066, 0.0069, 0.0080, 0.0081, 0.0080, 0.0077, 0.0068, 0.0066, 0.0058 // 64QAM
+    0.0060, 0.00609, 0.0061, 0.0066, 0.0069, 0.0080, 0.0081, 0.0080, 0.0077, 0.0068, 0.0066, 0.0058 // 64QAM
   }
     
 };
--- a/src/lte/test/lte-test-harq.cc	Wed Jun 26 18:42:17 2013 +0200
+++ b/src/lte/test/lte-test-harq.cc	Mon Jul 15 13:38:53 2013 +0200
@@ -70,10 +70,10 @@
   AddTestCase (new LenaHarqTestCase (2, 4000, 41, 0.17, 18375), TestCase::QUICK);
 
   // Tests on DL/UL Data channels (PDSCH, PUSCH)
-  // MCS 10 TB size of 469 bytes SINR 4 expected throughput 236096 bytes/s
+  // MCS 12 TB size of 597 bytes SINR 4 expected throughput 297755 bytes/s
   // TBLER 1st tx 1.0
-  // TBLER 2nd tx 0.0138
-  AddTestCase (new LenaHarqTestCase (1, 640, 469, 0.02, 236096), TestCase::QUICK);
+  // TBLER 2nd tx 0.005
+  AddTestCase (new LenaHarqTestCase (1, 640, 597, 0.06, 297755), TestCase::QUICK);
 
 
 
--- a/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	Wed Jun 26 18:42:17 2013 +0200
+++ b/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	Mon Jul 15 13:38:53 2013 +0200
@@ -161,13 +161,13 @@
   // Traffic1 info
   //   UDP traffic: payload size = 100 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/775000 + 1/421000 ) = 765051 byte/s
-  // 132000 * 4 = 528000 < 765051 -> estimated throughput in downlink = 132000 byte/sec
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 132000 * 4 = 528000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
   std::vector<uint16_t> dist1;
   dist1.push_back (0);       // User 0 distance --> MCS 28
-  dist1.push_back (4800);    // User 1 distance --> MCS 16
-  dist1.push_back (6000);    // User 2 distance --> MCS 14
-  dist1.push_back (10000);   // User 3 distance --> MCS 8
+  dist1.push_back (4800);    // User 1 distance --> MCS 22
+  dist1.push_back (6000);    // User 2 distance --> MCS 20
+  dist1.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize1;
   packetSize1.push_back (100);
   packetSize1.push_back (100);
@@ -183,34 +183,34 @@
   // Traffic2 info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/775000 + 1/421000 ) = 765051 byte/s
-  // 232000 * 4 = 928000 > 765051 -> estimated throughput in downlink = 765051 / 4 = 191263 byte/sec 
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 232000 * 4 = 928000 < 1209046 -> estimated throughput in downlink = 928000 / 4 = 230000 byte/sec
   std::vector<uint16_t> dist2;
   dist2.push_back (0);       // User 0 distance --> MCS 28
-  dist2.push_back (4800);    // User 1 distance --> MCS 16
-  dist2.push_back (6000);    // User 2 distance --> MCS 14
-  dist2.push_back (10000);   // User 3 distance --> MCS 8
+  dist2.push_back (4800);    // User 1 distance --> MCS 22
+  dist2.push_back (6000);    // User 2 distance --> MCS 20
+  dist2.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize2;
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   std::vector<uint32_t> estThrPssDl2;
-  estThrPssDl2.push_back (191263); // User 0 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (191263); // User 1 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (191263); // User 2 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (191263); // User 3 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 0 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 1 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 2 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 3 estimated TTI throughput from PSS
   AddTestCase (new LenaPssFfMacSchedulerTestCase2 (dist2,estThrPssDl2,packetSize2,1,errorModel), TestCase::QUICK);
 
   // Test Case 3: heterogeneous flow test in PSS
   //   UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
-  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate 
-  // Maximum throughput = 3 / ( 1/2196000 + 1/903000 + 1/775000 ) = 1051482  byte/s
-  // 132000 + 232000 + 332000 = 696000 < 1051482 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 + 232000 + 332000 = 696000 < 1486569 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
   std::vector<uint16_t> dist3;
   dist3.push_back (0);    // User 0 distance --> MCS 28
-  dist3.push_back (4800);    // User 1 distance --> MCS 16
-  dist3.push_back (6000);    // User 2 distance --> MCS 14
+  dist3.push_back (4800);    // User 1 distance --> MCS 22
+  dist3.push_back (6000);    // User 2 distance --> MCS 20
   std::vector<uint16_t> packetSize3;
   packetSize3.push_back (100);
   packetSize3.push_back (200);
@@ -545,7 +545,7 @@
   remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
 
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestPssFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -676,7 +676,7 @@
       // get the lcId
       uint8_t lcId = 4;
       dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_nUser);
+      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_estThrPssDl.at (i));
     }
 
   for (int i = 0; i < m_nUser; i++)