sched,lte: separated adaptive mcs learning rate argument into two arguments, one for DL and the other for UL

master
Francisco Paisana 3 years ago
parent 7f897d83e2
commit 12d63468e3

@ -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

@ -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;

@ -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;

@ -156,7 +156,8 @@ void parse_args(all_args_t* args, int argc, char* argv[])
("scheduler.target_bler", bpo::value<float>(&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<float>(&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<float>(&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<float>(&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<float>(&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<float>(&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<uint32_t>(&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<float>(&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<int>(&args->stack.mac.sched.init_ul_snr_value)->default_value(5), "Initial UL SNR value used for computing MCS in the first UL grant")

@ -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",

Loading…
Cancel
Save