increase mcs ul upper bound to 24 when ue is cat4 and enb supports 64qam. Simplified max_mcs computation

This commit is contained in:
Francisco 2020-11-24 21:01:31 +00:00 committed by Andre Puschmann
parent 3d80ff4831
commit f07e52129c
4 changed files with 30 additions and 20 deletions

View File

@ -146,9 +146,10 @@ public:
std::vector<cc_cfg_t> supported_cc_list; ///< list of UE supported CCs. First index for PCell
ant_info_ded_t dl_ant_info;
bool use_tbs_index_alt = false;
bool support_ul_64qam = false;
uint32_t measgap_period = 0;
uint32_t measgap_offset = 0;
enum class ul64qam_cap { undefined, disabled, enabled };
ul64qam_cap support_ul64qam = ul64qam_cap::undefined;
};
typedef struct {

View File

@ -73,7 +73,7 @@ struct cc_sched_ue {
uint32_t ul_cqi_tti = 0;
bool dl_cqi_rx = false;
uint32_t max_mcs_dl = 28, max_mcs_dl_alt = 27, max_mcs_ul = 28;
uint32_t max_mcs_dl = 28, max_mcs_ul = 28;
uint32_t max_aggr_level = 3;
int fixed_mcs_ul = 0, fixed_mcs_dl = 0;

View File

@ -1201,17 +1201,17 @@ int sched_ue::enb_to_ue_cc_idx(uint32_t enb_cc_idx) const
int cc_sched_ue::cqi_to_tbs(uint32_t nof_prb, uint32_t nof_re, bool use_tbs_index_alt, bool is_ul, uint32_t* mcs)
{
using ul64qam_cap = sched_interface::ue_cfg_t::ul64qam_cap;
uint32_t cqi, max_mcs, max_Qm;
float max_coderate;
if (is_ul) {
cqi = ul_cqi;
// if cell supports UL 64QAM but the UE does not support it, cap the mcs to avoid Qm == 6
max_mcs = (not cfg->support_ul_64qam and cell_params->cfg.enable_64qam) ? std::min(max_mcs_ul, 20u) : max_mcs_ul;
max_Qm = cfg->support_ul_64qam ? 6 : 4;
cqi = ul_cqi;
max_mcs = max_mcs_ul;
max_Qm = cfg->support_ul64qam == ul64qam_cap::enabled ? 6 : 4;
max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), false);
} else {
cqi = dl_cqi;
max_mcs = cfg->use_tbs_index_alt ? max_mcs_dl_alt : max_mcs_dl;
max_mcs = max_mcs_dl;
max_Qm = use_tbs_index_alt ? 8 : 6;
max_coderate = srslte_cqi_to_coderate(std::min(cqi + 1u, 15u), use_tbs_index_alt);
}
@ -1262,11 +1262,6 @@ cc_sched_ue::cc_sched_ue(const sched_interface::ue_cfg_t& cfg_,
dl_cqi = (ue_cc_idx == 0) ? cell_params->cfg.initial_dl_cqi : 0;
set_cfg(cfg_);
// set max mcs
max_mcs_ul = cell_params->sched_cfg->pusch_max_mcs >= 0 ? cell_params->sched_cfg->pusch_max_mcs : 28;
max_mcs_dl = cell_params->sched_cfg->pdsch_max_mcs >= 0 ? cell_params->sched_cfg->pdsch_max_mcs : 28;
max_mcs_dl_alt =
cell_params->sched_cfg->pdsch_max_mcs >= 0 ? SRSLTE_MIN(cell_params->sched_cfg->pdsch_max_mcs, 27) : 27;
max_aggr_level = cell_params->sched_cfg->max_aggr_level >= 0 ? cell_params->sched_cfg->max_aggr_level : 3;
// set fixed mcs
@ -1299,6 +1294,17 @@ void cc_sched_ue::set_cfg(const sched_interface::ue_cfg_t& cfg_)
cfg = &cfg_;
cfg_tti = last_tti;
// set max mcs
max_mcs_ul = cell_params->sched_cfg->pusch_max_mcs >= 0 ? cell_params->sched_cfg->pusch_max_mcs : 28u;
if (cell_params->cfg.enable_64qam) {
const uint32_t max_64qam_mcs[] = {20, 24, 28};
max_mcs_ul = std::min(max_mcs_ul, max_64qam_mcs[(size_t)cfg->support_ul64qam]);
}
max_mcs_dl = cell_params->sched_cfg->pdsch_max_mcs >= 0 ? std::min(cell_params->sched_cfg->pdsch_max_mcs, 28) : 28u;
if (cfg->use_tbs_index_alt) {
max_mcs_dl = std::min(max_mcs_dl, 27u);
}
if (ue_cc_idx == 0) {
// PCell is always active
cc_state_ = cc_st::active;

View File

@ -62,9 +62,9 @@ void ue_cfg_apply_srb_updates(ue_cfg_t& ue_cfg, const srb_to_add_mod_list_l& srb
* Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message that should
* only take effect after the RRCReconfigurationComplete is received
*/
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list);
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list);
/**
* Adds to sched_interface::ue_cfg_t the changes present in the asn1 RRCReconfiguration message related to
@ -389,9 +389,9 @@ void ue_cfg_apply_srb_updates(ue_cfg_t& ue_cfg, const srb_to_add_mod_list_l& srb
}
}
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list)
void ue_cfg_apply_reconf_complete_updates(ue_cfg_t& ue_cfg,
const rrc_conn_recfg_r8_ies_s& conn_recfg,
const ue_cell_ded_list& ue_cell_list)
{
// Configure RadioResourceConfigDedicated
if (conn_recfg.rr_cfg_ded_present) {
@ -499,8 +499,11 @@ void ue_cfg_apply_conn_reconf(ue_cfg_t& ue_cfg, const rrc_conn_recfg_r8_ies_s& c
void ue_cfg_apply_capabilities(ue_cfg_t& ue_cfg, const rrc_cfg_t& rrc_cfg, const srslte::rrc_ue_capabilities_t& uecaps)
{
ue_cfg.support_ul_64qam =
uecaps.support_ul_64qam and rrc_cfg.sibs[1].sib2().rr_cfg_common.pusch_cfg_common.pusch_cfg_basic.enable64_qam;
bool enb_enable64qam = rrc_cfg.sibs[1].sib2().rr_cfg_common.pusch_cfg_common.pusch_cfg_basic.enable64_qam;
ue_cfg.support_ul64qam = ue_cfg_t::ul64qam_cap::undefined;
if (enb_enable64qam) {
ue_cfg.support_ul64qam = uecaps.support_ul_64qam ? ue_cfg_t::ul64qam_cap::enabled : ue_cfg_t::ul64qam_cap::disabled;
}
}
} // namespace srsenb