mirror of https://github.com/PentHertz/srsLTE.git
sched,nr: force R<0.9 by reducing mcs
This commit is contained in:
parent
d6a3daff8a
commit
7d4a5238f6
|
@ -58,7 +58,7 @@ public:
|
||||||
bool new_retx(slot_point slot_tx, slot_point slot_ack);
|
bool new_retx(slot_point slot_tx, slot_point slot_ack);
|
||||||
|
|
||||||
// NOTE: Has to be used before first tx is dispatched
|
// NOTE: Has to be used before first tx is dispatched
|
||||||
bool set_tbs(uint32_t tbs);
|
bool set_tbs(uint32_t tbs, int mcs = -1);
|
||||||
|
|
||||||
const uint32_t pid;
|
const uint32_t pid;
|
||||||
|
|
||||||
|
|
|
@ -243,6 +243,8 @@ alloc_result bwp_slot_allocator::alloc_pdsch(slot_ue& ue, const prb_grant& dl_gr
|
||||||
|
|
||||||
// Allocation Successful
|
// Allocation Successful
|
||||||
|
|
||||||
|
int mcs = ue.cfg->ue_cfg()->fixed_dl_mcs;
|
||||||
|
do {
|
||||||
// Generate PDCCH
|
// Generate PDCCH
|
||||||
pdcch_dl_t& pdcch = bwp_pdcch_slot.dl_pdcchs.back();
|
pdcch_dl_t& pdcch = bwp_pdcch_slot.dl_pdcchs.back();
|
||||||
fill_dl_dci_ue_fields(ue, *bwp_grid.cfg, ss_id, pdcch.dci.ctx.location, pdcch.dci);
|
fill_dl_dci_ue_fields(ue, *bwp_grid.cfg, ss_id, pdcch.dci.ctx.location, pdcch.dci);
|
||||||
|
@ -267,6 +269,7 @@ alloc_result bwp_slot_allocator::alloc_pdsch(slot_ue& ue, const prb_grant& dl_gr
|
||||||
slot_cfg.idx = ue.pdsch_slot.to_uint();
|
slot_cfg.idx = ue.pdsch_slot.to_uint();
|
||||||
bool ret = ue.cfg->phy().get_pdsch_cfg(slot_cfg, pdcch.dci, pdsch.sch);
|
bool ret = ue.cfg->phy().get_pdsch_cfg(slot_cfg, pdcch.dci, pdsch.sch);
|
||||||
srsran_assert(ret, "Error converting DCI to grant");
|
srsran_assert(ret, "Error converting DCI to grant");
|
||||||
|
|
||||||
pdsch.sch.grant.tb[0].softbuffer.tx = ue.h_dl->get_softbuffer().get();
|
pdsch.sch.grant.tb[0].softbuffer.tx = ue.h_dl->get_softbuffer().get();
|
||||||
pdsch.data[0] = ue.h_dl->get_tx_pdu()->get();
|
pdsch.data[0] = ue.h_dl->get_tx_pdu()->get();
|
||||||
if (ue.h_dl->nof_retx() == 0) {
|
if (ue.h_dl->nof_retx() == 0) {
|
||||||
|
@ -274,6 +277,18 @@ alloc_result bwp_slot_allocator::alloc_pdsch(slot_ue& ue, const prb_grant& dl_gr
|
||||||
} else {
|
} else {
|
||||||
srsran_assert(pdsch.sch.grant.tb[0].tbs == (int)ue.h_dl->tbs(), "The TBS did not remain constant in retx");
|
srsran_assert(pdsch.sch.grant.tb[0].tbs == (int)ue.h_dl->tbs(), "The TBS did not remain constant in retx");
|
||||||
}
|
}
|
||||||
|
if (bwp_pdsch_slot.pdschs.back().sch.grant.tb[0].R < 0.9 or mcs == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Decrease MCS if rate is too high
|
||||||
|
mcs--;
|
||||||
|
ue.h_dl->set_tbs(100, mcs);
|
||||||
|
bwp_pdsch_slot.pdschs.pop_back();
|
||||||
|
bwp_uci_slot.pending_acks.pop_back();
|
||||||
|
} while (true);
|
||||||
|
if (mcs == 0) {
|
||||||
|
logger.warning("Couldn't find mcs that leads to R<0.9");
|
||||||
|
}
|
||||||
|
|
||||||
return alloc_result::success;
|
return alloc_result::success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,12 +66,15 @@ bool harq_proc::new_tx(slot_point slot_tx_,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool harq_proc::set_tbs(uint32_t tbs)
|
bool harq_proc::set_tbs(uint32_t tbs, int mcs)
|
||||||
{
|
{
|
||||||
if (empty() or nof_retx() > 0) {
|
if (empty() or nof_retx() > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
tb[0].tbs = tbs;
|
tb[0].tbs = tbs;
|
||||||
|
if (mcs >= 0) {
|
||||||
|
tb[0].mcs = mcs;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue