feature, scheduler: Add abitility to set minimum aggregation level in PDCCH, and disable adaptive aggregation level based on target BLER

This commit is contained in:
Francisco 2021-05-24 16:36:34 +01:00 committed by Ismael Gomez
parent fb4a363abd
commit dedd9c09a7
8 changed files with 38 additions and 11 deletions

View File

@ -53,7 +53,9 @@ public:
int pusch_max_mcs = 28; int pusch_max_mcs = 28;
uint32_t min_nof_ctrl_symbols = 1; uint32_t min_nof_ctrl_symbols = 1;
uint32_t max_nof_ctrl_symbols = 3; uint32_t max_nof_ctrl_symbols = 3;
int min_aggr_level = 0;
int max_aggr_level = 3; int max_aggr_level = 3;
bool adaptive_aggr_level = true;
bool pucch_mux_enabled = false; bool pucch_mux_enabled = false;
float target_bler = 0.05; float target_bler = 0.05;
float max_delta_dl_cqi = 5; float max_delta_dl_cqi = 5;

View File

@ -160,7 +160,9 @@ enable = false
# Scheduler configuration options # Scheduler configuration options
# #
# sched_policy: User MAC scheduling policy (E.g. time_rr, time_pf) # sched_policy: User MAC scheduling policy (E.g. time_rr, time_pf)
# min_aggr_level: Optional minimum aggregation level index (l=log2(L) can be 0, 1, 2 or 3)
# max_aggr_level: Optional maximum aggregation level index (l=log2(L) can be 0, 1, 2 or 3) # max_aggr_level: Optional maximum aggregation level index (l=log2(L) can be 0, 1, 2 or 3)
# adaptive_aggr_level: Boolean flag to enable/disable adaptive aggregation level based on target BLER
# pdsch_mcs: Optional fixed PDSCH MCS (ignores reported CQIs if specified) # pdsch_mcs: Optional fixed PDSCH MCS (ignores reported CQIs if specified)
# pdsch_max_mcs: Optional PDSCH MCS limit # pdsch_max_mcs: Optional PDSCH MCS limit
# pusch_mcs: Optional fixed PUSCH MCS (ignores reported CQIs if specified) # pusch_mcs: Optional fixed PUSCH MCS (ignores reported CQIs if specified)
@ -176,7 +178,9 @@ enable = false
[scheduler] [scheduler]
#policy = time_pf #policy = time_pf
#policy_args = 2 #policy_args = 2
#max_aggr_level = -1 #min_aggr_level = 0
#max_aggr_level = 3
#adaptive_aggr_level = true
#pdsch_mcs = -1 #pdsch_mcs = -1
#pdsch_max_mcs = -1 #pdsch_max_mcs = -1
#pusch_mcs = -1 #pusch_mcs = -1

View File

@ -69,6 +69,7 @@ inline uint32_t get_tbs_bytes(uint32_t mcs, uint32_t nof_alloc_prb, bool use_tbs
/// Find lowest DCI aggregation level supported by the UE spectral efficiency /// Find lowest DCI aggregation level supported by the UE spectral efficiency
uint32_t get_aggr_level(uint32_t nof_bits, uint32_t get_aggr_level(uint32_t nof_bits,
uint32_t dl_cqi, uint32_t dl_cqi,
uint32_t min_aggr_lvl,
uint32_t max_aggr_lvl, uint32_t max_aggr_lvl,
uint32_t cell_nof_prb, uint32_t cell_nof_prb,
bool use_tbs_index_alt); bool use_tbs_index_alt);

View File

@ -47,6 +47,8 @@ struct sched_ue_cell {
int get_dl_cqi(const rbgmask_t& rbgs) const; int get_dl_cqi(const rbgmask_t& rbgs) const;
int get_ul_cqi() const; int get_ul_cqi() const;
uint32_t get_aggr_level(uint32_t nof_bits) const;
int set_ack_info(tti_point tti_rx, uint32_t tb_idx, bool ack); int set_ack_info(tti_point tti_rx, uint32_t tb_idx, bool ack);
int set_ul_crc(tti_point tti_rx, bool crc_res); int set_ul_crc(tti_point tti_rx, bool crc_res);
int set_ul_snr(tti_point tti_rx, float ul_snr, uint32_t ul_ch_code); int set_ul_snr(tti_point tti_rx, float ul_snr, uint32_t ul_ch_code);

View File

@ -145,7 +145,9 @@ void parse_args(all_args_t* args, int argc, char* argv[])
("scheduler.pdsch_max_mcs", bpo::value<int>(&args->stack.mac.sched.pdsch_max_mcs)->default_value(-1), "Optional PDSCH MCS limit") ("scheduler.pdsch_max_mcs", bpo::value<int>(&args->stack.mac.sched.pdsch_max_mcs)->default_value(-1), "Optional PDSCH MCS limit")
("scheduler.pusch_mcs", bpo::value<int>(&args->stack.mac.sched.pusch_mcs)->default_value(-1), "Optional fixed PUSCH MCS (ignores reported CQIs if specified)") ("scheduler.pusch_mcs", bpo::value<int>(&args->stack.mac.sched.pusch_mcs)->default_value(-1), "Optional fixed PUSCH MCS (ignores reported CQIs if specified)")
("scheduler.pusch_max_mcs", bpo::value<int>(&args->stack.mac.sched.pusch_max_mcs)->default_value(-1), "Optional PUSCH MCS limit") ("scheduler.pusch_max_mcs", bpo::value<int>(&args->stack.mac.sched.pusch_max_mcs)->default_value(-1), "Optional PUSCH MCS limit")
("scheduler.max_aggr_level", bpo::value<int>(&args->stack.mac.sched.max_aggr_level)->default_value(-1), "Optional maximum aggregation level index (l=log2(L)) ") ("scheduler.min_aggr_level", bpo::value<int>(&args->stack.mac.sched.min_aggr_level)->default_value(0), "Optional minimum aggregation level index (l=log2(L)) ")
("scheduler.max_aggr_level", bpo::value<int>(&args->stack.mac.sched.max_aggr_level)->default_value(3), "Optional maximum aggregation level index (l=log2(L)) ")
("scheduler.adaptive_aggr_level", bpo::value<bool>(&args->stack.mac.sched.adaptive_aggr_level)->default_value(true), "Boolean flag to enable/disable adaptive aggregation level based on target BLER")
("scheduler.max_nof_ctrl_symbols", bpo::value<uint32_t>(&args->stack.mac.sched.max_nof_ctrl_symbols)->default_value(3), "Number of control symbols") ("scheduler.max_nof_ctrl_symbols", bpo::value<uint32_t>(&args->stack.mac.sched.max_nof_ctrl_symbols)->default_value(3), "Number of control symbols")
("scheduler.min_nof_ctrl_symbols", bpo::value<uint32_t>(&args->stack.mac.sched.min_nof_ctrl_symbols)->default_value(1), "Minimum number of control symbols") ("scheduler.min_nof_ctrl_symbols", bpo::value<uint32_t>(&args->stack.mac.sched.min_nof_ctrl_symbols)->default_value(1), "Minimum number of control symbols")
("scheduler.pucch_multiplex_enable", bpo::value<bool>(&args->stack.mac.sched.pucch_mux_enabled)->default_value(false), "Enable PUCCH multiplexing") ("scheduler.pucch_multiplex_enable", bpo::value<bool>(&args->stack.mac.sched.pucch_mux_enabled)->default_value(false), "Enable PUCCH multiplexing")

View File

@ -382,10 +382,13 @@ void generate_cce_location(srsran_regs_t* regs_,
* DCI-specific helper functions * DCI-specific helper functions
*******************************************************/ *******************************************************/
uint32_t uint32_t get_aggr_level(uint32_t nof_bits,
get_aggr_level(uint32_t nof_bits, uint32_t dl_cqi, uint32_t max_aggr_lvl, uint32_t cell_nof_prb, bool use_tbs_index_alt) uint32_t dl_cqi,
uint32_t min_aggr_lvl,
uint32_t max_aggr_lvl,
uint32_t cell_nof_prb,
bool use_tbs_index_alt)
{ {
uint32_t l = 0;
float max_coderate = srsran_cqi_to_coderate(dl_cqi, use_tbs_index_alt); float max_coderate = srsran_cqi_to_coderate(dl_cqi, use_tbs_index_alt);
float coderate; float coderate;
float factor = 1.5; float factor = 1.5;
@ -396,6 +399,7 @@ get_aggr_level(uint32_t nof_bits, uint32_t dl_cqi, uint32_t max_aggr_lvl, uint32
} }
l_max = SRSRAN_MIN(max_aggr_lvl, l_max); l_max = SRSRAN_MIN(max_aggr_lvl, l_max);
uint32_t l = min_aggr_lvl;
do { do {
coderate = srsran_pdcch_coderate(nof_bits, l); coderate = srsran_pdcch_coderate(nof_bits, l);
l++; l++;

View File

@ -963,9 +963,7 @@ std::pair<bool, uint32_t> sched_ue::get_active_cell_index(uint32_t enb_cc_idx) c
uint32_t sched_ue::get_aggr_level(uint32_t enb_cc_idx, uint32_t nof_bits) uint32_t sched_ue::get_aggr_level(uint32_t enb_cc_idx, uint32_t nof_bits)
{ {
const auto& cc = cells[enb_cc_idx]; return cells[enb_cc_idx].get_aggr_level(nof_bits);
return srsenb::get_aggr_level(
nof_bits, cc.get_dl_cqi(), cc.max_aggr_level, cc.cell_cfg->nof_prb(), cfg.use_tbs_index_alt);
} }
void sched_ue::finish_tti(tti_point tti_rx, uint32_t enb_cc_idx) void sched_ue::finish_tti(tti_point tti_rx, uint32_t enb_cc_idx)

View File

@ -235,9 +235,23 @@ int sched_ue_cell::get_dl_cqi(const rbgmask_t& rbgs) const
int sched_ue_cell::get_dl_cqi() const int sched_ue_cell::get_dl_cqi() const
{ {
rbgmask_t rbgmask(cell_cfg->nof_rbgs); return std::max(0, (int)std::min(dl_cqi_ctxt.get_avg_cqi() + dl_cqi_coeff, 15.0f));
rbgmask.fill(0, rbgmask.size()); }
return get_dl_cqi(rbgmask);
uint32_t sched_ue_cell::get_aggr_level(uint32_t nof_bits) const
{
uint32_t dl_cqi = 0;
if (cell_cfg->sched_cfg->adaptive_aggr_level) {
dl_cqi = get_dl_cqi();
} else {
dl_cqi = dl_cqi_ctxt.get_avg_cqi();
}
return srsenb::get_aggr_level(nof_bits,
dl_cqi,
cell_cfg->sched_cfg->min_aggr_level,
max_aggr_level,
cell_cfg->nof_prb(),
ue_cfg->use_tbs_index_alt);
} }
/************************************************************* /*************************************************************