Commit ad77def8 authored by Jaroslava Fiedlerova's avatar Jaroslava Fiedlerova

Merge remote-tracking branch 'origin/remove-stored-G-in-UE-dl' into integration_2024_w14

parents 13ac4105 a3f472a5
...@@ -274,7 +274,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, ...@@ -274,7 +274,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint8_t nr_slot_rx, uint8_t nr_slot_rx,
uint8_t harq_pid, uint8_t harq_pid,
int b_size, int b_size,
uint8_t b[b_size]) uint8_t b[b_size],
int G)
{ {
uint32_t ret,offset; uint32_t ret,offset;
uint32_t r,r_offset=0,Kr=8424,Kr_bytes; uint32_t r,r_offset=0,Kr=8424,Kr_bytes;
...@@ -339,7 +340,6 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, ...@@ -339,7 +340,6 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint32_t A = dlsch->dlsch_config.TBS; uint32_t A = dlsch->dlsch_config.TBS;
ret = dlsch->max_ldpc_iterations + 1; ret = dlsch->max_ldpc_iterations + 1;
dlsch->last_iteration_cnt = ret; dlsch->last_iteration_cnt = ret;
uint32_t G = harq_process->G;
// target_code_rate is in 0.1 units // target_code_rate is in 0.1 units
float Coderate = (float) dlsch->dlsch_config.targetCodeRate / 10240.0f; float Coderate = (float) dlsch->dlsch_config.targetCodeRate / 10240.0f;
......
...@@ -255,7 +255,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -255,7 +255,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int nbRx, int nbRx,
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT], int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT]) int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
int G)
{ {
const int nl = dlsch[0].Nl; const int nl = dlsch[0].Nl;
const int matrixSz = ue->frame_parms.nb_antennas_rx * nl; const int matrixSz = ue->frame_parms.nb_antennas_rx * nl;
...@@ -335,9 +336,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -335,9 +336,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
} }
DEBUG_HARQ("[DEMOD] cw for TB0 = %d, cw for TB1 = %d\n", codeword_TB0, codeword_TB1); DEBUG_HARQ("[DEMOD] cw for TB0 = %d, cw for TB1 = %d\n", codeword_TB0, codeword_TB1);
fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config = &dlsch[0].dlsch_config;
int start_rb = dlsch[0].dlsch_config.start_rb; int start_rb = dlsch_config->start_rb;
int nb_rb_pdsch = dlsch[0].dlsch_config.number_rbs; int nb_rb_pdsch = dlsch_config->number_rbs;
DevAssert(dlsch0_harq); DevAssert(dlsch0_harq);
...@@ -361,8 +362,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -361,8 +362,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
slot = 1; slot = 1;
} }
uint8_t pilots = (dlsch[0].dlsch_config.dlDmrsSymbPos >> symbol) & 1; uint8_t pilots = (dlsch_config->dlDmrsSymbPos >> symbol) & 1;
uint8_t config_type = dlsch[0].dlsch_config.dmrsConfigType; uint8_t config_type = dlsch_config->dmrsConfigType;
//---------------------------------------------------------- //----------------------------------------------------------
//--------------------- RBs extraction --------------------- //--------------------- RBs extraction ---------------------
//---------------------------------------------------------- //----------------------------------------------------------
...@@ -386,12 +387,12 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -386,12 +387,12 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
symbol, symbol,
pilots, pilots,
config_type, config_type,
start_rb + dlsch[0].dlsch_config.BWPStart, start_rb + dlsch_config->BWPStart,
nb_rb_pdsch, nb_rb_pdsch,
dlsch[0].dlsch_config.n_dmrs_cdm_groups, dlsch_config->n_dmrs_cdm_groups,
nl, nl,
frame_parms, frame_parms,
dlsch[0].dlsch_config.dlDmrsSymbPos, dlsch_config->dlDmrsSymbPos,
ue->chest_time); ue->chest_time);
if (meas_enabled) { if (meas_enabled) {
stop_meas(&meas); stop_meas(&meas);
...@@ -409,12 +410,12 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -409,12 +410,12 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
memcpy(ue->phy_sim_pdsch_rxdataF_ext + offset, rxdataF_ext, rx_size_symbol * sizeof(c16_t)); memcpy(ue->phy_sim_pdsch_rxdataF_ext + offset, rxdataF_ext, rx_size_symbol * sizeof(c16_t));
} }
nb_re_pdsch = (pilots == 1) nb_re_pdsch = (pilots == 1) ? ((config_type == NFAPI_NR_DMRS_TYPE1) ? nb_rb_pdsch * (12 - 6 * dlsch_config->n_dmrs_cdm_groups)
? ((config_type == NFAPI_NR_DMRS_TYPE1) ? nb_rb_pdsch * (12 - 6 * dlsch[0].dlsch_config.n_dmrs_cdm_groups) : nb_rb_pdsch * (12 - 4 * dlsch[0].dlsch_config.n_dmrs_cdm_groups)) : nb_rb_pdsch * (12 - 4 * dlsch_config->n_dmrs_cdm_groups))
: (nb_rb_pdsch * 12); : (nb_rb_pdsch * 12);
//---------------------------------------------------------- //----------------------------------------------------------
//--------------------- Channel Scaling -------------------- //--------------------- Channel Scaling --------------------
//---------------------------------------------------------- //----------------------------------------------------------
if (meas_enabled) if (meas_enabled)
start_meas(&meas); start_meas(&meas);
nr_dlsch_scale_channel(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, n_rx, symbol, pilots, nb_re_pdsch, nb_rb_pdsch); nr_dlsch_scale_channel(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, n_rx, symbol, pilots, nb_re_pdsch, nb_rb_pdsch);
...@@ -493,7 +494,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -493,7 +494,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
symbol, symbol,
nb_re_pdsch, nb_re_pdsch,
first_symbol_flag, first_symbol_flag,
dlsch[0].dlsch_config.qamModOrder, dlsch_config->qamModOrder,
nb_rb_pdsch, nb_rb_pdsch,
*log2_maxh, *log2_maxh,
measurements); // log2_maxh+I0_shift measurements); // log2_maxh+I0_shift
...@@ -535,7 +536,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -535,7 +536,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
dl_ch_magr, dl_ch_magr,
dl_ch_estimates_ext, dl_ch_estimates_ext,
nb_rb_pdsch, nb_rb_pdsch,
dlsch[0].dlsch_config.qamModOrder, dlsch_config->qamModOrder,
*log2_maxh, *log2_maxh,
symbol, symbol,
nb_re_pdsch); nb_re_pdsch);
...@@ -561,9 +562,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -561,9 +562,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int pduBitmap = 0; int pduBitmap = 0;
if(dlsch0_harq->status == ACTIVE) { if(dlsch0_harq->status == ACTIVE) {
startSymbIdx = dlsch[0].dlsch_config.start_symbol; startSymbIdx = dlsch_config->start_symbol;
nbSymb = dlsch[0].dlsch_config.number_symbols; nbSymb = dlsch_config->number_symbols;
pduBitmap = dlsch[0].dlsch_config.pduBitmap; pduBitmap = dlsch_config->pduBitmap;
} }
/* Check for PTRS bitmap and process it respectively */ /* Check for PTRS bitmap and process it respectively */
...@@ -572,11 +573,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -572,11 +573,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
ue, nbRx, ptrs_phase_per_slot, ptrs_re_per_slot, rx_size_symbol, rxdataF_comp, frame_parms, dlsch0_harq, dlsch1_harq, gNB_id, nr_slot_rx, symbol, (nb_rb_pdsch * 12), dlsch[0].rnti, dlsch); ue, nbRx, ptrs_phase_per_slot, ptrs_re_per_slot, rx_size_symbol, rxdataF_comp, frame_parms, dlsch0_harq, dlsch1_harq, gNB_id, nr_slot_rx, symbol, (nb_rb_pdsch * 12), dlsch[0].rnti, dlsch);
dl_valid_re[symbol-1] -= ptrs_re_per_slot[0][symbol]; dl_valid_re[symbol-1] -= ptrs_re_per_slot[0][symbol];
} }
/* at last symbol in a slot calculate LLR's for whole slot */ /* at last symbol in a slot calculate LLR's for whole slot */
if(symbol == (startSymbIdx + nbSymb -1)) { if(symbol == (startSymbIdx + nbSymb -1)) {
const uint32_t rx_llr_layer_size = (G + dlsch[0].Nl - 1) / dlsch[0].Nl;
const uint32_t rx_llr_layer_size = (dlsch0_harq->G + dlsch[0].Nl - 1) / dlsch[0].Nl;
int16_t* layer_llr[NR_MAX_NB_LAYERS]; int16_t* layer_llr[NR_MAX_NB_LAYERS];
for (int i = 0; i < NR_MAX_NB_LAYERS; i++) for (int i = 0; i < NR_MAX_NB_LAYERS; i++)
...@@ -610,13 +609,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -610,13 +609,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
llr_offset); llr_offset);
} }
nr_dlsch_layer_demapping(llr, nr_dlsch_layer_demapping(llr, dlsch[0].Nl, dlsch[0].dlsch_config.qamModOrder, G, codeword_TB0, codeword_TB1, layer_llr);
dlsch[0].Nl,
dlsch[0].dlsch_config.qamModOrder,
dlsch0_harq->G,
codeword_TB0,
codeword_TB1,
layer_llr);
// if (llr[0][0]) abort(); // if (llr[0][0]) abort();
for (int i=0; i<NR_MAX_NB_LAYERS; i++) for (int i=0; i<NR_MAX_NB_LAYERS; i++)
free(layer_llr[i]); free(layer_llr[i]);
......
...@@ -210,7 +210,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, ...@@ -210,7 +210,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
uint8_t nr_slot_rx, uint8_t nr_slot_rx,
uint8_t harq_pid, uint8_t harq_pid,
int b_size, int b_size,
uint8_t b[b_size]); uint8_t b[b_size],
int G);
int nr_ulsch_encoding(PHY_VARS_NR_UE *ue, int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
NR_UE_ULSCH_t *ulsch, NR_UE_ULSCH_t *ulsch,
...@@ -410,7 +411,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -410,7 +411,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int nbRx, int nbRx,
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT], int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT]); int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
int G);
int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t slot); int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t slot);
......
...@@ -123,8 +123,6 @@ typedef struct { ...@@ -123,8 +123,6 @@ typedef struct {
uint32_t F; uint32_t F;
/// LDPC lifting factor /// LDPC lifting factor
uint32_t Z; uint32_t Z;
/// Number of soft channel bits
uint32_t G;
/// codeword this transport block is mapped to /// codeword this transport block is mapped to
uint8_t codeword; uint8_t codeword;
/// HARQ-ACKs /// HARQ-ACKs
......
...@@ -485,7 +485,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, ...@@ -485,7 +485,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
NR_UE_DLSCH_t dlsch[2], NR_UE_DLSCH_t dlsch[2],
int16_t *llr[2], int16_t *llr[2],
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP],
int G)
{ {
int frame_rx = proc->frame_rx; int frame_rx = proc->frame_rx;
int nr_slot_rx = proc->nr_slot_rx; int nr_slot_rx = proc->nr_slot_rx;
...@@ -609,7 +610,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, ...@@ -609,7 +610,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
ue->frame_parms.nb_antennas_rx, ue->frame_parms.nb_antennas_rx,
rxdataF_comp, rxdataF_comp,
ptrs_phase_per_slot, ptrs_phase_per_slot,
ptrs_re_per_slot) ptrs_re_per_slot,
G)
< 0) < 0)
return -1; return -1;
...@@ -639,7 +641,11 @@ static void send_dl_done_to_tx_thread(notifiedFIFO_t *nf, int rx_slot) ...@@ -639,7 +641,11 @@ static void send_dl_done_to_tx_thread(notifiedFIFO_t *nf, int rx_slot)
} }
} }
static bool 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]) static bool 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],
int G)
{ {
if (dlsch[0].active == false) { if (dlsch[0].active == false) {
LOG_E(PHY, "DLSCH should be active when calling this function\n"); LOG_E(PHY, "DLSCH should be active when calling this function\n");
...@@ -685,12 +691,7 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * ...@@ -685,12 +691,7 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *
} }
start_meas(&ue->dlsch_unscrambling_stats); start_meas(&ue->dlsch_unscrambling_stats);
nr_dlsch_unscrambling(llr[0], nr_dlsch_unscrambling(llr[0], G, 0, dlsch[0].dlsch_config.dlDataScramblingId, dlsch[0].rnti);
dl_harq0->G,
0,
dlsch[0].dlsch_config.dlDataScramblingId,
dlsch[0].rnti);
stop_meas(&ue->dlsch_unscrambling_stats); stop_meas(&ue->dlsch_unscrambling_stats);
...@@ -718,7 +719,8 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * ...@@ -718,7 +719,8 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *
nr_slot_rx, nr_slot_rx,
harq_pid, harq_pid,
dlsch_bytes, dlsch_bytes,
p_b); p_b,
G);
LOG_T(PHY,"dlsch decoding, ret = %d\n", ret); LOG_T(PHY,"dlsch decoding, ret = %d\n", ret);
...@@ -773,19 +775,10 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * ...@@ -773,19 +775,10 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *
int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols); int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols);
unav_res = n_ptrs * ptrsSymbPerSlot; unav_res = n_ptrs * ptrsSymbPerSlot;
} }
dl_harq1->G = nr_get_G(dlsch_config->number_rbs, int G1 =
nb_symb_sch, nr_get_G(dlsch_config->number_rbs, nb_symb_sch, nb_re_dmrs, dmrs_len, unav_res, dlsch_config->qamModOrder, dlsch[1].Nl);
nb_re_dmrs,
dmrs_len,
unav_res,
dlsch_config->qamModOrder,
dlsch[1].Nl);
start_meas(&ue->dlsch_unscrambling_stats); start_meas(&ue->dlsch_unscrambling_stats);
nr_dlsch_unscrambling(llr[1], nr_dlsch_unscrambling(llr[1], G1, 0, dlsch[1].dlsch_config.dlDataScramblingId, dlsch[1].rnti);
dl_harq1->G,
0,
dlsch[1].dlsch_config.dlDataScramblingId,
dlsch[1].rnti);
stop_meas(&ue->dlsch_unscrambling_stats); stop_meas(&ue->dlsch_unscrambling_stats);
start_meas(&ue->dlsch_decoding_stats); start_meas(&ue->dlsch_decoding_stats);
...@@ -802,7 +795,8 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t * ...@@ -802,7 +795,8 @@ static bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *
nr_slot_rx, nr_slot_rx,
harq_pid, harq_pid,
dlsch_bytes, dlsch_bytes,
p_b); p_b,
G);
LOG_T(PHY,"CW dlsch decoding, ret1 = %d\n", ret1); LOG_T(PHY,"CW dlsch decoding, ret1 = %d\n", ret1);
stop_meas(&ue->dlsch_decoding_stats); stop_meas(&ue->dlsch_decoding_stats);
...@@ -1048,15 +1042,14 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ ...@@ -1048,15 +1042,14 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols); int ptrsSymbPerSlot = get_ptrs_symbols_in_slot(ptrsSymbPos, dlsch_config->start_symbol, dlsch_config->number_symbols);
unav_res = n_ptrs * ptrsSymbPerSlot; unav_res = n_ptrs * ptrsSymbPerSlot;
} }
NR_DL_UE_HARQ_t *dlsch0_harq = &ue->dl_harq_processes[0][dlsch_config->harq_process_nbr]; int G = nr_get_G(dlsch_config->number_rbs,
dlsch0_harq->G = nr_get_G(dlsch_config->number_rbs, dlsch_config->number_symbols,
dlsch_config->number_symbols, nb_re_dmrs,
nb_re_dmrs, dmrs_len,
dmrs_len, unav_res,
unav_res, dlsch_config->qamModOrder,
dlsch_config->qamModOrder, dlsch[0].Nl);
dlsch[0].Nl); const uint32_t rx_llr_buf_sz = ((G + 15) / 16) * 16;
const uint32_t rx_llr_buf_sz = ((dlsch0_harq->G + 15) / 16) * 16;
const uint32_t nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; const uint32_t nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1;
int16_t* llr[2]; int16_t* llr[2];
for (int i = 0; i < nb_codewords; i++) for (int i = 0; i < nb_codewords; i++)
...@@ -1064,11 +1057,11 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ ...@@ -1064,11 +1057,11 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN);
// it returns -1 in case of internal failure, or 0 in case of normal result // 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); int ret_pdsch = nr_ue_pdsch_procedures(ue, proc, dlsch, llr, rxdataF, G);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT);
UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, dlsch0_harq->G, 0); UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, G, 0);
LOG_D(PHY, "DLSCH data reception at nr_slot_rx: %d\n", nr_slot_rx); LOG_D(PHY, "DLSCH data reception at nr_slot_rx: %d\n", nr_slot_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
...@@ -1076,7 +1069,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ ...@@ -1076,7 +1069,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
start_meas(&ue->dlsch_procedures_stat); start_meas(&ue->dlsch_procedures_stat);
if (ret_pdsch >= 0) if (ret_pdsch >= 0)
nr_ue_dlsch_procedures(ue, proc, dlsch, llr); nr_ue_dlsch_procedures(ue, proc, dlsch, llr, G);
else { else {
LOG_E(NR_PHY, "Demodulation impossible, internal error\n"); LOG_E(NR_PHY, "Demodulation impossible, internal error\n");
send_dl_done_to_tx_thread( send_dl_done_to_tx_thread(
......
...@@ -472,8 +472,7 @@ int main(int argc, char **argv) ...@@ -472,8 +472,7 @@ int main(int argc, char **argv)
//estimated_output = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384); //estimated_output = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
unsigned char estimated_output_bit[16 * 68 * 384]; unsigned char estimated_output_bit[16 * 68 * 384];
NR_UE_DLSCH_t *dlsch0_ue = &dlsch_ue[0]; NR_UE_DLSCH_t *dlsch0_ue = &dlsch_ue[0];
NR_DL_UE_HARQ_t *harq_process = &UE->dl_harq_processes[0][harq_pid]; NR_DL_UE_HARQ_t *harq_process = &UE->dl_harq_processes[0][harq_pid];
harq_process->G = available_bits;
harq_process->first_rx = 1; harq_process->first_rx = 1;
dlsch0_ue->dlsch_config.mcs = Imcs; dlsch0_ue->dlsch_config.mcs = Imcs;
dlsch0_ue->dlsch_config.mcs_table = mcs_table; dlsch0_ue->dlsch_config.mcs_table = mcs_table;
...@@ -563,13 +562,24 @@ int main(int argc, char **argv) ...@@ -563,13 +562,24 @@ int main(int argc, char **argv)
} }
uint32_t dlsch_bytes = a_segments*1056; // allocated bytes per segment uint32_t dlsch_bytes = a_segments*1056; // allocated bytes per segment
__attribute__ ((aligned(32))) uint8_t b[dlsch_bytes]; __attribute__ ((aligned(32))) uint8_t b[dlsch_bytes];
ret = nr_dlsch_decoding(UE, &proc, 0, channel_output_fixed, &UE->frame_parms, ret = nr_dlsch_decoding(UE,
dlsch0_ue, harq_process, frame, nb_symb_sch, &proc,
slot,harq_pid,dlsch_bytes,b); 0,
channel_output_fixed,
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0, VCD_FUNCTION_OUT); &UE->frame_parms,
dlsch0_ue,
if (ret > dlsch0_ue->max_ldpc_iterations) harq_process,
frame,
nb_symb_sch,
slot,
harq_pid,
dlsch_bytes,
b,
available_bits);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0, VCD_FUNCTION_OUT);
if (ret > dlsch0_ue->max_ldpc_iterations)
n_errors++; n_errors++;
//count errors //count errors
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment