From cf2b532a798699f8996721e4c3b171d8d3c53de8 Mon Sep 17 00:00:00 2001 From: lukashov <elena.lukashova@eurecom.fr> Date: Thu, 26 Nov 2015 12:22:59 +0100 Subject: [PATCH] changes in dci_tools.c for TM4 to support tpmi2 --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 43 +++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 90fd2b8a795..dc4db92e2ba 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1551,7 +1551,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; dlsch0_harq->pmi_alloc = DL_pmi_single; dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; - dlsch1_harq->pmi_alloc = DL_pmi_single; + dlsch1_harq->pmi_alloc = DL_pmi_single^ 0x1555; //opposite; this is just random assignment for first trial break; default: break; @@ -4806,9 +4806,9 @@ int generate_ue_dlsch_params_from_dci(int frame, break; case 2: // PUSCH precoding dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; - dlsch0_harq->pmi_alloc = 0; //TODO: DL_pmi_single; + dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc; dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; - dlsch1_harq->pmi_alloc = 0; //TODO: DL_pmi_single; + dlsch1_harq->pmi_alloc = dlsch0->pmi_alloc^0x1555; break; default: break; @@ -5774,7 +5774,7 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui } -uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subbands) +uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_rb) { int i, aarx; @@ -5782,6 +5782,25 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba uint16_t pmivect = 0; uint8_t rank = meas->rank[eNB_id]; int pmi_re,pmi_im; + int nb_subbands=0; + + + switch (nb_rb) { + case 6: + nb_subbands = 6; + break; + default: + case 25: + nb_subbands = 7; + break; + case 50: + nb_subbands = 9; + break; + case 100: + nb_subbands = 13; + break; + } + for (i=0; i<nb_subbands; i++) { pmi_re = 0; @@ -5808,7 +5827,21 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba // printf("subband %d, pmi%d \n",i,pmiq); pmivect |= (pmiq<<(2*i)); - } else { + } + else if (rank==1) { + for (aarx=0; aarx<meas->nb_antennas_rx; aarx++) { + pmi_re += meas->subband_pmi_re[eNB_id][i][aarx]; + pmi_im += meas->subband_pmi_im[eNB_id][i][aarx]; + } + if (pmi_re > pmi_im) + pmiq = PMI_2A_11; + else if (pmi_re < pmi_im) + pmiq = PMI_2A_1m1; + printf("subband %d, pmi%d \n",i,pmiq); + pmivect |= (pmiq<<(2*i)); + printf("subband %d pmivect %d \n",i, pmivect); + } + else { // This needs to be done properly!!! msg("PMI feedback for rank>1 not supported!\n"); pmivect = 0; -- GitLab