diff --git a/srsenb/enb.conf.example b/srsenb/enb.conf.example index a76b90874..bbc402425 100644 --- a/srsenb/enb.conf.example +++ b/srsenb/enb.conf.example @@ -178,7 +178,8 @@ enable = false # target_bler: Target BLER (in decimal) to achieve via adaptive link # max_delta_dl_cqi: Maximum shift in CQI for adaptive DL link # max_delta_ul_snr: Maximum shift in UL SNR for adaptive UL link -# adaptive_link_step_size: Step size or learning rate used in adaptive link +# adaptive_dl_mcs_step_size: Step size or learning rate used in adaptive DL MCS link +# adaptive_ul_mcs_step_size: Step size or learning rate used in adaptive UL MCS link # min_tpc_tti_interval: Minimum TTI interval between TPCs different than 1 # ul_snr_avg_alpha: Exponential Average alpha coefficient used in estimation of UL SNR # init_ul_snr_value: Initial UL SNR value used for computing MCS in the first UL grant @@ -204,7 +205,8 @@ enable = false #target_bler = 0.05 #max_delta_dl_cqi = 5 #max_delta_ul_snr = 5 -#adaptive_link_step_size = 0.001 +#adaptive_dl_mcs_step_size = 0.001 +#adaptive_ul_mcs_step_size = 0.001 #min_tpc_tti_interval = 1 #ul_snr_avg_alpha=0.05 #init_ul_snr_value=5 diff --git a/srsenb/hdr/stack/mac/sched_interface.h b/srsenb/hdr/stack/mac/sched_interface.h index 4f5f166ea..0401deee4 100644 --- a/srsenb/hdr/stack/mac/sched_interface.h +++ b/srsenb/hdr/stack/mac/sched_interface.h @@ -62,7 +62,8 @@ public: float target_bler = 0.05; float max_delta_dl_cqi = 5; float max_delta_ul_snr = 5; - float adaptive_link_step_size = 0.001; + float adaptive_dl_mcs_step_size = 0.001; + float adaptive_ul_mcs_step_size = 0.001; uint32_t min_tpc_tti_interval = 1; float ul_snr_avg_alpha = 0.05; int init_ul_snr_value = 5; diff --git a/srsenb/hdr/stack/mac/sched_ue_ctrl/sched_ue_cell.h b/srsenb/hdr/stack/mac/sched_ue_ctrl/sched_ue_cell.h index e71e6b8b8..b0f34d5c4 100644 --- a/srsenb/hdr/stack/mac/sched_ue_ctrl/sched_ue_cell.h +++ b/srsenb/hdr/stack/mac/sched_ue_ctrl/sched_ue_cell.h @@ -94,7 +94,8 @@ private: cc_st cc_state_ = cc_st::idle; // CQI - float delta_inc = 0, delta_dec = 0; + float ul_delta_inc = 0, ul_delta_dec = 0; + float dl_delta_inc = 0, dl_delta_dec = 0; float dl_cqi_coeff = 0, ul_snr_coeff = 0; float max_cqi_coeff = -5, max_snr_coeff = 5; diff --git a/srsenb/src/main.cc b/srsenb/src/main.cc index 37647a001..da428aba8 100644 --- a/srsenb/src/main.cc +++ b/srsenb/src/main.cc @@ -156,7 +156,8 @@ void parse_args(all_args_t* args, int argc, char* argv[]) ("scheduler.target_bler", bpo::value(&args->stack.mac.sched.target_bler)->default_value(0.05), "Target BLER (in decimal) to achieve via adaptive link") ("scheduler.max_delta_dl_cqi", bpo::value(&args->stack.mac.sched.max_delta_dl_cqi)->default_value(5.0), "Maximum shift in CQI for adaptive DL link") ("scheduler.max_delta_ul_snr", bpo::value(&args->stack.mac.sched.max_delta_ul_snr)->default_value(5.0), "Maximum shift in UL SNR for adaptive UL link") - ("scheduler.adaptive_link_step_size", bpo::value(&args->stack.mac.sched.adaptive_link_step_size)->default_value(0.001), "Step size or learning rate used in adaptive link") + ("scheduler.adaptive_dl_mcs_step_size", bpo::value(&args->stack.mac.sched.adaptive_dl_mcs_step_size)->default_value(0.001), "Step size or learning rate used in adaptive DL MCS link") + ("scheduler.adaptive_ul_mcs_step_size", bpo::value(&args->stack.mac.sched.adaptive_ul_mcs_step_size)->default_value(0.001), "Step size or learning rate used in adaptive UL MCS link") ("scheduler.min_tpc_tti_interval", bpo::value(&args->stack.mac.sched.min_tpc_tti_interval)->default_value(1), "Minimum TTI interval between positive or negative TPCs") ("scheduler.ul_snr_avg_alpha", bpo::value(&args->stack.mac.sched.ul_snr_avg_alpha)->default_value(0.05), "Exponential Average alpha coefficient used in estimation of UL SNR") ("scheduler.init_ul_snr_value", bpo::value(&args->stack.mac.sched.init_ul_snr_value)->default_value(5), "Initial UL SNR value used for computing MCS in the first UL grant") diff --git a/srsenb/src/stack/mac/sched_ue_ctrl/sched_ue_cell.cc b/srsenb/src/stack/mac/sched_ue_ctrl/sched_ue_cell.cc index 24dd95133..b29acdbba 100644 --- a/srsenb/src/stack/mac/sched_ue_ctrl/sched_ue_cell.cc +++ b/srsenb/src/stack/mac/sched_ue_ctrl/sched_ue_cell.cc @@ -51,8 +51,10 @@ sched_ue_cell::sched_ue_cell(uint16_t rnti_, const sched_cell_params_t& cell_cfg dl_cqi_ctxt(cell_cfg_.nof_prb(), 0, cell_cfg_.sched_cfg->init_dl_cqi) { float target_bler = cell_cfg->sched_cfg->target_bler; - delta_inc = cell_cfg->sched_cfg->adaptive_link_step_size; // delta_{down} of OLLA - delta_dec = (1 - target_bler) * delta_inc / target_bler; + dl_delta_inc = cell_cfg->sched_cfg->adaptive_dl_mcs_step_size; // delta_{down} of OLLA + dl_delta_dec = (1 - target_bler) * dl_delta_inc / target_bler; + ul_delta_inc = cell_cfg->sched_cfg->adaptive_ul_mcs_step_size; // delta_{down} of OLLA + ul_delta_dec = (1 - target_bler) * ul_delta_inc / target_bler; max_cqi_coeff = cell_cfg->sched_cfg->max_delta_dl_cqi; max_snr_coeff = cell_cfg->sched_cfg->max_delta_ul_snr; } @@ -202,8 +204,8 @@ int sched_ue_cell::set_ul_crc(tti_point tti_rx, bool crc_res) if (ul_harq != nullptr) { int mcs = ul_harq->get_mcs(0); // Note: Avoid keeping increasing the snr delta offset, if MCS is already is at its limit - float delta_dec_eff = mcs <= 0 ? 0 : delta_dec; - float delta_inc_eff = mcs >= (int)max_mcs_ul ? 0 : delta_inc; + float delta_dec_eff = mcs <= 0 ? 0 : ul_delta_dec; + float delta_inc_eff = mcs >= (int)max_mcs_ul ? 0 : ul_delta_inc; ul_snr_coeff += crc_res ? delta_inc_eff : -delta_dec_eff; ul_snr_coeff = std::min(std::max(-max_snr_coeff, ul_snr_coeff), max_snr_coeff); logger.info("SCHED: UL adaptive link: rnti=0x%x, snr_estim=%.2f, last_mcs=%d, snr_offset=%f", @@ -239,8 +241,8 @@ int sched_ue_cell::set_ack_info(tti_point tti_rx, uint32_t tb_idx, bool ack) if (cell_cfg->sched_cfg->target_bler > 0 and fixed_mcs_dl < 0) { int mcs = std::get<2>(p2); // Note: Avoid keeping increasing the snr delta offset, if MCS is already is at its limit - float delta_dec_eff = mcs <= 0 ? 0 : delta_dec; - float delta_inc_eff = mcs >= (int)max_mcs_dl ? 0 : delta_inc; + float delta_dec_eff = mcs <= 0 ? 0 : dl_delta_dec; + float delta_inc_eff = mcs >= (int)max_mcs_dl ? 0 : dl_delta_inc; dl_cqi_coeff += ack ? delta_inc_eff : -delta_dec_eff; dl_cqi_coeff = std::min(std::max(-max_cqi_coeff, dl_cqi_coeff), max_cqi_coeff); logger.info("SCHED: DL adaptive link: rnti=0x%x, cqi=%d, last_mcs=%d, cqi_offset=%f",