A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lte-amc.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Original Author: Giuseppe Piro <g.piro@poliba.it>
18 * Modified by: Marco Miozzo <mmiozzo@cttc.es>
19 * Nicola Baldo <nbaldo@cttc.es>
20 */
21
22#include "ns3/enum.h"
23#include <ns3/assert.h>
24#include <ns3/double.h>
25#include <ns3/log.h>
26#include <ns3/lte-amc.h>
27#include <ns3/lte-mi-error-model.h>
28#include <ns3/math.h>
29#include <ns3/spectrum-value.h>
30
31#include <vector>
32
33namespace ns3
34{
35
37
39
47static const double SpectralEfficiencyForCqi[16] = {
48 0.0, // out of range
49 0.15,
50 0.23,
51 0.38,
52 0.6,
53 0.88,
54 1.18,
55 1.48,
56 1.91,
57 2.41,
58 2.73,
59 3.32,
60 3.9,
61 4.52,
62 5.12,
63 5.55,
64};
65
66#if 0 // currently unused
75static const int ModulationSchemeForMcs[32] = {
76 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
77 4, 4, 4, 4, 4, 4, 4,
78 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
79 2, // reserved
80 4, // reserved
81 6, // reserved
82};
83#endif
84
94static const double SpectralEfficiencyForMcs[32] = {
95 0.15, 0.19, 0.23, 0.31, 0.38, 0.49, 0.6, 0.74, 0.88, 1.03, 1.18, 1.33, 1.48, 1.7, 1.91, 2.16,
96 2.41, 2.57, 2.73, 3.03, 3.32, 3.61, 3.9, 4.21, 4.52, 4.82, 5.12, 5.33, 5.55, 0, 0, 0,
97};
98
104static const int McsToItbsDl[29] = {
105 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13,
106 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
107};
108
114static const int McsToItbsUl[29] = {
115 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13,
116 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26,
117};
118
127static const int TransportBlockSizeTable[110][27] = {
128 /* NPRB 001*/ {16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224,
129 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
130 /* NPRB 002*/ {32, 56, 72, 104, 120, 144, 176, 224, 256, 296, 328, 376, 440, 488,
131 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1192, 1256, 1480},
132 /* NPRB 003*/ {56, 88, 144, 176, 208, 224, 256, 328, 392, 456, 504, 584, 680, 744,
133 840, 904, 968, 1064, 1160, 1288, 1384, 1480, 1608, 1736, 1800, 1864, 2216},
134 /* NPRB 004*/ {88, 144, 176, 208, 256, 328, 392, 472, 536,
135 616, 680, 776, 904, 1000, 1128, 1224, 1288, 1416,
136 1544, 1736, 1864, 1992, 2152, 2280, 2408, 2536, 2984},
137 /* NPRB 005*/ {120, 176, 208, 256, 328, 424, 504, 584, 680,
138 776, 872, 1000, 1128, 1256, 1416, 1544, 1608, 1800,
139 1992, 2152, 2344, 2472, 2664, 2856, 2984, 3112, 3752},
140 /* NPRB 006*/ {152, 208, 256, 328, 408, 504, 600, 712, 808,
141 936, 1032, 1192, 1352, 1544, 1736, 1800, 1928, 2152,
142 2344, 2600, 2792, 2984, 3240, 3496, 3624, 3752, 4392},
143 /* NPRB 007*/ {176, 224, 296, 392, 488, 600, 712, 840, 968,
144 1096, 1224, 1384, 1608, 1800, 1992, 2152, 2280, 2536,
145 2792, 2984, 3240, 3496, 3752, 4008, 4264, 4392, 5160},
146 /* NPRB 008*/ {208, 256, 328, 440, 552, 680, 808, 968, 1096,
147 1256, 1384, 1608, 1800, 2024, 2280, 2472, 2600, 2856,
148 3112, 3496, 3752, 4008, 4264, 4584, 4968, 5160, 5992},
149 /* NPRB 009*/ {224, 328, 376, 504, 632, 776, 936, 1096, 1256,
150 1416, 1544, 1800, 2024, 2280, 2600, 2728, 2984, 3240,
151 3624, 3880, 4136, 4584, 4776, 5160, 5544, 5736, 6712},
152 /* NPRB 010*/ {256, 344, 424, 568, 696, 872, 1032, 1224, 1384,
153 1544, 1736, 2024, 2280, 2536, 2856, 3112, 3240, 3624,
154 4008, 4264, 4584, 4968, 5352, 5736, 5992, 6200, 7480},
155 /* NPRB 011*/ {288, 376, 472, 616, 776, 968, 1128, 1320, 1544,
156 1736, 1928, 2216, 2472, 2856, 3112, 3368, 3624, 4008,
157 4392, 4776, 5160, 5544, 5992, 6200, 6712, 6968, 8248},
158 /* NPRB 012*/ {328, 424, 520, 680, 840, 1032, 1224, 1480, 1672,
159 1864, 2088, 2408, 2728, 3112, 3496, 3624, 3880, 4392,
160 4776, 5160, 5544, 5992, 6456, 6968, 7224, 7480, 8760},
161 /* NPRB 013*/ {344, 456, 568, 744, 904, 1128, 1352, 1608, 1800,
162 2024, 2280, 2600, 2984, 3368, 3752, 4008, 4264, 4776,
163 5160, 5544, 5992, 6456, 6968, 7480, 7992, 8248, 9528},
164 /* NPRB 014*/ {376, 488, 616, 808, 1000, 1224, 1480, 1672, 1928,
165 2216, 2472, 2792, 3240, 3624, 4008, 4264, 4584, 5160,
166 5544, 5992, 6456, 6968, 7480, 7992, 8504, 8760, 10296},
167 /* NPRB 015*/ {392, 520, 648, 872, 1064, 1320, 1544, 1800, 2088,
168 2344, 2664, 2984, 3368, 3880, 4264, 4584, 4968, 5352,
169 5992, 6456, 6968, 7480, 7992, 8504, 9144, 9528, 11064},
170 /* NPRB 016*/ {424, 568, 696, 904, 1128, 1384, 1672, 1928, 2216,
171 2536, 2792, 3240, 3624, 4136, 4584, 4968, 5160, 5736,
172 6200, 6968, 7480, 7992, 8504, 9144, 9912, 10296, 11832},
173 /* NPRB 017*/ {456, 600, 744, 968, 1192, 1480, 1736, 2088, 2344,
174 2664, 2984, 3496, 3880, 4392, 4968, 5160, 5544, 6200,
175 6712, 7224, 7992, 8504, 9144, 9912, 10296, 10680, 12576},
176 /* NPRB 018*/ {488, 632, 776, 1032, 1288, 1544, 1864, 2216, 2536,
177 2856, 3112, 3624, 4136, 4584, 5160, 5544, 5992, 6456,
178 7224, 7736, 8248, 9144, 9528, 10296, 11064, 11448, 13536},
179 /* NPRB 019*/ {504, 680, 840, 1096, 1352, 1672, 1992, 2344, 2664,
180 2984, 3368, 3880, 4392, 4968, 5544, 5736, 6200, 6712,
181 7480, 8248, 8760, 9528, 10296, 11064, 11448, 12216, 14112},
182 /* NPRB 020*/ {536, 712, 872, 1160, 1416, 1736, 2088, 2472, 2792,
183 3112, 3496, 4008, 4584, 5160, 5736, 6200, 6456, 7224,
184 7992, 8504, 9144, 9912, 10680, 11448, 12216, 12576, 14688},
185 /* NPRB 021*/ {568, 744, 936, 1224, 1480, 1864, 2216, 2536, 2984,
186 3368, 3752, 4264, 4776, 5352, 5992, 6456, 6712, 7480,
187 8248, 9144, 9912, 10680, 11448, 12216, 12960, 13536, 15264},
188 /* NPRB 022*/ {600, 776, 968, 1256, 1544, 1928, 2280, 2664, 3112,
189 3496, 3880, 4392, 4968, 5736, 6200, 6712, 7224, 7992,
190 8760, 9528, 10296, 11064, 11832, 12576, 13536, 14112, 16416},
191 /* NPRB 023*/ {616, 808, 1000, 1320, 1608, 2024, 2408, 2792, 3240,
192 3624, 4008, 4584, 5352, 5992, 6456, 6968, 7480, 8248,
193 9144, 9912, 10680, 11448, 12576, 12960, 14112, 14688, 16992},
194 /* NPRB 024*/ {648, 872, 1064, 1384, 1736, 2088, 2472, 2984, 3368,
195 3752, 4264, 4776, 5544, 6200, 6968, 7224, 7736, 8760,
196 9528, 10296, 11064, 12216, 12960, 13536, 14688, 15264, 17568},
197 /* NPRB 025*/ {680, 904, 1096, 1416, 1800, 2216, 2600, 3112, 3496,
198 4008, 4392, 4968, 5736, 6456, 7224, 7736, 7992, 9144,
199 9912, 10680, 11448, 12576, 13536, 14112, 15264, 15840, 18336},
200 /* NPRB 026*/ {712, 936, 1160, 1480, 1864, 2280, 2728, 3240, 3624,
201 4136, 4584, 5352, 5992, 6712, 7480, 7992, 8504, 9528,
202 10296, 11064, 12216, 12960, 14112, 14688, 15840, 16416, 19080},
203 /* NPRB 027*/ {744, 968, 1192, 1544, 1928, 2344, 2792, 3368, 3752,
204 4264, 4776, 5544, 6200, 6968, 7736, 8248, 8760, 9912,
205 10680, 11448, 12576, 13536, 14688, 15264, 16416, 16992, 19848},
206 /* NPRB 028*/ {776, 1000, 1256, 1608, 1992, 2472, 2984, 3368, 3880,
207 4392, 4968, 5736, 6456, 7224, 7992, 8504, 9144, 10296,
208 11064, 12216, 12960, 14112, 15264, 15840, 16992, 17568, 20616},
209 /* NPRB 029*/ {776, 1032, 1288, 1672, 2088, 2536, 2984, 3496, 4008,
210 4584, 5160, 5992, 6712, 7480, 8248, 8760, 9528, 10296,
211 11448, 12576, 13536, 14688, 15840, 16416, 17568, 18336, 21384},
212 /* NPRB 030*/ {808, 1064, 1320, 1736, 2152, 2664, 3112, 3624, 4264,
213 4776, 5352, 5992, 6712, 7736, 8504, 9144, 9912, 10680,
214 11832, 12960, 14112, 15264, 16416, 16992, 18336, 19080, 22152},
215 /* NPRB 031*/ {840, 1128, 1384, 1800, 2216, 2728, 3240, 3752, 4392,
216 4968, 5544, 6200, 6968, 7992, 8760, 9528, 9912, 11064,
217 12216, 13536, 14688, 15840, 16992, 17568, 19080, 19848, 22920},
218 /* NPRB 032*/ {872, 1160, 1416, 1864, 2280, 2792, 3368, 3880, 4584,
219 5160, 5736, 6456, 7224, 8248, 9144, 9912, 10296, 11448,
220 12576, 13536, 14688, 15840, 16992, 18336, 19848, 20616, 23688},
221 /* NPRB 033*/ {904, 1192, 1480, 1928, 2344, 2856, 3496, 4008, 4584,
222 5160, 5736, 6712, 7480, 8504, 9528, 10296, 10680, 11832,
223 12960, 14112, 15264, 16416, 17568, 19080, 19848, 20616, 24496},
224 /* NPRB 034*/ {936, 1224, 1544, 1992, 2408, 2984, 3496, 4136, 4776,
225 5352, 5992, 6968, 7736, 8760, 9912, 10296, 11064, 12216,
226 13536, 14688, 15840, 16992, 18336, 19848, 20616, 21384, 25456},
227 /* NPRB 035*/ {968, 1256, 1544, 2024, 2472, 3112, 3624, 4264, 4968,
228 5544, 6200, 6968, 7992, 9144, 9912, 10680, 11448, 12576,
229 14112, 15264, 16416, 17568, 19080, 19848, 21384, 22152, 25456},
230 /* NPRB 036*/ {1000, 1288, 1608, 2088, 2600, 3112, 3752, 4392, 4968,
231 5736, 6200, 7224, 8248, 9144, 10296, 11064, 11832, 12960,
232 14112, 15264, 16992, 18336, 19080, 20616, 22152, 22920, 26416},
233 /* NPRB 037*/ {1032, 1352, 1672, 2152, 2664, 3240, 3880, 4584, 5160,
234 5736, 6456, 7480, 8504, 9528, 10680, 11448, 12216, 13536,
235 14688, 15840, 16992, 18336, 19848, 21384, 22920, 23688, 27376},
236 /* NPRB 038*/ {1032, 1384, 1672, 2216, 2728, 3368, 4008, 4584, 5352,
237 5992, 6712, 7736, 8760, 9912, 11064, 11832, 12216, 13536,
238 15264, 16416, 17568, 19080, 20616, 22152, 22920, 24496, 28336},
239 /* NPRB 039*/ {1064, 1416, 1736, 2280, 2792, 3496, 4136, 4776, 5544,
240 6200, 6712, 7736, 8760, 9912, 11064, 11832, 12576, 14112,
241 15264, 16992, 18336, 19848, 21384, 22152, 23688, 24496, 29296},
242 /* NPRB 040*/ {1096, 1416, 1800, 2344, 2856, 3496, 4136, 4968, 5544,
243 6200, 6968, 7992, 9144, 10296, 11448, 12216, 12960, 14688,
244 15840, 16992, 18336, 19848, 21384, 22920, 24496, 25456, 29296},
245 /* NPRB 041*/ {1128, 1480, 1800, 2408, 2984, 3624, 4264, 4968, 5736,
246 6456, 7224, 8248, 9528, 10680, 11832, 12576, 13536, 14688,
247 16416, 17568, 19080, 20616, 22152, 23688, 25456, 26416, 30576},
248 /* NPRB 042*/ {1160, 1544, 1864, 2472, 2984, 3752, 4392, 5160, 5992,
249 6712, 7480, 8504, 9528, 10680, 12216, 12960, 13536, 15264,
250 16416, 18336, 19848, 21384, 22920, 24496, 25456, 26416, 30576},
251 /* NPRB 043*/ {1192, 1544, 1928, 2536, 3112, 3752, 4584, 5352, 5992,
252 6712, 7480, 8760, 9912, 11064, 12216, 12960, 14112, 15264,
253 16992, 18336, 19848, 21384, 22920, 24496, 26416, 27376, 31704},
254 /* NPRB 044*/ {1224, 1608, 1992, 2536, 3112, 3880, 4584, 5352, 6200,
255 6968, 7736, 8760, 9912, 11448, 12576, 13536, 14112, 15840,
256 17568, 19080, 20616, 22152, 23688, 25456, 26416, 28336, 32856},
257 /* NPRB 045*/ {1256, 1608, 2024, 2600, 3240, 4008, 4776, 5544, 6200,
258 6968, 7992, 9144, 10296, 11448, 12960, 13536, 14688, 16416,
259 17568, 19080, 20616, 22920, 24496, 25456, 27376, 28336, 32856},
260 /* NPRB 046*/ {1256, 1672, 2088, 2664, 3240, 4008, 4776, 5736, 6456,
261 7224, 7992, 9144, 10680, 11832, 12960, 14112, 14688, 16416,
262 18336, 19848, 21384, 22920, 24496, 26416, 28336, 29296, 34008},
263 /* NPRB 047*/ {1288, 1736, 2088, 2728, 3368, 4136, 4968, 5736, 6456,
264 7480, 8248, 9528, 10680, 12216, 13536, 14688, 15264, 16992,
265 18336, 20616, 22152, 23688, 25456, 27376, 28336, 29296, 35160},
266 /* NPRB 048*/ {1320, 1736, 2152, 2792, 3496, 4264, 4968, 5992, 6712,
267 7480, 8504, 9528, 11064, 12216, 13536, 14688, 15840, 17568,
268 19080, 20616, 22152, 24496, 25456, 27376, 29296, 30576, 35160},
269 /* NPRB 049*/ {1352, 1800, 2216, 2856, 3496, 4392, 5160, 5992, 6968,
270 7736, 8504, 9912, 11064, 12576, 14112, 15264, 15840, 17568,
271 19080, 21384, 22920, 24496, 26416, 28336, 29296, 31704, 36696},
272 /* NPRB 050*/ {1384, 1800, 2216, 2856, 3624, 4392, 5160, 6200, 6968,
273 7992, 8760, 9912, 11448, 12960, 14112, 15264, 16416, 18336,
274 19848, 21384, 22920, 25456, 27376, 28336, 30576, 31704, 36696},
275 /* NPRB 051*/ {1416, 1864, 2280, 2984, 3624, 4584, 5352, 6200, 7224,
276 7992, 9144, 10296, 11832, 12960, 14688, 15840, 16416, 18336,
277 19848, 22152, 23688, 25456, 27376, 29296, 31704, 32856, 37888},
278 /* NPRB 052*/ {1416, 1864, 2344, 2984, 3752, 4584, 5352, 6456, 7224,
279 8248, 9144, 10680, 11832, 13536, 14688, 15840, 16992, 19080,
280 20616, 22152, 24496, 26416, 28336, 29296, 31704, 32856, 37888},
281 /* NPRB 053*/ {1480, 1928, 2344, 3112, 3752, 4776, 5544, 6456, 7480,
282 8248, 9144, 10680, 12216, 13536, 15264, 16416, 16992, 19080,
283 21384, 22920, 24496, 26416, 28336, 30576, 32856, 34008, 39232},
284 /* NPRB 054*/ {1480, 1992, 2408, 3112, 3880, 4776, 5736, 6712, 7480,
285 8504, 9528, 11064, 12216, 14112, 15264, 16416, 17568, 19848,
286 21384, 22920, 25456, 27376, 29296, 30576, 32856, 34008, 40576},
287 /* NPRB 055*/ {1544, 1992, 2472, 3240, 4008, 4776, 5736, 6712, 7736,
288 8760, 9528, 11064, 12576, 14112, 15840, 16992, 17568, 19848,
289 22152, 23688, 25456, 27376, 29296, 31704, 34008, 35160, 40576},
290 /* NPRB 056*/ {1544, 2024, 2536, 3240, 4008, 4968, 5992, 6712, 7736,
291 8760, 9912, 11448, 12576, 14688, 15840, 16992, 18336, 20616,
292 22152, 24496, 26416, 28336, 30576, 31704, 34008, 35160, 40576},
293 /* NPRB 057*/ {1608, 2088, 2536, 3368, 4136, 4968, 5992, 6968, 7992,
294 9144, 9912, 11448, 12960, 14688, 16416, 17568, 18336, 20616,
295 22920, 24496, 26416, 28336, 30576, 32856, 35160, 36696, 42368},
296 /* NPRB 058*/ {1608, 2088, 2600, 3368, 4136, 5160, 5992, 6968, 7992,
297 9144, 10296, 11832, 12960, 14688, 16416, 17568, 19080, 20616,
298 22920, 25456, 27376, 29296, 31704, 32856, 35160, 36696, 42368},
299 /* NPRB 059*/ {1608, 2152, 2664, 3496, 4264, 5160, 6200, 7224, 8248,
300 9144, 10296, 11832, 13536, 15264, 16992, 18336, 19080, 21384,
301 23688, 25456, 27376, 29296, 31704, 34008, 36696, 37888, 43816},
302 /* NPRB 060*/ {1672, 2152, 2664, 3496, 4264, 5352, 6200, 7224, 8504,
303 9528, 10680, 12216, 13536, 15264, 16992, 18336, 19848, 21384,
304 23688, 25456, 28336, 30576, 32856, 34008, 36696, 37888, 43816},
305 /* NPRB 061*/ {1672, 2216, 2728, 3624, 4392, 5352, 6456, 7480, 8504,
306 9528, 10680, 12216, 14112, 15840, 17568, 18336, 19848, 22152,
307 24496, 26416, 28336, 30576, 32856, 35160, 36696, 39232, 45352},
308 /* NPRB 062*/ {1736, 2280, 2792, 3624, 4392, 5544, 6456, 7480, 8760,
309 9912, 11064, 12576, 14112, 15840, 17568, 19080, 19848, 22152,
310 24496, 26416, 29296, 31704, 34008, 35160, 37888, 39232, 45352},
311 /* NPRB 063*/ {1736, 2280, 2856, 3624, 4584, 5544, 6456, 7736, 8760,
312 9912, 11064, 12576, 14112, 16416, 18336, 19080, 20616, 22920,
313 24496, 27376, 29296, 31704, 34008, 36696, 37888, 40576, 46888},
314 /* NPRB 064*/ {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7736, 9144,
315 10296, 11448, 12960, 14688, 16416, 18336, 19848, 20616, 22920,
316 25456, 27376, 29296, 31704, 34008, 36696, 39232, 40576, 46888},
317 /* NPRB 065*/ {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7992, 9144,
318 10296, 11448, 12960, 14688, 16992, 18336, 19848, 21384, 23688,
319 25456, 28336, 30576, 32856, 35160, 37888, 39232, 40576, 48936},
320 /* NPRB 066*/ {1800, 2408, 2984, 3880, 4776, 5736, 6968, 7992, 9144,
321 10296, 11448, 13536, 15264, 16992, 19080, 20616, 21384, 23688,
322 26416, 28336, 30576, 32856, 35160, 37888, 40576, 42368, 48936},
323 /* NPRB 067*/ {1864, 2472, 2984, 3880, 4776, 5992, 6968, 8248, 9528,
324 10680, 11832, 13536, 15264, 16992, 19080, 20616, 22152, 24496,
325 26416, 29296, 31704, 34008, 36696, 37888, 40576, 42368, 48936},
326 /* NPRB 068*/ {1864, 2472, 3112, 4008, 4968, 5992, 6968, 8248, 9528,
327 10680, 11832, 13536, 15264, 17568, 19848, 20616, 22152, 24496,
328 27376, 29296, 31704, 34008, 36696, 39232, 42368, 43816, 51024},
329 /* NPRB 069*/ {1928, 2536, 3112, 4008, 4968, 5992, 7224, 8504, 9528,
330 11064, 12216, 14112, 15840, 17568, 19848, 21384, 22152, 24496,
331 27376, 29296, 31704, 35160, 36696, 39232, 42368, 43816, 51024},
332 /* NPRB 070*/ {1928, 2536, 3112, 4136, 4968, 6200, 7224, 8504, 9912,
333 11064, 12216, 14112, 15840, 18336, 19848, 21384, 22920, 25456,
334 27376, 30576, 32856, 35160, 37888, 40576, 42368, 43816, 52752},
335 /* NPRB 071*/ {1992, 2600, 3240, 4136, 5160, 6200, 7480, 8760, 9912,
336 11064, 12576, 14112, 16416, 18336, 20616, 22152, 22920, 25456,
337 28336, 30576, 32856, 35160, 37888, 40576, 43816, 45352, 52752},
338 /* NPRB 072*/ {1992, 2600, 3240, 4264, 5160, 6200, 7480, 8760, 9912,
339 11448, 12576, 14688, 16416, 18336, 20616, 22152, 23688, 26416,
340 28336, 30576, 34008, 36696, 39232, 40576, 43816, 45352, 52752},
341 /* NPRB 073*/ {2024, 2664, 3240, 4264, 5160, 6456, 7736, 8760, 10296,
342 11448, 12960, 14688, 16416, 19080, 20616, 22152, 23688, 26416,
343 29296, 31704, 34008, 36696, 39232, 42368, 45352, 46888, 55056},
344 /* NPRB 074*/ {2088, 2728, 3368, 4392, 5352, 6456, 7736, 9144, 10296,
345 11832, 12960, 14688, 16992, 19080, 21384, 22920, 24496, 26416,
346 29296, 31704, 34008, 36696, 40576, 42368, 45352, 46888, 55056},
347 /* NPRB 075*/ {2088, 2728, 3368, 4392, 5352, 6712, 7736, 9144, 10680,
348 11832, 12960, 15264, 16992, 19080, 21384, 22920, 24496, 27376,
349 29296, 32856, 35160, 37888, 40576, 43816, 45352, 46888, 55056},
350 /* NPRB 076*/ {2088, 2792, 3368, 4392, 5544, 6712, 7992, 9144, 10680,
351 11832, 13536, 15264, 17568, 19848, 22152, 23688, 24496, 27376,
352 30576, 32856, 35160, 37888, 40576, 43816, 46888, 48936, 55056},
353 /* NPRB 077*/ {2152, 2792, 3496, 4584, 5544, 6712, 7992, 9528, 10680,
354 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 27376,
355 30576, 32856, 35160, 39232, 42368, 43816, 46888, 48936, 57336},
356 /* NPRB 078*/ {2152, 2856, 3496, 4584, 5544, 6968, 8248, 9528, 11064,
357 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 28336,
358 30576, 34008, 36696, 39232, 42368, 45352, 46888, 48936, 57336},
359 /* NPRB 079*/ {2216, 2856, 3496, 4584, 5736, 6968, 8248, 9528, 11064,
360 12576, 14112, 15840, 18336, 20616, 22920, 24496, 25456, 28336,
361 31704, 34008, 36696, 39232, 42368, 45352, 48936, 51024, 57336},
362 /* NPRB 080*/ {2216, 2856, 3624, 4776, 5736, 6968, 8248, 9912, 11064,
363 12576, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
364 31704, 34008, 36696, 40576, 43816, 45352, 48936, 51024, 59256},
365 /* NPRB 081*/ {2280, 2984, 3624, 4776, 5736, 7224, 8504, 9912, 11448,
366 12960, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
367 31704, 35160, 37888, 40576, 43816, 46888, 48936, 51024, 59256},
368 /* NPRB 082*/ {2280, 2984, 3624, 4776, 5992, 7224, 8504, 9912, 11448,
369 12960, 14688, 16416, 19080, 21384, 23688, 25456, 26416, 29296,
370 32856, 35160, 37888, 40576, 43816, 46888, 51024, 52752, 59256},
371 /* NPRB 083*/ {2280, 2984, 3752, 4776, 5992, 7224, 8760, 10296, 11448,
372 12960, 14688, 16992, 19080, 21384, 23688, 25456, 27376, 30576,
373 32856, 35160, 39232, 42368, 45352, 46888, 51024, 52752, 61664},
374 /* NPRB 084*/ {2344, 3112, 3752, 4968, 5992, 7480, 8760, 10296, 11832,
375 13536, 14688, 16992, 19080, 21384, 24496, 25456, 27376, 30576,
376 32856, 36696, 39232, 42368, 45352, 48936, 51024, 52752, 61664},
377 /* NPRB 085*/ {2344, 3112, 3880, 4968, 5992, 7480, 8760, 10296, 11832,
378 13536, 14688, 16992, 19080, 22152, 24496, 26416, 27376, 30576,
379 34008, 36696, 39232, 42368, 45352, 48936, 52752, 55056, 61664},
380 /* NPRB 086*/ {2408, 3112, 3880, 4968, 6200, 7480, 9144, 10680, 12216,
381 13536, 15264, 17568, 19848, 22152, 24496, 26416, 28336, 30576,
382 34008, 36696, 40576, 43816, 46888, 48936, 52752, 55056, 63776},
383 /* NPRB 087*/ {2408, 3240, 3880, 5160, 6200, 7736, 9144, 10680, 12216,
384 13536, 15264, 17568, 19848, 22152, 25456, 26416, 28336, 31704,
385 34008, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
386 /* NPRB 088*/ {2472, 3240, 4008, 5160, 6200, 7736, 9144, 10680, 12216,
387 14112, 15264, 17568, 19848, 22920, 25456, 27376, 28336, 31704,
388 35160, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
389 /* NPRB 089*/ {2472, 3240, 4008, 5160, 6456, 7736, 9144, 11064, 12576,
390 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 31704,
391 35160, 37888, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
392 /* NPRB 090*/ {2536, 3240, 4008, 5352, 6456, 7992, 9528, 11064, 12576,
393 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 32856,
394 35160, 39232, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
395 /* NPRB 091*/ {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11064, 12576,
396 14112, 15840, 18336, 20616, 23688, 26416, 28336, 29296, 32856,
397 36696, 39232, 42368, 45352, 48936, 52752, 55056, 57336, 66592},
398 /* NPRB 092*/ {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11448, 12960,
399 14688, 16416, 18336, 21384, 23688, 26416, 28336, 30576, 32856,
400 36696, 39232, 42368, 46888, 48936, 52752, 57336, 59256, 68808},
401 /* NPRB 093*/ {2600, 3368, 4136, 5352, 6712, 8248, 9528, 11448, 12960,
402 14688, 16416, 19080, 21384, 23688, 26416, 28336, 30576, 34008,
403 36696, 40576, 43816, 46888, 51024, 52752, 57336, 59256, 68808},
404 /* NPRB 094*/ {2600, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 12960,
405 14688, 16416, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
406 37888, 40576, 43816, 46888, 51024, 55056, 57336, 59256, 68808},
407 /* NPRB 095*/ {2664, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 13536,
408 15264, 16992, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
409 37888, 40576, 43816, 46888, 51024, 55056, 57336, 61664, 71112},
410 /* NPRB 096*/ {2664, 3496, 4264, 5544, 6968, 8504, 9912, 11832, 13536,
411 15264, 16992, 19080, 22152, 24496, 27376, 29296, 31704, 35160,
412 37888, 40576, 45352, 48936, 51024, 55056, 59256, 61664, 71112},
413 /* NPRB 097*/ {2728, 3496, 4392, 5736, 6968, 8504, 10296, 11832, 13536,
414 15264, 16992, 19848, 22152, 25456, 28336, 29296, 31704, 35160,
415 37888, 42368, 45352, 48936, 52752, 55056, 59256, 61664, 71112},
416 /* NPRB 098*/ {2728, 3624, 4392, 5736, 6968, 8760, 10296, 11832, 13536,
417 15264, 16992, 19848, 22152, 25456, 28336, 30576, 31704, 35160,
418 39232, 42368, 45352, 48936, 52752, 57336, 59256, 61664, 73712},
419 /* NPRB 099*/ {2728, 3624, 4392, 5736, 6968, 8760, 10296, 12216, 14112,
420 15840, 17568, 19848, 22920, 25456, 28336, 30576, 31704, 35160,
421 39232, 42368, 46888, 48936, 52752, 57336, 61664, 63776, 73712},
422 /* NPRB 100*/ {2792, 3624, 4584, 5736, 7224, 8760, 10296, 12216, 14112,
423 15840, 17568, 19848, 22920, 25456, 28336, 30576, 32856, 36696,
424 39232, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
425 /* NPRB 101*/ {2792, 3752, 4584, 5992, 7224, 8760, 10680, 12216, 14112,
426 15840, 17568, 20616, 22920, 26416, 29296, 30576, 32856, 36696,
427 40576, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
428 /* NPRB 102*/ {2856, 3752, 4584, 5992, 7224, 9144, 10680, 12576, 14112,
429 16416, 18336, 20616, 23688, 26416, 29296, 31704, 32856, 36696,
430 40576, 43816, 46888, 51024, 55056, 59256, 61664, 63776, 75376},
431 /* NPRB 103*/ {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
432 16416, 18336, 20616, 23688, 26416, 29296, 31704, 34008, 36696,
433 40576, 43816, 48936, 51024, 55056, 59256, 63776, 66592, 75376},
434 /* NPRB 104*/ {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
435 16416, 18336, 21384, 23688, 26416, 29296, 31704, 34008, 37888,
436 40576, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
437 /* NPRB 105*/ {2984, 3880, 4776, 6200, 7480, 9144, 11064, 12960, 14688,
438 16416, 18336, 21384, 23688, 27376, 30576, 31704, 34008, 37888,
439 42368, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
440 /* NPRB 106*/ {2984, 3880, 4776, 6200, 7480, 9528, 11064, 12960, 14688,
441 16992, 18336, 21384, 24496, 27376, 30576, 32856, 34008, 37888,
442 42368, 45352, 48936, 52752, 57336, 61664, 63776, 66592, 75376},
443 /* NPRB 107*/ {2984, 3880, 4776, 6200, 7736, 9528, 11064, 12960, 15264,
444 16992, 19080, 21384, 24496, 27376, 30576, 32856, 35160, 39232,
445 42368, 46888, 48936, 52752, 57336, 61664, 66592, 68808, 75376},
446 /* NPRB 108*/ {2984, 4008, 4776, 6200, 7736, 9528, 11448, 12960, 15264,
447 16992, 19080, 22152, 24496, 27376, 30576, 32856, 35160, 39232,
448 42368, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
449 /* NPRB 109*/ {2984, 4008, 4968, 6456, 7736, 9528, 11448, 13536, 15264,
450 16992, 19080, 22152, 24496, 28336, 31704, 34008, 35160, 39232,
451 43816, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
452 /* NPRB 110*/ {3112, 4008, 4968, 6456, 7992, 9528, 11448, 13536, 15264,
453 17568, 19080, 22152, 25456, 28336, 31704, 34008, 35160, 39232,
454 43816, 46888, 51024, 55056, 59256, 63776, 66592, 71112, 75376},
455};
456
457LteAmc::LteAmc()
458{
459}
460
461LteAmc::~LteAmc()
462{
463}
464
465TypeId
466LteAmc::GetTypeId()
467{
468 static TypeId tid =
469 TypeId("ns3::LteAmc")
470 .SetParent<Object>()
471 .SetGroupName("Lte")
472 .AddConstructor<LteAmc>()
473 .AddAttribute("Ber",
474 "The requested BER in assigning MCS (default is 0.00005).",
475 DoubleValue(0.00005),
476 MakeDoubleAccessor(&LteAmc::m_ber),
477 MakeDoubleChecker<double>())
478 .AddAttribute(
479 "AmcModel",
480 "AMC model used to assign CQI",
481 EnumValue(LteAmc::MiErrorModel),
482 MakeEnumAccessor(&LteAmc::m_amcModel),
483 MakeEnumChecker(LteAmc::MiErrorModel, "Vienna", LteAmc::PiroEW2010, "PiroEW2010"));
484 return tid;
485}
486
487int
488LteAmc::GetCqiFromSpectralEfficiency(double s)
489{
491 NS_ASSERT_MSG(s >= 0.0, "negative spectral efficiency = " << s);
492 int cqi = 0;
493 while ((cqi < 15) && (SpectralEfficiencyForCqi[cqi + 1] < s))
494 {
495 ++cqi;
496 }
497 NS_LOG_LOGIC("cqi = " << cqi);
498 return cqi;
499}
500
501int
502LteAmc::GetMcsFromCqi(int cqi)
503{
504 NS_LOG_FUNCTION(cqi);
505 NS_ASSERT_MSG(cqi >= 0 && cqi <= 15, "CQI must be in [0..15] = " << cqi);
506 double spectralEfficiency = SpectralEfficiencyForCqi[cqi];
507 int mcs = 0;
508 while ((mcs < 28) && (SpectralEfficiencyForMcs[mcs + 1] <= spectralEfficiency))
509 {
510 ++mcs;
511 }
512 NS_LOG_LOGIC("mcs = " << mcs);
513 return mcs;
514}
515
516int
517LteAmc::GetDlTbSizeFromMcs(int mcs, int nprb)
518{
519 NS_LOG_FUNCTION(mcs);
520
521 NS_ASSERT_MSG(mcs < 29, "MCS=" << mcs);
522 NS_ASSERT_MSG(nprb > 0 && nprb < 111, "NPRB=" << nprb);
523
524 int itbs = McsToItbsDl[mcs];
525 return (TransportBlockSizeTable[nprb - 1][itbs]);
526}
527
528int
529LteAmc::GetUlTbSizeFromMcs(int mcs, int nprb)
530{
531 NS_LOG_FUNCTION(mcs);
532
533 NS_ASSERT_MSG(mcs < 29, "MCS=" << mcs);
534 NS_ASSERT_MSG(nprb > 0 && nprb < 111, "NPRB=" << nprb);
535
536 int itbs = McsToItbsUl[mcs];
537 return (TransportBlockSizeTable[nprb - 1][itbs]);
538}
539
540double
541LteAmc::GetSpectralEfficiencyFromCqi(int cqi)
542{
543 NS_LOG_FUNCTION(cqi);
544 NS_ASSERT_MSG(cqi >= 0 && cqi <= 15, "CQI must be in [0..15] = " << cqi);
545 NS_LOG_LOGIC("Spectral efficiency = " << SpectralEfficiencyForCqi[cqi]);
546 return SpectralEfficiencyForCqi[cqi];
547}
548
549std::vector<int>
550LteAmc::CreateCqiFeedbacks(const SpectrumValue& sinr, uint8_t rbgSize)
551{
552 NS_LOG_FUNCTION(this);
553
554 std::vector<int> cqi;
555 Values::const_iterator it;
556
557 if (m_amcModel == PiroEW2010)
558 {
559 for (it = sinr.ConstValuesBegin(); it != sinr.ConstValuesEnd(); it++)
560 {
561 double sinr_ = (*it);
562 if (sinr_ == 0.0)
563 {
564 cqi.push_back(-1); // SINR == 0 (linear units) means no signal in this RB
565 }
566 else
567 {
568 /*
569 * Compute the spectral efficiency from the SINR
570 * SINR
571 * spectralEfficiency = log2 (1 + -------------------- )
572 * -ln(5*BER)/1.5
573 * NB: SINR must be expressed in linear units
574 */
575
576 double s = log2(1 + (sinr_ / ((-std::log(5.0 * m_ber)) / 1.5)));
577
578 int cqi_ = GetCqiFromSpectralEfficiency(s);
579
580 NS_LOG_LOGIC(" PRB =" << cqi.size() << ", sinr = " << sinr_
581 << " (=" << 10 * std::log10(sinr_) << " dB)"
582 << ", spectral efficiency =" << s << ", CQI = " << cqi_
583 << ", BER = " << m_ber);
584
585 cqi.push_back(cqi_);
586 }
587 }
588 }
589 else if (m_amcModel == MiErrorModel)
590 {
591 NS_LOG_DEBUG(this << " AMC-VIENNA RBG size " << (uint16_t)rbgSize);
592 NS_ASSERT_MSG(rbgSize > 0, " LteAmc-Vienna: RBG size must be greater than 0");
593 std::vector<int> rbgMap;
594 int rbId = 0;
595 for (it = sinr.ConstValuesBegin(); it != sinr.ConstValuesEnd(); it++)
596 {
597 rbgMap.push_back(rbId++);
598 if ((rbId % rbgSize == 0) || ((it + 1) == sinr.ConstValuesEnd()))
599 {
600 uint8_t mcs = 0;
601 TbStats_t tbStats;
602 while (mcs <= 28)
603 {
604 HarqProcessInfoList_t harqInfoList;
605 tbStats = LteMiErrorModel::GetTbDecodificationStats(
606 sinr,
607 rbgMap,
608 (uint16_t)GetDlTbSizeFromMcs(mcs, rbgSize) / 8,
609 mcs,
610 harqInfoList);
611 if (tbStats.tbler > 0.1)
612 {
613 break;
614 }
615 mcs++;
616 }
617 if (mcs > 0)
618 {
619 mcs--;
620 }
621 NS_LOG_DEBUG(this << "\t RBG " << rbId << " MCS " << (uint16_t)mcs << " TBLER "
622 << tbStats.tbler);
623 int rbgCqi = 0;
624 if ((tbStats.tbler > 0.1) && (mcs == 0))
625 {
626 rbgCqi = 0; // any MCS can guarantee the 10 % of BER
627 }
628 else if (mcs == 28)
629 {
630 rbgCqi = 15; // all MCSs can guarantee the 10 % of BER
631 }
632 else
633 {
634 double s = SpectralEfficiencyForMcs[mcs];
635 rbgCqi = 0;
636 while ((rbgCqi < 15) && (SpectralEfficiencyForCqi[rbgCqi + 1] < s))
637 {
638 ++rbgCqi;
639 }
640 }
641 NS_LOG_DEBUG(this << "\t MCS " << (uint16_t)mcs << "-> CQI " << rbgCqi);
642 // fill the cqi vector (per RB basis)
643 for (uint8_t j = 0; j < rbgSize; j++)
644 {
645 cqi.push_back(rbgCqi);
646 }
647 rbgMap.clear();
648 }
649 }
650 }
651
652 return cqi;
653}
654
655} // namespace ns3
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
Hold variables of type enum.
Definition: enum.h:56
Implements the Adaptive Modulation And Coding Scheme.
Definition: lte-amc.h:42
A base class which provides memory management and object aggregation.
Definition: object.h:89
Set of values corresponding to a given SpectrumModel.
Values::const_iterator ConstValuesBegin() const
Values::const_iterator ConstValuesEnd() const
a unique identifier for an interface.
Definition: type-id.h:60
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:935
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:86
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Definition: double.h:43
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
Definition: enum.h:205
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:282
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static const int TransportBlockSizeTable[110][27]
Table of number of physical resource blocks (NPRB), TBS index (ITBS), and their associated transport ...
Definition: lte-amc.cc:127
static const int McsToItbsUl[29]
Table of MCS index (IMCS) and its TBS index (ITBS).
Definition: lte-amc.cc:114
std::vector< HarqProcessInfoElement_t > HarqProcessInfoList_t
HarqProcessInfoList_t typedef.
Definition: lte-harq-phy.h:44
static const double SpectralEfficiencyForCqi[16]
Table of CQI index and its spectral efficiency.
Definition: lte-amc.cc:47
static const double SpectralEfficiencyForMcs[32]
Table of MCS index and its spectral efficiency.
Definition: lte-amc.cc:94
static const int McsToItbsDl[29]
Table of MCS index (IMCS) and its TBS index (ITBS).
Definition: lte-amc.cc:104
Ptr< const AttributeChecker > MakeEnumChecker(int v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.
Definition: enum.h:163
TbStats_t structure.
double tbler
Transport block BLER.