From ff0ca0904089a3c578c3158e30bdacf5a8f03f63 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Wed, 15 Aug 2018 05:24:47 +0200 Subject: [PATCH] changed precoder initialization for cell-specific antenna ports --- openair1/PHY/INIT/lte_init_ru.c | 13 ++++-- openair1/SCHED/ru_procedures.c | 75 +++++++++++---------------------- 2 files changed, 34 insertions(+), 54 deletions(-) diff --git a/openair1/PHY/INIT/lte_init_ru.c b/openair1/PHY/INIT/lte_init_ru.c index bcd8bedc1a..f931ea58e2 100644 --- a/openair1/PHY/INIT/lte_init_ru.c +++ b/openair1/PHY/INIT/lte_init_ru.c @@ -111,6 +111,9 @@ int phy_init_RU(RU_t *ru) { LOG_D(PHY,"[INIT] %s() RC.nb_L1_inst:%d \n", __FUNCTION__, RC.nb_L1_inst); + int starting_antenna_index=0; + for (i=0; iidx;i++) starting_antenna_index+=ru->nb_tx; + for (i=0; ieNB_list[i]->frame_parms.nb_antenna_ports_eNB); @@ -119,10 +122,14 @@ int phy_init_RU(RU_t *ru) { ru->beam_weights[i][p] = (int32_t **)malloc16_clear(ru->nb_tx*sizeof(int32_t*)); for (j=0; jnb_tx; j++) { ru->beam_weights[i][p][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t)); - // antenna ports 0-3 are mapped on antennas 0-3 + // antenna ports 0-3 are mapped on antennas 0-3 as follows + // - antenna port p is mapped to antenna j on ru->idx as: p = (starting_antenna_index+j)%nb_anntena_ports_eNB // antenna port 4 is mapped on antenna 0 - // antenna ports 5-14 are mapped on all antennas - if (((p<4) && (p==j)) || ((p==4) && (j==0))) { + // antenna ports 5-14 are mapped on all antennas + + if (((p<4) && + (p==((starting_antenna_index+j)%ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB))) || + ((p==4) && (j==0))) { for (re=0; reofdm_symbol_size; re++) { ru->beam_weights[i][p][j][re] = 0x00007fff; diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index c8300c463a..431aa97ea2 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -454,65 +454,37 @@ void feptx_prec(RU_t *ru) { // pdcch region, copy entire signal from txdataF->txdataF_BF (bf_mask = 1) // else do beamforming for pdcch according to beam_weights // to be updated for eMBMS (p=4) - - /* AssertFatal(bf_mask[p][0]>=0 && bf_mask[p][0] < 3, - "Illegal bf_mask[%d][0] %d\n",p,bf_mask[p][0]); - */ - /*if (bf_mask_pdcch == 1) - memcpy((void*)ru->common.txdataF_BF[aa], - (void*)&eNB->common_vars.txdataF[p][0], - pdcch_vars->num_pdcch_symbols*fp->ofdm_symbol_size*sizeof(int32_t)); - else if (bf_mask_pdcch == 2) {*/ - for (l=0;lnum_pdcch_symbols;l++) - // for (rb=0;rbN_RB_DL;rb++) - beam_precoding(eNB->common_vars.txdataF, - ru->common.txdataF_BF, - fp, - ru->beam_weights, - l, - aa, - p); - //} // else if (bf_mask_pdcch == 2) +// For the moment this does nothing different than below. + for (l=0;lnum_pdcch_symbols;l++) + // for (rb=0;rbN_RB_DL;rb++) + beam_precoding(eNB->common_vars.txdataF, + ru->common.txdataF_BF, + fp, + ru->beam_weights, + l, + aa, + p); } //if (pnb_antenna_ports_eNB) - -// PDSCH region + + // PDSCH region if (pnb_antenna_ports_eNB || p==5 || p==7 || p==8) { - for (l=pdcch_vars->num_pdcch_symbols;lsymbols_per_tti;l++) { - beam_precoding(eNB->common_vars.txdataF, - ru->common.txdataF_BF, - fp, - ru->beam_weights, - l, - aa, - p); - /*for (rb=0;rbN_RB_DL;rb++) { - AssertFatal(bf_mask[p][rb]>=0 && bf_mask[p][rb] < 3, - "Illegal bf_mask[%d][%d] %d\n",p,rb,bf_mask[p][rb]); - if (bf_mask[p][rb]==1) { - memcpy((void*)&ru->common.txdataF_BF[aa][l*fp->ofdm_symbol_size], - (void*)&eNB->common_vars.txdataF[p][l*fp->ofdm_symbol_size], - fp->ofdm_symbol_size*sizeof(int32_t)); - } else if (bf_mask[p][rb]==2) { - beam_precoding(eNB->common_vars.txdataF, - ru->common.txdataF_BF, - fp, - ru->beam_weights, - l, - aa, - p, - rb, - 0); - } // else if (bf_mask[p][rb]==1) - }// for (rb=0;rb<...)*/ - } // for (l=pdcch_vars ....) + for (l=pdcch_vars->num_pdcch_symbols;lsymbols_per_tti;l++) { + beam_precoding(eNB->common_vars.txdataF, + ru->common.txdataF_BF, + fp, + ru->beam_weights, + l, + aa, + p); + } // for (l=pdcch_vars ....) } // if (pnb_antenna_ports_eNB) ... } // for (p=0...) } // for (aa=0 ...) - + if(ru->idx<2) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+ru->idx , 0); // VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RU_FEPTX_PREC+ru->idx,0); - + /////////////////////////////////////////////////// @@ -540,6 +512,7 @@ void feptx_prec(RU_t *ru) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+ru->idx , 0); } else { + AssertFatal(1==0,"Handling of multi-L1 case not ready yet\n"); for (i=0;inum_eNB;i++) { eNB = eNB_list[i]; fp = &eNB->frame_parms;