Commit d2a5b4ef authored by lfarizav's avatar lfarizav

Channel update for multiple RRUS

parent 4a3f5ec4
......@@ -45,7 +45,7 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
// unsigned int n;
// int i;
int **dl_ch_estimates=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[0];
int **dl_ch_estimates=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id];
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF;
ch_offset = (l*(ue->frame_parms.ofdm_symbol_size));
......@@ -788,7 +788,7 @@ int lte_dl_mbsfn_channel_estimation_freq(PHY_VARS_UE *ue,
// unsigned int n;
// int i;
int **dl_ch_estimates=ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0];
int **dl_ch_estimates=ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id];
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF;
ch_offset = (l*(ue->frame_parms.ofdm_symbol_size));
......
......@@ -840,24 +840,26 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
} //eNB_id
eNB_id=0;
if (ue->transmission_mode[0]==4 || ue->transmission_mode[0]==3){
for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++){
if (ue->transmission_mode[eNB_id]==4 || ue->transmission_mode[eNB_id]==3){
if (rank_adaptation == 1)
rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][4],
rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][4],
N_RB_DL);
else
rank_tm3_tm4=1;
#ifdef DEBUG_RANK_EST
printf("rank tm3 or tm4 %d\n", rank_tm3_tm4);
printf("rank tm3 or tm4 %d\n", rank_tm3_tm4);
#endif
}
}
if (ue->transmission_mode[eNB_id]!=4 && ue->transmission_mode[eNB_id]!=3)
if (ue->transmission_mode[eNB_id]!=4 && ue->transmission_mode[eNB_id]!=3)
ue->measurements.rank[eNB_id] = 0;
else
else
ue->measurements.rank[eNB_id] = rank_tm3_tm4;
}
// printf ("tx mode %d\n", ue->transmission_mode[eNB_id]);
// printf ("rank %d\n", ue->PHY_measurements.rank[eNB_id]);
......@@ -1179,11 +1181,12 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
}
// signal measurements
printf("lte_ue_measurements_freq: ue->n_connected_eNB %d\n",ue->n_connected_eNB);
for (eNB_id=0; eNB_id<ue->n_connected_eNB; eNB_id++) {
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
ue->measurements.rx_spatial_power[eNB_id][aatx][aarx] =
(signal_energy_nodc(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
(signal_energy_nodc(&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
(N_RB_DL*12)));
//- ue->measurements.n0_power[aarx];
......@@ -1211,19 +1214,20 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
} //eNB_id
eNB_id=0;
if (ue->transmission_mode[0]==4 || ue->transmission_mode[0]==3){
for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++){
if (ue->transmission_mode[eNB_id]==4 || ue->transmission_mode[eNB_id]==3){
if (rank_adaptation == 1)
rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][4],
&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][4],
rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][4],
&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][4],
N_RB_DL);
else
rank_tm3_tm4=1;
#ifdef DEBUG_RANK_EST
printf("rank tm3 or tm4 %d\n", rank_tm3_tm4);
printf("rank tm3 or tm4 %d\n", rank_tm3_tm4);
#endif
}
}
if (ue->transmission_mode[eNB_id]!=4 && ue->transmission_mode[eNB_id]!=3)
ue->measurements.rank[eNB_id] = 0;
......@@ -1231,7 +1235,7 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
ue->measurements.rank[eNB_id] = rank_tm3_tm4;
// printf ("tx mode %d\n", ue->transmission_mode[eNB_id]);
// printf ("rank %d\n", ue->PHY_measurements.rank[eNB_id]);
}
// filter to remove jitter
if (ue->init_averaging == 0) {
for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++)
......@@ -1276,8 +1280,8 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
// cqi/pmi information
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1 = &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2+aarx][4];
for (subband=0; subband<nb_subbands; subband++) {
......@@ -1332,13 +1336,13 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
#if defined(__x86_64__) || defined(__i386__)
__m128i pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1 /* ,mmtmpPMI2,mmtmpPMI3 */ ;
dl_ch0_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
dl_ch0_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2+aarx][4];
#elif defined(__arm__)
int32x4_t pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI0b,mmtmpPMI1b;
dl_ch0_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
dl_ch0_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][aarx][4];
dl_ch1_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2+aarx][4];
#endif
for (subband=0; subband<nb_subbands; subband++) {
......@@ -1432,7 +1436,7 @@ void lte_ue_measurements_freq(PHY_VARS_UE *ue,
else {
// cqi information only for mode 1
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][aarx][4];
for (subband=0; subband<7; subband++) {
......
......@@ -454,7 +454,7 @@ int pbch_detection_freq(PHY_VARS_UE *ue, runmode_t mode)
for(int i=0; i<RX_NB_TH;i++)
{
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[2]&3)<<6) + (ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[1]>>2))<<2;
ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[2]&3)<<6) + (ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[1]>>2))<<2;
//ue->proc.proc_rxtx[i].frame_rx = (((ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[2]&3)<<6) + (ue->pbch_vars[ue->common_vars.eNb_id]->decoded_output[1]>>2))<<2;
#ifndef USER_MODE
// one frame delay
......@@ -888,7 +888,7 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
int ret=-1;
int aarx,rx_power=0;
printf("initial_synch_freq: id %d\n",ue->Mod_id);
printf("initial_synch_freq: UE %d, eNB %d\n",ue->Mod_id,ue->common_vars.eNb_id);
/*#ifdef OAI_USRP
__m128i *rxdata128;
#endif*/
......@@ -909,7 +909,9 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
frame_parms->nushift = frame_parms->Nid_cell%6;
// lte-gold
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
printf("binitial_synch [UE%d]->[eNB%d]: pbch_detection_freq returns %d\n",ue->Mod_id,ue->common_vars.eNb_id,ret);
ret=pbch_detection_freq(ue,mode);
printf("ainitial_synch [UE%d]->[eNB%d]: pbch_detection_freq returns %d\n",ue->Mod_id,ue->common_vars.eNb_id,ret);
//init_frame_parms(frame_parms,1);
//printf("dumping enb frame params\n");
//dump_frame_parms(&PHY_vars_eNB_g[0][0]->frame_parms);
......@@ -920,9 +922,12 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
frame_parms->frame_type=PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.frame_type;
frame_parms->N_RB_DL=PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.N_RB_DL;
init_frame_parms(frame_parms,1);
frame_parms->Nid_cell=PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.Nid_cell;
frame_parms->nushift = frame_parms->Nid_cell%6;
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
printf("binitial_synch, second chance[UE%d]->[eNB%d]: pbch_detection_freq returns %d\n",ue->Mod_id,ue->common_vars.eNb_id,ret);
ret = pbch_detection_freq(ue,mode);
printf("ainitial_synch, second chance[UE%d]->[eNB%d]: pbch_detection_freq returns %d\n",ue->Mod_id,ue->common_vars.eNb_id,ret);
}
if (ret==0) { // fake first PBCH found so indicate sync to higher layers and configure frame parameters
......
......@@ -224,7 +224,7 @@ int slot_fep(PHY_VARS_UE *ue,
start_meas(&ue->dlsch_freq_offset_estimation_stats);
#endif
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[current_thread_id[Ns>>1]].dl_ch_estimates[0],
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[current_thread_id[Ns>>1]].dl_ch_estimates[eNB_id],
frame_parms,
l,
&common_vars->freq_offset,
......@@ -440,7 +440,7 @@ int slot_fep_freq(PHY_VARS_UE *ue,
start_meas(&ue->dlsch_freq_offset_estimation_stats);
#endif
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[0],
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[current_thread_id[Ns>>1]].dl_ch_estimates[eNB_id],
frame_parms,
l,
&common_vars->freq_offset,
......@@ -662,7 +662,7 @@ int front_end_chanEst(PHY_VARS_UE *ue,
if (l==(4-frame_parms->Ncp)) {
start_meas(&ue->dlsch_freq_offset_estimation_stats);
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[0],
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[eNB_id],
frame_parms,
l,
&common_vars->freq_offset,
......
......@@ -196,8 +196,10 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
chest_f_abs = (float*) calloc(nsymb_ce*nb_antennas_rx*nb_antennas_tx,sizeof(float));
llr = (float*) calloc(coded_bits_per_codeword,sizeof(float)); // init to zero
bit = malloc(coded_bits_per_codeword*sizeof(float));
rxsig_t = (int16_t**) phy_vars_enb->common_vars.rxdata[eNB_id];
if (phy_vars_ue->do_ofdm_mod)
rxsig_t = (int16_t**) phy_vars_enb->common_vars.rxdataF[eNB_id];
else
rxsig_t = (int16_t**) phy_vars_enb->common_vars.rxdata[eNB_id];
//chest_t = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates_time[eNB_id];
chest_t = (int16_t**) phy_vars_enb->srs_vars[UE_id].srs_ch_estimates[eNB_id];
chest_f = (int16_t**) phy_vars_enb->pusch_vars[UE_id]->drs_ch_estimates[eNB_id];
......
......@@ -1089,6 +1089,7 @@ int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *eNB)
uint8_t i;
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
printf("eNB->dlsch[i] %d, eNB->dlsch[i][0] %d, eNB->dlsch[i][0]->rnti %d, rnti %d\n",eNB->dlsch[i],eNB->dlsch[i][0],eNB->dlsch[i][0]->rnti,rnti);
if ((eNB->dlsch[i]) &&
(eNB->dlsch[i][0]) &&
(eNB->dlsch[i][0]->rnti==rnti)) {
......
......@@ -2892,7 +2892,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc){
if (eNB->node_function == NGFI_RRU_IF4p5) {
/// **** in TDD during DL send_IF4 of ULTICK to RCC **** ///
LOG_D(PHY,"send_IF4p5 (phy_procedures_eNB_common_RX): frame %d, subframe %d\n",proc->frame_rx,proc->subframe_rx);
LOG_D(PHY,"send_IF4p5 (phy_procedures_eNB_common_RX): frame %d, subframe %d, eNB %d\n",proc->frame_rx,proc->subframe_rx,eNB->Mod_id);
send_IF4p5(eNB, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK, 0);
}
return;
......
......@@ -4451,8 +4451,9 @@ NAS_KENB_REFRESH_REQ,NAS_CELL_SELECTION_REQ,RRC_STATE_INACTIVE,RRC_STATE_IDLE,RR
{
UE_rrc_inst[ue_mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID;
UE_rrc_inst[ue_mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat;
LOG_D(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
LOG_D(RRC, "[UE %d][eNB %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n",
ue_mod_id,
PHY_vars_UE_g[ue_mod_id][0]->common_vars.eNb_id,
UE_rrc_inst[ue_mod_id].plmnID.MCCdigit1,
UE_rrc_inst[ue_mod_id].plmnID.MCCdigit2,
UE_rrc_inst[ue_mod_id].plmnID.MCCdigit3,
......
......@@ -238,7 +238,6 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
}
else { //abstraction_flag
pthread_mutex_lock(&eNB_output_mutex[UE_id]);
if (eNB_output_mask[UE_id] == 0) { // This is the first eNodeB for this UE, clear the buffer
......@@ -353,7 +352,6 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
eNB_output_mask[UE_id] |= (1<<eNB_id);
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
eNB_output_mask[UE_id]=0;
}
double *r_re_p[2] = {r_re_DL[UE_id][0],r_re_DL[UE_id][1]};
double *r_im_p[2] = {r_im_DL[UE_id][0],r_im_DL[UE_id][1]};
......@@ -386,7 +384,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
UNUSED_VARIABLE(rx_pwr);
#endif
//} // eNB_output_mask
} // eNB_output_mask
pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
} // eNB_id
......@@ -409,7 +407,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
count=0;
}
count++;*/
//int32_t att_eNB_id=-1;
int32_t att_eNB_id=-1;
int32_t **txdataF,**rxdataF;
uint8_t eNB_id=0;
......@@ -482,22 +480,23 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
}
else { //abstraction_flag = 0
printf("UE association: (UE%d->eNB%d)\n",UE_id,PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id);
eNB_id = PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id;
pthread_mutex_lock(&eNB_output_mutex[UE_id]);
//printf("eNB_output_mask[UE_id] is %d\n",eNB_output_mask[UE_id]);
if (eNB_output_mask[UE_id] == 0) { // This is the first eNodeB for this UE, clear the buffer
//if (eNB_output_mask[UE_id] == 0) { // This is the first eNodeB for this UE, clear the buffer
for (aa=0; aa<nb_antennas_rx; aa++) {
memset((void*)r_re_DL_f[UE_id][aa],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(double));
memset((void*)r_im_DL_f[UE_id][aa],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(double));
//memset(&PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(int));
}
}
//}
pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
//for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
txdataF = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.txdataF[0];
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti;
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: txdataF[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d,UE %d, eNB_id %d: txdataF[%d] = (%d,%d)\n", subframe,UE_id,eNB_id, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
#ifdef __AVX2__
......@@ -685,10 +684,10 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
}
}
eNB_output_mask[UE_id] |= (1<<eNB_id);
/*eNB_output_mask[UE_id] |= (1<<eNB_id);
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
eNB_output_mask[UE_id]=0;
}
}*/
#ifdef __AVX2__
float *r_re_p_f[2] = {r_re_DL_f[UE_id][0],r_re_DL_f[UE_id][1]};
float *r_im_p_f[2] = {r_im_DL_f[UE_id][0],r_im_DL_f[UE_id][1]};
......@@ -736,7 +735,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
#endif
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d: r_re_p_f[%d] = (%e,%e)\n", subframe, idx, r_re_p_f[0][idx], r_im_p_f[0][idx]);
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: rxdataF0[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&rxdataF[0][sf_offset+idx])[0], ((short*)&rxdataF[0][sf_offset+idx])[1]);
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d,UE %d, eNB_id %d: rxdataF0[%d] = (%d,%d)\n", subframe,UE_id,eNB_id, idx, ((short*)&rxdataF[0][sf_offset+idx])[0], ((short*)&rxdataF[0][sf_offset+idx])[1]);
//print_meas (&eNB2UE[eNB_id][UE_id][CC_id]->DL_adc,"[DL][adc]", &eNB2UE[eNB_id][UE_id][CC_id]->DL_adc, &eNB2UE[eNB_id][UE_id][CC_id]->DL_adc);
//for (int idx=0;idx<10;idx++) printf("dumping DL raw rx subframe %d: rxdataF[%d] = (%d,%d)=====>%s,txdataF[%d] = (%d,%d), r_re_im_p_f(%e,%e)\n", subframe, idx, ((short*)&rxdataF[0][sf_offset+idx])[0], ((short*)&rxdataF[0][sf_offset+idx])[1],(((((r_re_p_f[0][idx]<0)&&(((short*)&rxdataF[0][sf_offset+idx])[0]<0))||((r_re_p_f[0][idx]>=0)&&(((short*)&rxdataF[0][sf_offset+idx])[0]>=0))))&&(((r_im_p_f[0][idx]<0)&&(((short*)&rxdataF[0][sf_offset+idx])[1]<0))||((r_im_p_f[0][idx]>=0)&&(((short*)&rxdataF[0][sf_offset+idx])[1]>=0))))?"OK":"ERROR",idx,((short*)&txdataF[0][sf_offset+idx])[0],((short*)&txdataF[0][sf_offset+idx])[1],r_re_p_f[0][idx],r_im_p_f[0][idx]);
/*if (UE_id==0)
......@@ -755,7 +754,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
#endif
//} // eNB_output_mask
pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
} // eNB_id
//} // eNB_id
}
}
......@@ -1092,6 +1091,8 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
// Compute RX signal for eNB = eNB_id
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
//printf("ue->generate_ul_signal[%d] %d\n",eNB_id,PHY_vars_UE_g[UE_id][CC_id]->generate_ul_signal[eNB_id]);
if (PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id != eNB_id)
continue;
txdataF = PHY_vars_UE_g[UE_id][CC_id]->common_vars.txdataF;
AssertFatal(txdataF != NULL,"txdataF is null\n");
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti;
......@@ -1415,11 +1416,12 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
//for (int i=0;i<NB_UE_INST;i++)
// Compute RX signal for eNB = eNB_id
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
if (PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id != eNB_id)
continue;
lte_frame_type_t frame_type = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.frame_type;
prach_ConfigIndex = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
n_ra_prb = get_prach_prb_offset(frame_parms, PHY_vars_UE_g[UE_id][CC_id]->prach_resources[PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id]->ra_TDD_map_index, PHY_vars_UE_g[UE_id][CC_id]->proc.proc_rxtx[subframe&0x1].frame_tx);
n_ra_prb = get_prach_prb_offset(frame_parms, PHY_vars_UE_g[UE_id][CC_id]->prach_resources[eNB_id]->ra_TDD_map_index, PHY_vars_UE_g[UE_id][CC_id]->proc.proc_rxtx[subframe&0x1].frame_tx);
tx_prachF = PHY_vars_UE_g[UE_id][CC_id]->prach_vars[eNB_id]->prachF;
//write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,1,1);
......
......@@ -275,9 +275,9 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
PHY_vars_eNB_g[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*));
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,eNodeB_3GPP,abstraction_flag);
PHY_vars_eNB_g[eNB_id][CC_id]->Mod_id=eNB_id;
PHY_vars_eNB_g[eNB_id][CC_id]->CC_id=CC_id;
PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,eNodeB_3GPP,abstraction_flag);
}
}
......
......@@ -507,26 +507,28 @@ l2l1_task (void *args_p)
xargv[0] = xname;
fl_initialize (&xargc, xargv, NULL, 0, 0);
eNB_inst = 0;
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
// DL scope at UEs
form_ue[CC_id][UE_inst] = create_lte_phy_scope_ue();
sprintf (title, "LTE DL SCOPE eNB %d to UE %d CC_id %d", eNB_inst, UE_inst, CC_id);
fl_show_form (form_ue[CC_id][UE_inst]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
if (PHY_vars_UE_g[UE_inst][CC_id]->use_ia_receiver == 1) {
fl_set_button(form_ue[CC_id][UE_inst]->button_0,1);
fl_set_object_label(form_ue[CC_id][UE_inst]->button_0, "IA Receiver ON");
fl_set_object_color(form_ue[CC_id][UE_inst]->button_0, FL_GREEN, FL_GREEN);
}
for (eNB_inst = 0; eNB_inst < NB_eNB_INST; eNB_inst++) {
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
// DL scope at UEs
form_ue[CC_id][UE_inst] = create_lte_phy_scope_ue();
sprintf (title, "LTE DL SCOPE eNB %d to UE %d CC_id %d", eNB_inst, UE_inst, CC_id);
fl_show_form (form_ue[CC_id][UE_inst]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
if (PHY_vars_UE_g[UE_inst][CC_id]->use_ia_receiver == 1) {
fl_set_button(form_ue[CC_id][UE_inst]->button_0,1);
fl_set_object_label(form_ue[CC_id][UE_inst]->button_0, "IA Receiver ON");
fl_set_object_color(form_ue[CC_id][UE_inst]->button_0, FL_GREEN, FL_GREEN);
}
}
// UL scope at eNB 0
form_enb[UE_inst] = create_lte_phy_scope_enb();
sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
}
}
// UL scope at eNB 0
form_enb[UE_inst] = create_lte_phy_scope_enb();
sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
}
}
}
......@@ -1130,7 +1132,7 @@ l2l1_task (void *args_p)
//#ifdef XFORMS
if (xforms==1) {
eNB_inst = 0;
for (eNB_inst = 0; eNB_inst < NB_eNB_INST; eNB_inst++) {
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
phy_scope_UE(form_ue[CC_id][UE_inst],
......@@ -1147,6 +1149,7 @@ l2l1_task (void *args_p)
UE_inst);
}
}
}
//#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment