23#include <ns3/assert.h>
24#include <ns3/double.h>
26#include <ns3/lte-amc.h>
27#include <ns3/lte-mi-error-model.h>
29#include <ns3/spectrum-value.h>
73static const int ModulationSchemeForMcs[32] = {
74 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
76 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
93 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,
94 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};
101static const int McsToItbsDl[29] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13,
102 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
109static const int McsToItbsUl[29] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13,
110 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26};
121 {16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224,
122 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
123 {32, 56, 72, 104, 120, 144, 176, 224, 256, 296, 328, 376, 440, 488,
124 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1192, 1256, 1480},
125 {56, 88, 144, 176, 208, 224, 256, 328, 392, 456, 504, 584, 680, 744,
126 840, 904, 968, 1064, 1160, 1288, 1384, 1480, 1608, 1736, 1800, 1864, 2216},
127 {88, 144, 176, 208, 256, 328, 392, 472, 536,
128 616, 680, 776, 904, 1000, 1128, 1224, 1288, 1416,
129 1544, 1736, 1864, 1992, 2152, 2280, 2408, 2536, 2984},
130 {120, 176, 208, 256, 328, 424, 504, 584, 680,
131 776, 872, 1000, 1128, 1256, 1416, 1544, 1608, 1800,
132 1992, 2152, 2344, 2472, 2664, 2856, 2984, 3112, 3752},
133 {152, 208, 256, 328, 408, 504, 600, 712, 808,
134 936, 1032, 1192, 1352, 1544, 1736, 1800, 1928, 2152,
135 2344, 2600, 2792, 2984, 3240, 3496, 3624, 3752, 4392},
136 {176, 224, 296, 392, 488, 600, 712, 840, 968,
137 1096, 1224, 1384, 1608, 1800, 1992, 2152, 2280, 2536,
138 2792, 2984, 3240, 3496, 3752, 4008, 4264, 4392, 5160},
139 {208, 256, 328, 440, 552, 680, 808, 968, 1096,
140 1256, 1384, 1608, 1800, 2024, 2280, 2472, 2600, 2856,
141 3112, 3496, 3752, 4008, 4264, 4584, 4968, 5160, 5992},
142 {224, 328, 376, 504, 632, 776, 936, 1096, 1256,
143 1416, 1544, 1800, 2024, 2280, 2600, 2728, 2984, 3240,
144 3624, 3880, 4136, 4584, 4776, 5160, 5544, 5736, 6712},
145 {256, 344, 424, 568, 696, 872, 1032, 1224, 1384,
146 1544, 1736, 2024, 2280, 2536, 2856, 3112, 3240, 3624,
147 4008, 4264, 4584, 4968, 5352, 5736, 5992, 6200, 7480},
148 {288, 376, 472, 616, 776, 968, 1128, 1320, 1544,
149 1736, 1928, 2216, 2472, 2856, 3112, 3368, 3624, 4008,
150 4392, 4776, 5160, 5544, 5992, 6200, 6712, 6968, 8248},
151 {328, 424, 520, 680, 840, 1032, 1224, 1480, 1672,
152 1864, 2088, 2408, 2728, 3112, 3496, 3624, 3880, 4392,
153 4776, 5160, 5544, 5992, 6456, 6968, 7224, 7480, 8760},
154 {344, 456, 568, 744, 904, 1128, 1352, 1608, 1800,
155 2024, 2280, 2600, 2984, 3368, 3752, 4008, 4264, 4776,
156 5160, 5544, 5992, 6456, 6968, 7480, 7992, 8248, 9528},
157 {376, 488, 616, 808, 1000, 1224, 1480, 1672, 1928,
158 2216, 2472, 2792, 3240, 3624, 4008, 4264, 4584, 5160,
159 5544, 5992, 6456, 6968, 7480, 7992, 8504, 8760, 10296},
160 {392, 520, 648, 872, 1064, 1320, 1544, 1800, 2088,
161 2344, 2664, 2984, 3368, 3880, 4264, 4584, 4968, 5352,
162 5992, 6456, 6968, 7480, 7992, 8504, 9144, 9528, 11064},
163 {424, 568, 696, 904, 1128, 1384, 1672, 1928, 2216,
164 2536, 2792, 3240, 3624, 4136, 4584, 4968, 5160, 5736,
165 6200, 6968, 7480, 7992, 8504, 9144, 9912, 10296, 11832},
166 {456, 600, 744, 968, 1192, 1480, 1736, 2088, 2344,
167 2664, 2984, 3496, 3880, 4392, 4968, 5160, 5544, 6200,
168 6712, 7224, 7992, 8504, 9144, 9912, 10296, 10680, 12576},
169 {488, 632, 776, 1032, 1288, 1544, 1864, 2216, 2536,
170 2856, 3112, 3624, 4136, 4584, 5160, 5544, 5992, 6456,
171 7224, 7736, 8248, 9144, 9528, 10296, 11064, 11448, 13536},
172 {504, 680, 840, 1096, 1352, 1672, 1992, 2344, 2664,
173 2984, 3368, 3880, 4392, 4968, 5544, 5736, 6200, 6712,
174 7480, 8248, 8760, 9528, 10296, 11064, 11448, 12216, 14112},
175 {536, 712, 872, 1160, 1416, 1736, 2088, 2472, 2792,
176 3112, 3496, 4008, 4584, 5160, 5736, 6200, 6456, 7224,
177 7992, 8504, 9144, 9912, 10680, 11448, 12216, 12576, 14688},
178 {568, 744, 936, 1224, 1480, 1864, 2216, 2536, 2984,
179 3368, 3752, 4264, 4776, 5352, 5992, 6456, 6712, 7480,
180 8248, 9144, 9912, 10680, 11448, 12216, 12960, 13536, 15264},
181 {600, 776, 968, 1256, 1544, 1928, 2280, 2664, 3112,
182 3496, 3880, 4392, 4968, 5736, 6200, 6712, 7224, 7992,
183 8760, 9528, 10296, 11064, 11832, 12576, 13536, 14112, 16416},
184 {616, 808, 1000, 1320, 1608, 2024, 2408, 2792, 3240,
185 3624, 4008, 4584, 5352, 5992, 6456, 6968, 7480, 8248,
186 9144, 9912, 10680, 11448, 12576, 12960, 14112, 14688, 16992},
187 {648, 872, 1064, 1384, 1736, 2088, 2472, 2984, 3368,
188 3752, 4264, 4776, 5544, 6200, 6968, 7224, 7736, 8760,
189 9528, 10296, 11064, 12216, 12960, 13536, 14688, 15264, 17568},
190 {680, 904, 1096, 1416, 1800, 2216, 2600, 3112, 3496,
191 4008, 4392, 4968, 5736, 6456, 7224, 7736, 7992, 9144,
192 9912, 10680, 11448, 12576, 13536, 14112, 15264, 15840, 18336},
193 {712, 936, 1160, 1480, 1864, 2280, 2728, 3240, 3624,
194 4136, 4584, 5352, 5992, 6712, 7480, 7992, 8504, 9528,
195 10296, 11064, 12216, 12960, 14112, 14688, 15840, 16416, 19080},
196 {744, 968, 1192, 1544, 1928, 2344, 2792, 3368, 3752,
197 4264, 4776, 5544, 6200, 6968, 7736, 8248, 8760, 9912,
198 10680, 11448, 12576, 13536, 14688, 15264, 16416, 16992, 19848},
199 {776, 1000, 1256, 1608, 1992, 2472, 2984, 3368, 3880,
200 4392, 4968, 5736, 6456, 7224, 7992, 8504, 9144, 10296,
201 11064, 12216, 12960, 14112, 15264, 15840, 16992, 17568, 20616},
202 {776, 1032, 1288, 1672, 2088, 2536, 2984, 3496, 4008,
203 4584, 5160, 5992, 6712, 7480, 8248, 8760, 9528, 10296,
204 11448, 12576, 13536, 14688, 15840, 16416, 17568, 18336, 21384},
205 {808, 1064, 1320, 1736, 2152, 2664, 3112, 3624, 4264,
206 4776, 5352, 5992, 6712, 7736, 8504, 9144, 9912, 10680,
207 11832, 12960, 14112, 15264, 16416, 16992, 18336, 19080, 22152},
208 {840, 1128, 1384, 1800, 2216, 2728, 3240, 3752, 4392,
209 4968, 5544, 6200, 6968, 7992, 8760, 9528, 9912, 11064,
210 12216, 13536, 14688, 15840, 16992, 17568, 19080, 19848, 22920},
211 {872, 1160, 1416, 1864, 2280, 2792, 3368, 3880, 4584,
212 5160, 5736, 6456, 7224, 8248, 9144, 9912, 10296, 11448,
213 12576, 13536, 14688, 15840, 16992, 18336, 19848, 20616, 23688},
214 {904, 1192, 1480, 1928, 2344, 2856, 3496, 4008, 4584,
215 5160, 5736, 6712, 7480, 8504, 9528, 10296, 10680, 11832,
216 12960, 14112, 15264, 16416, 17568, 19080, 19848, 20616, 24496},
217 {936, 1224, 1544, 1992, 2408, 2984, 3496, 4136, 4776,
218 5352, 5992, 6968, 7736, 8760, 9912, 10296, 11064, 12216,
219 13536, 14688, 15840, 16992, 18336, 19848, 20616, 21384, 25456},
220 {968, 1256, 1544, 2024, 2472, 3112, 3624, 4264, 4968,
221 5544, 6200, 6968, 7992, 9144, 9912, 10680, 11448, 12576,
222 14112, 15264, 16416, 17568, 19080, 19848, 21384, 22152, 25456},
223 {1000, 1288, 1608, 2088, 2600, 3112, 3752, 4392, 4968,
224 5736, 6200, 7224, 8248, 9144, 10296, 11064, 11832, 12960,
225 14112, 15264, 16992, 18336, 19080, 20616, 22152, 22920, 26416},
226 {1032, 1352, 1672, 2152, 2664, 3240, 3880, 4584, 5160,
227 5736, 6456, 7480, 8504, 9528, 10680, 11448, 12216, 13536,
228 14688, 15840, 16992, 18336, 19848, 21384, 22920, 23688, 27376},
229 {1032, 1384, 1672, 2216, 2728, 3368, 4008, 4584, 5352,
230 5992, 6712, 7736, 8760, 9912, 11064, 11832, 12216, 13536,
231 15264, 16416, 17568, 19080, 20616, 22152, 22920, 24496, 28336},
232 {1064, 1416, 1736, 2280, 2792, 3496, 4136, 4776, 5544,
233 6200, 6712, 7736, 8760, 9912, 11064, 11832, 12576, 14112,
234 15264, 16992, 18336, 19848, 21384, 22152, 23688, 24496, 29296},
235 {1096, 1416, 1800, 2344, 2856, 3496, 4136, 4968, 5544,
236 6200, 6968, 7992, 9144, 10296, 11448, 12216, 12960, 14688,
237 15840, 16992, 18336, 19848, 21384, 22920, 24496, 25456, 29296},
238 {1128, 1480, 1800, 2408, 2984, 3624, 4264, 4968, 5736,
239 6456, 7224, 8248, 9528, 10680, 11832, 12576, 13536, 14688,
240 16416, 17568, 19080, 20616, 22152, 23688, 25456, 26416, 30576},
241 {1160, 1544, 1864, 2472, 2984, 3752, 4392, 5160, 5992,
242 6712, 7480, 8504, 9528, 10680, 12216, 12960, 13536, 15264,
243 16416, 18336, 19848, 21384, 22920, 24496, 25456, 26416, 30576},
244 {1192, 1544, 1928, 2536, 3112, 3752, 4584, 5352, 5992,
245 6712, 7480, 8760, 9912, 11064, 12216, 12960, 14112, 15264,
246 16992, 18336, 19848, 21384, 22920, 24496, 26416, 27376, 31704},
247 {1224, 1608, 1992, 2536, 3112, 3880, 4584, 5352, 6200,
248 6968, 7736, 8760, 9912, 11448, 12576, 13536, 14112, 15840,
249 17568, 19080, 20616, 22152, 23688, 25456, 26416, 28336, 32856},
250 {1256, 1608, 2024, 2600, 3240, 4008, 4776, 5544, 6200,
251 6968, 7992, 9144, 10296, 11448, 12960, 13536, 14688, 16416,
252 17568, 19080, 20616, 22920, 24496, 25456, 27376, 28336, 32856},
253 {1256, 1672, 2088, 2664, 3240, 4008, 4776, 5736, 6456,
254 7224, 7992, 9144, 10680, 11832, 12960, 14112, 14688, 16416,
255 18336, 19848, 21384, 22920, 24496, 26416, 28336, 29296, 34008},
256 {1288, 1736, 2088, 2728, 3368, 4136, 4968, 5736, 6456,
257 7480, 8248, 9528, 10680, 12216, 13536, 14688, 15264, 16992,
258 18336, 20616, 22152, 23688, 25456, 27376, 28336, 29296, 35160},
259 {1320, 1736, 2152, 2792, 3496, 4264, 4968, 5992, 6712,
260 7480, 8504, 9528, 11064, 12216, 13536, 14688, 15840, 17568,
261 19080, 20616, 22152, 24496, 25456, 27376, 29296, 30576, 35160},
262 {1352, 1800, 2216, 2856, 3496, 4392, 5160, 5992, 6968,
263 7736, 8504, 9912, 11064, 12576, 14112, 15264, 15840, 17568,
264 19080, 21384, 22920, 24496, 26416, 28336, 29296, 31704, 36696},
265 {1384, 1800, 2216, 2856, 3624, 4392, 5160, 6200, 6968,
266 7992, 8760, 9912, 11448, 12960, 14112, 15264, 16416, 18336,
267 19848, 21384, 22920, 25456, 27376, 28336, 30576, 31704, 36696},
268 {1416, 1864, 2280, 2984, 3624, 4584, 5352, 6200, 7224,
269 7992, 9144, 10296, 11832, 12960, 14688, 15840, 16416, 18336,
270 19848, 22152, 23688, 25456, 27376, 29296, 31704, 32856, 37888},
271 {1416, 1864, 2344, 2984, 3752, 4584, 5352, 6456, 7224,
272 8248, 9144, 10680, 11832, 13536, 14688, 15840, 16992, 19080,
273 20616, 22152, 24496, 26416, 28336, 29296, 31704, 32856, 37888},
274 {1480, 1928, 2344, 3112, 3752, 4776, 5544, 6456, 7480,
275 8248, 9144, 10680, 12216, 13536, 15264, 16416, 16992, 19080,
276 21384, 22920, 24496, 26416, 28336, 30576, 32856, 34008, 39232},
277 {1480, 1992, 2408, 3112, 3880, 4776, 5736, 6712, 7480,
278 8504, 9528, 11064, 12216, 14112, 15264, 16416, 17568, 19848,
279 21384, 22920, 25456, 27376, 29296, 30576, 32856, 34008, 40576},
280 {1544, 1992, 2472, 3240, 4008, 4776, 5736, 6712, 7736,
281 8760, 9528, 11064, 12576, 14112, 15840, 16992, 17568, 19848,
282 22152, 23688, 25456, 27376, 29296, 31704, 34008, 35160, 40576},
283 {1544, 2024, 2536, 3240, 4008, 4968, 5992, 6712, 7736,
284 8760, 9912, 11448, 12576, 14688, 15840, 16992, 18336, 20616,
285 22152, 24496, 26416, 28336, 30576, 31704, 34008, 35160, 40576},
286 {1608, 2088, 2536, 3368, 4136, 4968, 5992, 6968, 7992,
287 9144, 9912, 11448, 12960, 14688, 16416, 17568, 18336, 20616,
288 22920, 24496, 26416, 28336, 30576, 32856, 35160, 36696, 42368},
289 {1608, 2088, 2600, 3368, 4136, 5160, 5992, 6968, 7992,
290 9144, 10296, 11832, 12960, 14688, 16416, 17568, 19080, 20616,
291 22920, 25456, 27376, 29296, 31704, 32856, 35160, 36696, 42368},
292 {1608, 2152, 2664, 3496, 4264, 5160, 6200, 7224, 8248,
293 9144, 10296, 11832, 13536, 15264, 16992, 18336, 19080, 21384,
294 23688, 25456, 27376, 29296, 31704, 34008, 36696, 37888, 43816},
295 {1672, 2152, 2664, 3496, 4264, 5352, 6200, 7224, 8504,
296 9528, 10680, 12216, 13536, 15264, 16992, 18336, 19848, 21384,
297 23688, 25456, 28336, 30576, 32856, 34008, 36696, 37888, 43816},
298 {1672, 2216, 2728, 3624, 4392, 5352, 6456, 7480, 8504,
299 9528, 10680, 12216, 14112, 15840, 17568, 18336, 19848, 22152,
300 24496, 26416, 28336, 30576, 32856, 35160, 36696, 39232, 45352},
301 {1736, 2280, 2792, 3624, 4392, 5544, 6456, 7480, 8760,
302 9912, 11064, 12576, 14112, 15840, 17568, 19080, 19848, 22152,
303 24496, 26416, 29296, 31704, 34008, 35160, 37888, 39232, 45352},
304 {1736, 2280, 2856, 3624, 4584, 5544, 6456, 7736, 8760,
305 9912, 11064, 12576, 14112, 16416, 18336, 19080, 20616, 22920,
306 24496, 27376, 29296, 31704, 34008, 36696, 37888, 40576, 46888},
307 {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7736, 9144,
308 10296, 11448, 12960, 14688, 16416, 18336, 19848, 20616, 22920,
309 25456, 27376, 29296, 31704, 34008, 36696, 39232, 40576, 46888},
310 {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7992, 9144,
311 10296, 11448, 12960, 14688, 16992, 18336, 19848, 21384, 23688,
312 25456, 28336, 30576, 32856, 35160, 37888, 39232, 40576, 48936},
313 {1800, 2408, 2984, 3880, 4776, 5736, 6968, 7992, 9144,
314 10296, 11448, 13536, 15264, 16992, 19080, 20616, 21384, 23688,
315 26416, 28336, 30576, 32856, 35160, 37888, 40576, 42368, 48936},
316 {1864, 2472, 2984, 3880, 4776, 5992, 6968, 8248, 9528,
317 10680, 11832, 13536, 15264, 16992, 19080, 20616, 22152, 24496,
318 26416, 29296, 31704, 34008, 36696, 37888, 40576, 42368, 48936},
319 {1864, 2472, 3112, 4008, 4968, 5992, 6968, 8248, 9528,
320 10680, 11832, 13536, 15264, 17568, 19848, 20616, 22152, 24496,
321 27376, 29296, 31704, 34008, 36696, 39232, 42368, 43816, 51024},
322 {1928, 2536, 3112, 4008, 4968, 5992, 7224, 8504, 9528,
323 11064, 12216, 14112, 15840, 17568, 19848, 21384, 22152, 24496,
324 27376, 29296, 31704, 35160, 36696, 39232, 42368, 43816, 51024},
325 {1928, 2536, 3112, 4136, 4968, 6200, 7224, 8504, 9912,
326 11064, 12216, 14112, 15840, 18336, 19848, 21384, 22920, 25456,
327 27376, 30576, 32856, 35160, 37888, 40576, 42368, 43816, 52752},
328 {1992, 2600, 3240, 4136, 5160, 6200, 7480, 8760, 9912,
329 11064, 12576, 14112, 16416, 18336, 20616, 22152, 22920, 25456,
330 28336, 30576, 32856, 35160, 37888, 40576, 43816, 45352, 52752},
331 {1992, 2600, 3240, 4264, 5160, 6200, 7480, 8760, 9912,
332 11448, 12576, 14688, 16416, 18336, 20616, 22152, 23688, 26416,
333 28336, 30576, 34008, 36696, 39232, 40576, 43816, 45352, 52752},
334 {2024, 2664, 3240, 4264, 5160, 6456, 7736, 8760, 10296,
335 11448, 12960, 14688, 16416, 19080, 20616, 22152, 23688, 26416,
336 29296, 31704, 34008, 36696, 39232, 42368, 45352, 46888, 55056},
337 {2088, 2728, 3368, 4392, 5352, 6456, 7736, 9144, 10296,
338 11832, 12960, 14688, 16992, 19080, 21384, 22920, 24496, 26416,
339 29296, 31704, 34008, 36696, 40576, 42368, 45352, 46888, 55056},
340 {2088, 2728, 3368, 4392, 5352, 6712, 7736, 9144, 10680,
341 11832, 12960, 15264, 16992, 19080, 21384, 22920, 24496, 27376,
342 29296, 32856, 35160, 37888, 40576, 43816, 45352, 46888, 55056},
343 {2088, 2792, 3368, 4392, 5544, 6712, 7992, 9144, 10680,
344 11832, 13536, 15264, 17568, 19848, 22152, 23688, 24496, 27376,
345 30576, 32856, 35160, 37888, 40576, 43816, 46888, 48936, 55056},
346 {2152, 2792, 3496, 4584, 5544, 6712, 7992, 9528, 10680,
347 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 27376,
348 30576, 32856, 35160, 39232, 42368, 43816, 46888, 48936, 57336},
349 {2152, 2856, 3496, 4584, 5544, 6968, 8248, 9528, 11064,
350 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 28336,
351 30576, 34008, 36696, 39232, 42368, 45352, 46888, 48936, 57336},
352 {2216, 2856, 3496, 4584, 5736, 6968, 8248, 9528, 11064,
353 12576, 14112, 15840, 18336, 20616, 22920, 24496, 25456, 28336,
354 31704, 34008, 36696, 39232, 42368, 45352, 48936, 51024, 57336},
355 {2216, 2856, 3624, 4776, 5736, 6968, 8248, 9912, 11064,
356 12576, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
357 31704, 34008, 36696, 40576, 43816, 45352, 48936, 51024, 59256},
358 {2280, 2984, 3624, 4776, 5736, 7224, 8504, 9912, 11448,
359 12960, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
360 31704, 35160, 37888, 40576, 43816, 46888, 48936, 51024, 59256},
361 {2280, 2984, 3624, 4776, 5992, 7224, 8504, 9912, 11448,
362 12960, 14688, 16416, 19080, 21384, 23688, 25456, 26416, 29296,
363 32856, 35160, 37888, 40576, 43816, 46888, 51024, 52752, 59256},
364 {2280, 2984, 3752, 4776, 5992, 7224, 8760, 10296, 11448,
365 12960, 14688, 16992, 19080, 21384, 23688, 25456, 27376, 30576,
366 32856, 35160, 39232, 42368, 45352, 46888, 51024, 52752, 61664},
367 {2344, 3112, 3752, 4968, 5992, 7480, 8760, 10296, 11832,
368 13536, 14688, 16992, 19080, 21384, 24496, 25456, 27376, 30576,
369 32856, 36696, 39232, 42368, 45352, 48936, 51024, 52752, 61664},
370 {2344, 3112, 3880, 4968, 5992, 7480, 8760, 10296, 11832,
371 13536, 14688, 16992, 19080, 22152, 24496, 26416, 27376, 30576,
372 34008, 36696, 39232, 42368, 45352, 48936, 52752, 55056, 61664},
373 {2408, 3112, 3880, 4968, 6200, 7480, 9144, 10680, 12216,
374 13536, 15264, 17568, 19848, 22152, 24496, 26416, 28336, 30576,
375 34008, 36696, 40576, 43816, 46888, 48936, 52752, 55056, 63776},
376 {2408, 3240, 3880, 5160, 6200, 7736, 9144, 10680, 12216,
377 13536, 15264, 17568, 19848, 22152, 25456, 26416, 28336, 31704,
378 34008, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
379 {2472, 3240, 4008, 5160, 6200, 7736, 9144, 10680, 12216,
380 14112, 15264, 17568, 19848, 22920, 25456, 27376, 28336, 31704,
381 35160, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
382 {2472, 3240, 4008, 5160, 6456, 7736, 9144, 11064, 12576,
383 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 31704,
384 35160, 37888, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
385 {2536, 3240, 4008, 5352, 6456, 7992, 9528, 11064, 12576,
386 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 32856,
387 35160, 39232, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
388 {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11064, 12576,
389 14112, 15840, 18336, 20616, 23688, 26416, 28336, 29296, 32856,
390 36696, 39232, 42368, 45352, 48936, 52752, 55056, 57336, 66592},
391 {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11448, 12960,
392 14688, 16416, 18336, 21384, 23688, 26416, 28336, 30576, 32856,
393 36696, 39232, 42368, 46888, 48936, 52752, 57336, 59256, 68808},
394 {2600, 3368, 4136, 5352, 6712, 8248, 9528, 11448, 12960,
395 14688, 16416, 19080, 21384, 23688, 26416, 28336, 30576, 34008,
396 36696, 40576, 43816, 46888, 51024, 52752, 57336, 59256, 68808},
397 {2600, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 12960,
398 14688, 16416, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
399 37888, 40576, 43816, 46888, 51024, 55056, 57336, 59256, 68808},
400 {2664, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 13536,
401 15264, 16992, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
402 37888, 40576, 43816, 46888, 51024, 55056, 57336, 61664, 71112},
403 {2664, 3496, 4264, 5544, 6968, 8504, 9912, 11832, 13536,
404 15264, 16992, 19080, 22152, 24496, 27376, 29296, 31704, 35160,
405 37888, 40576, 45352, 48936, 51024, 55056, 59256, 61664, 71112},
406 {2728, 3496, 4392, 5736, 6968, 8504, 10296, 11832, 13536,
407 15264, 16992, 19848, 22152, 25456, 28336, 29296, 31704, 35160,
408 37888, 42368, 45352, 48936, 52752, 55056, 59256, 61664, 71112},
409 {2728, 3624, 4392, 5736, 6968, 8760, 10296, 11832, 13536,
410 15264, 16992, 19848, 22152, 25456, 28336, 30576, 31704, 35160,
411 39232, 42368, 45352, 48936, 52752, 57336, 59256, 61664, 73712},
412 {2728, 3624, 4392, 5736, 6968, 8760, 10296, 12216, 14112,
413 15840, 17568, 19848, 22920, 25456, 28336, 30576, 31704, 35160,
414 39232, 42368, 46888, 48936, 52752, 57336, 61664, 63776, 73712},
415 {2792, 3624, 4584, 5736, 7224, 8760, 10296, 12216, 14112,
416 15840, 17568, 19848, 22920, 25456, 28336, 30576, 32856, 36696,
417 39232, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
418 {2792, 3752, 4584, 5992, 7224, 8760, 10680, 12216, 14112,
419 15840, 17568, 20616, 22920, 26416, 29296, 30576, 32856, 36696,
420 40576, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
421 {2856, 3752, 4584, 5992, 7224, 9144, 10680, 12576, 14112,
422 16416, 18336, 20616, 23688, 26416, 29296, 31704, 32856, 36696,
423 40576, 43816, 46888, 51024, 55056, 59256, 61664, 63776, 75376},
424 {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
425 16416, 18336, 20616, 23688, 26416, 29296, 31704, 34008, 36696,
426 40576, 43816, 48936, 51024, 55056, 59256, 63776, 66592, 75376},
427 {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
428 16416, 18336, 21384, 23688, 26416, 29296, 31704, 34008, 37888,
429 40576, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
430 {2984, 3880, 4776, 6200, 7480, 9144, 11064, 12960, 14688,
431 16416, 18336, 21384, 23688, 27376, 30576, 31704, 34008, 37888,
432 42368, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
433 {2984, 3880, 4776, 6200, 7480, 9528, 11064, 12960, 14688,
434 16992, 18336, 21384, 24496, 27376, 30576, 32856, 34008, 37888,
435 42368, 45352, 48936, 52752, 57336, 61664, 63776, 66592, 75376},
436 {2984, 3880, 4776, 6200, 7736, 9528, 11064, 12960, 15264,
437 16992, 19080, 21384, 24496, 27376, 30576, 32856, 35160, 39232,
438 42368, 46888, 48936, 52752, 57336, 61664, 66592, 68808, 75376},
439 {2984, 4008, 4776, 6200, 7736, 9528, 11448, 12960, 15264,
440 16992, 19080, 22152, 24496, 27376, 30576, 32856, 35160, 39232,
441 42368, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
442 {2984, 4008, 4968, 6456, 7736, 9528, 11448, 13536, 15264,
443 16992, 19080, 22152, 24496, 28336, 31704, 34008, 35160, 39232,
444 43816, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
445 {3112, 4008, 4968, 6456, 7992, 9528, 11448, 13536, 15264,
446 17568, 19080, 22152, 25456, 28336, 31704, 34008, 35160, 39232,
447 43816, 46888, 51024, 55056, 59256, 63776, 66592, 71112, 75376}
468 "The requested BER in assigning MCS (default is 0.00005).",
471 MakeDoubleChecker<double>())
474 "AMC model used to assign CQI",
477 MakeEnumChecker(LteAmc::MiErrorModel,
"Vienna", LteAmc::PiroEW2010,
"PiroEW2010"));
482LteAmc::GetCqiFromSpectralEfficiency(
double s)
485 NS_ASSERT_MSG(s >= 0.0,
"negative spectral efficiency = " << s);
496LteAmc::GetMcsFromCqi(
int cqi)
499 NS_ASSERT_MSG(cqi >= 0 && cqi <= 15,
"CQI must be in [0..15] = " << cqi);
511LteAmc::GetDlTbSizeFromMcs(
int mcs,
int nprb)
523LteAmc::GetUlTbSizeFromMcs(
int mcs,
int nprb)
535LteAmc::GetSpectralEfficiencyFromCqi(
int cqi)
538 NS_ASSERT_MSG(cqi >= 0 && cqi <= 15,
"CQI must be in [0..15] = " << cqi);
548 std::vector<int> cqi;
549 Values::const_iterator it;
551 if (m_amcModel == PiroEW2010)
555 double sinr_ = (*it);
570 double s = log2(1 + (sinr_ / ((-std::log(5.0 * m_ber)) / 1.5)));
572 int cqi_ = GetCqiFromSpectralEfficiency(s);
574 NS_LOG_LOGIC(
" PRB =" << cqi.size() <<
", sinr = " << sinr_
575 <<
" (=" << 10 * std::log10(sinr_) <<
" dB)"
576 <<
", spectral efficiency =" << s <<
", CQI = " << cqi_
577 <<
", BER = " << m_ber);
583 else if (m_amcModel == MiErrorModel)
585 NS_LOG_DEBUG(
this <<
" AMC-VIENNA RBG size " << (uint16_t)rbgSize);
586 NS_ASSERT_MSG(rbgSize > 0,
" LteAmc-Vienna: RBG size must be greater than 0");
587 std::vector<int> rbgMap;
591 rbgMap.push_back(rbId++);
599 tbStats = LteMiErrorModel::GetTbDecodificationStats(
602 (uint16_t)GetDlTbSizeFromMcs(mcs, rbgSize) / 8,
605 if (tbStats.
tbler > 0.1)
615 NS_LOG_DEBUG(
this <<
"\t RBG " << rbId <<
" MCS " << (uint16_t)mcs <<
" TBLER "
618 if ((tbStats.
tbler > 0.1) && (mcs == 0))
635 NS_LOG_DEBUG(
this <<
"\t MCS " << (uint16_t)mcs <<
"-> CQI " << rbgCqi);
637 for (uint8_t j = 0; j < rbgSize; j++)
639 cqi.push_back(rbgCqi);
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Hold variables of type enum.
Implements the Adaptive Modulation And Coding Scheme.
A base class which provides memory management and object aggregation.
Set of values corresponding to a given SpectrumModel.
Values::const_iterator ConstValuesBegin() const
Values::const_iterator ConstValuesEnd() const
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#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.
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 ...
static const int McsToItbsUl[29]
Table of MCS index (IMCS) and its TBS index (ITBS).
std::vector< HarqProcessInfoElement_t > HarqProcessInfoList_t
HarqProcessInfoList_t typedef.
static const double SpectralEfficiencyForCqi[16]
Table of CQI index and its spectral efficiency.
static const double SpectralEfficiencyForMcs[32]
Table of MCS index and its spectral efficiency.
static const int McsToItbsDl[29]
Table of MCS index (IMCS) and its TBS index (ITBS).
Ptr< const AttributeChecker > MakeEnumChecker(int v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.
double tbler
Transport block BLER.