diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 90fd2b8a79..dc4db92e2b 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; inb_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;