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_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 75057ab8dc..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;
@@ -353,33 +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;
- // [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);
+ if (R<1024)
+ Coderate = (float) R /(float) 1024;
+ else
+ Coderate = (float) R /(float) 2048;
-#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 (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) {
+ 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;
}
@@ -407,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 ff161e241c..cbe0a816ff 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;
@@ -303,7 +308,6 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch,
BG);
F = harq_process->F;
-
Kr = harq_process->K;
#ifdef DEBUG_DLSCH_CODING
uint16_t Kr_bytes;