Commit dff70f52 authored by lfarizav's avatar lfarizav

Solving some issues for multiple RRUs. UE is associated to RRU based on the...

Solving some issues for multiple RRUs. UE is associated to RRU based on the pathloss. Modify eNB_id in ue procedures
parent d0177f26
...@@ -101,7 +101,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -101,7 +101,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
if (ue->mac_enabled==1) { if (ue->mac_enabled==1) {
LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id);
//mac_resynch(); //mac_resynch();
mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,0,1);//ue->common_vars.eNb_id); mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,ue->common_vars.eNb_id,1);//ue->common_vars.eNb_id);
ue->UE_mode[0] = PRACH; ue->UE_mode[0] = PRACH;
} }
else { else {
......
...@@ -716,7 +716,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) ...@@ -716,7 +716,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
if (ue->mac_enabled==1) { if (ue->mac_enabled==1) {
LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id);
//mac_resynch(); //mac_resynch();
mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,0,1);//ue->common_vars.eNb_id); mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,ue->common_vars.eNb_id,1);//ue->common_vars.eNb_id);
ue->UE_mode[0] = PRACH; ue->UE_mode[0] = PRACH;
} }
else { else {
...@@ -896,9 +896,9 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode) ...@@ -896,9 +896,9 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
// First try FDD normal prefix // First try FDD normal prefix
//frame_parms->Ncp=NORMAL; //frame_parms->Ncp=NORMAL;
//frame_parms->frame_type=FDD; //frame_parms->frame_type=FDD;
frame_parms->Ncp=PHY_vars_eNB_g[0][0]->frame_parms.Ncp; frame_parms->Ncp=PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.Ncp;
frame_parms->frame_type=PHY_vars_eNB_g[0][0]->frame_parms.frame_type; 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[0][0]->frame_parms.N_RB_DL; 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); init_frame_parms(frame_parms,1);
// cellid // cellid
...@@ -915,9 +915,9 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode) ...@@ -915,9 +915,9 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
//printf("dumping ue frame params\n"); //printf("dumping ue frame params\n");
//dump_frame_parms(frame_parms); //dump_frame_parms(frame_parms);
if (ret==-1) { if (ret==-1) {
frame_parms->Ncp=PHY_vars_eNB_g[0][0]->frame_parms.Ncp; frame_parms->Ncp=PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.Ncp;
frame_parms->frame_type=PHY_vars_eNB_g[0][0]->frame_parms.frame_type; 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[0][0]->frame_parms.N_RB_DL; 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); init_frame_parms(frame_parms,1);
frame_parms->nushift = frame_parms->Nid_cell%6; frame_parms->nushift = frame_parms->Nid_cell%6;
lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell); lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
...@@ -949,7 +949,7 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode) ...@@ -949,7 +949,7 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
if (ue->mac_enabled==1) { if (ue->mac_enabled==1) {
LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id);
//mac_resynch(); //mac_resynch();
mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,0,1);//ue->common_vars.eNb_id); mac_xface->dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,ue->common_vars.eNb_id,1);//ue->common_vars.eNb_id);
ue->UE_mode[0] = PRACH; ue->UE_mode[0] = PRACH;
} }
else { else {
...@@ -986,16 +986,16 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode) ...@@ -986,16 +986,16 @@ int initial_sync_freq(PHY_VARS_UE *ue, runmode_t mode)
phich_string[ue->frame_parms.phich_config_common.phich_resource], phich_string[ue->frame_parms.phich_config_common.phich_resource],
ue->frame_parms.nb_antenna_ports_eNB); ue->frame_parms.nb_antenna_ports_eNB);
LOG_I(PHY,"[eNB %d] Frame %d subframe %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n", LOG_I(PHY,"[eNB %d] Frame %d subframe %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
PHY_vars_eNB_g[0][0]->Mod_id, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->Mod_id,
PHY_vars_eNB_g[0][0]->proc.proc_rxtx[0].frame_rx, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->proc.proc_rxtx[0].frame_rx,
PHY_vars_eNB_g[0][0]->proc.proc_rxtx[0].subframe_rx, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->proc.proc_rxtx[0].subframe_rx,
duplex_string[PHY_vars_eNB_g[0][0]->frame_parms.frame_type], duplex_string[PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.frame_type],
prefix_string[PHY_vars_eNB_g[0][0]->frame_parms.Ncp], prefix_string[PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.Ncp],
PHY_vars_eNB_g[0][0]->frame_parms.Nid_cell, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.Nid_cell,
PHY_vars_eNB_g[0][0]->frame_parms.N_RB_DL, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.N_RB_DL,
PHY_vars_eNB_g[0][0]->frame_parms.phich_config_common.phich_duration, PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.phich_config_common.phich_duration,
phich_string[PHY_vars_eNB_g[0][0]->frame_parms.phich_config_common.phich_resource], phich_string[PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.phich_config_common.phich_resource],
PHY_vars_eNB_g[0][0]->frame_parms.nb_antenna_ports_eNB); PHY_vars_eNB_g[ue->common_vars.eNb_id][0]->frame_parms.nb_antenna_ports_eNB);
#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) #if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
......
...@@ -1093,7 +1093,7 @@ void rx_phich(PHY_VARS_UE *ue, ...@@ -1093,7 +1093,7 @@ void rx_phich(PHY_VARS_UE *ue,
uint8_t reset = 1; uint8_t reset = 1;
int16_t cs[12]; int16_t cs[12];
uint32_t i,i2,i3,phich_quad; uint32_t i,i2,i3,phich_quad;
int32_t **rxdataF_comp = pdcch_vars[eNB_id]->rxdataF_comp; int32_t **rxdataF_comp = pdcch_vars[0]->rxdataF_comp;
uint8_t Ngroup_PHICH,ngroup_PHICH,nseq_PHICH; uint8_t Ngroup_PHICH,ngroup_PHICH,nseq_PHICH;
uint8_t NSF_PHICH = 4; uint8_t NSF_PHICH = 4;
uint8_t pusch_subframe; uint8_t pusch_subframe;
......
...@@ -4445,7 +4445,7 @@ void *UE_thread_slot1_dl_processing(void *arg) { ...@@ -4445,7 +4445,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) if ( (subframe_rx == 0) && (ue->decode_MIB == 1))
{ {
ue_pbch_procedures(0,ue,proc,0); ue_pbch_procedures(ue->common_vars.eNb_id,ue,proc,0);
} }
proc->chan_est_slot1_available = 1; proc->chan_est_slot1_available = 1;
...@@ -5420,7 +5420,7 @@ else ...@@ -5420,7 +5420,7 @@ else
if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) if ( (subframe_rx == 0) && (ue->decode_MIB == 1))
{ {
//printf("[ue_pbch_procedures] subframe_rx %d ,ue->decode_MIB %d, UE %d\n",subframe_rx,ue->decode_MIB,ue->Mod_id); printf("[ue_pbch_procedures] subframe_rx %d ,ue->decode_MIB %d, UE %d, eNB %d\n",subframe_rx,ue->decode_MIB,ue->Mod_id,ue->common_vars.eNb_id);
ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag); ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
} }
......
...@@ -34,7 +34,7 @@ eNBs = ...@@ -34,7 +34,7 @@ eNBs =
downlink_frequency = 2685000000L; downlink_frequency = 2685000000L;
uplink_frequency_offset = -120000000; uplink_frequency_offset = -120000000;
Nid_cell = 0; Nid_cell = 0;
N_RB_DL = 50; N_RB_DL = 25;
Nid_cell_mbsfn = 0; Nid_cell_mbsfn = 0;
nb_antenna_ports = 1; nb_antenna_ports = 1;
nb_antennas_tx = 1; nb_antennas_tx = 1;
......
...@@ -848,7 +848,7 @@ static void *UE_thread_rxn_txnp4(void *arg) { ...@@ -848,7 +848,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
proc->frame_tx, proc->frame_tx,
proc->subframe_tx, proc->subframe_tx,
subframe_select(&UE->frame_parms,proc->subframe_tx), subframe_select(&UE->frame_parms,proc->subframe_tx),
0, UE->common_vars.eNb_id,
0/*FIXME CC_id*/); 0/*FIXME CC_id*/);
if ( ret != CONNECTION_OK) { if ( ret != CONNECTION_OK) {
char *txt; char *txt;
...@@ -878,13 +878,13 @@ static void *UE_thread_rxn_txnp4(void *arg) { ...@@ -878,13 +878,13 @@ static void *UE_thread_rxn_txnp4(void *arg) {
if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) ||
(UE->frame_parms.frame_type == FDD) ) (UE->frame_parms.frame_type == FDD) )
if (UE->mode != loop_through_memory) if (UE->mode != loop_through_memory)
phy_procedures_UE_TX(UE,proc,0,0,UE->mode,no_relay); phy_procedures_UE_TX(UE,proc,UE->common_vars.eNb_id,0,UE->mode,no_relay);
if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_S) && if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_S) &&
(UE->frame_parms.frame_type == TDD)) (UE->frame_parms.frame_type == TDD))
if (UE->mode != loop_through_memory) if (UE->mode != loop_through_memory)
phy_procedures_UE_S_TX(UE,0,0,no_relay); phy_procedures_UE_S_TX(UE,UE->common_vars.eNb_id,0,no_relay);
updateTimes(current, &t3, 10000, "Delay to process sub-frame (case 3)"); updateTimes(current, &t3, 10000, "Delay to process sub-frame (case 3)");
if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) {
......
...@@ -253,7 +253,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N ...@@ -253,7 +253,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
txdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.txdata[0]; txdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.txdata[0];
sf_offset = subframe*frame_parms->samples_per_tti; sf_offset = subframe*frame_parms->samples_per_tti;
for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: txdata[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&txdata[0][sf_offset+idx])[0], ((short*)&txdata[0][sf_offset+idx])[1]); //for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: txdata[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&txdata[0][sf_offset+idx])[0], ((short*)&txdata[0][sf_offset+idx])[1]);
start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_dac_fixed_gain); start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_dac_fixed_gain);
tx_pwr = dac_fixed_gain(s_re, tx_pwr = dac_fixed_gain(s_re,
s_im, s_im,
...@@ -353,7 +353,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N ...@@ -353,7 +353,7 @@ 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); eNB_output_mask[UE_id] |= (1<<eNB_id);
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) { if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
eNB_output_mask[UE_id]=0; 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_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]}; double *r_im_p[2] = {r_im_DL[UE_id][0],r_im_DL[UE_id][1]};
...@@ -376,7 +376,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N ...@@ -376,7 +376,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
frame_parms->samples_per_tti, frame_parms->samples_per_tti,
12); 12);
stop_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_adc); stop_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_adc);
for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: rxdata[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&rxdata[0][sf_offset+idx])[0], ((short*)&rxdata[0][sf_offset+idx])[1]); //for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d, eNB_id %d: rxdata[%d] = (%d,%d)\n", subframe,eNB_id, idx, ((short*)&rxdata[0][sf_offset+idx])[0], ((short*)&rxdata[0][sf_offset+idx])[1]);
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr2 = signal_energy(rxdata[0]+sf_offset,frame_parms->ofdm_symbol_size)/(12.0*frame_parms->N_RB_DL); rx_pwr2 = signal_energy(rxdata[0]+sf_offset,frame_parms->ofdm_symbol_size)/(12.0*frame_parms->N_RB_DL);
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB/RE (%d) for subframe %d, writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdata); LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB/RE (%d) for subframe %d, writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdata);
...@@ -386,7 +386,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N ...@@ -386,7 +386,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
UNUSED_VARIABLE(rx_pwr); UNUSED_VARIABLE(rx_pwr);
#endif #endif
} // eNB_output_mask //} // eNB_output_mask
pthread_mutex_unlock(&eNB_output_mutex[UE_id]); pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
} // eNB_id } // eNB_id
...@@ -497,7 +497,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][ ...@@ -497,7 +497,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
txdataF = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.txdataF[0]; 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; 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, 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]);
#ifdef __AVX2__ #ifdef __AVX2__
...@@ -688,6 +688,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][ ...@@ -688,6 +688,7 @@ 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) { if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
eNB_output_mask[UE_id]=0; eNB_output_mask[UE_id]=0;
}
#ifdef __AVX2__ #ifdef __AVX2__
float *r_re_p_f[2] = {r_re_DL_f[UE_id][0],r_re_DL_f[UE_id][1]}; 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]}; float *r_im_p_f[2] = {r_im_DL_f[UE_id][0],r_im_DL_f[UE_id][1]};
...@@ -735,7 +736,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][ ...@@ -735,7 +736,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
#endif #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: 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, 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]);
//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); //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]); //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) /*if (UE_id==0)
...@@ -752,7 +753,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][ ...@@ -752,7 +753,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//UNUSED_VARIABLE(tx_pwr); //UNUSED_VARIABLE(tx_pwr);
//UNUSED_VARIABLE(rx_pwr); //UNUSED_VARIABLE(rx_pwr);
#endif #endif
} // eNB_output_mask //} // eNB_output_mask
pthread_mutex_unlock(&eNB_output_mutex[UE_id]); pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
} // eNB_id } // eNB_id
...@@ -1411,14 +1412,14 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB ...@@ -1411,14 +1412,14 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
} }
pthread_mutex_unlock(&UE_output_mutex[eNB_id]); pthread_mutex_unlock(&UE_output_mutex[eNB_id]);
for (int i=0;i<NB_UE_INST;i++) //for (int i=0;i<NB_UE_INST;i++)
// Compute RX signal for eNB = eNB_id // Compute RX signal for eNB = eNB_id
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
lte_frame_type_t frame_type = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.frame_type; 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_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); 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[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[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);
tx_prachF = PHY_vars_UE_g[UE_id][CC_id]->prach_vars[eNB_id]->prachF; 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); //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);
......
...@@ -159,7 +159,7 @@ PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -159,7 +159,7 @@ PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms,
memset(PHY_vars_UE,0,sizeof(PHY_VARS_UE)); memset(PHY_vars_UE,0,sizeof(PHY_VARS_UE));
PHY_vars_UE->Mod_id=UE_id; PHY_vars_UE->Mod_id=UE_id;
memcpy(&(PHY_vars_UE->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS)); memcpy(&(PHY_vars_UE->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
phy_init_lte_ue(PHY_vars_UE,1,abstraction_flag); phy_init_lte_ue(PHY_vars_UE,NB_eNB_INST,abstraction_flag);
for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) { for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
for (j=0; j<2; j++) { // 2CWs for (j=0; j<2; j++) { // 2CWs
......
...@@ -1811,9 +1811,12 @@ void update_ocm() ...@@ -1811,9 +1811,12 @@ void update_ocm()
{ {
module_id_t UE_id, eNB_id; module_id_t UE_id, eNB_id;
int CC_id; int CC_id;
double pathloss[NB_UE_INST];
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++){
enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id][0]->frame_parms.pdsch_config_common.referenceSignalPower; enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id][0]->frame_parms.pdsch_config_common.referenceSignalPower;
pathloss[eNB_id]=-200.0;
}
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) for (UE_id = 0; UE_id < NB_UE_INST; UE_id++)
ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id][0]->tx_power_dBm[0]; ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id][0]->tx_power_dBm[0];
...@@ -1834,8 +1837,8 @@ void update_ocm() ...@@ -1834,8 +1837,8 @@ void update_ocm()
LOG_N(OCM,"Path loss for TTI %d : \n", frame); LOG_N(OCM,"Path loss for TTI %d : \n", frame);
*/ */
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id][CC_id], oai_emulation.environment_system_config,ShaF); calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id][CC_id], oai_emulation.environment_system_config,ShaF);
//calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,0); //calc_path_loss (enb_data[eNB_id], ue_data[UE_id], eNB2UE[eNB_id][UE_id], oai_emulation.environment_system_config,0);
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB; UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB;
...@@ -1843,6 +1846,10 @@ void update_ocm() ...@@ -1843,6 +1846,10 @@ void update_ocm()
LOG_D(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n", LOG_D(OCM,"Path loss (CCid %d) between eNB %d at (%f,%f) and UE %d at (%f,%f) is %f, angle %f\n",
CC_id,eNB_id,enb_data[eNB_id]->x,enb_data[eNB_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y, CC_id,eNB_id,enb_data[eNB_id]->x,enb_data[eNB_id]->y,UE_id,ue_data[UE_id]->x,ue_data[UE_id]->y,
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, eNB2UE[eNB_id][UE_id][CC_id]->aoa); eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, eNB2UE[eNB_id][UE_id][CC_id]->aoa);
if (eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB>pathloss[UE_id]){
pathloss[UE_id] = eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB;
PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id = eNB_id;
}
//double dx, dy, distance; //double dx, dy, distance;
//dx = enb_data[eNB_id]->x - ue_data[UE_id]->x; //dx = enb_data[eNB_id]->x - ue_data[UE_id]->x;
//dy = enb_data[eNB_id]->y - ue_data[UE_id]->y; //dy = enb_data[eNB_id]->y - ue_data[UE_id]->y;
...@@ -1852,6 +1859,7 @@ void update_ocm() ...@@ -1852,6 +1859,7 @@ void update_ocm()
UE_id, ue_data[UE_id]->x,ue_data[UE_id]->y, UE_id, ue_data[UE_id]->x,ue_data[UE_id]->y,
distance);*/ distance);*/
} }
printf("UE %d is associated to eNB %d based on pathloss\n",UE_id,PHY_vars_UE_g[UE_id][CC_id]->common_vars.eNb_id);
} }
} }
} }
......
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