diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index cbae84f56b..2626a8c219 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -781,13 +781,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->txdataF = (int32_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(int32_t*)); common_vars->rxdataF = (int32_t **)malloc16(64*sizeof(int32_t*)); - LOG_D(PHY,"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d\n", NB_ANTENNA_PORTS_ENB, fp->nb_antenna_ports_eNB); + LOG_I(PHY,"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d\n", NB_ANTENNA_PORTS_ENB, fp->nb_antenna_ports_eNB); for (i=0; inb_antenna_ports_eNB || i==5) { common_vars->txdataF[i] = (int32_t*)malloc16_clear(fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t) ); - LOG_D(PHY,"[INIT] common_vars->txdataF[%d] = %p (%lu bytes)\n", + LOG_I(PHY,"[INIT] common_vars->txdataF[%d] = %p (%lu bytes)\n", i,common_vars->txdataF[i], fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t)); } diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index eee11eef89..350f642fca 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -56,24 +56,25 @@ int beam_precoding(int32_t **txdataF, int32_t **txdataF_BF, int subframe, LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***beam_weights, + int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15], int symbol, int aa, - int p) + int p, + int l1_id) { - LOG_D(PHY,"Starting precoding for symbol %d, physical antenna %d, logical port %d\n",symbol,aa,p); int rb_offset_neg0 = frame_parms->ofdm_symbol_size - (6*frame_parms->N_RB_DL); int rb_offset_neg = (subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti) + rb_offset_neg0; int rb_offset_pos = (subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti); + multadd_cpx_vector((int16_t*)&txdataF[p][rb_offset_neg+(symbol*frame_parms->ofdm_symbol_size)], - (int16_t*)&beam_weights[p][aa][rb_offset_neg0], + (int16_t*)&beam_weights[l1_id][p][aa][rb_offset_neg0], (int16_t*)&txdataF_BF[aa][rb_offset_neg0+(symbol*frame_parms->ofdm_symbol_size)], 0, 6*frame_parms->N_RB_DL, 15); multadd_cpx_vector((int16_t*)&txdataF[p][rb_offset_pos+(symbol*frame_parms->ofdm_symbol_size)], - (int16_t*)&beam_weights[p][aa][0], + (int16_t*)&beam_weights[l1_id][p][aa][0], (int16_t*)&txdataF_BF[aa][(symbol*frame_parms->ofdm_symbol_size)], 0, 7*frame_parms->N_RB_DL, // to allow for extra RE at the end, 12 useless multipy-adds (first one at DC and 11 at end) @@ -85,7 +86,7 @@ int beam_precoding(int32_t **txdataF, int beam_precoding_one_eNB(int32_t **txdataF, int32_t **txdataF_BF, - int32_t ***beam_weights, + int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15], int subframe, int nb_antenna_ports, int nb_tx, // total physical antenna @@ -112,7 +113,7 @@ int beam_precoding_one_eNB(int32_t **txdataF, for (symbol=0; symbolsymbols_per_tti[ int32_t **rxdataF; /// \brief holds the transmit data in the frequency domain. - /// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. //? - /// - first index: eNB id [0..2] (hard coded) - /// - second index: tx antenna [0..14[ where 14 is the total supported antenna ports. - /// - third index: sample [0..] + /// - first index: tx antenna [0..14[ where 14 is the total supported antenna ports. + /// - second index: sample [0..] int32_t **txdataF; } LTE_eNB_COMMON; diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c index c6915e2004..6fd5518d44 100644 --- a/openair1/SCHED/ru_procedures.c +++ b/openair1/SCHED/ru_procedures.c @@ -406,13 +406,10 @@ void feptx_ofdm(RU_t *ru) { void feptx_prec(RU_t *ru) { - // Theoni's - int l,i,aa,rb,p; + int l,i,aa,p; int subframe = ru->proc.subframe_tx; PHY_VARS_eNB **eNB_list = ru->eNB_list,*eNB; LTE_DL_FRAME_PARMS *fp; - int32_t ***bw; - RU_proc_t *proc = &ru->proc; /* fdragon int l,i,aa; @@ -422,7 +419,6 @@ void feptx_prec(RU_t *ru) { int subframe = ru->proc.subframe_tx; */ - if (ru->idx != 0) return; if (ru->num_eNB == 1) { @@ -430,6 +426,8 @@ void feptx_prec(RU_t *ru) { fp = &eNB->frame_parms; LTE_eNB_PDCCH *pdcch_vars = &eNB->pdcch_vars[subframe&1]; + if (subframe_select(fp,subframe) == SF_UL) return; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+ru->idx , 1); for (aa=0;aanb_tx;aa++) { @@ -443,10 +441,7 @@ void feptx_prec(RU_t *ru) { #else if (pnb_antenna_ports_eNB) { - // 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) - // For the moment this does nothing different than below. + // For the moment this does nothing different than below, except ignore antenna ports 5,7,8. for (l=0;lnum_pdcch_symbols;l++) beam_precoding(eNB->common_vars.txdataF, ru->common.txdataF_BF, @@ -455,7 +450,8 @@ void feptx_prec(RU_t *ru) { ru->beam_weights, l, aa, - p); + p, + eNB->Mod_id); } //if (pnb_antenna_ports_eNB) // PDSCH region @@ -468,7 +464,8 @@ void feptx_prec(RU_t *ru) { ru->beam_weights, l, aa, - p); + p, + eNB->Mod_id); } // for (l=pdcch_vars ....) } // if (pnb_antenna_ports_eNB) ... #endif //NO_PRECODING @@ -511,7 +508,6 @@ void feptx_prec(RU_t *ru) { for (i=0;inum_eNB;i++) { eNB = eNB_list[i]; fp = &eNB->frame_parms; - bw = ru->beam_weights[i]; for (l=0;lsymbols_per_tti;l++) { for (aa=0;aanb_tx;aa++) { @@ -519,10 +515,11 @@ void feptx_prec(RU_t *ru) { ru->common.txdataF_BF, subframe, fp, - bw, + ru->beam_weights, subframe<<1, l, - aa); + aa, + eNB->Mod_id); } } } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 8fdc276def..214afabd70 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -1194,7 +1194,6 @@ void wakeup_eNBs(RU_t *ru) { } else { - LOG_I(PHY,"ru->num_eNB:%d\n", ru->num_eNB); for (i=0;inum_eNB;i++) @@ -1474,10 +1473,10 @@ static void* ru_thread_tx( void* param ) { if (oai_exit) break; - LOG_I(PHY,"ru_thread_tx: Waiting for TX processing\n"); + LOG_D(PHY,"ru_thread_tx: Waiting for TX processing\n"); // wait until eNBs are finished subframe RX n and TX n+4 wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx"); - LOG_I(PHY,"ru_thread_tx: Woken from condition\n"); + LOG_D(PHY,"ru_thread_tx: Woken from condition\n"); if (oai_exit) break; // do TX front-end processing if needed (precoding and/or IDFTs)