From 1b7be0c35a70ea16400ba3aebf5abb3e4f80f85e Mon Sep 17 00:00:00 2001 From: francescomani Date: Wed, 15 Apr 2026 15:07:04 +0200 Subject: [PATCH] fixes at UE to make number of RBs independent from PDSCH type --- .../nr_dl_channel_estimation.c | 12 +-- openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h | 1 + .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 7 +- .../NR_UE_TRANSPORT/nr_dlsch_demodulation.c | 1 + .../NR_UE_TRANSPORT/nr_transport_proto_ue.h | 1 + openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 98 ++++++++----------- openair1/SIMULATION/NR_PHY/dlschsim.c | 1 + 7 files changed, 51 insertions(+), 70 deletions(-) diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index 239268b6a6..a8ea145c60 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -1378,6 +1378,7 @@ void nr_pdsch_ptrs_processing(int nbRx, NR_DL_UE_HARQ_t *dlsch1_harq, uint8_t nr_slot_rx, unsigned char symbol, + int nb_rb, uint16_t rnti, NR_UE_DLSCH_t dlsch[2]) { @@ -1394,7 +1395,6 @@ void nr_pdsch_ptrs_processing(int nbRx, uint16_t *ptrsSymbPos = NULL; uint8_t *ptrsSymbIdx = NULL; uint8_t *ptrsReOffset = NULL; - uint16_t *nb_rb = NULL; int nscid = 0; if(dlsch0_harq->status == NR_ACTIVE) { @@ -1405,7 +1405,6 @@ void nr_pdsch_ptrs_processing(int nbRx, K_ptrs = &dlsch[0].dlsch_config.PTRSFreqDensity; dmrsSymbPos = &dlsch[0].dlsch_config.dlDmrsSymbPos; ptrsReOffset = &dlsch[0].dlsch_config.PTRSReOffset; - nb_rb = &dlsch[0].dlsch_config.number_rbs; ptrsSymbPos = &dlsch[0].ptrs_symbols; ptrsSymbIdx = &dlsch[0].ptrs_symbol_index; nscid = dlsch[0].dlsch_config.nscid; @@ -1418,7 +1417,6 @@ void nr_pdsch_ptrs_processing(int nbRx, K_ptrs = &dlsch[1].dlsch_config.PTRSFreqDensity; dmrsSymbPos = &dlsch[1].dlsch_config.dlDmrsSymbPos; ptrsReOffset = &dlsch[1].dlsch_config.PTRSReOffset; - nb_rb = &dlsch[1].dlsch_config.number_rbs; ptrsSymbPos = &dlsch[1].ptrs_symbols; ptrsSymbIdx = &dlsch[1].ptrs_symbol_index; nscid = dlsch[1].dlsch_config.nscid; @@ -1462,7 +1460,7 @@ void nr_pdsch_ptrs_processing(int nbRx, nr_gold_pdsch(frame_parms->N_RB_DL, frame_parms->symbols_per_slot, frame_parms->Nid_cell, nscid, nr_slot_rx, symbol); nr_ptrs_cpe_estimation(*K_ptrs, *ptrsReOffset, - *nb_rb, + nb_rb, rnti, frame_parms->ofdm_symbol_size, rxdataF_comp[symbol][0][aarx], @@ -1498,11 +1496,7 @@ void nr_pdsch_ptrs_processing(int nbRx, #ifdef DEBUG_DL_PTRS printf("[PHY][DL][PTRS]: Rotate Symbol %2d with %d + j* %d\n", i, phase_per_symbol[i].r,phase_per_symbol[i].i); #endif - rotate_cpx_vector(rxdataF_comp[i][0][aarx], - &phase_per_symbol[i], - rxdataF_comp[i][0][aarx], - ((*nb_rb) * NR_NB_SC_PER_RB), - 15); + rotate_cpx_vector(rxdataF_comp[i][0][aarx], &phase_per_symbol[i], rxdataF_comp[i][0][aarx], nb_rb * NR_NB_SC_PER_RB, 15); }// if not DMRS Symbol }// symbol loop }// last symbol check diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index cf83dbe85d..474debc2f7 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -130,6 +130,7 @@ void nr_pdsch_ptrs_processing(int nbRx, NR_DL_UE_HARQ_t *dlsch1_harq, uint8_t nr_slot_rx, unsigned char symbol, + int nb_rb, uint16_t rnti, NR_UE_DLSCH_t dlsch[2]); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index 90e66cfb19..7ccc366dfa 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -47,6 +47,7 @@ void nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, uint8_t **b, int *G, int nb_dlsch, + int number_rbs, uint8_t *DLSCH_ids) { nrLDPC_TB_decoding_parameters_t TBs[nb_dlsch]; @@ -95,7 +96,7 @@ void nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, // ------------------------------------------------------------------ TB_parameters->G = G[DLSCH_id]; - TB_parameters->nb_rb = dlsch_config->number_rbs; + TB_parameters->nb_rb = number_rbs; TB_parameters->Qm = dlsch_config->qamModOrder; TB_parameters->mcs = dlsch_config->mcs; TB_parameters->nb_layers = dlsch[DLSCH_id].Nl; @@ -256,7 +257,7 @@ void nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, kpiStructure.nb_total++; kpiStructure.blockSize = dlsch_config->TBS; kpiStructure.dl_mcs = dlsch_config->mcs; - kpiStructure.nofRBs = dlsch_config->number_rbs; + kpiStructure.nofRBs = number_rbs; harq_process->decodeResult = harq_process->processedSegments == harq_process->C; @@ -327,7 +328,7 @@ void nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, dlsch->dlsch_config.mcs, dlsch->Nl, dlsch_config->number_symbols, - dlsch_config->number_rbs, + number_rbs, dlsch_config->qamModOrder, Coderate); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 8e8162034f..6dea229ef5 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -1331,6 +1331,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, dlsch1_harq, nr_slot_rx, symbol, + freq_alloc->num_rbs, dlsch[0].rnti, dlsch); dl_valid_re[symbol] -= ptrs_re_per_slot[0][symbol]; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index 1aea2146db..ed269cd1de 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -71,6 +71,7 @@ void nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, uint8_t **b, int *G, int nb_dlsch, + int number_rbs, uint8_t *DLSCH_ids); int nr_ulsch_pre_encoding(PHY_VARS_NR_UE *ue, diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 89d222048e..f99d6b94bf 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -491,7 +491,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, NR_UE_DLSCH_t dlsch[2], int16_t *llr[2], c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP], - int G) + int G, + freq_alloc_bitmap_t *freq_alloc) { int frame_rx = proc->frame_rx; int nr_slot_rx = proc->nr_slot_rx; @@ -507,13 +508,6 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, // dlsch0_harq contains the previous transmissions data for this harq pid NR_DL_UE_HARQ_t *dlsch0_harq = &ue->dl_harq_processes[0][harq_pid]; - freq_alloc_bitmap_t freq_alloc = {0}; - if (dlschCfg->resource_alloc == 0) { - int alloc_size = (dlschCfg->BWPSize / 8) + (dlschCfg->BWPSize % 8 > 0); - freq_alloc = set_start_end_from_bitmap(dlschCfg->BWPSize, alloc_size, dlschCfg->rb_bitmap); - } else - freq_alloc = set_bitmap_from_start_size(dlschCfg->start_rb, dlschCfg->number_rbs); - LOG_D(PHY, "[UE %d] frame_rx %d, nr_slot_rx %d, harq_pid %d (%d), BWP start %d, start RB %d, end RB %d, symbol_start %d, nb_symbols " "%d, DMRS mask " @@ -524,8 +518,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, harq_pid, dlsch0_harq->status, dlschCfg->BWPStart, - freq_alloc.first_rb, - freq_alloc.last_rb, + freq_alloc->first_rb, + freq_alloc->last_rb, dlschCfg->start_symbol, dlschCfg->number_symbols, dlschCfg->dlDmrsSymbPos, @@ -541,7 +535,7 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, int32_t ptrs_re_per_slot[ue->frame_parms.nb_antennas_rx][NR_SYMBOLS_PER_SLOT]; memset(ptrs_re_per_slot, 0, sizeof(ptrs_re_per_slot)); - const uint32_t rx_size_symbol = (freq_alloc.num_rbs * NR_NB_SC_PER_RB + 15) & ~15; + const uint32_t rx_size_symbol = (freq_alloc->num_rbs * NR_NB_SC_PER_RB + 15) & ~15; fourDimArray_t *toFree2 = NULL; allocCast4D(rxdataF_comp, c16_t, @@ -563,7 +557,7 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, nr_pdsch_channel_estimation(ue, proc, dlschCfg, - &freq_alloc, + freq_alloc, nl, get_dmrs_port(nl, dlschCfg->dmrs_ports), m, @@ -587,7 +581,7 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, } stop_meas_nr_ue_phy(ue, DLSCH_CHANNEL_ESTIMATION_STATS); nvar /= (dlschCfg->number_symbols * dlsch0->Nl * ue->frame_parms.nb_antennas_rx); - nr_ue_measurement_procedures(2, ue, proc, freq_alloc.num_rbs, pdsch_est_size, pdsch_dl_ch_estimates); + nr_ue_measurement_procedures(2, ue, proc, freq_alloc->num_rbs, pdsch_est_size, pdsch_dl_ch_estimates); if (ue->chest_time == 1) { // averaging time domain channel estimates nr_chest_time_domain_avg(&ue->frame_parms, @@ -595,7 +589,7 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, dlschCfg->number_symbols, dlschCfg->start_symbol, dlschCfg->dlDmrsSymbPos, - freq_alloc.num_rbs); + freq_alloc->num_rbs); } uint16_t first_symbol_with_data = dlschCfg->start_symbol; @@ -622,13 +616,13 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, pdschChanEstimates, sizeof(c16_t), 1, - freq_alloc.num_rbs * NR_NB_SC_PER_RB * dlschCfg->number_symbols, + freq_alloc->num_rbs * NR_NB_SC_PER_RB * dlschCfg->number_symbols, &mt); scope_req.copy_rxdataF_to_scope = UETryLockScopeData(ue, pdschRxdataF, sizeof(c16_t), 1, - freq_alloc.num_rbs * NR_NB_SC_PER_RB * dlschCfg->number_symbols, + freq_alloc->num_rbs * NR_NB_SC_PER_RB * dlschCfg->number_symbols, &mt); } fourDimArray_t *toFree3 = NULL; @@ -668,7 +662,7 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, if (nr_rx_pdsch(ue, proc, dlsch, - &freq_alloc, + freq_alloc, m, first_symbol_flag, harq_pid, @@ -767,7 +761,10 @@ static uint32_t compute_csi_rm_unav_res(fapi_nr_dl_config_dlsch_pdu_rel15_t *dls static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], - int16_t *llr[2]) { + int16_t *llr[2], + int G[2], + freq_alloc_bitmap_t *freq_alloc) +{ if (dlsch[0].active == false) { LOG_E(PHY, "DLSCH should be active when calling this function\n"); return; @@ -778,7 +775,6 @@ static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, int nr_slot_rx = proc->nr_slot_rx; NR_DL_UE_HARQ_t *dl_harq0 = &ue->dl_harq_processes[0][harq_pid]; NR_DL_UE_HARQ_t *dl_harq1 = &ue->dl_harq_processes[1][harq_pid]; - uint16_t dmrs_len = get_num_dmrs(dlsch[0].dlsch_config.dlDmrsSymbPos); nr_downlink_indication_t dl_indication; fapi_nr_rx_indication_t rx_ind = {0}; uint16_t number_pdus = 1; @@ -788,15 +784,6 @@ static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, int nb_dlsch = 0; nb_dlsch += (is_cw0_active == NR_ACTIVE) ? 1 : 0; nb_dlsch += (is_cw1_active == NR_ACTIVE) ? 1 : 0; - uint16_t nb_symb_sch = dlsch[0].dlsch_config.number_symbols; - uint8_t dmrs_type = dlsch[0].dlsch_config.dmrsConfigType; - - uint8_t nb_re_dmrs; - if (dmrs_type == NFAPI_NR_DMRS_TYPE1) { - nb_re_dmrs = 6 * dlsch[0].dlsch_config.n_dmrs_cdm_groups; - } else { - nb_re_dmrs = 4 * dlsch[0].dlsch_config.n_dmrs_cdm_groups; - } LOG_D(PHY, "AbsSubframe %d.%d Start LDPC Decoder for CW0 [harq_pid %d] ? %d \n", frame_rx % 1024, nr_slot_rx, harq_pid, is_cw0_active); LOG_D(PHY, "AbsSubframe %d.%d Start LDPC Decoder for CW1 [harq_pid %d] ? %d \n", frame_rx % 1024, nr_slot_rx, harq_pid, is_cw1_active); @@ -813,27 +800,15 @@ static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, return; } - int G[2]; uint8_t DLSCH_ids[nb_dlsch]; int pdsch_id = 0; uint8_t *p_b[2] = {NULL}; for (uint8_t DLSCH_id = 0; DLSCH_id < 2; DLSCH_id++) { NR_DL_UE_HARQ_t *dl_harq = &ue->dl_harq_processes[DLSCH_id][harq_pid]; - if (dl_harq->status != NR_ACTIVE) continue; + if (dl_harq->status != NR_ACTIVE) + continue; DLSCH_ids[pdsch_id++] = DLSCH_id; - fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config = &dlsch[DLSCH_id].dlsch_config; - uint32_t unav_res = 0; - if (dlsch_config->pduBitmap & 0x1) { - uint16_t ptrsSymbPos = 0; - set_ptrs_symb_idx(&ptrsSymbPos, dlsch_config->number_symbols, dlsch_config->start_symbol, 1 << dlsch_config->PTRSTimeDensity, - dlsch_config->dlDmrsSymbPos); - int n_ptrs = (dlsch_config->number_rbs + dlsch_config->PTRSFreqDensity - 1) / dlsch_config->PTRSFreqDensity; - int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols); - unav_res = n_ptrs * ptrsSymbPerSlot; - } - unav_res += compute_csi_rm_unav_res(dlsch_config); - G[DLSCH_id] = nr_get_G(dlsch_config->number_rbs, nb_symb_sch, nb_re_dmrs, dmrs_len, unav_res, dlsch_config->qamModOrder, dlsch[DLSCH_id].Nl); start_meas_nr_ue_phy(ue, DLSCH_UNSCRAMBLING_STATS); nr_dlsch_unscrambling(llr[DLSCH_id], G[DLSCH_id], 0, dlsch[DLSCH_id].dlsch_config.dlDataScramblingId, dlsch[DLSCH_id].rnti); @@ -843,7 +818,7 @@ static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, } start_meas_nr_ue_phy(ue, DLSCH_DECODING_STATS); - nr_dlsch_decoding(ue, proc, dlsch, llr, p_b, G, nb_dlsch, DLSCH_ids); + nr_dlsch_decoding(ue, proc, dlsch, llr, p_b, G, nb_dlsch, freq_alloc->num_rbs, DLSCH_ids); stop_meas_nr_ue_phy(ue, DLSCH_DECODING_STATS); int ind_type = -1; @@ -893,9 +868,8 @@ static void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, } int a_segments = MAX_NUM_NR_DLSCH_SEGMENTS_PER_LAYER * NR_MAX_NB_LAYERS; // number of segments to be allocated - int num_rb = dlsch[0].dlsch_config.number_rbs; - if (num_rb != 273) { - a_segments = a_segments * num_rb; + if (freq_alloc->num_rbs != 273) { + a_segments = a_segments * freq_alloc->num_rbs; a_segments = (a_segments / 273) + 1; } uint32_t dlsch_bytes = a_segments * 1056; // allocated bytes per segment @@ -1207,6 +1181,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ nr_ue_csi_rs_procedures(ue, proc, rxdataF, &phy_data->csirs_vars.csirs_config_pdu); } + int G[2] = {0}; if (dlsch[0].active) { fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config = &dlsch[0].dlsch_config; uint16_t nb_symb_sch = dlsch_config->number_symbols; @@ -1221,6 +1196,13 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ } } + freq_alloc_bitmap_t freq_alloc = {0}; + if (dlsch_config->resource_alloc == 0) { + int alloc_size = (dlsch_config->BWPSize / 8) + (dlsch_config->BWPSize % 8 > 0); + freq_alloc = set_start_end_from_bitmap(dlsch_config->BWPSize, alloc_size, dlsch_config->rb_bitmap); + } else + freq_alloc = set_bitmap_from_start_size(dlsch_config->start_rb, dlsch_config->number_rbs); + const uint8_t nb_re_dmrs = get_num_dmrs_re_per_rb(dlsch_config->dmrsConfigType, dlsch_config->n_dmrs_cdm_groups); uint16_t dmrs_len = get_num_dmrs(dlsch_config->dlDmrsSymbPos); uint32_t unav_res = 0; @@ -1231,35 +1213,35 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ dlsch_config->start_symbol, 1 << dlsch_config->PTRSTimeDensity, dlsch_config->dlDmrsSymbPos); - int n_ptrs = (dlsch_config->number_rbs + dlsch_config->PTRSFreqDensity - 1) / dlsch_config->PTRSFreqDensity; + int n_ptrs = (freq_alloc.num_rbs + dlsch_config->PTRSFreqDensity - 1) / dlsch_config->PTRSFreqDensity; int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols); unav_res = n_ptrs * ptrsSymbPerSlot; } unav_res += compute_csi_rm_unav_res(dlsch_config); - int G = nr_get_G(dlsch_config->number_rbs, - dlsch_config->number_symbols, - nb_re_dmrs, - dmrs_len, - unav_res, - dlsch_config->qamModOrder, - dlsch[0].Nl); - const uint32_t rx_llr_buf_sz = ALIGNARRAYSIZE(G, 32); // each LLR is 2 bytes hence 64 byte aligned + G[0] = nr_get_G(freq_alloc.num_rbs, + dlsch_config->number_symbols, + nb_re_dmrs, + dmrs_len, + unav_res, + dlsch_config->qamModOrder, + dlsch[0].Nl); + const uint32_t rx_llr_buf_sz = ALIGNARRAYSIZE(G[0], 32); // each LLR is 2 bytes hence 64 byte aligned const uint32_t nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; int16_t* llr[2]; for (int i = 0; i < nb_codewords; i++) llr[i] = (int16_t *)malloc16_clear(rx_llr_buf_sz * sizeof(int16_t)); // it returns -1 in case of internal failure, or 0 in case of normal result - int ret_pdsch = nr_ue_pdsch_procedures(ue, proc, dlsch, llr, rxdataF, G); + int ret_pdsch = nr_ue_pdsch_procedures(ue, proc, dlsch, llr, rxdataF, G[0], &freq_alloc); TracyCPlot("pdsch mcs", dlsch->dlsch_config.mcs); - UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, G, 0); + UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, G[0], 0); LOG_D(PHY, "DLSCH data reception at nr_slot_rx: %d\n", nr_slot_rx); start_meas_nr_ue_phy(ue, DLSCH_PROCEDURES_STATS); if (ret_pdsch >= 0) { - nr_ue_dlsch_procedures(ue, proc, dlsch, llr); + nr_ue_dlsch_procedures(ue, proc, dlsch, llr, G, &freq_alloc); } else { LOG_E(NR_PHY, "Demodulation impossible, internal error\n"); diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index 4c3ada67f0..ccddc9be63 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -555,6 +555,7 @@ int main(int argc, char **argv) &p_b, available_bits_array, 1, + num_rb, DLSCH_ids); if (dlsch0_ue->last_iteration_cnt > dlsch0_ue->max_ldpc_iterations)