diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index 728e59e510..383140ba88 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -64,6 +64,8 @@ typedef struct puschAntennaProc_s { c16_t ***rxdataF; task_ans_t *ans; scopeData_t *scope; + c16_t *pusch_ch_est_dmrs_pos_slot_mem; + int dmrs_symbol_start_idx; } puschAntennaProc_t; __attribute__((always_inline)) inline c16_t c32x16cumulVectVectWithSteps(c16_t *in1, @@ -149,6 +151,9 @@ static void nr_pusch_antenna_processing(void *arg) int re_offset = k0; LOG_D(PHY, "PUSCH estimation DMRS type 1, Freq-domain interpolation"); int pilot_cnt = 0; +#if T_TRACER + int ch_est_cnt = 0; // To trace channel coefficients +#endif for (int n = 0; n < 3 * nb_rb_pusch; n++) { // LS estimation @@ -165,6 +170,17 @@ static void nr_pusch_antenna_processing(void *arg) for (int k = pilot_cnt << 1; k < (pilot_cnt << 1) + 4; k++) { ul_ls_est[k] = ch16; } +//------------------Write channel parameters to Memory for data recording ------------------// +#if T_TRACER + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_POS)) { + // Trace channel coefficients + c16_t *pusch_ch_est_dmrs_pos_slot_mem = rdata->pusch_ch_est_dmrs_pos_slot_mem; + int dmrs_symbol_start_idx = rdata->dmrs_symbol_start_idx; + pusch_ch_est_dmrs_pos_slot_mem[dmrs_symbol_start_idx + delta + ch_est_cnt] = ch16; // 0, 2, 4, 6, 8, location of REs + pusch_ch_est_dmrs_pos_slot_mem[dmrs_symbol_start_idx + delta + ch_est_cnt + 2] = ch16; // 0, 2, 4, 6, 8, location of REs + } + ch_est_cnt += 4; +#endif pilot_cnt += 2; } c16_t ch_estimates_time[frame_parms->ofdm_symbol_size] __attribute__((aligned(32))); @@ -459,7 +475,9 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, unsigned short bwp_start_subcarrier, nfapi_nr_pusch_pdu_t *pusch_pdu, int *max_ch, - uint32_t *nvar) + uint32_t *nvar, + c16_t *pusch_dmrs_slot_mem, + c16_t *pusch_ch_est_dmrs_pos_slot_mem) { c16_t pilot[3280] __attribute__((aligned(32))); @@ -519,6 +537,20 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, LOG_I(PHY, "In %s: %d + j*(%d)\n", __FUNCTION__, pilot[i].r, pilot[i].i); } +#endif + + //------------------Write DMRS to Memory for Data Recording ------------------// + int dmrs_symbol_start_idx = symbol * pusch_pdu->nrOfLayers * nb_rb_pusch * NR_NB_SC_PER_RB + nl * nb_rb_pusch * NR_NB_SC_PER_RB; +#if T_TRACER + if (T_ACTIVE(T_GNB_PHY_UL_FD_DMRS)) { + // used by T-Tracer to trace DMRS slot grid + int dmrs_delta = 0; // intialize it to zero currently, derive it later from above functions + for (int i = 0; i < (6 * nb_rb_pusch); i++) { + // the generated DMRs is a complex conjugate of mod table, so flip the sign of imag. part + pusch_dmrs_slot_mem[dmrs_symbol_start_idx + dmrs_delta + i * 2].r = pilot[i].r; // 0, 2, 4, 6, 8, location of REs + pusch_dmrs_slot_mem[dmrs_symbol_start_idx + dmrs_delta + i * 2].i = -pilot[i].i; // 0, 2, 4, 6, 8, location of REs + } + } #endif int nest_count = 0; @@ -573,6 +605,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, rdata->rxdataF = gNB->common_vars.rxdataF; rdata->scope = gNB->scopeData; rdata->ans = &ans; + rdata->pusch_ch_est_dmrs_pos_slot_mem = pusch_ch_est_dmrs_pos_slot_mem; + rdata->dmrs_symbol_start_idx = dmrs_symbol_start_idx; // Call the nr_pusch_antenna_processing function if (job_id == num_jobs - 1) { // Run the last job inline diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h index 483e1ea090..cde3e9c89d 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h @@ -51,7 +51,9 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, unsigned short bwp_start_subcarrier, nfapi_nr_pusch_pdu_t *pusch_pdu, int *max_ch, - uint32_t *nvar); + uint32_t *nvar, + c16_t *pusch_dmrs_slot_mem, + c16_t *pusch_ch_est_dmrs_pos_slot_mem); void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 1729c8c8c4..c834c3a014 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -10,9 +10,19 @@ #include "common/utils/nr/nr_common.h" #include #include "PHY/sse_intrin.h" +#include "T.h" +#include +#include "PHY/log_tools.h" #define INVALID_VALUE 255 +#if T_TRACER +static void copy_c16_data_to_slot_memory(c16_t *src, c16_t *dst_slot, int nb_re_pusch, int symbol) +{ + memcpy(&dst_slot[nb_re_pusch * symbol], src, nb_re_pusch * sizeof(c16_t)); +} +#endif + void nr_idft(int32_t *z, uint32_t Msc_PUSCH) { @@ -928,7 +938,9 @@ static void inner_rx(PHY_VARS_gNB *gNB, int length, int symbol, int output_shift, - uint32_t nvar) + uint32_t nvar, + c16_t *rxFext_slot, + c16_t *chFext_slot) { int nb_layer = rel15_ul->nrOfLayers; int nb_rx_ant = frame_parms->nb_antennas_rx; @@ -959,6 +971,16 @@ static void inner_rx(PHY_VARS_gNB *gNB, dmrs_symbol_flag, rel15_ul, frame_parms); +#if T_TRACER + int nb_re_pusch = NR_NB_SC_PER_RB * rel15_ul->rb_size; + // Assume assume Tx and Rx = 1 + if (T_ACTIVE(T_GNB_PHY_UL_FD_PUSCH_IQ)) { + copy_c16_data_to_slot_memory(rxFext[aarx], rxFext_slot, nb_re_pusch, symbol); + } + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_INTERPL)) { + copy_c16_data_to_slot_memory(chFext[aatx][aarx], chFext_slot, nb_re_pusch, symbol); + } +#endif } } c16_t rho[nb_layer][nb_layer][buffer_length] __attribute__((aligned(32))); @@ -1067,6 +1089,8 @@ typedef struct puschSymbolProc_s { uint32_t nvar; int beam_nb; task_ans_t *ans; + c16_t *pusch_ch_est_dmrs_interpl_slot_mem; + c16_t *rxFext_slot_mem; } puschSymbolProc_t; static void nr_pusch_symbol_processing(void *arg) @@ -1102,7 +1126,9 @@ static void nr_pusch_symbol_processing(void *arg) gNB->pusch_vars[ulsch_id].ul_valid_re_per_slot[symbol], symbol, gNB->pusch_vars[ulsch_id].log2_maxh, - rdata->nvar); + rdata->nvar, + rdata->rxFext_slot_mem, + rdata->pusch_ch_est_dmrs_interpl_slot_mem); int nb_re_pusch = gNB->pusch_vars[ulsch_id].ul_valid_re_per_slot[symbol]; // layer de-mapping @@ -1165,6 +1191,38 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, LOG_D(PHY,"pusch %d.%d : bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d\n", frame,slot,bwp_start_subcarrier, rel15_ul->rb_start, frame_parms->first_carrier_offset); LOG_D(PHY,"pusch %d.%d : ul_dmrs_symb_pos %x\n",frame,slot,rel15_ul->ul_dmrs_symb_pos); + // Memories to store data for data recording + int buffer_length_slot = rel15_ul->rb_size * NR_NB_SC_PER_RB * 14; // 14 OFDM Symbols per slot + int nb_rx_ant = frame_parms->nb_antennas_rx; + int nb_layer = rel15_ul->nrOfLayers; + + // Initialize memory for DMRS signals + c16_t pusch_dmrs_slot_mem[nb_layer * buffer_length_slot] __attribute__((aligned(32))); + // Initialize memory for channel estimates based on DMRS positions + c16_t pusch_ch_est_dmrs_pos_slot_mem[buffer_length_slot * nb_layer * nb_rx_ant] __attribute__((aligned(32))); + // memory to store slot grid with channel coefficients based on DMRS positions after interpolation + c16_t pusch_ch_est_dmrs_interpl_slot_mem[buffer_length_slot * nb_layer * nb_rx_ant] __attribute__((aligned(32))); + // memory to store extracted data including PUSCH + DMRS + c16_t rxFext_slot_mem[nb_rx_ant * buffer_length_slot] __attribute__((aligned(32))); + +#if T_TRACER + // Initialize memory for DMRS signals + if (T_ACTIVE(T_GNB_PHY_UL_FD_DMRS)) + memset(pusch_dmrs_slot_mem, 0, sizeof(c16_t) * nb_layer * buffer_length_slot); + + // Initialize memory for channel estimates based on DMRS positions + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_POS)) + memset(pusch_ch_est_dmrs_pos_slot_mem, 0, sizeof(c16_t) * buffer_length_slot * nb_layer * nb_rx_ant); + + // memory to store slot grid with channel coefficients based on DMRS positions after interpolation + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_INTERPL)) + memset(pusch_ch_est_dmrs_interpl_slot_mem, 0, sizeof(c16_t) * buffer_length_slot * nb_layer * nb_rx_ant); + + // memory to store extracted data including PUSCH + DMRS + if (T_ACTIVE(T_GNB_PHY_UL_FD_PUSCH_IQ)) + memset(rxFext_slot_mem, 0, sizeof(c16_t) * buffer_length_slot * nb_rx_ant); +#endif + //---------------------------------------------------------- //------------------- Channel estimation ------------------- //---------------------------------------------------------- @@ -1190,7 +1248,9 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, bwp_start_subcarrier, rel15_ul, &max_ch, - &nvar_tmp); + &nvar_tmp, + pusch_dmrs_slot_mem, + pusch_ch_est_dmrs_pos_slot_mem); nvar += nvar_tmp; } // measure the SNR from the channel estimation @@ -1417,6 +1477,8 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, rdata->scramblingSequence = scramblingSequence; rdata->nvar = nvar; rdata->beam_nb = beam_nb; + rdata->rxFext_slot_mem = rxFext_slot_mem; + rdata->pusch_ch_est_dmrs_interpl_slot_mem = pusch_ch_est_dmrs_interpl_slot_mem; if (rel15_ul->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) { nr_pusch_symbol_processing(rdata); @@ -1431,6 +1493,191 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, } } // symbol loop +#if T_TRACER + // Get Time Stamp for T-tracer messages + char trace_time_stamp_str[30]; + get_time_stamp_usec(trace_time_stamp_str); + // trace_time_stamp_str = 8 bytes timestamp = YYYYMMDD + // + 9 bytes timestamp = HHMMSSMMM + // Not Ready for MIMO + int dmrs_port = get_dmrs_port(0, rel15_ul->dmrs_ports); + if (T_ACTIVE(T_GNB_PHY_UL_FD_DMRS)) { + // Log GNB_PHY_UL_FD_DMRS using T-Tracer if activated + // FORMAT = int,frame : int,slot : int,datetime_yyyymmdd : int,datetime_hhmmssmmm : + // int,frame_type : int,freq_range : int,subcarrier_spacing : int,cyclic_prefix : int,symbols_per_slot : + // int,Nid_cell : int,rnti : + // int,rb_size : int,rb_start : int,start_symbol_index : int,nr_of_symbols : + // int,qam_mod_order : int,mcs_index : int,mcs_table : int,nrOfLayers : + // int,transform_precoding : int,dmrs_config_type : int,ul_dmrs_symb_pos : int,number_dmrs_symbols : int,dmrs_port : + // int,dmrs_nscid : int,nb_antennas_rx : int,number_of_bits : buffer,data + T(T_GNB_PHY_UL_FD_DMRS, + T_INT((int)frame), + T_INT((int)slot), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 0, 8)), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 8, 9)), + T_INT((int)frame_parms->frame_type), // Frame type (0 FDD, 1 TDD) frame_structure + T_INT((int)frame_parms->freq_range), // Frequency range (0 FR1, 1 FR2) + T_INT((int)rel15_ul->subcarrier_spacing), // Subcarrier spacing (0 15kHz, 1 30kHz, 2 60kHz) + T_INT((int)rel15_ul->cyclic_prefix), // Normal or extended prefix (0 normal, 1 extended) + T_INT((int)frame_parms->symbols_per_slot), // Number of symbols per slot + T_INT((int)frame_parms->Nid_cell), + T_INT((int)rel15_ul->rnti), + T_INT((int)rel15_ul->rb_size), + T_INT((int)rel15_ul->rb_start), + T_INT((int)rel15_ul->start_symbol_index), // start_ofdm_symbol + T_INT((int)rel15_ul->nr_of_symbols), // num_ofdm_symbols + T_INT((int)rel15_ul->qam_mod_order), // modulation + T_INT((int)rel15_ul->mcs_index), // mcs + T_INT((int)rel15_ul->mcs_table), // mcs_table_index + T_INT((int)rel15_ul->nrOfLayers), // num_layer + T_INT((int)rel15_ul->transform_precoding), // transformPrecoder_enabled = 0, transformPrecoder_disabled = 1 + T_INT((int)rel15_ul->dmrs_config_type), // dmrs_resource_map_config: pusch_dmrs_type1 = 0, pusch_dmrs_type2 = 1 + T_INT((int)rel15_ul->ul_dmrs_symb_pos), // used to derive the DMRS symbol positions + T_INT((int)number_dmrs_symbols), + // dmrs_start_ofdm_symbol + // dmrs_duration_num_ofdm_symbols + // dmrs_num_add_positions + T_INT((int)dmrs_port), // dmrs_antenna_port + T_INT((int)rel15_ul->scid), // dmrs_nscid + T_INT((int)frame_parms->nb_antennas_rx), // rx antenna + T_INT(0), // number_of_bits + T_BUFFER((c16_t *)(&(pusch_dmrs_slot_mem[0])), rel15_ul->rb_size * NR_NB_SC_PER_RB * rel15_ul->nr_of_symbols * 4)); + } + + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_POS)) { + // Log GNB_PHY_UL_FD_CHAN_EST_DMRS_POS using T-Tracer if activated + // FORMAT = int,frame : int,slot : int,datetime_yyyymmdd : int,datetime_hhmmssmmm : + // int,frame_type : int,freq_range : int,subcarrier_spacing : int,cyclic_prefix : int,symbols_per_slot : + // int,Nid_cell : int,rnti : + // int,rb_size : int,rb_start : int,start_symbol_index : int,nr_of_symbols : + // int,qam_mod_order : int,mcs_index : int,mcs_table : int,nrOfLayers : + // int,transform_precoding : int,dmrs_config_type : int,ul_dmrs_symb_pos : int,number_dmrs_symbols : int,dmrs_port : + // int,dmrs_nscid : int,nb_antennas_rx : int,number_of_bits : buffer,data + T(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_POS, + T_INT((int)frame), + T_INT((int)slot), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 0, 8)), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 8, 9)), + T_INT((int)frame_parms->frame_type), // Frame type (0 FDD, 1 TDD) frame_structure + T_INT((int)frame_parms->freq_range), // Frequency range (0 FR1, 1 FR2) + T_INT((int)rel15_ul->subcarrier_spacing), // Subcarrier spacing (0 15kHz, 1 30kHz, 2 60kHz) + T_INT((int)rel15_ul->cyclic_prefix), // Normal or extended prefix (0 normal, 1 extended) + T_INT((int)frame_parms->symbols_per_slot), // Number of symbols per slot + T_INT((int)frame_parms->Nid_cell), + T_INT((int)rel15_ul->rnti), + T_INT((int)rel15_ul->rb_size), + T_INT((int)rel15_ul->rb_start), + T_INT((int)rel15_ul->start_symbol_index), // start_ofdm_symbol + T_INT((int)rel15_ul->nr_of_symbols), // num_ofdm_symbols + T_INT((int)rel15_ul->qam_mod_order), // modulation + T_INT((int)rel15_ul->mcs_index), // mcs + T_INT((int)rel15_ul->mcs_table), // mcs_table_index + T_INT((int)rel15_ul->nrOfLayers), // num_layer + T_INT((int)rel15_ul->transform_precoding), // transformPrecoder_enabled = 0, transformPrecoder_disabled = 1 + T_INT((int)rel15_ul->dmrs_config_type), // dmrs_resource_map_config: pusch_dmrs_type1 = 0, pusch_dmrs_type2 = 1 + T_INT((int)rel15_ul->ul_dmrs_symb_pos), // used to derive the DMRS symbol positions + T_INT((int)number_dmrs_symbols), + // dmrs_start_ofdm_symbol + // dmrs_duration_num_ofdm_symbols + // dmrs_num_add_positions + T_INT((int)dmrs_port), // dmrs_antenna_port + T_INT((int)rel15_ul->scid), // dmrs_nscid + T_INT((int)frame_parms->nb_antennas_rx), // rx antenna + T_INT(0), // number_of_bits + T_BUFFER((c16_t *)(&(pusch_ch_est_dmrs_pos_slot_mem[0])), rel15_ul->rb_size * NR_NB_SC_PER_RB * rel15_ul->nr_of_symbols * 4)); + } + + if (T_ACTIVE(T_GNB_PHY_UL_FD_PUSCH_IQ)) { + // Log GNB_PHY_UL_FD_PUSCH_IQ using T-Tracer if activated + // FORMAT = int,frame : int,slot : int,datetime_yyyymmdd : int,datetime_hhmmssmmm : + // int,frame_type : int,freq_range : int,subcarrier_spacing : int,cyclic_prefix : int,symbols_per_slot : + // int,Nid_cell : int,rnti : + // int,rb_size : int,rb_start : int,start_symbol_index : int,nr_of_symbols : + // int,qam_mod_order : int,mcs_index : int,mcs_table : int,nrOfLayers : + // int,transform_precoding : int,dmrs_config_type : int,ul_dmrs_symb_pos : int,number_dmrs_symbols : int,dmrs_port : + // int,dmrs_nscid : int,nb_antennas_rx : int,number_of_bits : buffer,data + + T(T_GNB_PHY_UL_FD_PUSCH_IQ, + T_INT((int)frame), + T_INT((int)slot), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 0, 8)), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 8, 9)), + T_INT((int)frame_parms->frame_type), // Frame type (0 FDD, 1 TDD) frame_structure + T_INT((int)frame_parms->freq_range), // Frequency range (0 FR1, 1 FR2) + T_INT((int)rel15_ul->subcarrier_spacing), // Subcarrier spacing (0 15kHz, 1 30kHz, 2 60kHz) + T_INT((int)rel15_ul->cyclic_prefix), // Normal or extended prefix (0 normal, 1 extended) + T_INT((int)frame_parms->symbols_per_slot), // Number of symbols per slot + T_INT((int)frame_parms->Nid_cell), + T_INT((int)rel15_ul->rnti), + T_INT((int)rel15_ul->rb_size), + T_INT((int)rel15_ul->rb_start), + T_INT((int)rel15_ul->start_symbol_index), // start_ofdm_symbol + T_INT((int)rel15_ul->nr_of_symbols), // num_ofdm_symbols + T_INT((int)rel15_ul->qam_mod_order), // modulation + T_INT((int)rel15_ul->mcs_index), // mcs + T_INT((int)rel15_ul->mcs_table), // mcs_table_index + T_INT((int)rel15_ul->nrOfLayers), // num_layer + T_INT((int)rel15_ul->transform_precoding), // transformPrecoder_enabled = 0, transformPrecoder_disabled = 1 + T_INT((int)rel15_ul->dmrs_config_type), // dmrs_resource_map_config: pusch_dmrs_type1 = 0, pusch_dmrs_type2 = 1 + T_INT((int)rel15_ul->ul_dmrs_symb_pos), // used to derive the DMRS symbol positions + T_INT((int)number_dmrs_symbols), + // dmrs_start_ofdm_symbol + // dmrs_duration_num_ofdm_symbols + // dmrs_num_add_positions + T_INT((int)dmrs_port), // dmrs_antenna_port + T_INT((int)rel15_ul->scid), // dmrs_nscid + T_INT((int)frame_parms->nb_antennas_rx), // rx antenna + T_INT(0), // number_of_bits + T_BUFFER((c16_t *)(&(rxFext_slot_mem[0])), + rel15_ul->rb_size * NR_NB_SC_PER_RB * rel15_ul->nr_of_symbols * frame_parms->nb_antennas_rx * 4)); + } + if (T_ACTIVE(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_INTERPL)) { + // Log pusch_ch_est_dmrs_interpl_slot_mem using T-Tracer if activated + // FORMAT = int,frame : int,slot : int,datetime_yyyymmdd : int,datetime_hhmmssmmm : + // int,frame_type : int,freq_range : int,subcarrier_spacing : int,cyclic_prefix : int,symbols_per_slot : + // int,Nid_cell : int,rnti : + // int,rb_size : int,rb_start : int,start_symbol_index : int,nr_of_symbols : + // int,qam_mod_order : int,mcs_index : int,mcs_table : int,nrOfLayers : + // int,transform_precoding : int,dmrs_config_type : int,ul_dmrs_symb_pos : int,number_dmrs_symbols : int,dmrs_port : + // int,dmrs_nscid : int,nb_antennas_rx : int,number_of_bits : buffer,data + + T(T_GNB_PHY_UL_FD_CHAN_EST_DMRS_INTERPL, + T_INT((int)frame), + T_INT((int)slot), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 0, 8)), + T_INT((int)split_time_stamp_and_convert_to_int(trace_time_stamp_str, 8, 9)), + T_INT((int)frame_parms->frame_type), // Frame type (0 FDD, 1 TDD) frame_structure + T_INT((int)frame_parms->freq_range), // Frequency range (0 FR1, 1 FR2) + T_INT((int)rel15_ul->subcarrier_spacing), // Subcarrier spacing (0 15kHz, 1 30kHz, 2 60kHz) + T_INT((int)rel15_ul->cyclic_prefix), // Normal or extended prefix (0 normal, 1 extended) + T_INT((int)frame_parms->symbols_per_slot), // Number of symbols per slot + T_INT((int)frame_parms->Nid_cell), + T_INT((int)rel15_ul->rnti), + T_INT((int)rel15_ul->rb_size), + T_INT((int)rel15_ul->rb_start), + T_INT((int)rel15_ul->start_symbol_index), // start_ofdm_symbol + T_INT((int)rel15_ul->nr_of_symbols), // num_ofdm_symbols + T_INT((int)rel15_ul->qam_mod_order), // modulation + T_INT((int)rel15_ul->mcs_index), // mcs + T_INT((int)rel15_ul->mcs_table), // mcs_table_index + T_INT((int)rel15_ul->nrOfLayers), // num_layer + T_INT((int)rel15_ul->transform_precoding), // transformPrecoder_enabled = 0, transformPrecoder_disabled = 1 + T_INT((int)rel15_ul->dmrs_config_type), // dmrs_resource_map_config: pusch_dmrs_type1 = 0, pusch_dmrs_type2 = 1 + T_INT((int)rel15_ul->ul_dmrs_symb_pos), // used to derive the DMRS symbol positions + T_INT((int)number_dmrs_symbols), + // dmrs_start_ofdm_symbol + // dmrs_duration_num_ofdm_symbols + // dmrs_num_add_positions + T_INT((int)dmrs_port), // dmrs_antenna_port + T_INT((int)rel15_ul->scid), // dmrs_nscid + T_INT((int)frame_parms->nb_antennas_rx), // rx antenna + T_INT(0), // number_of_bits + T_BUFFER( + (c16_t *)pusch_ch_est_dmrs_interpl_slot_mem, + rel15_ul->rb_size * NR_NB_SC_PER_RB * rel15_ul->nr_of_symbols * frame_parms->nb_antennas_rx * rel15_ul->nrOfLayers * 4)); + } +#endif + join_task_ans(&ans); stop_meas(&gNB->rx_pusch_symbol_processing_stats);