34 const std::vector<int>& map,
36 [[maybe_unused]] uint32_t sizeBit,
39 NS_LOG_FUNCTION(
this);
46 Ptr<NrEesmErrorModelOutput> last = Create<NrEesmErrorModelOutput>(0.0);
51 total.emplace_back(last);
55 NS_ASSERT(sinr.GetSpectrumModel()->GetNumBands() == sinr.GetValuesN());
57 SpectrumValue sinr_sum(sinr.GetSpectrumModel());
58 uint32_t historySize =
static_cast<uint32_t
>(total.size());
59 uint32_t maxRBUsed = 0;
60 for (uint32_t i = 0; i < historySize; ++i)
62 Ptr<NrEesmErrorModelOutput> output = DynamicCast<NrEesmErrorModelOutput>(total.at(i));
63 maxRBUsed = std::max(maxRBUsed,
static_cast<uint32_t
>(output->m_map.size()));
66 std::vector<int> map_sum;
67 map_sum.reserve(maxRBUsed);
69 for (uint32_t i = 0; i < maxRBUsed; ++i)
72 map_sum.push_back(
static_cast<int>(i));
89 for (uint32_t i = 0; i < historySize; ++i)
91 Ptr<NrEesmErrorModelOutput> output = DynamicCast<NrEesmErrorModelOutput>(total.at(i));
92 uint32_t size = output->m_map.size();
93 for (uint32_t j = 0; j < maxRBUsed; ++j)
95 sinr_sum[j] += output->m_sinr[output->m_map[j % size]];
99 NS_LOG_INFO(
"\tHISTORY:");
100 for (
const auto& element : total)
102 Ptr<NrEesmErrorModelOutput> output = DynamicCast<NrEesmErrorModelOutput>(element);
103 NS_LOG_INFO(
"\tMAP:" <<
PrintMap(output->m_map));
104 NS_LOG_INFO(
"\tSINR: " << output->m_sinr);
107 NS_LOG_INFO(
"MAP_SUM: " <<
PrintMap(map_sum));
108 NS_LOG_INFO(
"SINR_SUM: " << sinr_sum);
111 return SinrEff(sinr_sum, map_sum, mcs, 0.0, map_sum.size());
double ComputeSINR(const SpectrumValue &sinr, const std::vector< int > &map, uint8_t mcs, uint32_t sizeBit, const NrErrorModel::NrErrorModelHistory &sinrHistory) const override
Computes the effective SINR after retransmission combining with HARQ-CC.
double SinrEff(const SpectrumValue &sinr, const std::vector< int > &map, uint8_t mcs, double a, double b) const
compute the effective SINR for the specified MCS and SINR, according to the EESM method.