5G-LENA nr-v4.0
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-lte-amc.cc
1// Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
2//
3// SPDX-License-Identifier: GPL-2.0-only
4//
5// Original Author: Giuseppe Piro <g.piro@poliba.it>
6// Modified by: Marco Miozzo <mmiozzo@cttc.es>
7// Nicola Baldo <nbaldo@cttc.es>
8
9#include "nr-lte-amc.h"
10
11#include "nr-lte-mi-error-model.h"
12
13#include "ns3/assert.h"
14#include "ns3/double.h"
15#include "ns3/enum.h"
16#include "ns3/log.h"
17
18namespace ns3
19{
20
21NS_LOG_COMPONENT_DEFINE("NrLteAmc");
22
23NS_OBJECT_ENSURE_REGISTERED(NrLteAmc);
24
32static const double SpectralEfficiencyForCqi[16] = {
33 0.0, // out of range
34 0.15,
35 0.23,
36 0.38,
37 0.6,
38 0.88,
39 1.18,
40 1.48,
41 1.91,
42 2.41,
43 2.73,
44 3.32,
45 3.9,
46 4.52,
47 5.12,
48 5.55,
49};
50
51#if 0 // currently unused
60static const int ModulationSchemeForMcs[32] = {
61 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
62 4, 4, 4, 4, 4, 4, 4,
63 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
64 2, // reserved
65 4, // reserved
66 6, // reserved
67};
68#endif
69
79static const double SpectralEfficiencyForMcs[32] = {
80 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,
81 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,
82};
83
89static const int McsToItbsDl[29] = {
90 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13,
91 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
92};
93
99static const int McsToItbsUl[29] = {
100 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13,
101 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26,
102};
103
112static const int TransportBlockSizeTable[110][27] = {
113 /* NPRB 001*/ {16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224,
114 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
115 /* NPRB 002*/ {32, 56, 72, 104, 120, 144, 176, 224, 256, 296, 328, 376, 440, 488,
116 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1192, 1256, 1480},
117 /* NPRB 003*/ {56, 88, 144, 176, 208, 224, 256, 328, 392, 456, 504, 584, 680, 744,
118 840, 904, 968, 1064, 1160, 1288, 1384, 1480, 1608, 1736, 1800, 1864, 2216},
119 /* NPRB 004*/ {88, 144, 176, 208, 256, 328, 392, 472, 536,
120 616, 680, 776, 904, 1000, 1128, 1224, 1288, 1416,
121 1544, 1736, 1864, 1992, 2152, 2280, 2408, 2536, 2984},
122 /* NPRB 005*/ {120, 176, 208, 256, 328, 424, 504, 584, 680,
123 776, 872, 1000, 1128, 1256, 1416, 1544, 1608, 1800,
124 1992, 2152, 2344, 2472, 2664, 2856, 2984, 3112, 3752},
125 /* NPRB 006*/ {152, 208, 256, 328, 408, 504, 600, 712, 808,
126 936, 1032, 1192, 1352, 1544, 1736, 1800, 1928, 2152,
127 2344, 2600, 2792, 2984, 3240, 3496, 3624, 3752, 4392},
128 /* NPRB 007*/ {176, 224, 296, 392, 488, 600, 712, 840, 968,
129 1096, 1224, 1384, 1608, 1800, 1992, 2152, 2280, 2536,
130 2792, 2984, 3240, 3496, 3752, 4008, 4264, 4392, 5160},
131 /* NPRB 008*/ {208, 256, 328, 440, 552, 680, 808, 968, 1096,
132 1256, 1384, 1608, 1800, 2024, 2280, 2472, 2600, 2856,
133 3112, 3496, 3752, 4008, 4264, 4584, 4968, 5160, 5992},
134 /* NPRB 009*/ {224, 328, 376, 504, 632, 776, 936, 1096, 1256,
135 1416, 1544, 1800, 2024, 2280, 2600, 2728, 2984, 3240,
136 3624, 3880, 4136, 4584, 4776, 5160, 5544, 5736, 6712},
137 /* NPRB 010*/ {256, 344, 424, 568, 696, 872, 1032, 1224, 1384,
138 1544, 1736, 2024, 2280, 2536, 2856, 3112, 3240, 3624,
139 4008, 4264, 4584, 4968, 5352, 5736, 5992, 6200, 7480},
140 /* NPRB 011*/ {288, 376, 472, 616, 776, 968, 1128, 1320, 1544,
141 1736, 1928, 2216, 2472, 2856, 3112, 3368, 3624, 4008,
142 4392, 4776, 5160, 5544, 5992, 6200, 6712, 6968, 8248},
143 /* NPRB 012*/ {328, 424, 520, 680, 840, 1032, 1224, 1480, 1672,
144 1864, 2088, 2408, 2728, 3112, 3496, 3624, 3880, 4392,
145 4776, 5160, 5544, 5992, 6456, 6968, 7224, 7480, 8760},
146 /* NPRB 013*/ {344, 456, 568, 744, 904, 1128, 1352, 1608, 1800,
147 2024, 2280, 2600, 2984, 3368, 3752, 4008, 4264, 4776,
148 5160, 5544, 5992, 6456, 6968, 7480, 7992, 8248, 9528},
149 /* NPRB 014*/ {376, 488, 616, 808, 1000, 1224, 1480, 1672, 1928,
150 2216, 2472, 2792, 3240, 3624, 4008, 4264, 4584, 5160,
151 5544, 5992, 6456, 6968, 7480, 7992, 8504, 8760, 10296},
152 /* NPRB 015*/ {392, 520, 648, 872, 1064, 1320, 1544, 1800, 2088,
153 2344, 2664, 2984, 3368, 3880, 4264, 4584, 4968, 5352,
154 5992, 6456, 6968, 7480, 7992, 8504, 9144, 9528, 11064},
155 /* NPRB 016*/ {424, 568, 696, 904, 1128, 1384, 1672, 1928, 2216,
156 2536, 2792, 3240, 3624, 4136, 4584, 4968, 5160, 5736,
157 6200, 6968, 7480, 7992, 8504, 9144, 9912, 10296, 11832},
158 /* NPRB 017*/ {456, 600, 744, 968, 1192, 1480, 1736, 2088, 2344,
159 2664, 2984, 3496, 3880, 4392, 4968, 5160, 5544, 6200,
160 6712, 7224, 7992, 8504, 9144, 9912, 10296, 10680, 12576},
161 /* NPRB 018*/ {488, 632, 776, 1032, 1288, 1544, 1864, 2216, 2536,
162 2856, 3112, 3624, 4136, 4584, 5160, 5544, 5992, 6456,
163 7224, 7736, 8248, 9144, 9528, 10296, 11064, 11448, 13536},
164 /* NPRB 019*/ {504, 680, 840, 1096, 1352, 1672, 1992, 2344, 2664,
165 2984, 3368, 3880, 4392, 4968, 5544, 5736, 6200, 6712,
166 7480, 8248, 8760, 9528, 10296, 11064, 11448, 12216, 14112},
167 /* NPRB 020*/ {536, 712, 872, 1160, 1416, 1736, 2088, 2472, 2792,
168 3112, 3496, 4008, 4584, 5160, 5736, 6200, 6456, 7224,
169 7992, 8504, 9144, 9912, 10680, 11448, 12216, 12576, 14688},
170 /* NPRB 021*/ {568, 744, 936, 1224, 1480, 1864, 2216, 2536, 2984,
171 3368, 3752, 4264, 4776, 5352, 5992, 6456, 6712, 7480,
172 8248, 9144, 9912, 10680, 11448, 12216, 12960, 13536, 15264},
173 /* NPRB 022*/ {600, 776, 968, 1256, 1544, 1928, 2280, 2664, 3112,
174 3496, 3880, 4392, 4968, 5736, 6200, 6712, 7224, 7992,
175 8760, 9528, 10296, 11064, 11832, 12576, 13536, 14112, 16416},
176 /* NPRB 023*/ {616, 808, 1000, 1320, 1608, 2024, 2408, 2792, 3240,
177 3624, 4008, 4584, 5352, 5992, 6456, 6968, 7480, 8248,
178 9144, 9912, 10680, 11448, 12576, 12960, 14112, 14688, 16992},
179 /* NPRB 024*/ {648, 872, 1064, 1384, 1736, 2088, 2472, 2984, 3368,
180 3752, 4264, 4776, 5544, 6200, 6968, 7224, 7736, 8760,
181 9528, 10296, 11064, 12216, 12960, 13536, 14688, 15264, 17568},
182 /* NPRB 025*/ {680, 904, 1096, 1416, 1800, 2216, 2600, 3112, 3496,
183 4008, 4392, 4968, 5736, 6456, 7224, 7736, 7992, 9144,
184 9912, 10680, 11448, 12576, 13536, 14112, 15264, 15840, 18336},
185 /* NPRB 026*/ {712, 936, 1160, 1480, 1864, 2280, 2728, 3240, 3624,
186 4136, 4584, 5352, 5992, 6712, 7480, 7992, 8504, 9528,
187 10296, 11064, 12216, 12960, 14112, 14688, 15840, 16416, 19080},
188 /* NPRB 027*/ {744, 968, 1192, 1544, 1928, 2344, 2792, 3368, 3752,
189 4264, 4776, 5544, 6200, 6968, 7736, 8248, 8760, 9912,
190 10680, 11448, 12576, 13536, 14688, 15264, 16416, 16992, 19848},
191 /* NPRB 028*/ {776, 1000, 1256, 1608, 1992, 2472, 2984, 3368, 3880,
192 4392, 4968, 5736, 6456, 7224, 7992, 8504, 9144, 10296,
193 11064, 12216, 12960, 14112, 15264, 15840, 16992, 17568, 20616},
194 /* NPRB 029*/ {776, 1032, 1288, 1672, 2088, 2536, 2984, 3496, 4008,
195 4584, 5160, 5992, 6712, 7480, 8248, 8760, 9528, 10296,
196 11448, 12576, 13536, 14688, 15840, 16416, 17568, 18336, 21384},
197 /* NPRB 030*/ {808, 1064, 1320, 1736, 2152, 2664, 3112, 3624, 4264,
198 4776, 5352, 5992, 6712, 7736, 8504, 9144, 9912, 10680,
199 11832, 12960, 14112, 15264, 16416, 16992, 18336, 19080, 22152},
200 /* NPRB 031*/ {840, 1128, 1384, 1800, 2216, 2728, 3240, 3752, 4392,
201 4968, 5544, 6200, 6968, 7992, 8760, 9528, 9912, 11064,
202 12216, 13536, 14688, 15840, 16992, 17568, 19080, 19848, 22920},
203 /* NPRB 032*/ {872, 1160, 1416, 1864, 2280, 2792, 3368, 3880, 4584,
204 5160, 5736, 6456, 7224, 8248, 9144, 9912, 10296, 11448,
205 12576, 13536, 14688, 15840, 16992, 18336, 19848, 20616, 23688},
206 /* NPRB 033*/ {904, 1192, 1480, 1928, 2344, 2856, 3496, 4008, 4584,
207 5160, 5736, 6712, 7480, 8504, 9528, 10296, 10680, 11832,
208 12960, 14112, 15264, 16416, 17568, 19080, 19848, 20616, 24496},
209 /* NPRB 034*/ {936, 1224, 1544, 1992, 2408, 2984, 3496, 4136, 4776,
210 5352, 5992, 6968, 7736, 8760, 9912, 10296, 11064, 12216,
211 13536, 14688, 15840, 16992, 18336, 19848, 20616, 21384, 25456},
212 /* NPRB 035*/ {968, 1256, 1544, 2024, 2472, 3112, 3624, 4264, 4968,
213 5544, 6200, 6968, 7992, 9144, 9912, 10680, 11448, 12576,
214 14112, 15264, 16416, 17568, 19080, 19848, 21384, 22152, 25456},
215 /* NPRB 036*/ {1000, 1288, 1608, 2088, 2600, 3112, 3752, 4392, 4968,
216 5736, 6200, 7224, 8248, 9144, 10296, 11064, 11832, 12960,
217 14112, 15264, 16992, 18336, 19080, 20616, 22152, 22920, 26416},
218 /* NPRB 037*/ {1032, 1352, 1672, 2152, 2664, 3240, 3880, 4584, 5160,
219 5736, 6456, 7480, 8504, 9528, 10680, 11448, 12216, 13536,
220 14688, 15840, 16992, 18336, 19848, 21384, 22920, 23688, 27376},
221 /* NPRB 038*/ {1032, 1384, 1672, 2216, 2728, 3368, 4008, 4584, 5352,
222 5992, 6712, 7736, 8760, 9912, 11064, 11832, 12216, 13536,
223 15264, 16416, 17568, 19080, 20616, 22152, 22920, 24496, 28336},
224 /* NPRB 039*/ {1064, 1416, 1736, 2280, 2792, 3496, 4136, 4776, 5544,
225 6200, 6712, 7736, 8760, 9912, 11064, 11832, 12576, 14112,
226 15264, 16992, 18336, 19848, 21384, 22152, 23688, 24496, 29296},
227 /* NPRB 040*/ {1096, 1416, 1800, 2344, 2856, 3496, 4136, 4968, 5544,
228 6200, 6968, 7992, 9144, 10296, 11448, 12216, 12960, 14688,
229 15840, 16992, 18336, 19848, 21384, 22920, 24496, 25456, 29296},
230 /* NPRB 041*/ {1128, 1480, 1800, 2408, 2984, 3624, 4264, 4968, 5736,
231 6456, 7224, 8248, 9528, 10680, 11832, 12576, 13536, 14688,
232 16416, 17568, 19080, 20616, 22152, 23688, 25456, 26416, 30576},
233 /* NPRB 042*/ {1160, 1544, 1864, 2472, 2984, 3752, 4392, 5160, 5992,
234 6712, 7480, 8504, 9528, 10680, 12216, 12960, 13536, 15264,
235 16416, 18336, 19848, 21384, 22920, 24496, 25456, 26416, 30576},
236 /* NPRB 043*/ {1192, 1544, 1928, 2536, 3112, 3752, 4584, 5352, 5992,
237 6712, 7480, 8760, 9912, 11064, 12216, 12960, 14112, 15264,
238 16992, 18336, 19848, 21384, 22920, 24496, 26416, 27376, 31704},
239 /* NPRB 044*/ {1224, 1608, 1992, 2536, 3112, 3880, 4584, 5352, 6200,
240 6968, 7736, 8760, 9912, 11448, 12576, 13536, 14112, 15840,
241 17568, 19080, 20616, 22152, 23688, 25456, 26416, 28336, 32856},
242 /* NPRB 045*/ {1256, 1608, 2024, 2600, 3240, 4008, 4776, 5544, 6200,
243 6968, 7992, 9144, 10296, 11448, 12960, 13536, 14688, 16416,
244 17568, 19080, 20616, 22920, 24496, 25456, 27376, 28336, 32856},
245 /* NPRB 046*/ {1256, 1672, 2088, 2664, 3240, 4008, 4776, 5736, 6456,
246 7224, 7992, 9144, 10680, 11832, 12960, 14112, 14688, 16416,
247 18336, 19848, 21384, 22920, 24496, 26416, 28336, 29296, 34008},
248 /* NPRB 047*/ {1288, 1736, 2088, 2728, 3368, 4136, 4968, 5736, 6456,
249 7480, 8248, 9528, 10680, 12216, 13536, 14688, 15264, 16992,
250 18336, 20616, 22152, 23688, 25456, 27376, 28336, 29296, 35160},
251 /* NPRB 048*/ {1320, 1736, 2152, 2792, 3496, 4264, 4968, 5992, 6712,
252 7480, 8504, 9528, 11064, 12216, 13536, 14688, 15840, 17568,
253 19080, 20616, 22152, 24496, 25456, 27376, 29296, 30576, 35160},
254 /* NPRB 049*/ {1352, 1800, 2216, 2856, 3496, 4392, 5160, 5992, 6968,
255 7736, 8504, 9912, 11064, 12576, 14112, 15264, 15840, 17568,
256 19080, 21384, 22920, 24496, 26416, 28336, 29296, 31704, 36696},
257 /* NPRB 050*/ {1384, 1800, 2216, 2856, 3624, 4392, 5160, 6200, 6968,
258 7992, 8760, 9912, 11448, 12960, 14112, 15264, 16416, 18336,
259 19848, 21384, 22920, 25456, 27376, 28336, 30576, 31704, 36696},
260 /* NPRB 051*/ {1416, 1864, 2280, 2984, 3624, 4584, 5352, 6200, 7224,
261 7992, 9144, 10296, 11832, 12960, 14688, 15840, 16416, 18336,
262 19848, 22152, 23688, 25456, 27376, 29296, 31704, 32856, 37888},
263 /* NPRB 052*/ {1416, 1864, 2344, 2984, 3752, 4584, 5352, 6456, 7224,
264 8248, 9144, 10680, 11832, 13536, 14688, 15840, 16992, 19080,
265 20616, 22152, 24496, 26416, 28336, 29296, 31704, 32856, 37888},
266 /* NPRB 053*/ {1480, 1928, 2344, 3112, 3752, 4776, 5544, 6456, 7480,
267 8248, 9144, 10680, 12216, 13536, 15264, 16416, 16992, 19080,
268 21384, 22920, 24496, 26416, 28336, 30576, 32856, 34008, 39232},
269 /* NPRB 054*/ {1480, 1992, 2408, 3112, 3880, 4776, 5736, 6712, 7480,
270 8504, 9528, 11064, 12216, 14112, 15264, 16416, 17568, 19848,
271 21384, 22920, 25456, 27376, 29296, 30576, 32856, 34008, 40576},
272 /* NPRB 055*/ {1544, 1992, 2472, 3240, 4008, 4776, 5736, 6712, 7736,
273 8760, 9528, 11064, 12576, 14112, 15840, 16992, 17568, 19848,
274 22152, 23688, 25456, 27376, 29296, 31704, 34008, 35160, 40576},
275 /* NPRB 056*/ {1544, 2024, 2536, 3240, 4008, 4968, 5992, 6712, 7736,
276 8760, 9912, 11448, 12576, 14688, 15840, 16992, 18336, 20616,
277 22152, 24496, 26416, 28336, 30576, 31704, 34008, 35160, 40576},
278 /* NPRB 057*/ {1608, 2088, 2536, 3368, 4136, 4968, 5992, 6968, 7992,
279 9144, 9912, 11448, 12960, 14688, 16416, 17568, 18336, 20616,
280 22920, 24496, 26416, 28336, 30576, 32856, 35160, 36696, 42368},
281 /* NPRB 058*/ {1608, 2088, 2600, 3368, 4136, 5160, 5992, 6968, 7992,
282 9144, 10296, 11832, 12960, 14688, 16416, 17568, 19080, 20616,
283 22920, 25456, 27376, 29296, 31704, 32856, 35160, 36696, 42368},
284 /* NPRB 059*/ {1608, 2152, 2664, 3496, 4264, 5160, 6200, 7224, 8248,
285 9144, 10296, 11832, 13536, 15264, 16992, 18336, 19080, 21384,
286 23688, 25456, 27376, 29296, 31704, 34008, 36696, 37888, 43816},
287 /* NPRB 060*/ {1672, 2152, 2664, 3496, 4264, 5352, 6200, 7224, 8504,
288 9528, 10680, 12216, 13536, 15264, 16992, 18336, 19848, 21384,
289 23688, 25456, 28336, 30576, 32856, 34008, 36696, 37888, 43816},
290 /* NPRB 061*/ {1672, 2216, 2728, 3624, 4392, 5352, 6456, 7480, 8504,
291 9528, 10680, 12216, 14112, 15840, 17568, 18336, 19848, 22152,
292 24496, 26416, 28336, 30576, 32856, 35160, 36696, 39232, 45352},
293 /* NPRB 062*/ {1736, 2280, 2792, 3624, 4392, 5544, 6456, 7480, 8760,
294 9912, 11064, 12576, 14112, 15840, 17568, 19080, 19848, 22152,
295 24496, 26416, 29296, 31704, 34008, 35160, 37888, 39232, 45352},
296 /* NPRB 063*/ {1736, 2280, 2856, 3624, 4584, 5544, 6456, 7736, 8760,
297 9912, 11064, 12576, 14112, 16416, 18336, 19080, 20616, 22920,
298 24496, 27376, 29296, 31704, 34008, 36696, 37888, 40576, 46888},
299 /* NPRB 064*/ {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7736, 9144,
300 10296, 11448, 12960, 14688, 16416, 18336, 19848, 20616, 22920,
301 25456, 27376, 29296, 31704, 34008, 36696, 39232, 40576, 46888},
302 /* NPRB 065*/ {1800, 2344, 2856, 3752, 4584, 5736, 6712, 7992, 9144,
303 10296, 11448, 12960, 14688, 16992, 18336, 19848, 21384, 23688,
304 25456, 28336, 30576, 32856, 35160, 37888, 39232, 40576, 48936},
305 /* NPRB 066*/ {1800, 2408, 2984, 3880, 4776, 5736, 6968, 7992, 9144,
306 10296, 11448, 13536, 15264, 16992, 19080, 20616, 21384, 23688,
307 26416, 28336, 30576, 32856, 35160, 37888, 40576, 42368, 48936},
308 /* NPRB 067*/ {1864, 2472, 2984, 3880, 4776, 5992, 6968, 8248, 9528,
309 10680, 11832, 13536, 15264, 16992, 19080, 20616, 22152, 24496,
310 26416, 29296, 31704, 34008, 36696, 37888, 40576, 42368, 48936},
311 /* NPRB 068*/ {1864, 2472, 3112, 4008, 4968, 5992, 6968, 8248, 9528,
312 10680, 11832, 13536, 15264, 17568, 19848, 20616, 22152, 24496,
313 27376, 29296, 31704, 34008, 36696, 39232, 42368, 43816, 51024},
314 /* NPRB 069*/ {1928, 2536, 3112, 4008, 4968, 5992, 7224, 8504, 9528,
315 11064, 12216, 14112, 15840, 17568, 19848, 21384, 22152, 24496,
316 27376, 29296, 31704, 35160, 36696, 39232, 42368, 43816, 51024},
317 /* NPRB 070*/ {1928, 2536, 3112, 4136, 4968, 6200, 7224, 8504, 9912,
318 11064, 12216, 14112, 15840, 18336, 19848, 21384, 22920, 25456,
319 27376, 30576, 32856, 35160, 37888, 40576, 42368, 43816, 52752},
320 /* NPRB 071*/ {1992, 2600, 3240, 4136, 5160, 6200, 7480, 8760, 9912,
321 11064, 12576, 14112, 16416, 18336, 20616, 22152, 22920, 25456,
322 28336, 30576, 32856, 35160, 37888, 40576, 43816, 45352, 52752},
323 /* NPRB 072*/ {1992, 2600, 3240, 4264, 5160, 6200, 7480, 8760, 9912,
324 11448, 12576, 14688, 16416, 18336, 20616, 22152, 23688, 26416,
325 28336, 30576, 34008, 36696, 39232, 40576, 43816, 45352, 52752},
326 /* NPRB 073*/ {2024, 2664, 3240, 4264, 5160, 6456, 7736, 8760, 10296,
327 11448, 12960, 14688, 16416, 19080, 20616, 22152, 23688, 26416,
328 29296, 31704, 34008, 36696, 39232, 42368, 45352, 46888, 55056},
329 /* NPRB 074*/ {2088, 2728, 3368, 4392, 5352, 6456, 7736, 9144, 10296,
330 11832, 12960, 14688, 16992, 19080, 21384, 22920, 24496, 26416,
331 29296, 31704, 34008, 36696, 40576, 42368, 45352, 46888, 55056},
332 /* NPRB 075*/ {2088, 2728, 3368, 4392, 5352, 6712, 7736, 9144, 10680,
333 11832, 12960, 15264, 16992, 19080, 21384, 22920, 24496, 27376,
334 29296, 32856, 35160, 37888, 40576, 43816, 45352, 46888, 55056},
335 /* NPRB 076*/ {2088, 2792, 3368, 4392, 5544, 6712, 7992, 9144, 10680,
336 11832, 13536, 15264, 17568, 19848, 22152, 23688, 24496, 27376,
337 30576, 32856, 35160, 37888, 40576, 43816, 46888, 48936, 55056},
338 /* NPRB 077*/ {2152, 2792, 3496, 4584, 5544, 6712, 7992, 9528, 10680,
339 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 27376,
340 30576, 32856, 35160, 39232, 42368, 43816, 46888, 48936, 57336},
341 /* NPRB 078*/ {2152, 2856, 3496, 4584, 5544, 6968, 8248, 9528, 11064,
342 12216, 13536, 15840, 17568, 19848, 22152, 23688, 25456, 28336,
343 30576, 34008, 36696, 39232, 42368, 45352, 46888, 48936, 57336},
344 /* NPRB 079*/ {2216, 2856, 3496, 4584, 5736, 6968, 8248, 9528, 11064,
345 12576, 14112, 15840, 18336, 20616, 22920, 24496, 25456, 28336,
346 31704, 34008, 36696, 39232, 42368, 45352, 48936, 51024, 57336},
347 /* NPRB 080*/ {2216, 2856, 3624, 4776, 5736, 6968, 8248, 9912, 11064,
348 12576, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
349 31704, 34008, 36696, 40576, 43816, 45352, 48936, 51024, 59256},
350 /* NPRB 081*/ {2280, 2984, 3624, 4776, 5736, 7224, 8504, 9912, 11448,
351 12960, 14112, 16416, 18336, 20616, 22920, 24496, 26416, 29296,
352 31704, 35160, 37888, 40576, 43816, 46888, 48936, 51024, 59256},
353 /* NPRB 082*/ {2280, 2984, 3624, 4776, 5992, 7224, 8504, 9912, 11448,
354 12960, 14688, 16416, 19080, 21384, 23688, 25456, 26416, 29296,
355 32856, 35160, 37888, 40576, 43816, 46888, 51024, 52752, 59256},
356 /* NPRB 083*/ {2280, 2984, 3752, 4776, 5992, 7224, 8760, 10296, 11448,
357 12960, 14688, 16992, 19080, 21384, 23688, 25456, 27376, 30576,
358 32856, 35160, 39232, 42368, 45352, 46888, 51024, 52752, 61664},
359 /* NPRB 084*/ {2344, 3112, 3752, 4968, 5992, 7480, 8760, 10296, 11832,
360 13536, 14688, 16992, 19080, 21384, 24496, 25456, 27376, 30576,
361 32856, 36696, 39232, 42368, 45352, 48936, 51024, 52752, 61664},
362 /* NPRB 085*/ {2344, 3112, 3880, 4968, 5992, 7480, 8760, 10296, 11832,
363 13536, 14688, 16992, 19080, 22152, 24496, 26416, 27376, 30576,
364 34008, 36696, 39232, 42368, 45352, 48936, 52752, 55056, 61664},
365 /* NPRB 086*/ {2408, 3112, 3880, 4968, 6200, 7480, 9144, 10680, 12216,
366 13536, 15264, 17568, 19848, 22152, 24496, 26416, 28336, 30576,
367 34008, 36696, 40576, 43816, 46888, 48936, 52752, 55056, 63776},
368 /* NPRB 087*/ {2408, 3240, 3880, 5160, 6200, 7736, 9144, 10680, 12216,
369 13536, 15264, 17568, 19848, 22152, 25456, 26416, 28336, 31704,
370 34008, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
371 /* NPRB 088*/ {2472, 3240, 4008, 5160, 6200, 7736, 9144, 10680, 12216,
372 14112, 15264, 17568, 19848, 22920, 25456, 27376, 28336, 31704,
373 35160, 37888, 40576, 43816, 46888, 51024, 52752, 55056, 63776},
374 /* NPRB 089*/ {2472, 3240, 4008, 5160, 6456, 7736, 9144, 11064, 12576,
375 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 31704,
376 35160, 37888, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
377 /* NPRB 090*/ {2536, 3240, 4008, 5352, 6456, 7992, 9528, 11064, 12576,
378 14112, 15840, 18336, 20616, 22920, 25456, 27376, 29296, 32856,
379 35160, 39232, 42368, 45352, 48936, 51024, 55056, 57336, 66592},
380 /* NPRB 091*/ {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11064, 12576,
381 14112, 15840, 18336, 20616, 23688, 26416, 28336, 29296, 32856,
382 36696, 39232, 42368, 45352, 48936, 52752, 55056, 57336, 66592},
383 /* NPRB 092*/ {2536, 3368, 4136, 5352, 6456, 7992, 9528, 11448, 12960,
384 14688, 16416, 18336, 21384, 23688, 26416, 28336, 30576, 32856,
385 36696, 39232, 42368, 46888, 48936, 52752, 57336, 59256, 68808},
386 /* NPRB 093*/ {2600, 3368, 4136, 5352, 6712, 8248, 9528, 11448, 12960,
387 14688, 16416, 19080, 21384, 23688, 26416, 28336, 30576, 34008,
388 36696, 40576, 43816, 46888, 51024, 52752, 57336, 59256, 68808},
389 /* NPRB 094*/ {2600, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 12960,
390 14688, 16416, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
391 37888, 40576, 43816, 46888, 51024, 55056, 57336, 59256, 68808},
392 /* NPRB 095*/ {2664, 3496, 4264, 5544, 6712, 8248, 9912, 11448, 13536,
393 15264, 16992, 19080, 21384, 24496, 27376, 29296, 30576, 34008,
394 37888, 40576, 43816, 46888, 51024, 55056, 57336, 61664, 71112},
395 /* NPRB 096*/ {2664, 3496, 4264, 5544, 6968, 8504, 9912, 11832, 13536,
396 15264, 16992, 19080, 22152, 24496, 27376, 29296, 31704, 35160,
397 37888, 40576, 45352, 48936, 51024, 55056, 59256, 61664, 71112},
398 /* NPRB 097*/ {2728, 3496, 4392, 5736, 6968, 8504, 10296, 11832, 13536,
399 15264, 16992, 19848, 22152, 25456, 28336, 29296, 31704, 35160,
400 37888, 42368, 45352, 48936, 52752, 55056, 59256, 61664, 71112},
401 /* NPRB 098*/ {2728, 3624, 4392, 5736, 6968, 8760, 10296, 11832, 13536,
402 15264, 16992, 19848, 22152, 25456, 28336, 30576, 31704, 35160,
403 39232, 42368, 45352, 48936, 52752, 57336, 59256, 61664, 73712},
404 /* NPRB 099*/ {2728, 3624, 4392, 5736, 6968, 8760, 10296, 12216, 14112,
405 15840, 17568, 19848, 22920, 25456, 28336, 30576, 31704, 35160,
406 39232, 42368, 46888, 48936, 52752, 57336, 61664, 63776, 73712},
407 /* NPRB 100*/ {2792, 3624, 4584, 5736, 7224, 8760, 10296, 12216, 14112,
408 15840, 17568, 19848, 22920, 25456, 28336, 30576, 32856, 36696,
409 39232, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
410 /* NPRB 101*/ {2792, 3752, 4584, 5992, 7224, 8760, 10680, 12216, 14112,
411 15840, 17568, 20616, 22920, 26416, 29296, 30576, 32856, 36696,
412 40576, 43816, 46888, 51024, 55056, 57336, 61664, 63776, 75376},
413 /* NPRB 102*/ {2856, 3752, 4584, 5992, 7224, 9144, 10680, 12576, 14112,
414 16416, 18336, 20616, 23688, 26416, 29296, 31704, 32856, 36696,
415 40576, 43816, 46888, 51024, 55056, 59256, 61664, 63776, 75376},
416 /* NPRB 103*/ {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
417 16416, 18336, 20616, 23688, 26416, 29296, 31704, 34008, 36696,
418 40576, 43816, 48936, 51024, 55056, 59256, 63776, 66592, 75376},
419 /* NPRB 104*/ {2856, 3752, 4584, 5992, 7480, 9144, 10680, 12576, 14688,
420 16416, 18336, 21384, 23688, 26416, 29296, 31704, 34008, 37888,
421 40576, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
422 /* NPRB 105*/ {2984, 3880, 4776, 6200, 7480, 9144, 11064, 12960, 14688,
423 16416, 18336, 21384, 23688, 27376, 30576, 31704, 34008, 37888,
424 42368, 45352, 48936, 52752, 57336, 59256, 63776, 66592, 75376},
425 /* NPRB 106*/ {2984, 3880, 4776, 6200, 7480, 9528, 11064, 12960, 14688,
426 16992, 18336, 21384, 24496, 27376, 30576, 32856, 34008, 37888,
427 42368, 45352, 48936, 52752, 57336, 61664, 63776, 66592, 75376},
428 /* NPRB 107*/ {2984, 3880, 4776, 6200, 7736, 9528, 11064, 12960, 15264,
429 16992, 19080, 21384, 24496, 27376, 30576, 32856, 35160, 39232,
430 42368, 46888, 48936, 52752, 57336, 61664, 66592, 68808, 75376},
431 /* NPRB 108*/ {2984, 4008, 4776, 6200, 7736, 9528, 11448, 12960, 15264,
432 16992, 19080, 22152, 24496, 27376, 30576, 32856, 35160, 39232,
433 42368, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
434 /* NPRB 109*/ {2984, 4008, 4968, 6456, 7736, 9528, 11448, 13536, 15264,
435 16992, 19080, 22152, 24496, 28336, 31704, 34008, 35160, 39232,
436 43816, 46888, 51024, 55056, 59256, 61664, 66592, 68808, 75376},
437 /* NPRB 110*/ {3112, 4008, 4968, 6456, 7992, 9528, 11448, 13536, 15264,
438 17568, 19080, 22152, 25456, 28336, 31704, 34008, 35160, 39232,
439 43816, 46888, 51024, 55056, 59256, 63776, 66592, 71112, 75376},
440};
441
442NrLteAmc::NrLteAmc()
443{
444}
445
446NrLteAmc::~NrLteAmc()
447{
448}
449
450TypeId
451NrLteAmc::GetTypeId()
452{
453 static TypeId tid =
454 TypeId("ns3::NrLteAmc")
455 .SetParent<Object>()
456 .SetGroupName("Lte")
457 .AddConstructor<NrLteAmc>()
458 .AddAttribute("Ber",
459 "The requested BER in assigning MCS (default is 0.00005).",
460 DoubleValue(0.00005),
461 MakeDoubleAccessor(&NrLteAmc::m_ber),
462 MakeDoubleChecker<double>())
463 .AddAttribute("AmcModel",
464 "AMC model used to assign CQI",
465 EnumValue(NrLteAmc::MiErrorModel),
466 MakeEnumAccessor<AmcModel>(&NrLteAmc::m_amcModel),
467 MakeEnumChecker(NrLteAmc::MiErrorModel,
468 "Vienna",
469 NrLteAmc::PiroEW2010,
470 "PiroEW2010"));
471 return tid;
472}
473
474int
475NrLteAmc::GetCqiFromSpectralEfficiency(double s)
476{
477 NS_LOG_FUNCTION(s);
478 NS_ASSERT_MSG(s >= 0.0, "negative spectral efficiency = " << s);
479 int cqi = 0;
480 while ((cqi < 15) && (SpectralEfficiencyForCqi[cqi + 1] < s))
481 {
482 ++cqi;
483 }
484 NS_LOG_LOGIC("cqi = " << cqi);
485 return cqi;
486}
487
488int
489NrLteAmc::GetMcsFromCqi(int cqi)
490{
491 NS_LOG_FUNCTION(cqi);
492 NS_ASSERT_MSG(cqi >= 0 && cqi <= 15, "CQI must be in [0..15] = " << cqi);
493 double spectralEfficiency = SpectralEfficiencyForCqi[cqi];
494 int mcs = 0;
495 while ((mcs < 28) && (SpectralEfficiencyForMcs[mcs + 1] <= spectralEfficiency))
496 {
497 ++mcs;
498 }
499 NS_LOG_LOGIC("mcs = " << mcs);
500 return mcs;
501}
502
503int
504NrLteAmc::GetDlTbSizeFromMcs(int mcs, int nprb)
505{
506 NS_LOG_FUNCTION(mcs);
507
508 NS_ASSERT_MSG(mcs < 29, "MCS=" << mcs);
509 NS_ASSERT_MSG(nprb > 0 && nprb < 111, "NPRB=" << nprb);
510
511 int itbs = McsToItbsDl[mcs];
512 return TransportBlockSizeTable[nprb - 1][itbs];
513}
514
515int
516NrLteAmc::GetUlTbSizeFromMcs(int mcs, int nprb)
517{
518 NS_LOG_FUNCTION(mcs);
519
520 NS_ASSERT_MSG(mcs < 29, "MCS=" << mcs);
521 NS_ASSERT_MSG(nprb > 0 && nprb < 111, "NPRB=" << nprb);
522
523 int itbs = McsToItbsUl[mcs];
524 return TransportBlockSizeTable[nprb - 1][itbs];
525}
526
527} // namespace ns3