Hi all,
I am looking into the code for the proportional fairness scheduler, and had a few questions:
1. After the resource block groups (RBGs) are allocated, each UE will get multiple RBGs with probably different CQIs for each RBG. However when buiding the DCI for a UE, why do we choose the worst CQIs among all allocated RBGs, and calculate the transport block size based on the MCS corresponding to that CQI? The code snippet follows:
......
newDci.m_mcs.push_back (m_amc->GetMcsFromCqi (worstCqi));
int tbSize = (m_amc->GetTbSizeFromMcs (
newDci.m_mcs.at (0), RgbPerRnti * rbgSize) / 8); // (size of TB in bytes according to table 7.1.7.2.1-1 of 36.213)
newDci.m_tbsSize.push_back (tbSize);
I thought for each allocated RBG, we may have different CQI so different MCS. We group the RBGs with the common MCS (or CQIs) into one transport block, so one transport block may carry data from multiple UEs. Then all RBGs may be grouped into multiple transport blocks. So we may have multiple transport blocks and each UE may have data in multiple transport blocks. But my understanding conflicts with the definition: each UE may have at most one transport block during each TTI. Please help resolve my confusion.
2. A minor question:
When allocating RBGs, we have
Line A: double achievableRate = ((m_amc->GetTbSizeFromMcs (mcs, 1) / 8) / 0.001); // = TB size / TTI
But when constructing DCI we have
Line B: int tbSize = (m_amc->GetTbSizeFromMcs (newDci.m_mcs.at (0), RgbPerRnti * rbgSize) / 8); // (size of TB in bytes according to table 7.1.7.2.1-1 of 36.213)
I thought GetTbSizeFromMcs takes mcs and the number of resource blocks, not the number of resource block groups. So the Line A should be (mcs, rbgSize), not (mcs, 1). Please clarify.
Thank you very much for your attention.