Commit b1e97ab1 authored by Raymond Knopp's avatar Raymond Knopp

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5738 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 89151b6c
...@@ -41,6 +41,7 @@ include $(COMMON_UTILS_DIR)/Makefile.inc ...@@ -41,6 +41,7 @@ include $(COMMON_UTILS_DIR)/Makefile.inc
include $(OPENAIR_TARGETS)/COMMON/Makefile.inc include $(OPENAIR_TARGETS)/COMMON/Makefile.inc
include $(OPENAIR2_DIR)/NAS/Makefile.inc include $(OPENAIR2_DIR)/NAS/Makefile.inc
COMMON_CFLAGS += -DMAX_NUM_CCs=1
ifdef USE_MME ifdef USE_MME
COMMON_CFLAGS += -DENABLE_USE_MME COMMON_CFLAGS += -DENABLE_USE_MME
ENABLE_ITTI = 1 ENABLE_ITTI = 1
......
...@@ -34,8 +34,79 @@ eNBs = ...@@ -34,8 +34,79 @@ eNBs =
component_carriers = ( component_carriers = (
{ {
cell_id = 0; frame_type = "TDD";
N_RB_DL = 25; tdd_config = 3;
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 39;
downlink_frequency = 1910000000L;
uplink_frequency_offset = 0;
Nid_cell = 0;
N_RB_DL = 50;
Nid_cell_mbsfn = 0;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
prach_root = 22;
prach_config_index = 3;
prach_high_speed = "DISABLE";
prach_zero_correlation = 0;
prach_freq_offset = 0;
pucch_delta_shift = 1;
pucch_nRB_CQI = 1;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pdsch_referenceSignalPower = -24;
pdsch_p_b = 0;
pusch_n_SB = 1;
pusch_enable64QAM = "DISABLE";
pusch_hoppingMode = "interSubFrame";
pusch_hoppingOffset = 4;
pusch_groupHoppingEnabled = "DISABLE";
pusch_groupAssignment = 0;
pusch_sequenceHoppingEnabled = "DISABLE";
pusch_nDMRS1 = 1;
phich_duration = "NORMAL";
phich_resource = "ONESIXTH";
srs_enable = "DISABLE";
/* srs_BandwidthConfig =;
srs_SubframeConfig =;
srs_ackNackST =;
srs_MaxUpPts =;*/
pusch_p0_Nominal = -95;
pusch_alpha = "AL08";
pucch_p0_Nominal = -117;
msg3_delta_Preamble = 6;
pucch_deltaF_Format1 = "deltaF2";
pucch_deltaF_Format1b = "deltaF3";
pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0";
pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 52;
rach_preamblesGroupAConfig = "DISABLE";
/*
rach_sizeOfRA_PreamblesGroupA = ;
rach_messageSizeGroupA = ;
rach_messagePowerOffsetGroupB = ;
*/
rach_powerRampingStep = 2;
rach_preambleInitialReceivedTargetPower = -104;
rach_preambleTransMax = 6;
rach_raResponseWindowSize = 10;
rach_macContentionResolutionTimer = 48;
rach_maxHARQ_Msg3Tx = 4;
pcch_default_PagingCycle = 128;
pcch_nB = "oneT";
bcch_modificationPeriodCoeff = 2;
ue_TimersAndConstants_t300 = 1000;
ue_TimersAndConstants_t301 = 1000;
ue_TimersAndConstants_t310 = 1000;
ue_TimersAndConstants_t311 = 10000;
ue_TimersAndConstants_n310 = 20;
ue_TimersAndConstants_n311 = 1;
} }
); );
......
...@@ -79,6 +79,8 @@ CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENA ...@@ -79,6 +79,8 @@ CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENA
endif endif
CFLAGS += -DENABLE_VCD_FIFO CFLAGS += -DENABLE_VCD_FIFO
CFLAGS += -DMAX_NUM_CCs=1
TOP_DIR = $(OPENAIR1_DIR) TOP_DIR = $(OPENAIR1_DIR)
include $(OPENAIR1_DIR)/PHY/Makefile.inc include $(OPENAIR1_DIR)/PHY/Makefile.inc
......
...@@ -301,7 +301,7 @@ static int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,7 ...@@ -301,7 +301,7 @@ static int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,7
//static int mbox_bounds[20] = {6,14,22,28,36,44,52,58,66,74,82,88,96,104,112,118,126,134,142, 148}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers //static int mbox_bounds[20] = {6,14,22,28,36,44,52,58,66,74,82,88,96,104,112,118,126,134,142, 148}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
#endif #endif
static LTE_DL_FRAME_PARMS *frame_parms; static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
int multi_thread=1; int multi_thread=1;
...@@ -720,7 +720,7 @@ void *l2l1_task(void *arg) ...@@ -720,7 +720,7 @@ void *l2l1_task(void *arg)
#endif #endif
void do_OFDM_mod(int subframe,PHY_VARS_eNB *phy_vars_eNB) { void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
unsigned int aa,slot_offset, slot_offset_F; unsigned int aa,slot_offset, slot_offset_F;
int dummy_tx_b[7680*4] __attribute__((aligned(16))); int dummy_tx_b[7680*4] __attribute__((aligned(16)));
...@@ -872,7 +872,7 @@ static void * eNB_thread_tx(void *param) { ...@@ -872,7 +872,7 @@ static void * eNB_thread_tx(void *param) {
} }
do_OFDM_mod(proc->subframe_tx,PHY_vars_eNB_g[0][proc->CC_id]); do_OFDM_mod_rt(proc->subframe_tx,PHY_vars_eNB_g[0][proc->CC_id]);
if (pthread_mutex_lock(&proc->mutex_tx) != 0) { if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
printf("[openair][SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe); printf("[openair][SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe);
...@@ -1370,7 +1370,7 @@ static void *eNB_thread(void *arg) ...@@ -1370,7 +1370,7 @@ static void *eNB_thread(void *arg)
LOG_I(PHY,"[eNB] Single thread slot %d\n",slot); LOG_I(PHY,"[eNB] Single thread slot %d\n",slot);
phy_procedures_eNB_lte ((2+(slot>>1))%10, PHY_vars_eNB_g[0], 0, no_relay,NULL); phy_procedures_eNB_lte ((2+(slot>>1))%10, PHY_vars_eNB_g[0], 0, no_relay,NULL);
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
do_OFDM_mod((2+(slot>>1))%10,PHY_vars_eNB_g[0][CC_id]); do_OFDM_mod_rt((2+(slot>>1))%10,PHY_vars_eNB_g[0][CC_id]);
} }
} }
} }
...@@ -1814,27 +1814,29 @@ static void get_options (int argc, char **argv) { ...@@ -1814,27 +1814,29 @@ static void get_options (int argc, char **argv) {
online_log_messages =1; online_log_messages =1;
break; break;
case 'r': case 'r':
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
switch(atoi(optarg)) { switch(atoi(optarg)) {
case 6: case 6:
frame_parms->N_RB_DL=6; frame_parms[CC_id]->N_RB_DL=6;
frame_parms->N_RB_UL=6; frame_parms[CC_id]->N_RB_UL=6;
break; break;
case 25: case 25:
frame_parms->N_RB_DL=25; frame_parms[CC_id]->N_RB_DL=25;
frame_parms->N_RB_UL=25; frame_parms[CC_id]->N_RB_UL=25;
break; break;
case 50: case 50:
frame_parms->N_RB_DL=50; frame_parms[CC_id]->N_RB_DL=50;
frame_parms->N_RB_UL=50; frame_parms[CC_id]->N_RB_UL=50;
break; break;
case 100: case 100:
frame_parms->N_RB_DL=100; frame_parms[CC_id]->N_RB_DL=100;
frame_parms->N_RB_UL=100; frame_parms[CC_id]->N_RB_UL=100;
break; break;
default: default:
printf("Unknown N_RB_DL %d, switching to 25\n",atoi(optarg)); printf("Unknown N_RB_DL %d, switching to 25\n",atoi(optarg));
break; break;
} }
}
break; break;
case 's': case 's':
#ifdef USRP #ifdef USRP
...@@ -1877,16 +1879,17 @@ static void get_options (int argc, char **argv) { ...@@ -1877,16 +1879,17 @@ static void get_options (int argc, char **argv) {
/* Update some simulation parameters */ /* Update some simulation parameters */
for (i=0; i < enb_properties->number; i++) { for (i=0; i < enb_properties->number; i++) {
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
frame_parms->frame_type = enb_properties->properties[i]->frame_type; frame_parms[CC_id]->frame_type = enb_properties->properties[i]->frame_type[CC_id];
frame_parms->tdd_config = enb_properties->properties[i]->tdd_config; frame_parms[CC_id]->tdd_config = enb_properties->properties[i]->tdd_config[CC_id];
frame_parms->tdd_config_S = enb_properties->properties[i]->tdd_config_s; frame_parms[CC_id]->tdd_config_S = enb_properties->properties[i]->tdd_config_s[CC_id];
frame_parms->Ncp = enb_properties->properties[i]->prefix_type; frame_parms[CC_id]->Ncp = enb_properties->properties[i]->prefix_type[CC_id];
//for (j=0; j < enb_properties->properties[i]->nb_cc; j++ ){ //for (j=0; j < enb_properties->properties[i]->nb_cc; j++ ){
frame_parms->Nid_cell = enb_properties->properties[i]->cell_id[0]; frame_parms[CC_id]->Nid_cell = enb_properties->properties[i]->cell_id[CC_id];
frame_parms->N_RB_DL = enb_properties->properties[i]->N_RB_DL[0]; frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id];
//} // j //} // j
}
glog_level = enb_properties->properties[i]->glog_level; glog_level = enb_properties->properties[i]->glog_level;
glog_verbosity = enb_properties->properties[i]->glog_verbosity; glog_verbosity = enb_properties->properties[i]->glog_verbosity;
...@@ -1956,16 +1959,18 @@ int main(int argc, char **argv) { ...@@ -1956,16 +1959,18 @@ int main(int argc, char **argv) {
mode = normal_txrx; mode = normal_txrx;
frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
frame_parms[CC_id] = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS));
/* Set some default values that may be overwritten while reading options */ /* Set some default values that may be overwritten while reading options */
frame_parms->frame_type = TDD; /* TDD */ frame_parms[CC_id]->frame_type = TDD; /* TDD */
frame_parms->tdd_config = 3; frame_parms[CC_id]->tdd_config = 3;
frame_parms->tdd_config_S = 0; frame_parms[CC_id]->tdd_config_S = 0;
frame_parms->N_RB_DL = 25; frame_parms[CC_id]->N_RB_DL = 25;
frame_parms->N_RB_UL = 25; frame_parms[CC_id]->N_RB_UL = 25;
frame_parms->Ncp = NORMAL; frame_parms[CC_id]->Ncp = NORMAL;
frame_parms->Ncp_UL = NORMAL; frame_parms[CC_id]->Ncp_UL = NORMAL;
frame_parms->Nid_cell = Nid_cell; frame_parms[CC_id]->Nid_cell = Nid_cell;
}
get_options (argc, argv); //Command-line options get_options (argc, argv); //Command-line options
...@@ -2065,19 +2070,20 @@ int main(int argc, char **argv) { ...@@ -2065,19 +2070,20 @@ int main(int argc, char **argv) {
#endif #endif
// init the parameters // init the parameters
frame_parms->nushift = 0; for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
frame_parms[CC_id]->nushift = 0;
if (UE_flag==0) if (UE_flag==0)
{ {
switch (transmission_mode) { switch (transmission_mode) {
case 1: case 1:
frame_parms->nb_antennas_tx = 1; frame_parms[CC_id]->nb_antennas_tx = 1;
frame_parms->nb_antennas_rx = 1; frame_parms[CC_id]->nb_antennas_rx = 1;
break; break;
case 2: case 2:
case 5: case 5:
case 6: case 6:
frame_parms->nb_antennas_tx = 2; frame_parms[CC_id]->nb_antennas_tx = 2;
frame_parms->nb_antennas_rx = 2; frame_parms[CC_id]->nb_antennas_rx = 2;
break; break;
default: default:
printf("Unsupported transmission mode %d\n",transmission_mode); printf("Unsupported transmission mode %d\n",transmission_mode);
...@@ -2086,39 +2092,42 @@ int main(int argc, char **argv) { ...@@ -2086,39 +2092,42 @@ int main(int argc, char **argv) {
} }
else else
{ //UE_flag==1 { //UE_flag==1
frame_parms->nb_antennas_tx = 1; frame_parms[CC_id]->nb_antennas_tx = 1;
frame_parms->nb_antennas_rx = 1; frame_parms[CC_id]->nb_antennas_rx = 1;
} }
frame_parms->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; //initial value overwritten by initial sync later frame_parms[CC_id]->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; //initial value overwritten by initial sync later
frame_parms->mode1_flag = (transmission_mode == 1) ? 1 : 0; frame_parms[CC_id]->mode1_flag = (transmission_mode == 1) ? 1 : 0;
frame_parms->phich_config_common.phich_resource = oneSixth; frame_parms[CC_id]->phich_config_common.phich_resource = oneSixth;
frame_parms->phich_config_common.phich_duration = normal; frame_parms[CC_id]->phich_config_common.phich_duration = normal;
// UL RS Config // UL RS Config
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0 frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0; frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0;
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0; frame_parms[CC_id]->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
init_ul_hopping(frame_parms); init_ul_hopping(frame_parms);
init_frame_parms(frame_parms,1); init_frame_parms(frame_parms,1);
}
phy_init_top(frame_parms); phy_init_top(frame_parms[0]);
phy_init_lte_top(frame_parms); phy_init_lte_top(frame_parms[0]);
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
//init prach for openair1 test //init prach for openair1 test
frame_parms->prach_config_common.rootSequenceIndex=22; frame_parms[CC_id]->prach_config_common.rootSequenceIndex=22;
frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=1; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=1;
frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=0; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=0;
frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag=0; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.highSpeedFlag=0;
frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
// prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, frame_parms->frame_type); // prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex, frame_parms->frame_type);
// N_ZC = (prach_fmt <4)?839:139; // N_ZC = (prach_fmt <4)?839:139;
}
if (UE_flag==1) { if (UE_flag==1) {
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**)); PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**));
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs); PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs);
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
PHY_vars_UE_g[CC_id][0] = init_lte_UE(frame_parms, UE_id,abstraction_flag,transmission_mode); PHY_vars_UE_g[CC_id][0] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag,transmission_mode);
#ifndef OPENAIR2 #ifndef OPENAIR2
for (i=0;i<NUMBER_OF_eNB_MAX;i++) { for (i=0;i<NUMBER_OF_eNB_MAX;i++) {
...@@ -2183,7 +2192,7 @@ int main(int argc, char **argv) { ...@@ -2183,7 +2192,7 @@ int main(int argc, char **argv) {
PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB**)); PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB**));
PHY_vars_eNB_g[0] = malloc(sizeof(PHY_VARS_eNB*)); PHY_vars_eNB_g[0] = malloc(sizeof(PHY_VARS_eNB*));
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag); PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
#ifndef OPENAIR2 #ifndef OPENAIR2
...@@ -2220,9 +2229,9 @@ int main(int argc, char **argv) { ...@@ -2220,9 +2229,9 @@ int main(int argc, char **argv) {
dump_frame_parms(frame_parms); dump_frame_parms(frame_parms[0]);
if(frame_parms->N_RB_DL == 100) { if(frame_parms[0]->N_RB_DL == 100) {
sample_rate = 30.72e6; sample_rate = 30.72e6;
#ifdef USRP #ifdef USRP
samples_per_packets = 2048; samples_per_packets = 2048;
...@@ -2234,8 +2243,8 @@ int main(int argc, char **argv) { ...@@ -2234,8 +2243,8 @@ int main(int argc, char **argv) {
tx_delay = 9; tx_delay = 9;
#endif #endif
} }
else if(frame_parms->N_RB_DL == 50){ else if(frame_parms[0]->N_RB_DL == 50){
sample_rate = 15.36e6; sample_rate = 15.36es6;
#ifdef USRP #ifdef USRP
samples_per_packets = 2048; samples_per_packets = 2048;
samples_per_frame = 153600; samples_per_frame = 153600;
...@@ -2245,7 +2254,7 @@ int main(int argc, char **argv) { ...@@ -2245,7 +2254,7 @@ int main(int argc, char **argv) {
tx_delay = 4; tx_delay = 4;
#endif #endif
} }
else if (frame_parms->N_RB_DL == 25) { else if (frame_parms[0]->N_RB_DL == 25) {
sample_rate = 7.68e6; sample_rate = 7.68e6;
#ifdef USRP #ifdef USRP
samples_per_packets = 1024; samples_per_packets = 1024;
...@@ -2261,8 +2270,8 @@ int main(int argc, char **argv) { ...@@ -2261,8 +2270,8 @@ int main(int argc, char **argv) {
openair0_cfg.sample_rate = sample_rate; openair0_cfg.sample_rate = sample_rate;
openair0_cfg.tx_num_channels = frame_parms->nb_antennas_tx; openair0_cfg.tx_num_channels = frame_parms[0]->nb_antennas_tx;
openair0_cfg.rx_num_channels = frame_parms->nb_antennas_rx; openair0_cfg.rx_num_channels = frame_parms[0]->nb_antennas_rx;
for (i=0;i<4;i++) { for (i=0;i<4;i++) {
if (UE_flag==1) { if (UE_flag==1) {
...@@ -2334,8 +2343,8 @@ int main(int argc, char **argv) { ...@@ -2334,8 +2343,8 @@ int main(int argc, char **argv) {
setup_ue_buffers(PHY_vars_UE_g[CC_id][0],frame_parms,ant_offset); setup_ue_buffers(PHY_vars_UE_g[CC_id][0],frame_parms,ant_offset);
printf("Setting UE buffer to all-RX\n"); printf("Setting UE buffer to all-RX\n");
// Set LSBs for antenna switch (ExpressMIMO) // Set LSBs for antenna switch (ExpressMIMO)
for (i=0; i<frame_parms->samples_per_tti*10; i++) for (i=0; i<frame_parms[CC_id]->samples_per_tti*10; i++)
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) for (aa=0; aa<frame_parms[CC_id]]->nb_antennas_tx; aa++)
PHY_vars_UE_g[CC_id][0]->lte_ue_common_vars.txdata[aa][i] = 0x00010001; PHY_vars_UE_g[CC_id][0]->lte_ue_common_vars.txdata[aa][i] = 0x00010001;
} }
//p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
...@@ -2345,8 +2354,8 @@ int main(int argc, char **argv) { ...@@ -2345,8 +2354,8 @@ int main(int argc, char **argv) {
setup_eNB_buffers(PHY_vars_eNB_g[CC_id][0],frame_parms,ant_offset); setup_eNB_buffers(PHY_vars_eNB_g[CC_id][0],frame_parms,ant_offset);
printf("Setting eNB buffer to all-RX\n"); printf("Setting eNB buffer to all-RX\n");
// Set LSBs for antenna switch (ExpressMIMO) // Set LSBs for antenna switch (ExpressMIMO)
for (i=0; i<frame_parms->samples_per_tti*10; i++) for (i=0; i<frame_parms[CC_id]->samples_per_tti*10; i++)
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) for (aa=0; aa<frame_parms[CC_id]->nb_antennas_tx; aa++)
PHY_vars_eNB_g[CC_id][0]->lte_eNB_common_vars.txdata[0][aa][i] = 0x00010001; PHY_vars_eNB_g[CC_id][0]->lte_eNB_common_vars.txdata[0][aa][i] = 0x00010001;
} }
} }
...@@ -2642,30 +2651,30 @@ int main(int argc, char **argv) { ...@@ -2642,30 +2651,30 @@ int main(int argc, char **argv) {
return 0; return 0;
} }
void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier) { void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS **frame_parms, int carrier) {
int i; int i;
#ifndef USRP #ifndef USRP
if (phy_vars_ue) { if (phy_vars_ue) {
if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) { if ((frame_parms[0]->nb_antennas_rx>1) && (carrier>0)) {
printf("RX antennas > 1 and carrier > 0 not possible\n"); printf("RX antennas > 1 and carrier > 0 not possible\n");
exit(-1); exit(-1);
} }
if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) { if ((frame_parms[0]->nb_antennas_tx>1) && (carrier>0)) {
printf("TX antennas > 1 and carrier > 0 not possible\n"); printf("TX antennas > 1 and carrier > 0 not possible\n");
exit(-1); exit(-1);
} }
// replace RX signal buffers with mmaped HW versions // replace RX signal buffers with mmaped HW versions
for (i=0;i<frame_parms->nb_antennas_rx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_rx;i++) {
free(phy_vars_ue->lte_ue_common_vars.rxdata[i]); free(phy_vars_ue->lte_ue_common_vars.rxdata[i]);
phy_vars_ue->lte_ue_common_vars.rxdata[i] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier]; phy_vars_ue->lte_ue_common_vars.rxdata[i] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier];
printf("rxdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.rxdata[i]); printf("rxdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.rxdata[i]);
} }
for (i=0;i<frame_parms->nb_antennas_tx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_tx;i++) {
free(phy_vars_ue->lte_ue_common_vars.txdata[i]); free(phy_vars_ue->lte_ue_common_vars.txdata[i]);
phy_vars_ue->lte_ue_common_vars.txdata[i] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier]; phy_vars_ue->lte_ue_common_vars.txdata[i] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier];
...@@ -2677,7 +2686,7 @@ void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, ...@@ -2677,7 +2686,7 @@ void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms,
#endif #endif
} }
void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier) { void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS **frame_parms, int carrier) {
int i; int i;
#ifdef USRP #ifdef USRP
...@@ -2687,18 +2696,18 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par ...@@ -2687,18 +2696,18 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par
#endif #endif
if (phy_vars_eNB) { if (phy_vars_eNB) {
if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) { if ((frame_parms[0]->nb_antennas_rx>1) && (carrier>0)) {
printf("RX antennas > 1 and carrier > 0 not possible\n"); printf("RX antennas > 1 and carrier > 0 not possible\n");
exit(-1); exit(-1);
} }
if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) { if ((frame_parms[0]->nb_antennas_tx>1) && (carrier>0)) {
printf("TX antennas > 1 and carrier > 0 not possible\n"); printf("TX antennas > 1 and carrier > 0 not possible\n");
exit(-1); exit(-1);
} }
#ifdef USRP #ifdef USRP
if (frame_parms->frame_type == TDD) { if (frame_parms[0]->frame_type == TDD) {
if (phy_vars_eNB->lte_frame_parms.N_RB_DL == 100) if (phy_vars_eNB->lte_frame_parms.N_RB_DL == 100)
N_TA_offset = 624; N_TA_offset = 624;
else if (phy_vars_eNB->lte_frame_parms.N_RB_DL == 50) else if (phy_vars_eNB->lte_frame_parms.N_RB_DL == 50)
...@@ -2710,7 +2719,7 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par ...@@ -2710,7 +2719,7 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par
// replace RX signal buffers with mmaped HW versions // replace RX signal buffers with mmaped HW versions
#ifndef USRP #ifndef USRP
for (i=0;i<frame_parms->nb_antennas_rx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_rx;i++) {
free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]); free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier]; phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[card].adc_head[i+carrier];
...@@ -2720,7 +2729,7 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par ...@@ -2720,7 +2729,7 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par
phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j; phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j;
} }
} }
for (i=0;i<frame_parms->nb_antennas_tx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_tx;i++) {
free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]); free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier]; phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[card].dac_head[i+carrier];
...@@ -2731,14 +2740,14 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par ...@@ -2731,14 +2740,14 @@ void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_par
} }
} }
#else // USRP #else // USRP
for (i=0;i<frame_parms->nb_antennas_rx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_rx;i++) {
free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]); free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
rxdata = (int32_t*)malloc16(samples_per_frame*sizeof(int32_t)); rxdata = (int32_t*)malloc16(samples_per_frame*sizeof(int32_t));
phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = rxdata-N_TA_offset; // N_TA offset for TDD phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = rxdata-N_TA_offset; // N_TA offset for TDD
memset(rxdata, 0, samples_per_frame*sizeof(int32_t)); memset(rxdata, 0, samples_per_frame*sizeof(int32_t));
printf("rxdata[%d] @ %p (%p)\n", i, phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i],rxdata); printf("rxdata[%d] @ %p (%p)\n", i, phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i],rxdata);
} }
for (i=0;i<frame_parms->nb_antennas_tx;i++) { for (i=0;i<frame_parms[0]->nb_antennas_tx;i++) {
free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]); free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
txdata = (int32_t*)malloc16(samples_per_frame*sizeof(int32_t)); txdata = (int32_t*)malloc16(samples_per_frame*sizeof(int32_t));
phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = txdata; phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = txdata;
......
...@@ -124,6 +124,8 @@ else # default is rel 8 ...@@ -124,6 +124,8 @@ else # default is rel 8
CFLAGS += -DRel8 CFLAGS += -DRel8
endif endif
CFLAGS += -DMAX_NUM_CCs=1
ifeq ($(RLC_STOP_ON_LOST_PDU), 1) ifeq ($(RLC_STOP_ON_LOST_PDU), 1)
CFLAGS += -DRLC_STOP_ON_LOST_PDU CFLAGS += -DRLC_STOP_ON_LOST_PDU
endif endif
...@@ -191,7 +193,6 @@ endif ...@@ -191,7 +193,6 @@ endif
endif endif
endif endif
CFLAGS += -DMAX_NUM_CCs=1
include $(OPENAIR1_DIR)/PHY/Makefile.inc include $(OPENAIR1_DIR)/PHY/Makefile.inc
include $(OPENAIR1_DIR)/SCHED/Makefile.inc include $(OPENAIR1_DIR)/SCHED/Makefile.inc
include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc
......
...@@ -71,71 +71,14 @@ ...@@ -71,71 +71,14 @@
#include "oaisim.h" #include "oaisim.h"
#define RF #define RF
//#define DEBUG_SIM #define DEBUG_SIM
int number_rb_ul; int number_rb_ul;
int first_rbUL ; int first_rbUL ;
extern Signal_buffers_t *signal_buffers_g; extern Signal_buffers_t *signal_buffers_g;
void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) {
int aa, slot_offset, slot_offset_F;
slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7);
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
if (is_pmch_subframe(frame,next_slot>>1,frame_parms)) {
if ((next_slot%2)==0) {
LOG_D(OCM,"Frame %d, subframe %d: Doing MBSFN modulation (slot_offset %d)\n",frame,next_slot>>1,slot_offset);
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
frame_parms->log2_symbol_size, // log2_fft_size
12, // number of symbols
frame_parms->ofdm_symbol_size>>2, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
frame_parms->rev, // bit-reversal permutation
CYCLIC_PREFIX);
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
frame_parms->log2_symbol_size, // log2_fft_size
2, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
frame_parms->rev, // bit-reversal permutation
CYCLIC_PREFIX);
else {
LOG_D(OCM,"Frame %d, subframe %d: Doing PDCCH modulation\n",frame,next_slot>>1);
normal_prefix_mod(&txdataF[aa][slot_offset_F],
&txdata[aa][slot_offset],
2,
frame_parms);
}
}
}
else {
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
frame_parms->log2_symbol_size, // log2_fft_size
6, // number of symbols
frame_parms->nb_prefix_samples, // number of prefix samples
frame_parms->twiddle_ifft, // IFFT twiddle factors
frame_parms->rev, // bit-reversal permutation
CYCLIC_PREFIX);
else {
normal_prefix_mod(&txdataF[aa][slot_offset_F],
&txdata[aa][slot_offset],
7,
frame_parms);
}
}
}
}
void do_DL_sig(double **r_re0,double **r_im0, void do_DL_sig(double **r_re0,double **r_im0,
double **r_re,double **r_im, double **r_re,double **r_im,
...@@ -162,7 +105,8 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -162,7 +105,8 @@ void do_DL_sig(double **r_re0,double **r_im0,
uint8_t nb_antennas_rx = eNB2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE uint8_t nb_antennas_rx = eNB2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE
uint8_t nb_antennas_tx = eNB2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB uint8_t nb_antennas_tx = eNB2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB
int subframe_sched = ((next_slot>>1) == 0) ? 9 : ((next_slot>>1)-1); LTE_DL_FRAME_PARMS *fp;
// int subframe_sched = ((next_slot>>1) == 0) ? 9 : ((next_slot>>1)-1);
if (next_slot==0) if (next_slot==0)
...@@ -176,6 +120,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -176,6 +120,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
if (!hold_channel) { if (!hold_channel) {
// calculate the random channel from each eNB // calculate the random channel from each eNB
for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) {
random_channel(eNB2UE[eNB_id][UE_id][CC_id],abstraction_flag); random_channel(eNB2UE[eNB_id][UE_id][CC_id],abstraction_flag);
/* /*
for (i=0;i<eNB2UE[eNB_id][UE_id]->nb_taps;i++) for (i=0;i<eNB2UE[eNB_id][UE_id]->nb_taps;i++)
...@@ -214,7 +159,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -214,7 +159,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length)*eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length; eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length)*eNB2UE[att_eNB_id][UE_id][CC_id]->channel_length;
LOG_D(OCM,"Channel (CCid %d) eNB %d => UE %d : tx_power %d dBm, path_loss %f dB\n", LOG_D(OCM,"Channel (CCid %d) eNB %d => UE %d : tx_power %d dBm, path_loss %f dB\n",
CC_id,att_eNB_id,UE_id, CC_id,att_eNB_id,UE_id,
PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, frame_parms->pdsch_config_common.referenceSignalPower,
eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB); eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB);
#endif #endif
...@@ -223,7 +168,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -223,7 +168,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id]; channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id];
int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.dl_ch_estimates[0]; int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.dl_ch_estimates[0];
// double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0); // double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0);
double scale = pow(10.0,(PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0); double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0);
//this factor is not really needed (it was actually wrong in the non abstraction mode) //this factor is not really needed (it was actually wrong in the non abstraction mode)
//scale = scale * sqrt(512.0/300.0); //TODO: make this variable for all BWs //scale = scale * sqrt(512.0/300.0); //TODO: make this variable for all BWs
LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale))); LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale)));
...@@ -277,14 +222,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -277,14 +222,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
Call do_OFDM_mod from phy_procedures_eNB_TX function Call do_OFDM_mod from phy_procedures_eNB_TX function
*/ */
for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) {
start_meas(&PHY_vars_eNB_g[eNB_id][CC_id]->ofdm_mod_stats);
do_OFDM_mod(PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdataF[0],
PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0],
PHY_vars_eNB_g[eNB_id][CC_id]->proc[subframe_sched].frame_tx,next_slot,
&PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms);
stop_meas(&PHY_vars_eNB_g[eNB_id][CC_id]->ofdm_mod_stats);
}
//for (UE_id=0;UE_id<NB_UE_INST;UE_id++) { //for (UE_id=0;UE_id<NB_UE_INST;UE_id++) {
// Compute RX signal for UE = UE_id // Compute RX signal for UE = UE_id
...@@ -309,7 +247,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -309,7 +247,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
// if (((double)PHY_vars_UE_g[UE_id]->tx_power_dBm + // if (((double)PHY_vars_UE_g[UE_id]->tx_power_dBm +
// eNB2UE[eNB_id][UE_id]->path_loss_dB) <= -107.0) // eNB2UE[eNB_id][UE_id]->path_loss_dB) <= -107.0)
// break; // break;
frame_parms = &PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms;
txdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0]; txdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0];
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1));
...@@ -323,12 +261,14 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -323,12 +261,14 @@ void do_DL_sig(double **r_re0,double **r_im0,
frame_parms->ofdm_symbol_size, frame_parms->ofdm_symbol_size,
14, 14,
// enb_data[eNB_id]->tx_power_dBm); // enb_data[eNB_id]->tx_power_dBm);
PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower); frame_parms->pdsch_config_common.referenceSignalPower,
frame_parms->N_RB_DL*12);
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
LOG_D(OCM,"[SIM][DL] eNB %d (CCid %d): tx_pwr %f dBm, for slot %d (subframe %d)\n", LOG_D(OCM,"[SIM][DL] eNB %d (CCid %d): tx_pwr %f dBm (target %f), for slot %d (subframe %d)\n",
eNB_id,CC_id, eNB_id,CC_id,
10*log10(tx_pwr), 10*log10(tx_pwr),
frame_parms->pdsch_config_common.referenceSignalPower+10*log10(12.0*frame_parms->N_RB_DL),
next_slot, next_slot,
next_slot>>1); next_slot>>1);
#endif #endif
...@@ -347,15 +287,16 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -347,15 +287,16 @@ void do_DL_sig(double **r_re0,double **r_im0,
printf("ch(%d,%d)[%d] : (%f,%f)\n",eNB_id,UE_id,i,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].x,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].y); printf("ch(%d,%d)[%d] : (%f,%f)\n",eNB_id,UE_id,i,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].x,eNB2UE[eNB_id][UE_id][CC_id]->ch[0][i].y);
#endif #endif
LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d (CCid %d): tx_power %f dBm, path_loss %f dB\n", LOG_D(OCM,"[SIM][DL] Channel eNB %d => UE %d (CCid %d): tx_power %f dBm/RE, path_loss %f dB\n",
eNB_id,UE_id,CC_id, eNB_id,UE_id,CC_id,
(double)PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower, (double)frame_parms->pdsch_config_common.referenceSignalPower,
// enb_data[eNB_id]->tx_power_dBm, // enb_data[eNB_id]->tx_power_dBm,
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB); eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB);
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,512,0)*512.0/300.0; rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->ofdm_symbol_size,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm/RE (%f dBm RSSI)for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr/12.0/(double)frame_parms->N_RB_DL),10*log10(rx_pwr),next_slot,next_slot>>1);
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (noise) -132 dBm/RE (N0fs = %f dBm, N0B = %f dBm) for slot %d (subframe %d)\n",UE_id,10*log10(eNB2UE[eNB_id][UE_id][CC_id]->BW*1e6)+-174, 10*log10(eNB2UE[eNB_id][UE_id][CC_id]->BW*1e6*12*frame_parms->N_RB_DL/(double)frame_parms->ofdm_symbol_size)+-174, next_slot,next_slot>>1);
#endif #endif
if (eNB2UE[eNB_id][UE_id][CC_id]->first_run == 1) if (eNB2UE[eNB_id][UE_id][CC_id]->first_run == 1)
...@@ -364,7 +305,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -364,7 +305,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
// RF model // RF model
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
LOG_D(OCM,"[SIM][DL] UE %d (CCid %d): rx_gain %d dB for slot %d (subframe %d)\n",UE_id,CC_id,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB,next_slot,next_slot>>1); LOG_D(OCM,"[SIM][DL] UE %d (CCid %d): rx_gain %d dB (-ADC %f) for slot %d (subframe %d)\n",UE_id,CC_id,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB-66.227,next_slot,next_slot>>1);
#endif #endif
/* /*
rf_rx(r_re0, rf_rx(r_re0,
...@@ -395,8 +336,8 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -395,8 +336,8 @@ void do_DL_sig(double **r_re0,double **r_im0,
(double)PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) (double)PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->ofdm_symbol_size,0)*512.0/300; rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->ofdm_symbol_size,0);
LOG_D(OCM,"[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n", LOG_D(OCM,"[SIM][DL] UE %d : ADC in (eNB %d) %f dBm for slot %d (subframe %d)\n",
UE_id,eNB_id, UE_id,eNB_id,
10*log10(rx_pwr),next_slot,next_slot>>1); 10*log10(rx_pwr),next_slot,next_slot>>1);
#endif #endif
...@@ -409,8 +350,8 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -409,8 +350,8 @@ void do_DL_sig(double **r_re0,double **r_im0,
} }
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr = signal_energy_fp(r_re,r_im,nb_antennas_rx,frame_parms->ofdm_symbol_size,0)*512.0/300.0; rx_pwr = signal_energy_fp(r_re,r_im,nb_antennas_rx,frame_parms->ofdm_symbol_size,0);
LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1);
#endif #endif
rxdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.rxdata; rxdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.rxdata;
...@@ -426,7 +367,7 @@ void do_DL_sig(double **r_re0,double **r_im0, ...@@ -426,7 +367,7 @@ void do_DL_sig(double **r_re0,double **r_im0,
12); 12);
#ifdef DEBUG_SIM #ifdef DEBUG_SIM
rx_pwr2 = signal_energy(rxdata[0]+slot_offset,512)*512.0/300.0; rx_pwr2 = signal_energy(rxdata[0]+slot_offset,frame_parms->ofdm_symbol_size)*(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 (%d) for slot %d (subframe %d), writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,next_slot,next_slot>>1,rxdata); LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB (%d) for slot %d (subframe %d), writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,next_slot,next_slot>>1,rxdata);
#else #else
UNUSED_VARIABLE(rx_pwr2); UNUSED_VARIABLE(rx_pwr2);
...@@ -541,7 +482,6 @@ if (abstraction_flag!=0) { ...@@ -541,7 +482,6 @@ if (abstraction_flag!=0) {
for (UE_id=0;UE_id<NB_UE_INST;UE_id++){ for (UE_id=0;UE_id<NB_UE_INST;UE_id++){
txdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.txdata; txdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.txdata;
frame_parms = &PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms;
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1));
...@@ -561,26 +501,34 @@ if (abstraction_flag!=0) { ...@@ -561,26 +501,34 @@ if (abstraction_flag!=0) {
slot_offset_meas, slot_offset_meas,
frame_parms->ofdm_symbol_size, frame_parms->ofdm_symbol_size,
14, 14,
PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm); (double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm-10*log10((double)PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE),
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE); // This make the previous argument the total power
//ue_data[UE_id]->tx_power_dBm); //ue_data[UE_id]->tx_power_dBm);
#ifdef DEBUG_SIM //#ifdef DEBUG_SIM
LOG_D(OCM,"[SIM][UL] UE %d tx_pwr %f dBm (target %d dBm) for slot %d (subframe %d, slot_offset %d, slot_offset_meas %d)\n",UE_id,10*log10(tx_pwr),PHY_vars_UE_g[UE_id]->tx_power_dBm,next_slot,next_slot>>1,slot_offset,slot_offset_meas); LOG_D(OCM,"[SIM][UL] UE %d tx_pwr %f dBm (target %d dBm, num_RE %d) for slot %d (subframe %d, slot_offset %d, slot_offset_meas %d)\n",
#endif UE_id,
10*log10(tx_pwr),
PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm,
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE,
next_slot,next_slot>>1,slot_offset,slot_offset_meas);
//#endif
multipath_channel(UE2eNB[UE_id][eNB_id][CC_id],s_re,s_im,r_re0,r_im0, multipath_channel(UE2eNB[UE_id][eNB_id][CC_id],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,hold_channel); frame_parms->samples_per_tti>>1,hold_channel);
#ifdef DEBUG_SIM //#ifdef DEBUG_SIM
rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->ch[0], rx_pwr = signal_energy_fp2(UE2eNB[UE_id][eNB_id][CC_id]->ch[0],
UE2eNB[UE_id][eNB_id][CC_id]->channel_length)*UE2eNB[UE_id][eNB_id][CC_id]->channel_length; UE2eNB[UE_id][eNB_id][CC_id]->channel_length)*UE2eNB[UE_id][eNB_id][CC_id]->channel_length;
LOG_D(OCM,"[SIM][UL] slot %d Channel UE %d => eNB %d : %f dB (hold %d)\n",next_slot,UE_id,eNB_id,10*log10(rx_pwr),hold_channel); LOG_D(OCM,"[SIM][UL] slot %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",next_slot,UE_id,eNB_id,10*log10(rx_pwr),
#endif hold_channel,UE2eNB[UE_id][eNB_id][CC_id]->channel_length,
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB);
//#endif
#ifdef DEBUG_SIM //#ifdef DEBUG_SIM
rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->samples_per_tti>>1,0); rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
LOG_D(OCM,"[SIM][UL] eNB %d : rx_pwr %f dB (%f) for slot %d (subframe %d), sptti %d\n", LOG_D(OCM,"[SIM][UL] eNB %d : rx_pwr %f dBm (%f) for slot %d (subframe %d), sptti %d\n",
eNB_id,10*log10(rx_pwr),rx_pwr,next_slot,next_slot>>1,frame_parms->samples_per_tti); eNB_id,10*log10(rx_pwr),rx_pwr,next_slot,next_slot>>1,frame_parms->samples_per_tti);
#endif //#endif
if (UE2eNB[UE_id][eNB_id][CC_id]->first_run == 1) if (UE2eNB[UE_id][eNB_id][CC_id]->first_run == 1)
......
...@@ -109,7 +109,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -109,7 +109,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_MCH); LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_MCH);
PHY_vars_eNB->rx_total_gain_eNB_dB=140; PHY_vars_eNB->rx_total_gain_eNB_dB=130;
for(i=0;i<NUMBER_OF_UE_MAX;i++) for(i=0;i<NUMBER_OF_UE_MAX;i++)
PHY_vars_eNB->mu_mimo_mode[i].dl_pow_off = 2; PHY_vars_eNB->mu_mimo_mode[i].dl_pow_off = 2;
...@@ -188,7 +188,7 @@ PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -188,7 +188,7 @@ PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms,
} }
return (PHY_vars_RN); return (PHY_vars_RN);
} }
void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms, void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
uint8_t frame_type, uint8_t frame_type,
uint8_t tdd_config, uint8_t tdd_config,
uint8_t tdd_config_S, uint8_t tdd_config_S,
...@@ -206,52 +206,57 @@ void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms, ...@@ -206,52 +206,57 @@ void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms,
LOG_I(PHY,"init lte parms: Nid_cell %d, Frame type %d, N_RB_DL %d\n",Nid_cell,frame_type,N_RB_DL); LOG_I(PHY,"init lte parms: Nid_cell %d, Frame type %d, N_RB_DL %d\n",Nid_cell,frame_type,N_RB_DL);
*frame_parms = calloc(1, sizeof(LTE_DL_FRAME_PARMS)); for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
(*frame_parms)->frame_type = frame_type; frame_parms[CC_id] = calloc(1, sizeof(LTE_DL_FRAME_PARMS));
(*frame_parms)->tdd_config = tdd_config; (frame_parms[CC_id])->frame_type = frame_type;
(*frame_parms)->tdd_config_S = tdd_config_S; (frame_parms[CC_id])->tdd_config = tdd_config;
(*frame_parms)->N_RB_DL = N_RB_DL; (frame_parms[CC_id])->tdd_config_S = tdd_config_S;
(*frame_parms)->N_RB_UL = (*frame_parms)->N_RB_DL; (frame_parms[CC_id])->N_RB_DL = N_RB_DL;
(*frame_parms)->phich_config_common.phich_resource = oneSixth; (frame_parms[CC_id])->N_RB_UL = (frame_parms[CC_id])->N_RB_DL;
(*frame_parms)->phich_config_common.phich_duration = normal; (frame_parms[CC_id])->phich_config_common.phich_resource = oneSixth;
(*frame_parms)->Ncp = extended_prefix_flag; (frame_parms[CC_id])->phich_config_common.phich_duration = normal;
(*frame_parms)->Nid_cell = Nid_cell; (frame_parms[CC_id])->Ncp = extended_prefix_flag;
(*frame_parms)->nushift = (Nid_cell%6); (frame_parms[CC_id])->Nid_cell = Nid_cell;
(*frame_parms)->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2; (frame_parms[CC_id])->nushift = (Nid_cell%6);
(*frame_parms)->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; (frame_parms[CC_id])->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2;
(*frame_parms)->nb_antennas_rx = (transmission_mode == 1) ? 1 : 2; (frame_parms[CC_id])->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2;
(*frame_parms)->mode1_flag = (transmission_mode == 1) ? 1 : 0; (frame_parms[CC_id])->nb_antennas_rx = (transmission_mode == 1) ? 1 : 2;
(frame_parms[CC_id])->mode1_flag = (transmission_mode == 1) ? 1 : 0;
init_frame_parms(*frame_parms,1);
init_frame_parms(frame_parms[CC_id],1);
(*frame_parms)->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
(*frame_parms)->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1; (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
(*frame_parms)->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1;
(*frame_parms)->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0; (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
init_ul_hopping(*frame_parms); (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
init_ul_hopping(frame_parms[CC_id]);
phy_init_top(*frame_parms); }
phy_init_lte_top(*frame_parms);
phy_init_top(frame_parms[0]);
phy_init_lte_top(frame_parms[0]);
PHY_vars_eNB_g = (PHY_VARS_eNB***)malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB**)); PHY_vars_eNB_g = (PHY_VARS_eNB***)malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB**));
for (eNB_id=0; eNB_id<NB_eNB_INST;eNB_id++){ for (eNB_id=0; eNB_id<NB_eNB_INST;eNB_id++){
PHY_vars_eNB_g[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*)); 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++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(*frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag); PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
PHY_vars_eNB_g[eNB_id][CC_id]->Mod_id=eNB_id; 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]->CC_id=CC_id;
} }
} }
(*frame_parms)->nb_antennas_tx = 1;
(*frame_parms)->nb_antennas_rx = nb_antennas_rx;
PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**)); PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**));
for (UE_id=0; UE_id<NB_UE_INST;UE_id++){ for (UE_id=0; UE_id<NB_UE_INST;UE_id++){
PHY_vars_UE_g[UE_id] = (PHY_VARS_UE**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_UE*)); PHY_vars_UE_g[UE_id] = (PHY_VARS_UE**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_UE*));
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(*frame_parms, UE_id,abstraction_flag,transmission_mode); (frame_parms[CC_id])->nb_antennas_tx = 1;
(frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx;
PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag,transmission_mode);
PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id; PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id;
PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id; PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id;
} }
......
...@@ -46,7 +46,7 @@ PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -46,7 +46,7 @@ PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms,
uint8_t RN_id, uint8_t RN_id,
uint8_t eMBMS_active_state); uint8_t eMBMS_active_state);
void init_lte_vars(LTE_DL_FRAME_PARMS **frame_parms, void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
uint8_t frame_type, uint8_t frame_type,
uint8_t tdd_config, uint8_t tdd_config,
uint8_t tdd_config_S, uint8_t tdd_config_S,
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/ *******************************************************************************/
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
...@@ -115,7 +115,7 @@ char smbv_ip[16]; ...@@ -115,7 +115,7 @@ char smbv_ip[16];
DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu;
DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1; DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1;
DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2; DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2;
*/ */
#define UL_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,24) #define UL_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,24)
#define CCCH_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) #define CCCH_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3)
...@@ -159,7 +159,7 @@ extern uint8_t abstraction_flag; ...@@ -159,7 +159,7 @@ extern uint8_t abstraction_flag;
extern uint8_t ethernet_flag; extern uint8_t ethernet_flag;
extern uint16_t Nid_cell; extern uint16_t Nid_cell;
extern LTE_DL_FRAME_PARMS *frame_parms; extern LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
#ifdef XFORMS #ifdef XFORMS
int otg_enabled; int otg_enabled;
...@@ -401,11 +401,11 @@ static module_id_t RN_id = 0; ...@@ -401,11 +401,11 @@ static module_id_t RN_id = 0;
Packet_OTG_List_t *otg_pdcp_buffer; Packet_OTG_List_t *otg_pdcp_buffer;
typedef enum l2l1_task_state_e typedef enum l2l1_task_state_e
{ {
L2L1_WAITTING, L2L1_WAITTING,
L2L1_RUNNING, L2L1_RUNNING,
L2L1_TERMINATED, L2L1_TERMINATED,
} l2l1_task_state_t; } l2l1_task_state_t;
l2l1_task_state_t l2l1_state = L2L1_WAITTING; l2l1_task_state_t l2l1_state = L2L1_WAITTING;
...@@ -650,13 +650,13 @@ void *l2l1_task(void *args_p) { ...@@ -650,13 +650,13 @@ void *l2l1_task(void *args_p) {
} }
#endif #endif
#ifdef DEBUG_OMG #ifdef DEBUG_OMG
/* /*
if ((((int) oai_emulation.info.time_s) % 100) == 0) { if ((((int) oai_emulation.info.time_s) % 100) == 0) {
for (UE_inst = oai_emulation.info.first_ue_local; UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); UE_inst++) { for (UE_inst = oai_emulation.info.first_ue_local; UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); UE_inst++) {
get_node_position (UE, UE_inst); get_node_position (UE, UE_inst);
} }
} }
*/ */
#endif #endif
update_ocm (); update_ocm ();
...@@ -676,7 +676,7 @@ void *l2l1_task(void *args_p) { ...@@ -676,7 +676,7 @@ void *l2l1_task(void *args_p) {
oai_emulation.info.time_ms = frame * 10 + (slot >> 1); oai_emulation.info.time_ms = frame * 10 + (slot >> 1);
direction = subframe_select (frame_parms, next_slot >> 1); direction = subframe_select (frame_parms[0], next_slot >> 1);
#ifdef PROC #ifdef PROC
if(Channel_Flag==1) if(Channel_Flag==1)
...@@ -694,14 +694,15 @@ void *l2l1_task(void *args_p) { ...@@ -694,14 +694,15 @@ void *l2l1_task(void *args_p) {
for (eNB_inst = oai_emulation.info.first_enb_local; (eNB_inst < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)); eNB_inst++) { for (eNB_inst = oai_emulation.info.first_enb_local; (eNB_inst < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)); eNB_inst++) {
if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) { if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) {
if ((slot&1) == 0)
LOG_D( LOG_D(
EMU, EMU,
"PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n", "PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n",
eNB_inst, eNB_inst,
frame, frame,
slot, slot,
next_slot >> 1, PHY_vars_eNB_g[eNB_inst][0]->proc[slot >> 1].subframe_tx,
last_slot>>1, PHY_vars_eNB_g[eNB_inst][0]->proc[slot >> 1].subframe_rx,
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.frame_type, PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.frame_type,
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.tdd_config, PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.tdd_config,
PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.Nid_cell); PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.Nid_cell);
...@@ -751,7 +752,7 @@ void *l2l1_task(void *args_p) { ...@@ -751,7 +752,7 @@ void *l2l1_task(void *args_p) {
if ((next_slot % 2) == 0) if ((next_slot % 2) == 0)
clear_UE_transport_info (oai_emulation.info.nb_ue_local); clear_UE_transport_info (oai_emulation.info.nb_ue_local);
for (UE_inst = oai_emulation.info.first_ue_local; for (UE_inst = oai_emulation.info.first_ue_local;
(UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); UE_inst++) (UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); UE_inst++) {
if (oai_emulation.info.cli_start_ue[UE_inst] != 0) { if (oai_emulation.info.cli_start_ue[UE_inst] != 0) {
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
...@@ -825,6 +826,7 @@ void *l2l1_task(void *args_p) { ...@@ -825,6 +826,7 @@ void *l2l1_task(void *args_p) {
} }
} }
} }
#ifdef Rel10 #ifdef Rel10
for (RN_id=oai_emulation.info.first_rn_local; for (RN_id=oai_emulation.info.first_rn_local;
RN_id<oai_emulation.info.first_rn_local+oai_emulation.info.nb_rn_local; RN_id<oai_emulation.info.first_rn_local+oai_emulation.info.nb_rn_local;
...@@ -868,8 +870,8 @@ void *l2l1_task(void *args_p) { ...@@ -868,8 +870,8 @@ void *l2l1_task(void *args_p) {
} }
} }
#endif #endif
emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type, ethernet_flag); emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type[0], ethernet_flag);
if ((direction == SF_DL) || (frame_parms->frame_type == 0)) { if ((direction == SF_DL) || (frame_parms[0]->frame_type == 0)) {
// consider only sec id 0 // consider only sec id 0
/* for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { /* for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) {
if (abstraction_flag == 0) { if (abstraction_flag == 0) {
...@@ -882,14 +884,16 @@ void *l2l1_task(void *args_p) { ...@@ -882,14 +884,16 @@ void *l2l1_task(void *args_p) {
start_meas(&dl_chan_stats); start_meas(&dl_chan_stats);
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++)
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst,CC_id); #warning figure out what to do with UE frame_parms during initial_sync
do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms,UE_inst,CC_id);
} }
stop_meas(&dl_chan_stats); stop_meas(&dl_chan_stats);
} }
if ((direction == SF_UL) || (frame_parms->frame_type == 0)) { //if ((subframe<2) || (subframe>4)) if ((direction == SF_UL) || (frame_parms[0]->frame_type == 0)) { //if ((subframe<2) || (subframe>4))
start_meas(&ul_chan_stats); start_meas(&ul_chan_stats);
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame,CC_id); #warning figure out what to do with UE frame_parms during initial_sync
do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, frame,CC_id);
} }
stop_meas(&ul_chan_stats); stop_meas(&ul_chan_stats);
/* /*
...@@ -915,7 +919,8 @@ void *l2l1_task(void *args_p) { ...@@ -915,7 +919,8 @@ void *l2l1_task(void *args_p) {
start_meas(&dl_chan_stats); start_meas(&dl_chan_stats);
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++)
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, UE_inst,CC_id); #warning check dimensions of r_reN,r_imN for multiple CCs
do_DL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, eNB2UE, enb_data, ue_data, next_slot, abstraction_flag,&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, UE_inst,CC_id);
} }
stop_meas(&dl_chan_stats); stop_meas(&dl_chan_stats);
/* /*
...@@ -928,7 +933,8 @@ void *l2l1_task(void *args_p) { ...@@ -928,7 +933,8 @@ void *l2l1_task(void *args_p) {
else { // UL part else { // UL part
start_meas(&ul_chan_stats); start_meas(&ul_chan_stats);
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,frame_parms, frame,CC_id); #warning check dimensions of r_reN,r_imN for multiple CCs
do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, enb_data, ue_data, next_slot, abstraction_flag,&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, frame,CC_id);
} }
stop_meas(&ul_chan_stats); stop_meas(&ul_chan_stats);
...@@ -940,7 +946,8 @@ void *l2l1_task(void *args_p) { ...@@ -940,7 +946,8 @@ void *l2l1_task(void *args_p) {
} }
fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]); fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]);
} }
*/} */
}
} }
if ((last_slot == 1) && (frame == 0) && (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) { if ((last_slot == 1) && (frame == 0) && (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) {
...@@ -953,7 +960,7 @@ void *l2l1_task(void *args_p) { ...@@ -953,7 +960,7 @@ void *l2l1_task(void *args_p) {
write_output ("pbch_rxF_comp0.m", "pbch_comp0", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], write_output ("pbch_rxF_comp0.m", "pbch_comp0", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->rxdataF_comp[0],
6 * 12 * 4, 1, 1); 6 * 12 * 4, 1, 1);
write_output ("pbch_rxF_llr.m", "pbch_llr", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->llr, write_output ("pbch_rxF_llr.m", "pbch_llr", PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->llr,
(frame_parms->Ncp == 0) ? 1920 : 1728, 1, 4); (frame_parms[0]->Ncp == 0) ? 1920 : 1728, 1, 4);
} }
/* /*
if ((last_slot==1) && (frame==1)) { if ((last_slot==1) && (frame==1)) {
...@@ -963,28 +970,28 @@ void *l2l1_task(void *args_p) { ...@@ -963,28 +970,28 @@ void *l2l1_task(void *args_p) {
*/ */
} // if Channel_Flag==0 } // if Channel_Flag==0
} //end of slot }//end of slot
if ((frame >= 1) && (frame <= 9) && (abstraction_flag == 0) if ((frame >= 1) && (frame <= 9) && (abstraction_flag == 0)
#ifdef PROC #ifdef PROC
&&(Channel_Flag==0) &&(Channel_Flag==0)
#endif #endif
) { ) {
write_output ("UEtxsig0.m", "txs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, write_output ("UEtxsig0.m", "txs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.txdata[0], PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti*10,
1, 1); 1, 1);
sprintf (fname, "eNBtxsig%d.m", frame); sprintf (fname, "eNBtxsig%d.m", frame);
sprintf (vname, "txs%d", frame); sprintf (vname, "txs%d", frame);
write_output (fname, vname, PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0], FRAME_LENGTH_COMPLEX_SAMPLES, 1, write_output (fname, vname, PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0], PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti*10, 1,
1); 1);
write_output ( write_output (
"eNBtxsigF0.m", "txsF0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdataF[0][0], "eNBtxsigF0.m", "txsF0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdataF[0][0],
PHY_vars_eNB_g[0][0]->lte_frame_parms.symbols_per_tti * PHY_vars_eNB_g[0][0]->lte_frame_parms.ofdm_symbol_size, 1, PHY_vars_eNB_g[0][0]->lte_frame_parms.symbols_per_tti * PHY_vars_eNB_g[0][0]->lte_frame_parms.ofdm_symbol_size, 1,
1); 1);
write_output ("UErxsig0.m", "rxs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0], FRAME_LENGTH_COMPLEX_SAMPLES, write_output ("UErxsig0.m", "rxs0", PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0], PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti*10,
1, 1); 1, 1);
write_output ("eNBrxsig0.m", "rxs0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.rxdata[0][0], write_output ("eNBrxsig0.m", "rxs0", PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.rxdata[0][0],
FRAME_LENGTH_COMPLEX_SAMPLES, 1, 1); PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti*10, 1, 1);
} }
#ifdef XFORMS #ifdef XFORMS
...@@ -1008,6 +1015,7 @@ void *l2l1_task(void *args_p) { ...@@ -1008,6 +1015,7 @@ void *l2l1_task(void *args_p) {
smbv_frame_cnt++; smbv_frame_cnt++;
} }
#endif #endif
}
stop_meas(&oaisim_stats_f); stop_meas(&oaisim_stats_f);
//end of frame //end of frame
...@@ -1038,8 +1046,8 @@ void *l2l1_task(void *args_p) { ...@@ -1038,8 +1046,8 @@ void *l2l1_task(void *args_p) {
return NULL; return NULL;
} }
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
int main(int argc, char **argv) { int main(int argc, char **argv) {
int32_t i; int32_t i;
// pointers signal buffers (s = transmit, r,r0 = receive) // pointers signal buffers (s = transmit, r,r0 = receive)
...@@ -1180,9 +1188,9 @@ int main(int argc, char **argv) { ...@@ -1180,9 +1188,9 @@ int main(int argc, char **argv) {
oai_shutdown(); oai_shutdown();
return (0); return (0);
} }
void reset_opp_meas(void){ void reset_opp_meas(void){
uint8_t eNB_id=0,UE_id=0; uint8_t eNB_id=0,UE_id=0;
reset_meas(&oaisim_stats); reset_meas(&oaisim_stats);
...@@ -1311,9 +1319,9 @@ void reset_opp_meas(void){ ...@@ -1311,9 +1319,9 @@ void reset_opp_meas(void){
} }
} }
} }
void print_opp_meas(void){ void print_opp_meas(void){
uint8_t eNB_id=0,UE_id=0; uint8_t eNB_id=0,UE_id=0;
print_meas(&oaisim_stats,"[OAI][total_exec_time]", &oaisim_stats,&oaisim_stats); print_meas(&oaisim_stats,"[OAI][total_exec_time]", &oaisim_stats,&oaisim_stats);
...@@ -1449,7 +1457,7 @@ void print_opp_meas(void){ ...@@ -1449,7 +1457,7 @@ void print_opp_meas(void){
} }
} }
...@@ -1485,7 +1493,7 @@ void print_opp_meas(void){ ...@@ -1485,7 +1493,7 @@ void print_opp_meas(void){
} }
void oai_shutdown(void) { void oai_shutdown(void) {
static int done=0; static int done=0;
int i; int i;
char interfaceName[8]; char interfaceName[8];
...@@ -1585,14 +1593,14 @@ void oai_shutdown(void) { ...@@ -1585,14 +1593,14 @@ void oai_shutdown(void) {
done =1; done =1;
LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n");
} }
eNB_MAC_INST* get_eNB_mac_inst(module_id_t module_idP) eNB_MAC_INST* get_eNB_mac_inst(module_id_t module_idP)
{ {
return (&eNB_mac_inst[module_idP]); return (&eNB_mac_inst[module_idP]);
} }
OAI_Emulation* get_OAI_emulation() OAI_Emulation* get_OAI_emulation()
{ {
return &oai_emulation; return &oai_emulation;
} }
...@@ -197,6 +197,7 @@ mapping packet_gen_names[] = ...@@ -197,6 +197,7 @@ mapping packet_gen_names[] =
void init_oai_emulation(void) { void init_oai_emulation(void) {
int i; int i;
int CC_id;
oai_emulation.environment_system_config.fading.large_scale.selected_option = "free_space"; oai_emulation.environment_system_config.fading.large_scale.selected_option = "free_space";
oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_exponent = 3.00; oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_exponent = 3.00;
...@@ -348,7 +349,7 @@ void init_oai_emulation(void) { ...@@ -348,7 +349,7 @@ void init_oai_emulation(void) {
oai_emulation.info.n_frames=0xffff; // number of frames simulated by default oai_emulation.info.n_frames=0xffff; // number of frames simulated by default
oai_emulation.info.n_frames_flag=0; // if set, then let the emulation goes to infinity oai_emulation.info.n_frames_flag=0; // if set, then let the emulation goes to infinity
//status //status
oai_emulation.info.is_primary_master=0; oai_emulation.info.is_primary_master=0;
oai_emulation.info.master_list=0; oai_emulation.info.master_list=0;
oai_emulation.info.nb_ue_remote=0; oai_emulation.info.nb_ue_remote=0;
...@@ -415,13 +416,15 @@ void init_oai_emulation(void) { ...@@ -415,13 +416,15 @@ void init_oai_emulation(void) {
oai_emulation.info.g_log_verbosity = 0x15; oai_emulation.info.g_log_verbosity = 0x15;
oai_emulation.info.g_log_verbosity_option = "medium"; oai_emulation.info.g_log_verbosity_option = "medium";
oai_emulation.info.frame_type=TDD; for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
oai_emulation.info.frame_type_name="TDD"; oai_emulation.info.frame_type[CC_id]=TDD;
oai_emulation.info.tdd_config=3; oai_emulation.info.frame_type_name[CC_id]="TDD";
oai_emulation.info.tdd_config_S=0; oai_emulation.info.tdd_config[CC_id]=3;
oai_emulation.info.extended_prefix_flag=0; oai_emulation.info.tdd_config_S[CC_id]=0;
oai_emulation.info.N_RB_DL=25; oai_emulation.info.extended_prefix_flag[CC_id]=0;
oai_emulation.info.transmission_mode=2; oai_emulation.info.N_RB_DL[CC_id]=25;
oai_emulation.info.transmission_mode[CC_id]=2;
}
oai_emulation.profile = "EURECOM"; oai_emulation.profile = "EURECOM";
} }
...@@ -431,6 +434,8 @@ void oaisim_config(void) { ...@@ -431,6 +434,8 @@ void oaisim_config(void) {
// init log gen first // init log gen first
//initialize the log generator //initialize the log generator
logInit(); logInit();
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
...@@ -558,21 +563,24 @@ int olg_config(void) { ...@@ -558,21 +563,24 @@ int olg_config(void) {
int ocg_config_env(void) { int ocg_config_env(void) {
// int func related to channel desc from oaisim.c could be moved here // int func related to channel desc from oaisim.c could be moved here
int CC_id;
if (oai_emulation.info.ocg_enabled){ if (oai_emulation.info.ocg_enabled){
oai_emulation.info.frame_type = map_str_to_int(frame_type_names, oai_emulation.info.frame_type_name); for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
if (oai_emulation.info.frame_type == -1){ oai_emulation.info.frame_type[CC_id] = map_str_to_int(frame_type_names, oai_emulation.info.frame_type_name[CC_id]);
if (oai_emulation.info.frame_type[CC_id] == -1){
LOG_E(EMU,"frame type incorrect %s, set it to TDD \n",oai_emulation.info.frame_type_name); LOG_E(EMU,"frame type incorrect %s, set it to TDD \n",oai_emulation.info.frame_type_name);
oai_emulation.info.frame_type=TDD; oai_emulation.info.frame_type[CC_id]=TDD;
} }
else else
LOG_I(EMU,"Frame type is %s \n",oai_emulation.info.frame_type_name); LOG_I(EMU,"Frame type is %s \n",oai_emulation.info.frame_type_name);
if (oai_emulation.info.frame_type == TDD ){ if (oai_emulation.info.frame_type[CC_id] == TDD ){
if ((oai_emulation.info.tdd_config > 6) || (oai_emulation.info.tdd_config < 0)) { if ((oai_emulation.info.tdd_config[CC_id] > 6) || (oai_emulation.info.tdd_config[CC_id] < 0)) {
LOG_E(EMU,"TDD config %d out of range, set it to 3\n",oai_emulation.info.tdd_config); LOG_E(EMU,"TDD config %d out of range, set it to 3\n",oai_emulation.info.tdd_config[CC_id]);
oai_emulation.info.tdd_config=3; oai_emulation.info.tdd_config[CC_id]=3;
} else } else
LOG_I(EMU,"TDD config is set to \n",oai_emulation.info.tdd_config); LOG_I(EMU,"TDD config is set to \n",oai_emulation.info.tdd_config[CC_id]);
}
} }
} }
return 1; return 1;
......
...@@ -106,7 +106,7 @@ uint8_t beta_ACK = 0; ...@@ -106,7 +106,7 @@ uint8_t beta_ACK = 0;
uint8_t beta_RI = 0; uint8_t beta_RI = 0;
uint8_t beta_CQI = 2; uint8_t beta_CQI = 2;
uint8_t target_ul_mcs = 4; uint8_t target_ul_mcs = 4;
LTE_DL_FRAME_PARMS *frame_parms = NULL; LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
int map1,map2; int map1,map2;
double **ShaF = NULL; double **ShaF = NULL;
// pointers signal buffers (s = transmit, r,r0 = receive) // pointers signal buffers (s = transmit, r,r0 = receive)
...@@ -380,9 +380,9 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -380,9 +380,9 @@ void get_simulation_options(int argc, char *argv[]) {
break; break;
case 'C': case 'C':
oai_emulation.info.tdd_config = atoi (optarg); oai_emulation.info.tdd_config[0] = atoi (optarg);
AssertFatal (oai_emulation.info.tdd_config <= TDD_Config__subframeAssignment_sa6, "Illegal tdd_config %d (should be 0-%d)!", AssertFatal (oai_emulation.info.tdd_config[0] <= TDD_Config__subframeAssignment_sa6, "Illegal tdd_config %d (should be 0-%d)!",
oai_emulation.info.tdd_config, TDD_Config__subframeAssignment_sa6); oai_emulation.info.tdd_config[0], TDD_Config__subframeAssignment_sa6);
break; break;
case 'D': case 'D':
...@@ -390,7 +390,7 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -390,7 +390,7 @@ void get_simulation_options(int argc, char *argv[]) {
break; break;
case 'e': case 'e':
oai_emulation.info.extended_prefix_flag = 1; oai_emulation.info.extended_prefix_flag[0] = 1;
break; break;
case 'E': case 'E':
...@@ -404,7 +404,7 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -404,7 +404,7 @@ void get_simulation_options(int argc, char *argv[]) {
case 'F': // set FDD case 'F': // set FDD
printf("Setting Frame to FDD\n"); printf("Setting Frame to FDD\n");
oai_emulation.info.frame_type = 0; oai_emulation.info.frame_type[0] = 0;
break; break;
case 'g': case 'g':
...@@ -537,10 +537,10 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -537,10 +537,10 @@ void get_simulation_options(int argc, char *argv[]) {
break; break;
case 'R': case 'R':
oai_emulation.info.N_RB_DL = atoi (optarg); oai_emulation.info.N_RB_DL[0] = atoi (optarg);
if ((oai_emulation.info.N_RB_DL != 6) && (oai_emulation.info.N_RB_DL != 15) && (oai_emulation.info.N_RB_DL != 25) if ((oai_emulation.info.N_RB_DL[0] != 6) && (oai_emulation.info.N_RB_DL[0] != 15) && (oai_emulation.info.N_RB_DL[0] != 25)
&& (oai_emulation.info.N_RB_DL != 50) && (oai_emulation.info.N_RB_DL != 75) && (oai_emulation.info.N_RB_DL != 100)) { && (oai_emulation.info.N_RB_DL[0] != 50) && (oai_emulation.info.N_RB_DL[0] != 75) && (oai_emulation.info.N_RB_DL[0] != 100)) {
printf("Illegal N_RB_DL %d (should be one of 6,15,25,50,75,100)\n", oai_emulation.info.N_RB_DL); printf("Illegal N_RB_DL %d (should be one of 6,15,25,50,75,100)\n", oai_emulation.info.N_RB_DL[0]);
exit (-1); exit (-1);
} }
break; break;
...@@ -597,8 +597,8 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -597,8 +597,8 @@ void get_simulation_options(int argc, char *argv[]) {
break; break;
case 'x': case 'x':
oai_emulation.info.transmission_mode = atoi (optarg); oai_emulation.info.transmission_mode[0] = atoi (optarg);
if ((oai_emulation.info.transmission_mode != 1) && (oai_emulation.info.transmission_mode != 2) && (oai_emulation.info.transmission_mode != 5) && (oai_emulation.info.transmission_mode != 6)) { if ((oai_emulation.info.transmission_mode[0] != 1) && (oai_emulation.info.transmission_mode[0] != 2) && (oai_emulation.info.transmission_mode[0] != 5) && (oai_emulation.info.transmission_mode[0] != 6)) {
printf("Unsupported transmission mode %d\n",oai_emulation.info.transmission_mode); printf("Unsupported transmission mode %d\n",oai_emulation.info.transmission_mode);
exit(-1); exit(-1);
} }
...@@ -656,10 +656,10 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -656,10 +656,10 @@ void get_simulation_options(int argc, char *argv[]) {
conf_config_file_name, oai_emulation.info.nb_enb_local, enb_properties->number); conf_config_file_name, oai_emulation.info.nb_enb_local, enb_properties->number);
/* Update some simulation parameters */ /* Update some simulation parameters */
oai_emulation.info.frame_type = enb_properties->properties[0]->frame_type; oai_emulation.info.frame_type[0] = enb_properties->properties[0]->frame_type[0];
oai_emulation.info.tdd_config = enb_properties->properties[0]->tdd_config; oai_emulation.info.tdd_config[0] = enb_properties->properties[0]->tdd_config[0];
oai_emulation.info.tdd_config_S = enb_properties->properties[0]->tdd_config_s; oai_emulation.info.tdd_config_S[0] = enb_properties->properties[0]->tdd_config_s[0];
oai_emulation.info.extended_prefix_flag = enb_properties->properties[0]->prefix_type; oai_emulation.info.extended_prefix_flag[0] = enb_properties->properties[0]->prefix_type[0];
} }
} }
...@@ -775,8 +775,8 @@ void init_omv(void) { ...@@ -775,8 +775,8 @@ void init_omv(void) {
sprintf(z_area, "%f", 200.0 ); sprintf(z_area, "%f", 200.0 );
sprintf(frames, "%d", oai_emulation.info.n_frames); sprintf(frames, "%d", oai_emulation.info.n_frames);
sprintf(nb_antenna, "%d", 4); sprintf(nb_antenna, "%d", 4);
sprintf(frame_type, "%s", (oai_emulation.info.frame_type == 0) ? "FDD" : "TDD"); sprintf(frame_type, "%s", (oai_emulation.info.frame_type[0] == 0) ? "FDD" : "TDD");
sprintf(tdd_config, "%d", oai_emulation.info.tdd_config); sprintf(tdd_config, "%d", oai_emulation.info.tdd_config[0]);
// execl is used to launch the visualisor // execl is used to launch the visualisor
execl(full_name,"OMV", fdstr, frames, num_enb, num_ue, x_area, y_area, z_area, nb_antenna, frame_type, tdd_config,NULL ); execl(full_name,"OMV", fdstr, frames, num_enb, num_ue, x_area, y_area, z_area, nb_antenna, frame_type, tdd_config,NULL );
perror( "error in execl the OMV" ); perror( "error in execl the OMV" );
...@@ -808,7 +808,9 @@ void init_openair1(void) { ...@@ -808,7 +808,9 @@ void init_openair1(void) {
int list_index; int list_index;
#endif #endif
// change the nb_connected_eNB // change the nb_connected_eNB
init_lte_vars (&frame_parms, oai_emulation.info.frame_type, oai_emulation.info.tdd_config, oai_emulation.info.tdd_config_S,oai_emulation.info.extended_prefix_flag,oai_emulation.info.N_RB_DL, Nid_cell, cooperation_flag, oai_emulation.info.transmission_mode, abstraction_flag,nb_antennas_rx, oai_emulation.info.eMBMS_active_state); for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
init_lte_vars (&frame_parms[CC_id], oai_emulation.info.frame_type[CC_id], oai_emulation.info.tdd_config[CC_id], oai_emulation.info.tdd_config_S[CC_id],oai_emulation.info.extended_prefix_flag[CC_id],oai_emulation.info.N_RB_DL[CC_id], Nid_cell, cooperation_flag, oai_emulation.info.transmission_mode[CC_id], abstraction_flag,nb_antennas_rx, oai_emulation.info.eMBMS_active_state);
}
for (eNB_id=0; eNB_id<NB_eNB_INST;eNB_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++){
...@@ -816,12 +818,12 @@ void init_openair1(void) { ...@@ -816,12 +818,12 @@ void init_openair1(void) {
PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK;
PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI;
PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI;
((PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob ((PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob
PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK;
PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI;
PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI;
((PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob ((PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms).pdsch_config_common).p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_a = rhob
} }
} }
} }
...@@ -837,7 +839,7 @@ void init_openair1(void) { ...@@ -837,7 +839,7 @@ void init_openair1(void) {
openair_daq_vars.tdd = 1; openair_daq_vars.tdd = 1;
openair_daq_vars.rx_gain_mode = DAQ_AGC_ON; openair_daq_vars.rx_gain_mode = DAQ_AGC_ON;
openair_daq_vars.dlsch_transmission_mode = oai_emulation.info.transmission_mode; openair_daq_vars.dlsch_transmission_mode = oai_emulation.info.transmission_mode[0];
openair_daq_vars.target_ue_dl_mcs = target_dl_mcs; openair_daq_vars.target_ue_dl_mcs = target_dl_mcs;
openair_daq_vars.target_ue_ul_mcs = target_ul_mcs; openair_daq_vars.target_ue_ul_mcs = target_ul_mcs;
...@@ -849,7 +851,7 @@ void init_openair1(void) { ...@@ -849,7 +851,7 @@ void init_openair1(void) {
// init_ue_status(); // init_ue_status();
for (UE_id=0; UE_id<NB_UE_INST;UE_id++) for (UE_id=0; UE_id<NB_UE_INST;UE_id++)
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++){ for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++){
PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=130; PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=160;
// update UE_mode for each eNB_id not just 0 // update UE_mode for each eNB_id not just 0
if (abstraction_flag == 0) if (abstraction_flag == 0)
PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = NOT_SYNCHED; PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = NOT_SYNCHED;
...@@ -903,7 +905,7 @@ void init_ocm(void) { ...@@ -903,7 +905,7 @@ void init_ocm(void) {
module_id_t UE_id, eNB_id; module_id_t UE_id, eNB_id;
int CC_id; int CC_id;
/* Added for PHY abstraction */ /* Added for PHY abstraction */
LOG_I(OCM,"Running with frame_type %d, Nid_cell %d, N_RB_DL %d, EP %d, mode %d, target dl_mcs %d, rate adaptation %d, nframes %d, abstraction %d, channel %s\n", oai_emulation.info.frame_type, Nid_cell, oai_emulation.info.N_RB_DL, oai_emulation.info.extended_prefix_flag, oai_emulation.info.transmission_mode,target_dl_mcs,rate_adaptation_flag,oai_emulation.info.n_frames,abstraction_flag,oai_emulation.environment_system_config.fading.small_scale.selected_option); LOG_I(OCM,"Running with frame_type %d, Nid_cell %d, N_RB_DL %d, EP %d, mode %d, target dl_mcs %d, rate adaptation %d, nframes %d, abstraction %d, channel %s\n", oai_emulation.info.frame_type[0], Nid_cell, oai_emulation.info.N_RB_DL[0], oai_emulation.info.extended_prefix_flag[0], oai_emulation.info.transmission_mode[0],target_dl_mcs,rate_adaptation_flag,oai_emulation.info.n_frames,abstraction_flag,oai_emulation.environment_system_config.fading.small_scale.selected_option);
if (abstraction_flag) { if (abstraction_flag) {
...@@ -943,7 +945,7 @@ void init_ocm(void) { ...@@ -943,7 +945,7 @@ void init_ocm(void) {
} }
if (abstraction_flag == 0) if (abstraction_flag == 0)
init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0); init_channel_vars (frame_parms[0], &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
// initialize channel descriptors // initialize channel descriptors
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
...@@ -1081,14 +1083,14 @@ void update_ocm() { ...@@ -1081,14 +1083,14 @@ void update_ocm() {
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_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++) {
//UE2eNB[UE_id][eNB_id]->path_loss_dB = -105 + snr_dB; //pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
if (eNB_id == (UE_id % NB_eNB_INST)) { if (eNB_id == (UE_id % NB_eNB_INST)) {
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -105 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; //+20 to offset the difference in tx power of the UE wrt eNB UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; //+20 to offset the difference in tx power of the UE wrt eNB
} }
else { else {
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -105 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
} }
LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d)\n",eNB_id,UE_id,CC_id, LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d)\n",eNB_id,UE_id,CC_id,
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB,
......
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