Merge branch 'develop' into Feature-6-fix_test_core_network_with_scenarios
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,7 @@ eNBs =
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "95";
|
||||
mobile_network_code = "93";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
@@ -133,7 +133,7 @@ eNBs =
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.62";
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.11";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -142,11 +142,11 @@ eNBs =
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth4";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.242/24";
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth4";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.242/24";
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ eNBs =
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "95";
|
||||
mobile_network_code = "93";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
@@ -36,7 +36,7 @@ eNBs =
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 90;
|
||||
rx_gain = 125;
|
||||
rx_gain = 107;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
@@ -133,7 +133,7 @@ eNBs =
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.62";
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.11";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -142,11 +142,11 @@ eNBs =
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth4";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.242/24";
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth4";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.242/24";
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
eNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
eNB_ID = 0xe00;
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB_Eurecom_LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "10";
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
component_carriers = (
|
||||
{
|
||||
frame_type = "TDD";
|
||||
tdd_config = 3;
|
||||
tdd_config_s = 0;
|
||||
prefix_type = "NORMAL";
|
||||
eutra_band = 38;
|
||||
downlink_frequency = 2580000000L;
|
||||
uplink_frequency_offset = 0;
|
||||
Nid_cell = 0;
|
||||
N_RB_DL = 25;
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 25;
|
||||
rx_gain = 20;
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
prach_zero_correlation = 1;
|
||||
prach_freq_offset = 2;
|
||||
pucch_delta_shift = 1;
|
||||
pucch_nRB_CQI = 1;
|
||||
pucch_nCS_AN = 0;
|
||||
pucch_n1_AN = 32;
|
||||
pdsch_referenceSignalPower = 0;
|
||||
pdsch_p_b = 0;
|
||||
pusch_n_SB = 1;
|
||||
pusch_enable64QAM = "DISABLE";
|
||||
pusch_hoppingMode = "interSubFrame";
|
||||
pusch_hoppingOffset = 0;
|
||||
pusch_groupHoppingEnabled = "ENABLE";
|
||||
pusch_groupAssignment = 0;
|
||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||
pusch_nDMRS1 = 0;
|
||||
phich_duration = "NORMAL";
|
||||
phich_resource = "ONESIXTH";
|
||||
srs_enable = "DISABLE";
|
||||
/* srs_BandwidthConfig =;
|
||||
srs_SubframeConfig =;
|
||||
srs_ackNackST =;
|
||||
srs_MaxUpPts =;*/
|
||||
|
||||
pusch_p0_Nominal = -108;
|
||||
pusch_alpha = "AL1";
|
||||
pucch_p0_Nominal = -108;
|
||||
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 = 64;
|
||||
rach_preamblesGroupAConfig = "DISABLE";
|
||||
/*
|
||||
rach_sizeOfRA_PreamblesGroupA = ;
|
||||
rach_messageSizeGroupA = ;
|
||||
rach_messagePowerOffsetGroupB = ;
|
||||
*/
|
||||
rach_powerRampingStep = 2;
|
||||
rach_preambleInitialReceivedTargetPower = -100;
|
||||
rach_preambleTransMax = 10;
|
||||
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;
|
||||
}
|
||||
);
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "0.0.0.0";
|
||||
ipv6 = "0::0";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "none";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "0.0.0.0/24";
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "none";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "0.0.0.0/24";
|
||||
ENB_PORT_FOR_S1U = 2153; # Spec 2152
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="trace";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="trace";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="trace";
|
||||
mac_log_verbosity ="medium";
|
||||
rlc_log_level ="trace";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="trace";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="trace";
|
||||
rrc_log_verbosity ="medium";
|
||||
gtpu_log_level ="debug";
|
||||
gtpu_log_verbosity ="medium";
|
||||
udp_log_level ="debug";
|
||||
udp_log_verbosity ="medium";
|
||||
osa_log_level ="debug";
|
||||
osa_log_verbosity ="low";
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
@@ -293,6 +293,7 @@ static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/;
|
||||
char rf_config_file[1024];
|
||||
|
||||
int chain_offset=0;
|
||||
int phy_test = 0;
|
||||
|
||||
#ifndef EXMIMO
|
||||
char ref[128] = "internal";
|
||||
@@ -472,7 +473,7 @@ void help (void) {
|
||||
printf(" -d Enable soft scope and L1 and L2 stats (Xforms)\n");
|
||||
printf(" -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n");
|
||||
printf(" -g Set the global log level, valide options: (9:trace, 8/7:debug, 6:info, 4:warn, 3:error)\n");
|
||||
printf(" -G Set the global log level \n");
|
||||
printf(" -G Set the global log verbosity \n");
|
||||
printf(" -h provides this help message!\n");
|
||||
printf(" -K Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n");
|
||||
printf(" -m Set the maximum downlink MCS\n");
|
||||
@@ -577,12 +578,12 @@ static void *scope_thread(void *arg)
|
||||
0,7);
|
||||
|
||||
} else {
|
||||
#ifdef OPENAIR2
|
||||
len = dump_eNB_l2_stats (stats_buffer, 0);
|
||||
//fl_set_object_label(form_stats_l2->stats_text, stats_buffer);
|
||||
fl_clear_browser(form_stats_l2->stats_text);
|
||||
fl_add_browser_line(form_stats_l2->stats_text, stats_buffer);
|
||||
#endif
|
||||
if (PHY_vars_eNB_g[0][0]->mac_enabled==1) {
|
||||
len = dump_eNB_l2_stats (stats_buffer, 0);
|
||||
//fl_set_object_label(form_stats_l2->stats_text, stats_buffer);
|
||||
fl_clear_browser(form_stats_l2->stats_text);
|
||||
fl_add_browser_line(form_stats_l2->stats_text, stats_buffer);
|
||||
}
|
||||
len = dump_eNB_stats (PHY_vars_eNB_g[0][0], stats_buffer, 0);
|
||||
|
||||
if (MAX_NUM_CCs>1)
|
||||
@@ -2117,7 +2118,8 @@ static void get_options (int argc, char **argv)
|
||||
LONG_OPTION_SCANCARRIER,
|
||||
LONG_OPTION_MAXPOWER,
|
||||
LONG_OPTION_DUMP_FRAME,
|
||||
LONG_OPTION_LOOPMEMORY
|
||||
LONG_OPTION_LOOPMEMORY,
|
||||
LONG_OPTION_PHYTEST
|
||||
};
|
||||
|
||||
static const struct option long_options[] = {
|
||||
@@ -2135,15 +2137,19 @@ static void get_options (int argc, char **argv)
|
||||
{"ue-max-power", required_argument, NULL, LONG_OPTION_MAXPOWER},
|
||||
{"ue-dump-frame", no_argument, NULL, LONG_OPTION_DUMP_FRAME},
|
||||
{"loop-memory", required_argument, NULL, LONG_OPTION_LOOPMEMORY},
|
||||
{"phy-test", no_argument, NULL, LONG_OPTION_PHYTEST},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
while ((c = getopt_long (argc, argv, "A:a:C:dEK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) {
|
||||
switch (c) {
|
||||
case LONG_OPTION_RF_CONFIG_FILE:
|
||||
if (strlen(optarg)<=1024)
|
||||
strcpy(rf_config_file,optarg);
|
||||
else {
|
||||
if ((strcmp("null", optarg) == 0) || (strcmp("NULL", optarg) == 0)) {
|
||||
printf("no configuration filename is provided\n");
|
||||
}
|
||||
else if (strlen(optarg)<=1024){
|
||||
strcpy(rf_config_file,optarg);
|
||||
}else {
|
||||
printf("Configuration filename is too long\n");
|
||||
exit(-1);
|
||||
}
|
||||
@@ -2211,9 +2217,14 @@ static void get_options (int argc, char **argv)
|
||||
AssertFatal(input_fd != NULL,"Please provide an input file\n");
|
||||
break;
|
||||
|
||||
case LONG_OPTION_DUMP_FRAME:
|
||||
mode = rx_dump_frame;
|
||||
break;
|
||||
case LONG_OPTION_DUMP_FRAME:
|
||||
mode = rx_dump_frame;
|
||||
break;
|
||||
|
||||
case LONG_OPTION_PHYTEST:
|
||||
phy_test = 1;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
timing_advance = atoi (optarg);
|
||||
break;
|
||||
@@ -2269,7 +2280,6 @@ static void get_options (int argc, char **argv)
|
||||
case 't':
|
||||
target_ul_mcs = atoi (optarg);
|
||||
break;
|
||||
#ifdef OPENAIR2
|
||||
|
||||
case 'W':
|
||||
opt_enabled=1;
|
||||
@@ -2304,7 +2314,6 @@ static void get_options (int argc, char **argv)
|
||||
}
|
||||
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 'V':
|
||||
ouput_vcd = 1;
|
||||
@@ -2412,8 +2421,8 @@ static void get_options (int argc, char **argv)
|
||||
case 'x':
|
||||
transmission_mode = atoi(optarg);
|
||||
|
||||
if (transmission_mode > 2) {
|
||||
printf("Transmission mode > 2 (%d) not supported for the moment\n",transmission_mode);
|
||||
if (transmission_mode > 7) {
|
||||
printf("Transmission mode %d not supported for the moment\n",transmission_mode);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
@@ -2508,8 +2517,6 @@ static void get_options (int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
#ifdef OPENAIR2
|
||||
|
||||
init_all_otg(0);
|
||||
g_otg->seed = 0;
|
||||
init_seeds(g_otg->seed);
|
||||
@@ -2527,7 +2534,6 @@ static void get_options (int argc, char **argv)
|
||||
|
||||
init_predef_traffic(enb_properties->properties[i]->num_otg_elements, 1);
|
||||
|
||||
#endif
|
||||
|
||||
glog_level = enb_properties->properties[i]->glog_level;
|
||||
glog_verbosity = enb_properties->properties[i]->glog_verbosity;
|
||||
@@ -2589,9 +2595,7 @@ int main( int argc, char **argv )
|
||||
int CC_id;
|
||||
uint16_t Nid_cell = 0;
|
||||
uint8_t cooperation_flag=0, abstraction_flag=0;
|
||||
#ifndef OPENAIR2
|
||||
uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_TCXO
|
||||
unsigned int tcxo = 114;
|
||||
@@ -2659,8 +2663,8 @@ int main( int argc, char **argv )
|
||||
if (UE_flag==1) {
|
||||
printf("configuring for UE\n");
|
||||
|
||||
set_comp_log(HW, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1);
|
||||
set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1);
|
||||
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(RLC, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1);
|
||||
@@ -2676,15 +2680,9 @@ int main( int argc, char **argv )
|
||||
printf("configuring for eNB\n");
|
||||
|
||||
set_comp_log(HW, hw_log_level, hw_log_verbosity, 1);
|
||||
#ifdef OPENAIR2
|
||||
set_comp_log(PHY, phy_log_level, phy_log_verbosity, 1);
|
||||
|
||||
if (opt_enabled == 1 )
|
||||
set_comp_log(OPT, opt_log_level, opt_log_verbosity, 1);
|
||||
|
||||
#else
|
||||
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
||||
#endif
|
||||
set_comp_log(MAC, mac_log_level, mac_log_verbosity, 1);
|
||||
set_comp_log(RLC, rlc_log_level, rlc_log_verbosity, 1);
|
||||
set_comp_log(PDCP, pdcp_log_level, pdcp_log_verbosity, 1);
|
||||
@@ -2740,8 +2738,6 @@ int main( int argc, char **argv )
|
||||
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
|
||||
#endif
|
||||
|
||||
#ifdef OPENAIR2
|
||||
|
||||
if (opt_type != OPT_NONE) {
|
||||
radio_type_t radio_type;
|
||||
|
||||
@@ -2754,7 +2750,6 @@ int main( int argc, char **argv )
|
||||
LOG_E(OPT,"failed to run OPT \n");
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
netlink_init();
|
||||
#if defined(PDCP_USE_NETLINK_QUEUES)
|
||||
@@ -2824,21 +2819,24 @@ int main( int argc, char **argv )
|
||||
PHY_vars_UE_g[0][CC_id] = init_lte_UE(frame_parms[CC_id], 0,abstraction_flag,transmission_mode);
|
||||
UE[CC_id] = PHY_vars_UE_g[0][CC_id];
|
||||
printf("PHY_vars_UE_g[0][%d] = %p\n",CC_id,UE[CC_id]);
|
||||
#ifndef OPENAIR2
|
||||
|
||||
for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
|
||||
if (phy_test==1)
|
||||
UE[CC_id]->mac_enabled = 0;
|
||||
else
|
||||
UE[CC_id]->mac_enabled = 1;
|
||||
|
||||
UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
|
||||
UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
|
||||
UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
if (UE[CC_id]->mac_enabled == 0) {
|
||||
for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
|
||||
|
||||
UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
|
||||
UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
|
||||
UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
UE[CC_id]->UE_scan = UE_scan;
|
||||
UE[CC_id]->UE_scan_carrier = UE_scan_carrier;
|
||||
UE[CC_id]->mode = mode;
|
||||
@@ -2847,13 +2845,12 @@ int main( int argc, char **argv )
|
||||
UE[CC_id]->lte_frame_parms.frame_type,
|
||||
UE[CC_id]->X_u);
|
||||
|
||||
UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
|
||||
#ifndef OPENAIR2
|
||||
UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
|
||||
#endif
|
||||
if (UE[CC_id]->mac_enabled == 1)
|
||||
UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
|
||||
else
|
||||
UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
|
||||
|
||||
#ifdef EXMIMO
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
UE[CC_id]->rx_gain_max[i] = rxg_max[i];
|
||||
UE[CC_id]->rx_gain_med[i] = rxg_med[i];
|
||||
@@ -2887,9 +2884,7 @@ int main( int argc, char **argv )
|
||||
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
||||
|
||||
|
||||
|
||||
#ifdef EXMIMO
|
||||
|
||||
//N_TA_offset
|
||||
if (UE[CC_id]->lte_frame_parms.frame_type == TDD) {
|
||||
if (UE[CC_id]->lte_frame_parms.N_RB_DL == 100)
|
||||
@@ -2901,7 +2896,6 @@ int main( int argc, char **argv )
|
||||
} else {
|
||||
UE[CC_id]->N_TA_offset = 0;
|
||||
}
|
||||
|
||||
#else
|
||||
//already taken care of in lte-softmodem
|
||||
UE[CC_id]->N_TA_offset = 0;
|
||||
@@ -2925,20 +2919,23 @@ int main( int argc, char **argv )
|
||||
PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
|
||||
PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
if (phy_test==1)
|
||||
PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0;
|
||||
else
|
||||
PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1;
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
|
||||
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
if (PHY_vars_eNB_g[0][CC_id]->mac_enabled == 0) {
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
|
||||
PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
|
||||
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
|
||||
PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
compute_prach_seq(&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.prach_config_common,
|
||||
PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.frame_type,
|
||||
PHY_vars_eNB_g[0][CC_id]->X_u);
|
||||
@@ -3147,16 +3144,12 @@ int main( int argc, char **argv )
|
||||
|
||||
mac_xface = malloc(sizeof(MAC_xface));
|
||||
|
||||
#ifdef OPENAIR2
|
||||
int eMBMS_active=0;
|
||||
|
||||
|
||||
l2_init(frame_parms[0],eMBMS_active,(uecap_xer_in==1)?uecap_xer:NULL,
|
||||
0,// cba_group_active
|
||||
0); // HO flag
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
0,// cba_group_active
|
||||
0); // HO flag
|
||||
|
||||
mac_xface->macphy_exit = &exit_fun;
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
@@ -3169,15 +3162,14 @@ int main( int argc, char **argv )
|
||||
printf("ITTI tasks created\n");
|
||||
#endif
|
||||
|
||||
#ifdef OPENAIR2
|
||||
if (UE_flag==1) {
|
||||
printf("Filling UE band info\n");
|
||||
fill_ue_band_info();
|
||||
mac_xface->dl_phy_sync_success (0, 0, 0, 1);
|
||||
} else
|
||||
mac_xface->mrbch_phy_sync_failure (0, 0, 0);
|
||||
|
||||
#endif
|
||||
if (phy_test==0) {
|
||||
if (UE_flag==1) {
|
||||
printf("Filling UE band info\n");
|
||||
fill_ue_band_info();
|
||||
mac_xface->dl_phy_sync_success (0, 0, 0, 1);
|
||||
} else
|
||||
mac_xface->mrbch_phy_sync_failure (0, 0, 0);
|
||||
}
|
||||
|
||||
/* #ifdef OPENAIR2
|
||||
//if (otg_enabled) {
|
||||
@@ -3568,9 +3560,6 @@ int main( int argc, char **argv )
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef OPENAIR2
|
||||
//cleanup_pdcp_thread();
|
||||
#endif
|
||||
|
||||
#ifdef RTAI
|
||||
stop_rt_timer();
|
||||
@@ -3605,13 +3594,9 @@ int main( int argc, char **argv )
|
||||
if (ouput_vcd)
|
||||
VCD_SIGNAL_DUMPER_CLOSE();
|
||||
|
||||
#ifdef OPENAIR2
|
||||
|
||||
if (opt_enabled == 1)
|
||||
terminate_opt();
|
||||
|
||||
#endif
|
||||
|
||||
logClean();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -925,9 +925,7 @@ static void *UE_thread_rx(void *arg)
|
||||
phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
|
||||
}
|
||||
|
||||
#ifdef OPENAIR2
|
||||
|
||||
if (i==0) {
|
||||
if ((UE->mac_enabled==1) && (i==0)) {
|
||||
ret = mac_xface->ue_scheduler(UE->Mod_id,
|
||||
UE->frame_tx,
|
||||
UE->slot_rx>>1,
|
||||
@@ -950,7 +948,6 @@ static void *UE_thread_rx(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
UE->slot_rx++;
|
||||
|
||||
if (UE->slot_rx == 20) {
|
||||
|
||||
@@ -169,8 +169,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
|
||||
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,(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)
|
||||
//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)));
|
||||
// freq_channel(desc1,frame_parms->N_RB_DL,nb_samples);
|
||||
//write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8);
|
||||
@@ -204,12 +202,13 @@ void do_DL_sig(double **r_re0,double **r_im0,
|
||||
|
||||
// calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved)
|
||||
init_snr(eNB2UE[att_eNB_id][UE_id][CC_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, &PHY_vars_UE_g[UE_id][CC_id]->N0,
|
||||
PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single,PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off);
|
||||
PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single,
|
||||
PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL);
|
||||
|
||||
// calculate sinr here
|
||||
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
|
||||
if (att_eNB_id != eNB_id) {
|
||||
calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB);
|
||||
calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL);
|
||||
}
|
||||
}
|
||||
} // hold channel
|
||||
@@ -220,18 +219,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
|
||||
Call do_OFDM_mod from phy_procedures_eNB_TX function
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//for (UE_id=0;UE_id<NB_UE_INST;UE_id++) {
|
||||
// Compute RX signal for UE = UE_id
|
||||
/*
|
||||
for (i=0;i<(frame_parms->samples_per_tti>>1);i++) {
|
||||
for (aa=0;aa<nb_antennas_rx;aa++) {
|
||||
r_re[aa][i]=0.0;
|
||||
r_im[aa][i]=0.0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
// printf("r_re[0] %p\n",r_re[0]);
|
||||
for (aa=0; aa<nb_antennas_rx; aa++) {
|
||||
memset((void*)r_re[aa],0,(frame_parms->samples_per_tti>>1)*sizeof(double));
|
||||
|
||||
+45
-37
@@ -75,9 +75,9 @@
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
|
||||
#ifdef XFORMS
|
||||
//#ifdef XFORMS
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#ifdef SMBV
|
||||
// Rohde&Schwarz SMBV100A vector signal generator
|
||||
@@ -163,9 +163,10 @@ extern uint16_t Nid_cell;
|
||||
|
||||
extern LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
|
||||
|
||||
#ifdef XFORMS
|
||||
//#ifdef XFORMS
|
||||
int otg_enabled;
|
||||
#endif
|
||||
int xforms=0;
|
||||
//#endif
|
||||
|
||||
time_stats_t oaisim_stats;
|
||||
time_stats_t oaisim_stats_f;
|
||||
@@ -446,17 +447,18 @@ l2l1_task (void *args_p)
|
||||
char fname[64], vname[64];
|
||||
int sf;
|
||||
protocol_ctxt_t ctxt;
|
||||
#ifdef XFORMS
|
||||
//#ifdef XFORMS
|
||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||
// at eNB 0, an UL scope for every UE
|
||||
FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_ue *form_ue[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX];
|
||||
char title[255];
|
||||
char xname[32] = "oaisim";
|
||||
int xargc = 1;
|
||||
char *xargv[1];
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#define PRINT_STATS
|
||||
#ifdef PRINT_STATS
|
||||
int len;
|
||||
FILE *UE_stats[NUMBER_OF_UE_MAX];
|
||||
@@ -485,31 +487,34 @@ l2l1_task (void *args_p)
|
||||
PHY_vars_eNB_g[eNB_inst][CC_id]->proc[9].frame_tx = 1;
|
||||
}
|
||||
|
||||
#ifdef XFORMS
|
||||
xargv[0] = xname;
|
||||
fl_initialize (&xargc, xargv, NULL, 0, 0);
|
||||
eNB_inst = 0;
|
||||
//#ifdef XFORMS
|
||||
if (xforms==1) {
|
||||
xargv[0] = xname;
|
||||
fl_initialize (&xargc, xargv, NULL, 0, 0);
|
||||
eNB_inst = 0;
|
||||
|
||||
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
|
||||
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||
// DL scope at UEs
|
||||
form_ue[CC_id][UE_inst] = create_lte_phy_scope_ue();
|
||||
sprintf (title, "LTE DL SCOPE eNB %d to UE %d CC_id %d", eNB_inst, UE_inst, CC_id);
|
||||
fl_show_form (form_ue[CC_id][UE_inst]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
|
||||
// DL scope at UEs
|
||||
form_ue[UE_inst] = create_lte_phy_scope_ue();
|
||||
sprintf (title, "LTE DL SCOPE eNB %d to UE %d", eNB_inst, UE_inst);
|
||||
fl_show_form (form_ue[UE_inst]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
// UL scope at eNB 0
|
||||
form_enb[UE_inst] = create_lte_phy_scope_enb();
|
||||
sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
|
||||
fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
if (openair_daq_vars.use_ia_receiver == 1) {
|
||||
fl_set_button(form_ue[UE_inst]->button_0,1);
|
||||
fl_set_object_label(form_ue[UE_inst]->button_0, "IA Receiver ON");
|
||||
fl_set_object_color(form_ue[UE_inst]->button_0, FL_GREEN, FL_GREEN);
|
||||
if (openair_daq_vars.use_ia_receiver == 1) {
|
||||
fl_set_button(form_ue[CC_id][UE_inst]->button_0,1);
|
||||
fl_set_object_label(form_ue[CC_id][UE_inst]->button_0, "IA Receiver ON");
|
||||
fl_set_object_color(form_ue[CC_id][UE_inst]->button_0, FL_GREEN, FL_GREEN);
|
||||
}
|
||||
|
||||
}
|
||||
// UL scope at eNB 0
|
||||
form_enb[UE_inst] = create_lte_phy_scope_enb();
|
||||
sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
|
||||
fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#ifdef PRINT_STATS
|
||||
|
||||
@@ -1176,23 +1181,26 @@ l2l1_task (void *args_p)
|
||||
1, 1);
|
||||
}
|
||||
|
||||
#ifdef XFORMS
|
||||
//#ifdef XFORMS
|
||||
if (xforms==1) {
|
||||
eNB_inst = 0;
|
||||
|
||||
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
|
||||
phy_scope_UE(form_ue[UE_inst],
|
||||
PHY_vars_UE_g[UE_inst][0],
|
||||
eNB_inst,
|
||||
UE_inst,
|
||||
7);
|
||||
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||
phy_scope_UE(form_ue[CC_id][UE_inst],
|
||||
PHY_vars_UE_g[UE_inst][CC_id],
|
||||
eNB_inst,
|
||||
UE_inst,
|
||||
7);
|
||||
}
|
||||
|
||||
phy_scope_eNB(form_enb[UE_inst],
|
||||
PHY_vars_eNB_g[eNB_inst][0],
|
||||
UE_inst);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
#ifdef SMBV
|
||||
|
||||
|
||||
@@ -62,9 +62,9 @@ void extract_position(node_list* input_node_list, node_desc_t**, int nb_nodes);/
|
||||
void get_beta_map(void);//Abstraction changes
|
||||
void get_MIESM_param(void);
|
||||
|
||||
void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t);//Abstraction changes
|
||||
void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t, uint16_t);//Abstraction changes
|
||||
void init_snr_up(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint16_t, uint16_t);//Abstraction changes
|
||||
void calculate_sinr(channel_desc_t *, node_desc_t *, node_desc_t *, double *sinr_dB);//Abstraction changes
|
||||
void calculate_sinr(channel_desc_t *, node_desc_t *, node_desc_t *, double *sinr_dB, uint16_t);//Abstraction changes
|
||||
void get_beta_map(void);
|
||||
int dlsch_abstraction_EESM(double* sinr_dB, uint32_t rb_alloc[4], uint8_t mcs, uint8_t); //temporary testing for PHY abstraction
|
||||
int dlsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs,uint8_t);
|
||||
|
||||
@@ -136,6 +136,8 @@ int td = 0;
|
||||
int td_avg = 0;
|
||||
int sleep_time_us = 0;
|
||||
|
||||
int phy_test = 0;
|
||||
|
||||
#ifdef OPENAIR2
|
||||
// omv related info
|
||||
//pid_t omv_pid;
|
||||
@@ -170,6 +172,8 @@ extern pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSe
|
||||
extern time_stats_t dl_chan_stats;
|
||||
extern time_stats_t ul_chan_stats;
|
||||
|
||||
extern int xforms;
|
||||
|
||||
void get_simulation_options(int argc, char *argv[])
|
||||
{
|
||||
int option;
|
||||
@@ -206,6 +210,9 @@ void get_simulation_options(int argc, char *argv[])
|
||||
LONG_OPTION_MALLOC_TRACE_ENABLED,
|
||||
|
||||
LONG_OPTION_CBA_BACKOFF_TIMER,
|
||||
|
||||
LONG_OPTION_PHYTEST,
|
||||
LONG_OPTION_XFORMS,
|
||||
};
|
||||
|
||||
static struct option long_options[] = {
|
||||
@@ -237,11 +244,18 @@ void get_simulation_options(int argc, char *argv[])
|
||||
|
||||
{"cba-backoff", required_argument, 0, LONG_OPTION_CBA_BACKOFF_TIMER},
|
||||
|
||||
{"phy-test", no_argument, NULL, LONG_OPTION_PHYTEST},
|
||||
{"xforms", no_argument, 0, LONG_OPTION_XFORMS},
|
||||
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
while ((option = getopt_long (argc, argv, "aA:b:B:c:C:D:d:eE:f:FGg:hHi:IJ:j:k:K:l:L:m:M:n:N:oO:p:P:qQ:rR:s:S:t:T:u:U:vV:w:W:x:X:y:Y:z:Z:", long_options, NULL)) != -1) {
|
||||
switch (option) {
|
||||
case LONG_OPTION_PHYTEST:
|
||||
phy_test = 1;
|
||||
break;
|
||||
|
||||
case LONG_OPTION_ENB_CONF:
|
||||
if (optarg) {
|
||||
free(conf_config_file_name); // prevent memory leak if option is used multiple times
|
||||
@@ -396,6 +410,10 @@ void get_simulation_options(int argc, char *argv[])
|
||||
break;
|
||||
#endif
|
||||
|
||||
case LONG_OPTION_XFORMS:
|
||||
xforms=1;
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
abstraction_flag = 1;
|
||||
break;
|
||||
@@ -976,13 +994,21 @@ void init_openair1(void)
|
||||
}
|
||||
}
|
||||
|
||||
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++)
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
if (phy_test==1)
|
||||
PHY_vars_eNB_g[eNB_id][CC_id]->mac_enabled=0;
|
||||
else
|
||||
PHY_vars_eNB_g[eNB_id][CC_id]->mac_enabled=1;
|
||||
}
|
||||
|
||||
// init_ue_status();
|
||||
for (UE_id=0; UE_id<NB_UE_INST; UE_id++)
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_power_max_dBm=23;
|
||||
|
||||
PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=160;
|
||||
PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=100;
|
||||
|
||||
// update UE_mode for each eNB_id not just 0
|
||||
if (abstraction_flag == 0)
|
||||
@@ -992,6 +1018,11 @@ void init_openair1(void)
|
||||
PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = PRACH;
|
||||
}
|
||||
|
||||
if (phy_test==1)
|
||||
PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=0;
|
||||
else
|
||||
PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=1;
|
||||
|
||||
PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235 + UE_id;
|
||||
PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10;
|
||||
|
||||
@@ -1260,8 +1291,7 @@ void update_ocm()
|
||||
//pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
|
||||
if (eNB_id == (UE_id % NB_eNB_INST)) {
|
||||
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 = -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
|
||||
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;
|
||||
} else {
|
||||
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 = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
@@ -1280,6 +1310,7 @@ void update_ocm()
|
||||
#ifdef OPENAIR2
|
||||
void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime)
|
||||
{
|
||||
|
||||
#if defined(USER_MODE) && defined(OAI_EMU)
|
||||
|
||||
int rrc_state=0;
|
||||
|
||||
@@ -244,20 +244,19 @@ void calc_path_loss(node_desc_t* enb_data, node_desc_t* ue_data, channel_desc_t
|
||||
|
||||
|
||||
|
||||
void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off)
|
||||
void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off, uint16_t nb_rb)
|
||||
{
|
||||
|
||||
uint16_t nb_rb = 25; //No. of resource blocks
|
||||
double thermal_noise,abs_channel,channelx, channely,channelx_i, channely_i ;
|
||||
int count;
|
||||
int aarx,aatx;
|
||||
uint8_t qq;
|
||||
|
||||
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
|
||||
thermal_noise = -174 + 10*log10(eNB2UE->sampling_rate*1e6); //value in dBm
|
||||
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth*/
|
||||
thermal_noise = -174 + 10*log10(15000); //per RE; value in dBm
|
||||
|
||||
//for (aarx=0; aarx<eNB2UE->nb_rx; aarx++)
|
||||
*N0 = thermal_noise + ue_data->rx_noise_level;//? all the element have the same noise level?????
|
||||
*N0 = thermal_noise + ue_data->rx_noise_level;
|
||||
|
||||
LOG_D(OCM,"Path loss %lf, noise (N0) %lf, signal %lf, snr %lf\n",
|
||||
eNB2UE->path_loss_dB,
|
||||
@@ -549,15 +548,14 @@ void init_snr_up(channel_desc_t* UE2eNB, node_desc_t *enb_data, node_desc_t *ue_
|
||||
|
||||
#endif
|
||||
|
||||
void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB)
|
||||
void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB, uint16_t nb_rb)
|
||||
{
|
||||
|
||||
double sir, thermal_noise;
|
||||
short nb_rb = 25; //No. of resource blocks
|
||||
short count;
|
||||
|
||||
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
|
||||
thermal_noise = -174 + 10*log10(eNB2UE->sampling_rate*1e6); //value in dBm
|
||||
thermal_noise = -174 + 10*log10(15000); //per RE, value in dBm
|
||||
|
||||
for (count = 0; count < 12 * nb_rb; count++) {
|
||||
sir = enb_data->tx_power_dBm
|
||||
|
||||
Reference in New Issue
Block a user