From db02c60ef550b5705ed7ce59b0bc51f61844402f Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 28 Oct 2019 13:44:19 +0100 Subject: [PATCH 1/3] Updated ulsch --- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 15 ++++++++------- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c | 7 ++++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 75057ab8dc..eca4449fd7 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -353,6 +353,14 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, // This is a new packet, so compute quantities regarding segmentation harq_process->B = A+24; + if (R<1024) + Coderate = (float) R /(float) 1024; + else + Coderate = (float) R /(float) 2048; + + if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25){ + p_decParams->BG = 2; + // [hna] Perform nr_segmenation with input and output set to NULL to calculate only (B, C, K, Z, F) nr_segmentation(NULL, NULL, @@ -372,13 +380,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, p_decParams->Z = harq_process->Z; - if (R<1024) - Coderate = (float) R /(float) 1024; - else - Coderate = (float) R /(float) 2048; - - if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25){ - p_decParams->BG = 2; if (Coderate < 0.3333) { p_decParams->R = 15; kc = 52; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c index ff161e241c..c6d01b5bd4 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c @@ -207,6 +207,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, uint32_t Tbslbrm; uint8_t nb_re_dmrs; uint16_t length_dmrs; + uint16_t R; float Coderate; /////////// @@ -223,6 +224,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, A = harq_process->TBS; pz = &Z; mod_order = nr_get_Qm_ul(harq_process->mcs,0); + R = nr_get_code_rate_ul(harq_process->mcs, 0); Kr=0; r_offset=0; BG = 1; @@ -284,7 +286,10 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, ///////////////////////// b---->| block segmentation |---->c ///////////////////////// /////////// - Coderate = (float) A /(float) G; + if (R<1024) + Coderate = (float) R /(float) 1024; + else + Coderate = (float) R /(float) 2048; if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25){ BG = 2; From fcfc29ca8bfbe03c218160dcacc2b88d6ef4045d Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 28 Oct 2019 14:01:22 +0100 Subject: [PATCH 2/3] Fixed ulsch --- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 43 +++++++++---------- .../PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c | 2 +- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index eca4449fd7..3b79d425ad 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -310,7 +310,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, uint16_t nb_rb = nfapi_ulsch_pdu_rel15->number_rbs; uint16_t number_symbols = nfapi_ulsch_pdu_rel15->number_symbols; uint8_t Qm = nfapi_ulsch_pdu_rel15->Qm; - uint8_t R = nfapi_ulsch_pdu_rel15->R; + uint16_t R = nfapi_ulsch_pdu_rel15->R; uint8_t mcs = nfapi_ulsch_pdu_rel15->mcs; uint8_t n_layers = nfapi_ulsch_pdu_rel15->n_layers; uint8_t nb_re_dmrs = nfapi_ulsch_pdu_rel15->nb_re_dmrs; @@ -360,27 +360,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25){ p_decParams->BG = 2; - - // [hna] Perform nr_segmenation with input and output set to NULL to calculate only (B, C, K, Z, F) - nr_segmentation(NULL, - NULL, - harq_process->B, - &harq_process->C, - &harq_process->K, - &harq_process->Z, // [hna] Z is Zc - &harq_process->F, - p_decParams->BG); - -#ifdef DEBUG_ULSCH_DECODING - printf("ulsch decoding nr segmentation Z %d\n", harq_process->Z); - if (!frame%100) - printf("K %d C %d Z %d nl %d \n", harq_process->K, harq_process->C, harq_process->Z, harq_process->Nl); -#endif - } - - p_decParams->Z = harq_process->Z; - - if (Coderate < 0.3333) { + if (Coderate < 0.3333) { p_decParams->R = 15; kc = 52; } @@ -408,6 +388,25 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB, } } + // [hna] Perform nr_segmenation with input and output set to NULL to calculate only (B, C, K, Z, F) + nr_segmentation(NULL, + NULL, + harq_process->B, + &harq_process->C, + &harq_process->K, + &harq_process->Z, // [hna] Z is Zc + &harq_process->F, + p_decParams->BG); + +#ifdef DEBUG_ULSCH_DECODING + printf("ulsch decoding nr segmentation Z %d\n", harq_process->Z); + if (!frame%100) + printf("K %d C %d Z %d nl %d \n", harq_process->K, harq_process->C, harq_process->Z, harq_process->Nl); +#endif + } + p_decParams->Z = harq_process->Z; + + p_decParams->numMaxIter = ulsch->max_ldpc_iterations; p_decParams->outMode= 0; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c index c6d01b5bd4..e3bceb7813 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c @@ -308,7 +308,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, BG); F = harq_process->F; - +printf("BG %d R %f\n",BG,Coderate); Kr = harq_process->K; #ifdef DEBUG_DLSCH_CODING uint16_t Kr_bytes; From 5bfbfd9a3735b418cc5d35f62210c8301a43a290 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 28 Oct 2019 14:05:54 +0100 Subject: [PATCH 3/3] Updated test cases (ready for CI tests) --- cmake_targets/autotests/test_case_list.xml | 6 +++--- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 06b3198e78..e1cff34e88 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1089,8 +1089,8 @@ (Test8: 217 PRB 100 PDSCH-PRBs), (Test9: 217 PRB 80 PDSCH-Offset), (Test10: 217 PRB 100 PDSCH-PRBs 80 PDSCH-Offset),--> - (Test13: 106 PRB 0 MCS), - (Test14: 273 PRB 28 MCS) + (Test6: 106 PRB 0 MCS), + (Test7: 273 PRB 28 MCS) $OPENAIR_DIR/cmake_targets/build_oai --phy_simulators -c @@ -1109,7 +1109,7 @@ -n100 -R217 -a80 -b100--> -n100 -R106 -e0 -n100 -R273 -e28 - nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test13 nr_dlsim.test14 + nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 "PDCCH test OK" "PDSCH test OK" segmentation fault|assertion|exiting|fatal 3 diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c index e3bceb7813..cbe0a816ff 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c @@ -308,7 +308,6 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch, BG); F = harq_process->F; -printf("BG %d R %f\n",BG,Coderate); Kr = harq_process->K; #ifdef DEBUG_DLSCH_CODING uint16_t Kr_bytes;