diff --git a/lib/include/srslte/phy/channel/channel.h b/lib/include/srslte/phy/channel/channel.h index ae79f9812..d6fcf706e 100644 --- a/lib/include/srslte/phy/channel/channel.h +++ b/lib/include/srslte/phy/channel/channel.h @@ -40,8 +40,9 @@ public: bool enable = false; // AWGN options - bool awgn_enable = false; - float awgn_n0_dBfs = -30.0f; + bool awgn_enable = false; + float awgn_signal_power_dBfs = 0.0f; + float awgn_snr_dB = 30.0f; // Fading options bool fading_enable = false; @@ -70,6 +71,7 @@ public: ~channel(); void set_logger(log_filter* _log_h); void set_srate(uint32_t srate); + void set_signal_power_dBfs(float power_dBfs); void run(cf_t* in[SRSLTE_MAX_CHANNELS], cf_t* out[SRSLTE_MAX_CHANNELS], uint32_t len, const srslte_timestamp_t& t); private: diff --git a/lib/include/srslte/phy/enb/enb_dl.h b/lib/include/srslte/phy/enb/enb_dl.h index 4ceee5b45..efe525e6a 100644 --- a/lib/include/srslte/phy/enb/enb_dl.h +++ b/lib/include/srslte/phy/enb/enb_dl.h @@ -160,4 +160,11 @@ SRSLTE_API void srslte_enb_dl_get_ack(const srslte_cell_t* cell, const srslte_uci_value_t* uci_value, srslte_pdsch_ack_t* pdsch_ack); +/** + * Gets the maximum signal power in decibels full scale. It is equivalent to the transmit power if all resource elements + * were populated. + * @return The maximum power + */ +SRSLTE_API float srslte_enb_dl_get_maximum_signal_power_dBfs(uint32_t nof_prb); + #endif // SRSLTE_ENB_DL_H diff --git a/lib/src/phy/channel/channel.cc b/lib/src/phy/channel/channel.cc index 4966f6800..91026c0bb 100644 --- a/lib/src/phy/channel/channel.cc +++ b/lib/src/phy/channel/channel.cc @@ -78,7 +78,7 @@ channel::channel(const channel::args_t& channel_args, uint32_t _nof_channels) if (channel_args.awgn_enable && ret == SRSLTE_SUCCESS) { awgn = (srslte_channel_awgn_t*)calloc(sizeof(srslte_channel_awgn_t), 1); ret = srslte_channel_awgn_init(awgn, 1234); - srslte_channel_awgn_set_n0(awgn, args.awgn_n0_dBfs); + srslte_channel_awgn_set_n0(awgn, args.awgn_signal_power_dBfs - args.awgn_snr_dB); } // Create high speed train @@ -264,3 +264,10 @@ void channel::set_srate(uint32_t srate) current_srate = srate; } } + +void channel::set_signal_power_dBfs(float power_dBfs) +{ + if (awgn != nullptr) { + srslte_channel_awgn_set_n0(awgn, power_dBfs - args.awgn_snr_dB); + } +} diff --git a/lib/src/phy/enb/enb_dl.c b/lib/src/phy/enb/enb_dl.c index 5fb6ffc55..592182ba1 100644 --- a/lib/src/phy/enb/enb_dl.c +++ b/lib/src/phy/enb/enb_dl.c @@ -27,12 +27,12 @@ #include #define CURRENT_FFTSIZE srslte_symbol_sz(q->cell.nof_prb) -#define CURRENT_SFLEN SRSLTE_SF_LEN(CURRENT_FFTSIZE) - -#define CURRENT_SLOTLEN_RE SRSLTE_SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SRSLTE_NOF_RE(q->cell) -#define SRSLTE_ENB_RF_AMP 0.1 +static float enb_dl_get_norm_factor(uint32_t nof_prb) +{ + return 0.05f / sqrtf(nof_prb); +} int srslte_enb_dl_init(srslte_enb_dl_t* q, cf_t* out_buffer[SRSLTE_MAX_PORTS], uint32_t max_prb) { @@ -408,7 +408,7 @@ int srslte_enb_dl_put_pmch(srslte_enb_dl_t* q, srslte_pmch_cfg_t* pmch_cfg, uint void srslte_enb_dl_gen_signal(srslte_enb_dl_t* q) { // TODO: PAPR control - float norm_factor = 0.05f / sqrtf(q->cell.nof_prb); + float norm_factor = enb_dl_get_norm_factor(q->cell.nof_prb); if (q->dl_sf.sf_type == SRSLTE_SF_MBSFN) { srslte_ofdm_tx_sf(&q->ifft_mbsfn); @@ -642,3 +642,9 @@ void srslte_enb_dl_get_ack(const srslte_cell_t* cell, ERROR("Not implemented for TDD\n"); } } + +float srslte_enb_dl_get_maximum_signal_power_dBfs(uint32_t nof_prb) +{ + return srslte_convert_amplitude_to_dB(enb_dl_get_norm_factor(nof_prb)) + + srslte_convert_power_to_dB((float)nof_prb * SRSLTE_NRE) + 3.0f; +} diff --git a/srsenb/src/main.cc b/srsenb/src/main.cc index 746d676f4..00e1acb24 100644 --- a/srsenb/src/main.cc +++ b/srsenb/src/main.cc @@ -141,42 +141,43 @@ void parse_args(all_args_t* args, int argc, char* argv[]) ("scheduler.mcs_uci_dec", bpo::value(&args->stack.mac.sched.uci_mcs_dec)->default_value(3), "Decrement of MCS in case UL grant carries UCI.") /* Downlink Channel emulator section */ - ("channel.dl.enable", bpo::value(&args->phy.dl_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") - ("channel.dl.awgn.enable", bpo::value(&args->phy.dl_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") - ("channel.dl.awgn.n0", bpo::value(&args->phy.dl_channel_args.awgn_n0_dBfs)->default_value(-30.0f), "Noise level in decibels full scale (dBfs)") - ("channel.dl.fading.enable", bpo::value(&args->phy.dl_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") - ("channel.dl.fading.model", bpo::value(&args->phy.dl_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") - ("channel.dl.delay.enable", bpo::value(&args->phy.dl_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") - ("channel.dl.delay.period_s", bpo::value(&args->phy.dl_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") - ("channel.dl.delay.init_time_s", bpo::value(&args->phy.dl_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") - ("channel.dl.delay.maximum_us", bpo::value(&args->phy.dl_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") - ("channel.dl.delay.minimum_us", bpo::value(&args->phy.dl_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") - ("channel.dl.rlf.enable", bpo::value(&args->phy.dl_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") - ("channel.dl.rlf.t_on_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") - ("channel.dl.rlf.t_off_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") - ("channel.dl.hst.enable", bpo::value(&args->phy.dl_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") - ("channel.dl.hst.period_s", bpo::value(&args->phy.dl_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") - ("channel.dl.hst.fd_hz", bpo::value(&args->phy.dl_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") - ("channel.dl.hst.init_time_s", bpo::value(&args->phy.dl_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.dl.enable", bpo::value(&args->phy.dl_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") + ("channel.dl.awgn.enable", bpo::value(&args->phy.dl_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") + ("channel.dl.awgn.snr", bpo::value(&args->phy.dl_channel_args.awgn_snr_dB)->default_value(30.0f), "Noise level in decibels full scale (dBfs)") + ("channel.dl.fading.enable", bpo::value(&args->phy.dl_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") + ("channel.dl.fading.model", bpo::value(&args->phy.dl_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") + ("channel.dl.delay.enable", bpo::value(&args->phy.dl_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") + ("channel.dl.delay.period_s", bpo::value(&args->phy.dl_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") + ("channel.dl.delay.init_time_s", bpo::value(&args->phy.dl_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.dl.delay.maximum_us", bpo::value(&args->phy.dl_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") + ("channel.dl.delay.minimum_us", bpo::value(&args->phy.dl_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") + ("channel.dl.rlf.enable", bpo::value(&args->phy.dl_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") + ("channel.dl.rlf.t_on_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") + ("channel.dl.rlf.t_off_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") + ("channel.dl.hst.enable", bpo::value(&args->phy.dl_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") + ("channel.dl.hst.period_s", bpo::value(&args->phy.dl_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") + ("channel.dl.hst.fd_hz", bpo::value(&args->phy.dl_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") + ("channel.dl.hst.init_time_s", bpo::value(&args->phy.dl_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") /* Uplink Channel emulator section */ - ("channel.ul.enable", bpo::value(&args->phy.ul_channel_args.enable)->default_value(false), "Enable/Disable internal Uplink channel emulator") - ("channel.ul.awgn.enable", bpo::value(&args->phy.ul_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") - ("channel.ul.awgn.n0", bpo::value(&args->phy.ul_channel_args.awgn_n0_dBfs)->default_value(-30.0f), "Noise level in decibels full scale (dBfs)") - ("channel.ul.fading.enable", bpo::value(&args->phy.ul_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") - ("channel.ul.fading.model", bpo::value(&args->phy.ul_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") - ("channel.ul.delay.enable", bpo::value(&args->phy.ul_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") - ("channel.ul.delay.period_s", bpo::value(&args->phy.ul_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") - ("channel.ul.delay.init_time_s", bpo::value(&args->phy.ul_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") - ("channel.ul.delay.maximum_us", bpo::value(&args->phy.ul_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") - ("channel.ul.delay.minimum_us", bpo::value(&args->phy.ul_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") - ("channel.ul.rlf.enable", bpo::value(&args->phy.ul_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") - ("channel.ul.rlf.t_on_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") - ("channel.ul.rlf.t_off_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") - ("channel.ul.hst.enable", bpo::value(&args->phy.ul_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") - ("channel.ul.hst.period_s", bpo::value(&args->phy.ul_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") - ("channel.ul.hst.fd_hz", bpo::value(&args->phy.ul_channel_args.hst_fd_hz)->default_value(-750.0f), "Doppler frequency in Hz") - ("channel.ul.hst.init_time_s", bpo::value(&args->phy.ul_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.ul.enable", bpo::value(&args->phy.ul_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") + ("channel.ul.awgn.enable", bpo::value(&args->phy.ul_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") + ("channel.ul.awgn.signal_power", bpo::value(&args->phy.ul_channel_args.awgn_signal_power_dBfs)->default_value(30.0f), "Received signal power in decibels full scale (dBfs)") + ("channel.ul.awgn.snr", bpo::value(&args->phy.ul_channel_args.awgn_snr_dB)->default_value(30.0f), "Noise level in decibels full scale (dBfs)") + ("channel.ul.fading.enable", bpo::value(&args->phy.ul_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") + ("channel.ul.fading.model", bpo::value(&args->phy.ul_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") + ("channel.ul.delay.enable", bpo::value(&args->phy.ul_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") + ("channel.ul.delay.period_s", bpo::value(&args->phy.ul_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") + ("channel.ul.delay.init_time_s", bpo::value(&args->phy.ul_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.ul.delay.maximum_us", bpo::value(&args->phy.ul_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") + ("channel.ul.delay.minimum_us", bpo::value(&args->phy.ul_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") + ("channel.ul.rlf.enable", bpo::value(&args->phy.ul_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") + ("channel.ul.rlf.t_on_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") + ("channel.ul.rlf.t_off_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") + ("channel.ul.hst.enable", bpo::value(&args->phy.ul_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") + ("channel.ul.hst.period_s", bpo::value(&args->phy.ul_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") + ("channel.ul.hst.fd_hz", bpo::value(&args->phy.ul_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") + ("channel.ul.hst.init_time_s", bpo::value(&args->phy.ul_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") /* Expert section */ ("expert.metrics_period_secs", bpo::value(&args->general.metrics_period_secs)->default_value(1.0), "Periodicity for metrics in seconds") diff --git a/srsenb/src/phy/phy_common.cc b/srsenb/src/phy/phy_common.cc index 1c134e0ab..5778f7959 100644 --- a/srsenb/src/phy/phy_common.cc +++ b/srsenb/src/phy/phy_common.cc @@ -70,6 +70,7 @@ bool phy_common::init(const phy_cell_cfg_list_t& cell_list_, if (params.dl_channel_args.enable) { dl_channel = srslte::channel_ptr(new srslte::channel(params.dl_channel_args, get_nof_rf_channels())); dl_channel->set_srate((uint32_t)srslte_sampling_freq_hz(cell_list[0].cell.nof_prb)); + dl_channel->set_signal_power_dBfs(srslte_enb_dl_get_maximum_signal_power_dBfs(cell_list[0].cell.nof_prb)); } // Create grants @@ -124,9 +125,7 @@ void phy_common::set_ul_grants(uint32_t tti, const stack_interface_phy_lte::ul_s * Each worker uses this function to indicate that all processing is done and data is ready for transmission or * there is no transmission at all (tx_enable). In that case, the end of burst message will be sent to the radio */ -void phy_common::worker_end(void* tx_sem_id, - srslte::rf_buffer_t& buffer, - srslte::rf_timestamp_t& tx_time) +void phy_common::worker_end(void* tx_sem_id, srslte::rf_buffer_t& buffer, srslte::rf_timestamp_t& tx_time) { // Wait for the green light to transmit in the current TTI semaphore.wait(tx_sem_id); diff --git a/srsue/src/main.cc b/srsue/src/main.cc index 60df9a1fd..bc0199248 100644 --- a/srsue/src/main.cc +++ b/srsue/src/main.cc @@ -182,42 +182,44 @@ static int parse_args(all_args_t* args, int argc, char* argv[]) ("gw.ip_netmask", bpo::value(&args->gw.tun_dev_netmask)->default_value("255.255.255.0"), "Netmask of the tun_srsue device") /* Downlink Channel emulator section */ - ("channel.dl.enable", bpo::value(&args->phy.dl_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") - ("channel.dl.awgn.enable", bpo::value(&args->phy.dl_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") - ("channel.dl.awgn.n0", bpo::value(&args->phy.dl_channel_args.awgn_n0_dBfs)->default_value(-30.0f), "Noise level in decibels full scale (dBfs)") - ("channel.dl.fading.enable", bpo::value(&args->phy.dl_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") - ("channel.dl.fading.model", bpo::value(&args->phy.dl_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") - ("channel.dl.delay.enable", bpo::value(&args->phy.dl_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") - ("channel.dl.delay.period_s", bpo::value(&args->phy.dl_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") - ("channel.dl.delay.init_time_s", bpo::value(&args->phy.dl_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") - ("channel.dl.delay.maximum_us", bpo::value(&args->phy.dl_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") - ("channel.dl.delay.minimum_us", bpo::value(&args->phy.dl_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") - ("channel.dl.rlf.enable", bpo::value(&args->phy.dl_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") - ("channel.dl.rlf.t_on_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") - ("channel.dl.rlf.t_off_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") - ("channel.dl.hst.enable", bpo::value(&args->phy.dl_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") - ("channel.dl.hst.period_s", bpo::value(&args->phy.dl_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") - ("channel.dl.hst.fd_hz", bpo::value(&args->phy.dl_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") - ("channel.dl.hst.init_time_s", bpo::value(&args->phy.dl_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.dl.enable", bpo::value(&args->phy.dl_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") + ("channel.dl.awgn.enable", bpo::value(&args->phy.dl_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") + ("channel.dl.awgn.snr", bpo::value(&args->phy.dl_channel_args.awgn_snr_dB)->default_value(30.0f), "Noise level in decibels full scale (dBfs)") + ("channel.dl.awgn.signal_power", bpo::value(&args->phy.dl_channel_args.awgn_signal_power_dBfs)->default_value(0.0f), "Received signal power in decibels full scale (dBfs)") + ("channel.dl.fading.enable", bpo::value(&args->phy.dl_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") + ("channel.dl.fading.model", bpo::value(&args->phy.dl_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") + ("channel.dl.delay.enable", bpo::value(&args->phy.dl_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") + ("channel.dl.delay.period_s", bpo::value(&args->phy.dl_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") + ("channel.dl.delay.init_time_s", bpo::value(&args->phy.dl_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.dl.delay.maximum_us", bpo::value(&args->phy.dl_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") + ("channel.dl.delay.minimum_us", bpo::value(&args->phy.dl_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") + ("channel.dl.rlf.enable", bpo::value(&args->phy.dl_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") + ("channel.dl.rlf.t_on_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") + ("channel.dl.rlf.t_off_ms", bpo::value(&args->phy.dl_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") + ("channel.dl.hst.enable", bpo::value(&args->phy.dl_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") + ("channel.dl.hst.period_s", bpo::value(&args->phy.dl_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") + ("channel.dl.hst.fd_hz", bpo::value(&args->phy.dl_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") + ("channel.dl.hst.init_time_s", bpo::value(&args->phy.dl_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") /* Uplink Channel emulator section */ - ("channel.ul.enable", bpo::value(&args->phy.ul_channel_args.enable)->default_value(false), "Enable/Disable internal Uplink channel emulator") - ("channel.ul.awgn.enable", bpo::value(&args->phy.ul_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") - ("channel.ul.awgn.n0", bpo::value(&args->phy.ul_channel_args.awgn_n0_dBfs)->default_value(-30.0f), "Noise level in decibels full scale (dBfs)") - ("channel.ul.fading.enable", bpo::value(&args->phy.ul_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") - ("channel.ul.fading.model", bpo::value(&args->phy.ul_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") - ("channel.ul.delay.enable", bpo::value(&args->phy.ul_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") - ("channel.ul.delay.period_s", bpo::value(&args->phy.ul_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") - ("channel.ul.delay.init_time_s", bpo::value(&args->phy.ul_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") - ("channel.ul.delay.maximum_us", bpo::value(&args->phy.ul_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") - ("channel.ul.delay.minimum_us", bpo::value(&args->phy.ul_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") - ("channel.ul.rlf.enable", bpo::value(&args->phy.ul_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") - ("channel.ul.rlf.t_on_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") - ("channel.ul.rlf.t_off_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") - ("channel.ul.hst.enable", bpo::value(&args->phy.ul_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") - ("channel.ul.hst.period_s", bpo::value(&args->phy.ul_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") - ("channel.ul.hst.fd_hz", bpo::value(&args->phy.ul_channel_args.hst_fd_hz)->default_value(-750.0f), "Doppler frequency in Hz") - ("channel.ul.hst.init_time_s", bpo::value(&args->phy.ul_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.ul.enable", bpo::value(&args->phy.ul_channel_args.enable)->default_value(false), "Enable/Disable internal Downlink channel emulator") + ("channel.ul.awgn.enable", bpo::value(&args->phy.ul_channel_args.awgn_enable)->default_value(false), "Enable/Disable AWGN simulator") + ("channel.ul.awgn.snr", bpo::value(&args->phy.ul_channel_args.awgn_snr_dB)->default_value(30.0f), "Noise level in decibels full scale (dBfs)") + ("channel.ul.awgn.signal_power", bpo::value(&args->phy.ul_channel_args.awgn_signal_power_dBfs)->default_value(30.0f), "Transmitted signal power in decibels full scale (dBfs)") + ("channel.ul.fading.enable", bpo::value(&args->phy.ul_channel_args.fading_enable)->default_value(false), "Enable/Disable Fading model") + ("channel.ul.fading.model", bpo::value(&args->phy.ul_channel_args.fading_model)->default_value("none"), "Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)") + ("channel.ul.delay.enable", bpo::value(&args->phy.ul_channel_args.delay_enable)->default_value(false), "Enable/Disable Delay simulator") + ("channel.ul.delay.period_s", bpo::value(&args->phy.ul_channel_args.delay_period_s)->default_value(3600), "Delay period in seconds (integer)") + ("channel.ul.delay.init_time_s", bpo::value(&args->phy.ul_channel_args.delay_init_time_s)->default_value(0), "Initial time in seconds") + ("channel.ul.delay.maximum_us", bpo::value(&args->phy.ul_channel_args.delay_max_us)->default_value(100.0f), "Maximum delay in microseconds") + ("channel.ul.delay.minimum_us", bpo::value(&args->phy.ul_channel_args.delay_min_us)->default_value(10.0f), "Minimum delay in microseconds") + ("channel.ul.rlf.enable", bpo::value(&args->phy.ul_channel_args.rlf_enable)->default_value(false), "Enable/Disable Radio-Link Failure simulator") + ("channel.ul.rlf.t_on_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_on_ms)->default_value(10000), "Time for On state of the channel (ms)") + ("channel.ul.rlf.t_off_ms", bpo::value(&args->phy.ul_channel_args.rlf_t_off_ms)->default_value(2000), "Time for Off state of the channel (ms)") + ("channel.ul.hst.enable", bpo::value(&args->phy.ul_channel_args.hst_enable)->default_value(false), "Enable/Disable HST simulator") + ("channel.ul.hst.period_s", bpo::value(&args->phy.ul_channel_args.hst_period_s)->default_value(7.2f), "HST simulation period in seconds") + ("channel.ul.hst.fd_hz", bpo::value(&args->phy.ul_channel_args.hst_fd_hz)->default_value(+750.0f), "Doppler frequency in Hz") + ("channel.ul.hst.init_time_s", bpo::value(&args->phy.ul_channel_args.hst_init_time_s)->default_value(0), "Initial time in seconds") /* PHY section */ ("phy.worker_cpu_mask",