From 9d3980aa19401a629199f23375171a45dc9fdd37 Mon Sep 17 00:00:00 2001 From: Hongzhi Wang Date: Fri, 31 Aug 2018 17:32:17 +0200 Subject: [PATCH] ue adding nr_compute_tbs and nr_segmentation --- cmake_targets/CMakeLists.txt | 2 + openair1/PHY/CODING/nr_compute_tbs.c | 116 ++++++++++++++++++++++++++ openair1/PHY/CODING/nr_segmentation.c | 4 +- 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 openair1/PHY/CODING/nr_compute_tbs.c diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 2682582a46..420a2932ae 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1171,6 +1171,8 @@ set(PHY_SRC_COMMON ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_dl_mbsfn.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_ul_ref.c ${OPENAIR1_DIR}/PHY/CODING/lte_segmentation.c + ${OPENAIR1_DIR}/PHY/CODING/nr_segmentation.c + ${OPENAIR1_DIR}/PHY/CODING/nr_compute_tbs.c ${OPENAIR1_DIR}/PHY/CODING/ccoding_byte.c ${OPENAIR1_DIR}/PHY/CODING/ccoding_byte_lte.c ${OPENAIR1_DIR}/PHY/CODING/3gpplte_sse.c diff --git a/openair1/PHY/CODING/nr_compute_tbs.c b/openair1/PHY/CODING/nr_compute_tbs.c new file mode 100644 index 0000000000..6cc19d23ff --- /dev/null +++ b/openair1/PHY/CODING/nr_compute_tbs.c @@ -0,0 +1,116 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* file: nr_compute_tbs.c + purpose: Compute NR TBS + author: Hongzhi WANG (TCL) +*/ +//#include "PHY/defs.h" +//#include "SCHED/extern.h" + +#define INDEX_MAX_TBS_TABLE (93) +//Table 5.1.3.1-1 +uint16_t Mcsindextable1[29][3] = {{2,120,0.2344}, + {2,157,0.3066}, + {2,193,0.3770}, + {2,251,0.4902}, + {2,308,0.6016}, + {2,379,0.7402}, + {2,449,0.8770}, + {2,526,1.0273}, + {2,602,1.1758}, + {2,679,1.3262}, + {4,340,1.3281}, + {4,378,1.4766}, + {4,434,1.6953}, + {4,490,1.9141}, + {4,553,2.1602}, + {4,616,2.4063}, + {4,658,2.5703}, + {6,438,2.5664}, + {6,466,2.7305}, + {6,517,3.0293}, + {6,567,3.3223}, + {6,616,3.6094}, + {6,666,3.9023}, + {6,719,4.2129}, + {6,772,4.5234}, + {6,822,4.8164}, + {6,873,5.1152}, + {6,910,5.3320}, + {6,948,5.5547}}; + +uint16_t Tbstable_nr[INDEX_MAX_TBS_TABLE] = {24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,208,224,240,256,272,288,304,320,336,352,368,384,408,432,456,480,504,528,552,576,608,640,672,704,736,768,808,848,888,928,984,1032,1064,1128,1160,1192,1224,1256,1288,1320,1352,1416,1480,1544,1608,1672,1736,1800,1864,1928,2024,2088,2152,2216,2280,2408,2472,2536,2600,2664,2728,2792,2856,2976,3104,3240,3368,3496,3624,3752,3824}; + +uint32_t nr_compute_tbs(uint8_t mcs, uint16_t nb_rb,uint16_t nb_symb_sch,uint8_t nb_re_dmrs,uint16_t length_dmrs, uint8_t Nl) +{ + + uint16_t nbp_re, nb_re, nb_dmrs_prb, nb_rb_oh, Ninfo,Np_info,n,Qm,R,C; + uint32_t nr_tbs; + + nb_rb_oh = 0; //set to 0 if not configured by higher layer + Qm = Mcsindextable1[mcs][0]; + R = Mcsindextable1[mcs][1]; + nb_dmrs_prb = nb_re_dmrs*length_dmrs; + + nbp_re = 12 * nb_symb_sch - nb_dmrs_prb - nb_rb_oh; + + nb_re = min(156, nbp_re) * nb_rb; + + // Intermediate number of information bits + Ninfo = (nb_re * R * Qm * Nl)/1024; + + //printf("Ninfo %d nbp_re %d nb_re %d Qm %d, R %d\n", Ninfo, nbp_re, nb_re, Qm, R); + + if (Ninfo <=3824) { + + n = max(3, floor(log2(Ninfo)) - 6); + Np_info = max(24, pow(n,2) * floor(Ninfo/pow(n,2))); + + for (int i=0; i= Np_info){ + nr_tbs = Tbstable_nr[i]; + break; + } + } + } + else { + n = floor(log2(Ninfo-24)) - 5; + Np_info = max(3840, pow(n,2) * round((Ninfo - 24)/pow(n,2))); + + if (R <= 1/4) { + C = ceil( (Np_info + 24)/3816 ); + nr_tbs = 8 * C * ceil( (Np_info + 24)/(8*C) ) - 24; + } + else { + if (Np_info > 8424){ + C = ceil( (Np_info + 24)/8424 ); + nr_tbs = 8 * C * ceil( (Np_info + 24)/(8*C) ) - 24; + } + else + nr_tbs = 8 * ceil( (Np_info + 24)/8 ) - 24; + + } + + } + + return nr_tbs; +} diff --git a/openair1/PHY/CODING/nr_segmentation.c b/openair1/PHY/CODING/nr_segmentation.c index e7035fcfaa..e14d04df22 100644 --- a/openair1/PHY/CODING/nr_segmentation.c +++ b/openair1/PHY/CODING/nr_segmentation.c @@ -24,8 +24,8 @@ author: Hongzhi WANG (TCL) date: 12.09.2017 */ -#include "PHY/defs.h" -#include "SCHED/extern.h" +//#include "PHY/defs.h" +//#include "SCHED/extern.h" //#define DEBUG_SEGMENTATION