diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 2c8224dfda..4aed63c628 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -1188,14 +1188,17 @@ void handle_nr_srs_measurements(const module_id_t module_id, LOG_I(NR_MAC, "nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports = %i\n", nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports); LOG_I(NR_MAC, "nr_srs_normalized_channel_iq_matrix.prg_size = %i\n", nr_srs_normalized_channel_iq_matrix.prg_size); LOG_I(NR_MAC, "nr_srs_normalized_channel_iq_matrix.num_prgs = %i\n", nr_srs_normalized_channel_iq_matrix.num_prgs); - c16_t *channel_matrix16 = (c16_t*)nr_srs_normalized_channel_iq_matrix.channel_matrix; - c8_t *channel_matrix8 = (c8_t*)nr_srs_normalized_channel_iq_matrix.channel_matrix; - for(int uI = 0; uI < nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports; uI++) { - for(int gI = 0; gI < nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements; gI++) { - for(int pI = 0; pI < nr_srs_normalized_channel_iq_matrix.num_prgs; pI++) { - uint16_t index = uI*nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements*nr_srs_normalized_channel_iq_matrix.num_prgs + gI*nr_srs_normalized_channel_iq_matrix.num_prgs + pI; - LOG_I(NR_MAC, "(uI %i, gI %i, pI %i) channel_matrix --> real %i, imag %i\n", - uI, gI, pI, + c16_t *channel_matrix16 = (c16_t *)nr_srs_normalized_channel_iq_matrix.channel_matrix; + c8_t *channel_matrix8 = (c8_t *)nr_srs_normalized_channel_iq_matrix.channel_matrix; + for (int uI = 0; uI < nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports; uI++) { + for (int gI = 0; gI < nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements; gI++) { + for (int pI = 0; pI < nr_srs_normalized_channel_iq_matrix.num_prgs; pI++) { + uint16_t index = uI * nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements * nr_srs_normalized_channel_iq_matrix.num_prgs + gI * nr_srs_normalized_channel_iq_matrix.num_prgs + pI; + LOG_I(NR_MAC, + "(uI %i, gI %i, pI %i) channel_matrix --> real %i, imag %i\n", + uI, + gI, + pI, nr_srs_normalized_channel_iq_matrix.normalized_iq_representation == 0 ? channel_matrix8[index].r : channel_matrix16[index].r, nr_srs_normalized_channel_iq_matrix.normalized_iq_representation == 0 ? channel_matrix8[index].i : channel_matrix16[index].i); } @@ -1206,19 +1209,18 @@ void handle_nr_srs_measurements(const module_id_t module_id, // TODO: This should be improved NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP; - NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static; - ps->srs_feedback.sri = NR_SRS_SRI_0; - ps->srs_feedback.ul_ri = 0; // TODO: Compute this - ps->srs_feedback.tpmi = nr_srs_tpmi_estimation(current_BWP->pusch_Config, - current_BWP->transform_precoding, - nr_srs_normalized_channel_iq_matrix.channel_matrix, - nr_srs_normalized_channel_iq_matrix.normalized_iq_representation, - nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements, - nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports, - nr_srs_normalized_channel_iq_matrix.prg_size, - nr_srs_normalized_channel_iq_matrix.num_prgs, - ps->srs_feedback.ul_ri); - sprintf(stats->srs_stats,"UL-RI %d, TPMI %d", ps->srs_feedback.ul_ri+1, ps->srs_feedback.tpmi); + sched_ctrl->srs_feedback.sri = NR_SRS_SRI_0; + sched_ctrl->srs_feedback.ul_ri = 0; // TODO: Compute this + sched_ctrl->srs_feedback.tpmi = nr_srs_tpmi_estimation(current_BWP->pusch_Config, + current_BWP->transform_precoding, + nr_srs_normalized_channel_iq_matrix.channel_matrix, + nr_srs_normalized_channel_iq_matrix.normalized_iq_representation, + nr_srs_normalized_channel_iq_matrix.num_gnb_antenna_elements, + nr_srs_normalized_channel_iq_matrix.num_ue_srs_ports, + nr_srs_normalized_channel_iq_matrix.prg_size, + nr_srs_normalized_channel_iq_matrix.num_prgs, + sched_ctrl->srs_feedback.ul_ri); + sprintf(stats->srs_stats, "UL-RI %d, TPMI %d", sched_ctrl->srs_feedback.ul_ri + 1, sched_ctrl->srs_feedback.tpmi); break; } @@ -2266,14 +2268,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot) dci_pdu_rel15_t uldci_payload; memset(&uldci_payload, 0, sizeof(uldci_payload)); - config_uldci(sib1, - scc, - pusch_pdu, - &uldci_payload, - &ps->srs_feedback, - ps->time_domain_allocation, - UE->UE_sched_ctrl.tpc0, - current_BWP); + config_uldci(sib1, scc, pusch_pdu, &uldci_payload, &sched_ctrl->srs_feedback, ps->time_domain_allocation, UE->UE_sched_ctrl.tpc0, current_BWP); fill_dci_pdu_rel15(scc, cg, diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index 2ab3208ab0..8501068f52 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -380,7 +380,6 @@ typedef struct NR_sched_pucch { typedef struct NR_pusch_semi_static_t { int time_domain_allocation; uint8_t nrOfLayers; - nr_srs_feedback_t srs_feedback; uint8_t num_dmrs_cdm_grps_no_data; int startSymbolIndex; int nrOfSymbols; @@ -650,7 +649,7 @@ typedef struct { NR_list_t feedback_ul_harq; /// UL HARQ processes that await retransmission NR_list_t retrans_ul_harq; - NR_UE_mac_ce_ctrl_t UE_mac_ce_ctrl;// MAC CE related information + NR_UE_mac_ce_ctrl_t UE_mac_ce_ctrl; // MAC CE related information /// number of active DL LCs uint8_t dl_lc_num; /// order in which DLSCH scheduler should allocate LCs @@ -658,6 +657,9 @@ typedef struct { /// Timer for RRC processing procedures uint32_t rrc_processing_timer; + + /// sri, ul_ri and tpmi based on SRS + nr_srs_feedback_t srs_feedback; } NR_UE_sched_ctrl_t; typedef struct {