|
Bugzilla – Full Text Bug Listing |
| Summary: | CQI feedback should always use the same calculation method | ||
|---|---|---|---|
| Product: | ns-3 | Reporter: | Nicola Baldo <nicola> |
| Component: | lte | Assignee: | Nicola Baldo <nicola> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | gawlowicz.p, mmiozzo, ns-bugs, zorazeali |
| Priority: | P5 | ||
| Version: | ns-3-dev | ||
| Hardware: | PC | ||
| OS: | Linux | ||
This implements the proposed fix changeset: 11178:852f39d83883 user: Nicola Baldo <nbaldo@cttc.es> date: Thu Jan 29 16:35:33 2015 +0100 summary: fixed Bug 2049 - CQI feedback should always use the same calculation method I also did some minor refactoring of LteUePhy and LteHelper to improve readability and reduce some code duplication. Feel free to reopen this if you think there is anything wrong with this approach. |
When LteHelper::UsePdschForCqiGeneration == true, the mixed CQI calculation is used. As per the docs: "CQI are generated from control channels as signal and data channels (if received) as interference. It there is no transmission in data channel, CQI is generated only from control channels, as in legacy solution" this is inconsistent, as the ctrl channel CQI calculation will count all neighbours as interference, whereas if there is no tranmission in the data channel it means interference is zero. In the code, what happens is: if no PDSCH signal in a TTI => LteSpectrumPhy::StartRxData and LteSpectrumPhy::EndRxData are not called => m_interferenceData->endRx () is not called => LteUePhy::ReportDataInterference () is not called => when LteUePhy::GenerateCtrlCqi () is called, m_dataInterferencePowerUpdated is false, and the old calculation method is used. this causes a weird behavior. E.g. when hard FR is used in a 3 cell setting, there is actually no interference on the RBs of your cell (thanks to FR). However, if neighbors are transmitted intermittently, when they are idle you actually see a lower CQI, as if there were interference, because the ctrl-based CQI calculation is used. Proposed fix: if (m_dataInterferencePowerUpdated) { SpectrumValue mixedSinr = m_rsReceivedPower / m_dataInterferencePower; GenerateMixedCqiReport (mixedSinr); m_dataInterferencePowerUpdated = false; return; } else { SpectrumValue mixedSinr = m_rsReceivedPower / m_noisePsd; GenerateMixedCqiReport (mixedSinr); return; }