diff --git a/src/wifi/examples/wifi-test-interference-helper.cc b/src/wifi/examples/wifi-test-interference-helper.cc index 93908f7b8..3c6231135 100644 --- a/src/wifi/examples/wifi-test-interference-helper.cc +++ b/src/wifi/examples/wifi-test-interference-helper.cc @@ -217,8 +217,8 @@ InterferenceExperiment::Run(InterferenceExperiment::Input input) { m_input = input; - double range = std::max(std::abs(input.xA), input.xB); - Config::SetDefault("ns3::RangePropagationLossModel::MaxRange", DoubleValue(range)); + double maxRange = std::max(std::abs(input.xA), input.xB); + Config::SetDefault("ns3::RangePropagationLossModel::MaxRange", DoubleValue(maxRange)); Ptr channel = CreateObject(); channel->SetPropagationDelayModel(CreateObject()); diff --git a/src/wifi/model/he/he-phy.cc b/src/wifi/model/he/he-phy.cc index e2e6d210d..18fafcc97 100644 --- a/src/wifi/model/he/he-phy.cc +++ b/src/wifi/model/he/he-phy.cc @@ -1003,11 +1003,14 @@ HePhy::GetRuBandForTx(const WifiTxVector& txVector, uint16_t staId) const channelWidth, ru.GetRuType(), ru.GetPhyIndex(channelWidth, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20))); - HeRu::SubcarrierRange range = std::make_pair(group.front().first, group.back().second); + HeRu::SubcarrierRange subcarrierRange = + std::make_pair(group.front().first, group.back().second); // for a TX spectrum, the guard bandwidth is a function of the transmission channel width // and the spectrum width equals the transmission channel width (hence bandIndex equals 0) - band = - m_wifiPhy->ConvertHeRuSubcarriers(channelWidth, GetGuardBandwidth(channelWidth), range, 0); + band = m_wifiPhy->ConvertHeRuSubcarriers(channelWidth, + GetGuardBandwidth(channelWidth), + subcarrierRange, + 0); return band; } @@ -1023,13 +1026,14 @@ HePhy::GetRuBandForRx(const WifiTxVector& txVector, uint16_t staId) const channelWidth, ru.GetRuType(), ru.GetPhyIndex(channelWidth, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20))); - HeRu::SubcarrierRange range = std::make_pair(group.front().first, group.back().second); + HeRu::SubcarrierRange subcarrierRange = + std::make_pair(group.front().first, group.back().second); // for an RX spectrum, the guard bandwidth is a function of the operating channel width // and the spectrum width equals the operating channel width band = m_wifiPhy->ConvertHeRuSubcarriers( channelWidth, GetGuardBandwidth(m_wifiPhy->GetChannelWidth()), - range, + subcarrierRange, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth)); return band; } @@ -1053,12 +1057,12 @@ HePhy::GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const nonOfdmaRu.GetRuType(), nonOfdmaRu.GetPhyIndex(channelWidth, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20))); - HeRu::SubcarrierRange range = + HeRu::SubcarrierRange subcarrierRange = std::make_pair(groupPreamble.front().first, groupPreamble.back().second); return m_wifiPhy->ConvertHeRuSubcarriers( channelWidth, GetGuardBandwidth(m_wifiPhy->GetChannelWidth()), - range, + subcarrierRange, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth)); } diff --git a/src/wifi/model/interference-helper.cc b/src/wifi/model/interference-helper.cc index b244f25bd..eff62cf69 100644 --- a/src/wifi/model/interference-helper.cc +++ b/src/wifi/model/interference-helper.cc @@ -231,18 +231,18 @@ InterferenceHelper::Add(Ptr ppdu, const WifiTxVector& txVector, Time duration, RxPowerWattPerChannelBand& rxPowerW, - const FrequencyRange& range, + const FrequencyRange& freqRange, bool isStartOfdmaRxing) { Ptr event = Create(ppdu, txVector, duration, std::move(rxPowerW)); - AppendEvent(event, range, isStartOfdmaRxing); + AppendEvent(event, freqRange, isStartOfdmaRxing); return event; } void InterferenceHelper::AddForeignSignal(Time duration, RxPowerWattPerChannelBand& rxPowerW, - const FrequencyRange& range) + const FrequencyRange& freqRange) { // Parameters other than duration and rxPowerW are unused for this type // of signal, so we provide dummy versions @@ -252,58 +252,58 @@ InterferenceHelper::AddForeignSignal(Time duration, Ptr fakePpdu = Create(Create(Create(0), hdr), WifiTxVector(), WifiPhyOperatingChannel()); - Add(fakePpdu, WifiTxVector(), duration, rxPowerW, range); + Add(fakePpdu, WifiTxVector(), duration, rxPowerW, freqRange); } void -InterferenceHelper::RemoveBands(FrequencyRange range) +InterferenceHelper::RemoveBands(FrequencyRange freqRange) { - NS_LOG_FUNCTION(this << range); - if ((m_niChanges.count(range) == 0) && (m_firstPowers.count(range) == 0)) + NS_LOG_FUNCTION(this << freqRange); + if ((m_niChanges.count(freqRange) == 0) && (m_firstPowers.count(freqRange) == 0)) { return; } - auto niChangesPerBand = m_niChanges.at(range); + auto niChangesPerBand = m_niChanges.at(freqRange); for (auto it : niChangesPerBand) { it.second.clear(); } niChangesPerBand.clear(); - m_niChanges.erase(range); - m_firstPowers.at(range).clear(); - m_firstPowers.erase(range); + m_niChanges.erase(freqRange); + m_firstPowers.at(freqRange).clear(); + m_firstPowers.erase(freqRange); } bool -InterferenceHelper::HasBand(WifiSpectrumBand band, const FrequencyRange& range) const +InterferenceHelper::HasBand(WifiSpectrumBand band, const FrequencyRange& freqRange) const { - NS_LOG_FUNCTION(this << band.first << band.second << range); - return (m_niChanges.count(range) > 0 && m_niChanges.at(range).count(band) > 0); + NS_LOG_FUNCTION(this << band.first << band.second << freqRange); + return (m_niChanges.count(freqRange) > 0 && m_niChanges.at(freqRange).count(band) > 0); } void -InterferenceHelper::AddBand(WifiSpectrumBand band, const FrequencyRange& range) +InterferenceHelper::AddBand(WifiSpectrumBand band, const FrequencyRange& freqRange) { - NS_LOG_FUNCTION(this << band.first << band.second << range); - NS_ASSERT(m_niChanges.count(range) == 0 || m_niChanges.at(range).count(band) == 0); - NS_ASSERT(m_firstPowers.count(range) == 0 || m_firstPowers.at(range).count(band) == 0); + NS_LOG_FUNCTION(this << band.first << band.second << freqRange); + NS_ASSERT(m_niChanges.count(freqRange) == 0 || m_niChanges.at(freqRange).count(band) == 0); + NS_ASSERT(m_firstPowers.count(freqRange) == 0 || m_firstPowers.at(freqRange).count(band) == 0); NiChanges niChanges; - auto result = m_niChanges[range].insert({band, niChanges}); + auto result = m_niChanges[freqRange].insert({band, niChanges}); NS_ASSERT(result.second); // Always have a zero power noise event in the list AddNiChangeEvent(Time(0), NiChange(0.0, nullptr), result.first); - m_firstPowers[range].insert({band, 0.0}); + m_firstPowers[freqRange].insert({band, 0.0}); } void InterferenceHelper::UpdateBands(const std::vector& bands, - const FrequencyRange& range, + const FrequencyRange& freqRange, int32_t offset) { - NS_LOG_FUNCTION(this << range << offset); - NS_ABORT_IF(m_niChanges.count(range) == 0); - auto& niChangesPerBand = m_niChanges.at(range); - auto& firstPowerPerBand = m_firstPowers.at(range); + NS_LOG_FUNCTION(this << freqRange << offset); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); + auto& niChangesPerBand = m_niChanges.at(freqRange); + auto& firstPowerPerBand = m_firstPowers.at(freqRange); // start index of the lowest band const auto minStartIndex = (std::min_element(bands.cbegin(), bands.cend(), [](const auto& lhs, const auto& rhs) { @@ -355,10 +355,10 @@ InterferenceHelper::UpdateBands(const std::vector& bands, firstPowerPerBand.swap(newFirstPowerPerBand); for (const auto& band : bands) { - if (!HasBand(band, range)) + if (!HasBand(band, freqRange)) { // this is a new band, add it - AddBand(band, range); + AddBand(band, freqRange); } } } @@ -390,13 +390,13 @@ InterferenceHelper::SetNumberOfReceiveAntennas(uint8_t rx) Time InterferenceHelper::GetEnergyDuration(double energyW, WifiSpectrumBand band, - const FrequencyRange& range) + const FrequencyRange& freqRange) { - NS_LOG_FUNCTION(this << energyW << band.first << band.second << range); + NS_LOG_FUNCTION(this << energyW << band.first << band.second << freqRange); Time now = Simulator::Now(); - NS_ABORT_IF(m_niChanges.count(range) == 0); - auto niIt = m_niChanges.at(range).find(band); - NS_ABORT_IF(niIt == m_niChanges.at(range).end()); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); + auto niIt = m_niChanges.at(freqRange).find(band); + NS_ABORT_IF(niIt == m_niChanges.at(freqRange).end()); auto i = GetPreviousPosition(now, niIt); Time end = i->first; for (; i != niIt->second.end(); ++i) @@ -413,17 +413,17 @@ InterferenceHelper::GetEnergyDuration(double energyW, void InterferenceHelper::AppendEvent(Ptr event, - const FrequencyRange& range, + const FrequencyRange& freqRange, bool isStartOfdmaRxing) { - NS_LOG_FUNCTION(this << event << range << isStartOfdmaRxing); - NS_ABORT_IF(m_niChanges.count(range) == 0); - NS_ABORT_IF(m_firstPowers.count(range) == 0); + NS_LOG_FUNCTION(this << event << freqRange << isStartOfdmaRxing); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); + NS_ABORT_IF(m_firstPowers.count(freqRange) == 0); for (const auto& it : event->GetRxPowerWPerBand()) { WifiSpectrumBand band = it.first; - auto niIt = m_niChanges.at(range).find(band); - NS_ABORT_IF(niIt == m_niChanges.at(range).end()); + auto niIt = m_niChanges.at(freqRange).find(band); + NS_ABORT_IF(niIt == m_niChanges.at(freqRange).end()); double previousPowerStart = 0; double previousPowerEnd = 0; auto previousPowerPosition = GetPreviousPosition(event->GetStartTime(), niIt); @@ -431,7 +431,7 @@ InterferenceHelper::AppendEvent(Ptr event, previousPowerEnd = GetPreviousPosition(event->GetEndTime(), niIt)->second.GetPower(); if (!m_rxing) { - m_firstPowers.at(range).find(band)->second = previousPowerStart; + m_firstPowers.at(freqRange).find(band)->second = previousPowerStart; // Always leave the first zero power noise event in the list niIt->second.erase(++(niIt->second.begin()), ++previousPowerPosition); } @@ -440,7 +440,7 @@ InterferenceHelper::AppendEvent(Ptr event, // When the first UL-OFDMA payload is received, we need to set m_firstPowers // so that it takes into account interferences that arrived between the start of the // UL MU transmission and the start of UL-OFDMA payload. - m_firstPowers.at(range).find(band)->second = previousPowerStart; + m_firstPowers.at(freqRange).find(band)->second = previousPowerStart; } auto first = AddNiChangeEvent(event->GetStartTime(), NiChange(previousPowerStart, event), niIt); @@ -455,16 +455,16 @@ InterferenceHelper::AppendEvent(Ptr event, void InterferenceHelper::UpdateEvent(Ptr event, const RxPowerWattPerChannelBand& rxPower, - const FrequencyRange& range) + const FrequencyRange& freqRange) { - NS_LOG_FUNCTION(this << event << range); - NS_ABORT_IF(m_niChanges.count(range) == 0); + NS_LOG_FUNCTION(this << event << freqRange); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); // This is called for UL MU events, in order to scale power as long as UL MU PPDUs arrive for (const auto& it : rxPower) { WifiSpectrumBand band = it.first; - auto niIt = m_niChanges.at(range).find(band); - NS_ABORT_IF(niIt == m_niChanges.at(range).end()); + auto niIt = m_niChanges.at(freqRange).find(band); + NS_ABORT_IF(niIt == m_niChanges.at(freqRange).end()); auto first = GetPreviousPosition(event->GetStartTime(), niIt); auto last = GetPreviousPosition(event->GetEndTime(), niIt); for (auto i = first; i != last; ++i) @@ -511,16 +511,16 @@ double InterferenceHelper::CalculateNoiseInterferenceW(Ptr event, NiChangesPerBand* nis, WifiSpectrumBand band, - const FrequencyRange& range) const + const FrequencyRange& freqRange) const { - NS_LOG_FUNCTION(this << band.first << band.second << range); - NS_ABORT_IF(m_firstPowers.count(range) == 0); - auto firstPower_it = m_firstPowers.at(range).find(band); - NS_ABORT_IF(firstPower_it == m_firstPowers.at(range).end()); + NS_LOG_FUNCTION(this << band.first << band.second << freqRange); + NS_ABORT_IF(m_firstPowers.count(freqRange) == 0); + auto firstPower_it = m_firstPowers.at(freqRange).find(band); + NS_ABORT_IF(firstPower_it == m_firstPowers.at(freqRange).end()); double noiseInterferenceW = firstPower_it->second; - NS_ABORT_IF(m_niChanges.count(range) == 0); - auto niIt = m_niChanges.at(range).find(band); - NS_ABORT_IF(niIt == m_niChanges.at(range).end()); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); + auto niIt = m_niChanges.at(freqRange).find(band); + NS_ABORT_IF(niIt == m_niChanges.at(freqRange).end()); auto it = niIt->second.find(event->GetStartTime()); for (; it != niIt->second.end() && it->first < Simulator::Now(); ++it) { @@ -593,7 +593,7 @@ InterferenceHelper::CalculatePayloadPer(Ptr event, uint16_t channelWidth, NiChangesPerBand* nis, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t staId, std::pair window) const { @@ -614,9 +614,9 @@ InterferenceHelper::CalculatePayloadPer(Ptr event, } Time windowStart = phyPayloadStart + window.first; Time windowEnd = phyPayloadStart + window.second; - NS_ABORT_IF(m_firstPowers.count(range) == 0); - NS_ABORT_IF(m_firstPowers.at(range).count(band) == 0); - double noiseInterferenceW = m_firstPowers.at(range).at(band); + NS_ABORT_IF(m_firstPowers.count(freqRange) == 0); + NS_ABORT_IF(m_firstPowers.at(freqRange).count(band) == 0); + double noiseInterferenceW = m_firstPowers.at(freqRange).at(band); double powerW = event->GetRxPowerW(band); while (++j != niIt.cend()) { @@ -667,10 +667,10 @@ InterferenceHelper::CalculatePhyHeaderSectionPsr( NiChangesPerBand* nis, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, PhyEntity::PhyHeaderSections phyHeaderSections) const { - NS_LOG_FUNCTION(this << band.first << band.second << range); + NS_LOG_FUNCTION(this << band.first << band.second << freqRange); double psr = 1.0; /* Packet Success Rate */ auto niIt = nis->find(band)->second; auto j = niIt.begin(); @@ -683,9 +683,9 @@ InterferenceHelper::CalculatePhyHeaderSectionPsr( } Time previous = j->first; - NS_ABORT_IF(m_firstPowers.count(range) == 0); - NS_ABORT_IF(m_firstPowers.at(range).count(band) == 0); - double noiseInterferenceW = m_firstPowers.at(range).at(band); + NS_ABORT_IF(m_firstPowers.count(freqRange) == 0); + NS_ABORT_IF(m_firstPowers.at(freqRange).count(band) == 0); + double noiseInterferenceW = m_firstPowers.at(freqRange).at(band); double powerW = event->GetRxPowerW(band); while (++j != niIt.end()) { @@ -732,10 +732,10 @@ InterferenceHelper::CalculatePhyHeaderPer(Ptr event, NiChangesPerBand* nis, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, WifiPpduField header) const { - NS_LOG_FUNCTION(this << band.first << band.second << range << header); + NS_LOG_FUNCTION(this << band.first << band.second << freqRange << header); auto niIt = nis->find(band)->second; auto phyEntity = WifiPhy::GetStaticPhyEntity(event->GetTxVector().GetModulationClass()); @@ -752,7 +752,7 @@ InterferenceHelper::CalculatePhyHeaderPer(Ptr event, double psr = 1.0; if (!sections.empty()) { - psr = CalculatePhyHeaderSectionPsr(event, nis, channelWidth, band, range, sections); + psr = CalculatePhyHeaderSectionPsr(event, nis, channelWidth, band, freqRange, sections); } return 1 - psr; } @@ -761,14 +761,14 @@ PhyEntity::SnrPer InterferenceHelper::CalculatePayloadSnrPer(Ptr event, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t staId, std::pair relativeMpduStartStop) const { - NS_LOG_FUNCTION(this << channelWidth << band.first << band.second << range << staId + NS_LOG_FUNCTION(this << channelWidth << band.first << band.second << freqRange << staId << relativeMpduStartStop.first << relativeMpduStartStop.second); NiChangesPerBand ni; - double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, range); + double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, freqRange); double snr = CalculateSnr(event->GetRxPowerW(band), noiseInterferenceW, channelWidth, @@ -777,8 +777,13 @@ InterferenceHelper::CalculatePayloadSnrPer(Ptr event, /* calculate the SNIR at the start of the MPDU (located through windowing) and accumulate * all SNIR changes in the SNIR vector. */ - double per = - CalculatePayloadPer(event, channelWidth, &ni, band, range, staId, relativeMpduStartStop); + double per = CalculatePayloadPer(event, + channelWidth, + &ni, + band, + freqRange, + staId, + relativeMpduStartStop); return PhyEntity::SnrPer(snr, per); } @@ -788,10 +793,10 @@ InterferenceHelper::CalculateSnr(Ptr event, uint16_t channelWidth, uint8_t nss, WifiSpectrumBand band, - const FrequencyRange& range) const + const FrequencyRange& freqRange) const { NiChangesPerBand ni; - double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, range); + double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, freqRange); double snr = CalculateSnr(event->GetRxPowerW(band), noiseInterferenceW, channelWidth, nss); return snr; } @@ -800,18 +805,18 @@ PhyEntity::SnrPer InterferenceHelper::CalculatePhyHeaderSnrPer(Ptr event, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, WifiPpduField header) const { NS_LOG_FUNCTION(this << band.first << band.second << header); NiChangesPerBand ni; - double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, range); + double noiseInterferenceW = CalculateNoiseInterferenceW(event, &ni, band, freqRange); double snr = CalculateSnr(event->GetRxPowerW(band), noiseInterferenceW, channelWidth, 1); /* calculate the SNIR at the start of the PHY header and accumulate * all SNIR changes in the SNIR vector. */ - double per = CalculatePhyHeaderPer(event, &ni, channelWidth, band, range, header); + double per = CalculatePhyHeaderPer(event, &ni, channelWidth, band, freqRange, header); return PhyEntity::SnrPer(snr, per); } @@ -846,19 +851,20 @@ InterferenceHelper::NotifyRxStart() } void -InterferenceHelper::NotifyRxEnd(Time endTime, const FrequencyRange& range) +InterferenceHelper::NotifyRxEnd(Time endTime, const FrequencyRange& freqRange) { - NS_LOG_FUNCTION(this << endTime << range); - NS_ABORT_IF(m_niChanges.count(range) == 0); - NS_ABORT_IF(m_firstPowers.count(range) == 0); + NS_LOG_FUNCTION(this << endTime << freqRange); + NS_ABORT_IF(m_niChanges.count(freqRange) == 0); + NS_ABORT_IF(m_firstPowers.count(freqRange) == 0); m_rxing = false; // Update m_firstPowers for frame capture - for (auto niIt = m_niChanges.at(range).begin(); niIt != m_niChanges.at(range).end(); ++niIt) + for (auto niIt = m_niChanges.at(freqRange).begin(); niIt != m_niChanges.at(freqRange).end(); + ++niIt) { NS_ASSERT(niIt->second.size() > 1); auto it = GetPreviousPosition(endTime, niIt); it--; - m_firstPowers.at(range).find(niIt->first)->second = it->second.GetPower(); + m_firstPowers.at(freqRange).find(niIt->first)->second = it->second.GetPower(); } } diff --git a/src/wifi/model/interference-helper.h b/src/wifi/model/interference-helper.h index a5ebd8808..3fe0a441b 100644 --- a/src/wifi/model/interference-helper.h +++ b/src/wifi/model/interference-helper.h @@ -148,35 +148,35 @@ class InterferenceHelper : public Object * Add a frequency band. * * \param band the band to be added - * \param range the frequency range the band to add belongs to + * \param freqRange the frequency range the band to add belongs to */ - void AddBand(WifiSpectrumBand band, const FrequencyRange& range); + void AddBand(WifiSpectrumBand band, const FrequencyRange& freqRange); /** * Remove the frequency bands for a given frequency range. * - * \param range the frequency range the bands to remove belong to + * \param freqRange the frequency range the bands to remove belong to */ - void RemoveBands(FrequencyRange range); + void RemoveBands(FrequencyRange freqRange); /** * Check whether a given band is tracked by this interference helper. * * \param band the band to be checked - * \param range the frequency range the band to check belongs to + * \param freqRange the frequency range the band to check belongs to * \return true if the band is already tracked by this interference helper, false otherwise */ - bool HasBand(WifiSpectrumBand band, const FrequencyRange& range) const; + bool HasBand(WifiSpectrumBand band, const FrequencyRange& freqRange) const; /** * Update the frequency bands for a given frequency range when the spectrum model is changed. * * \param bands the bands to be added in the new spectrum model - * \param range the frequency range the bands belong to + * \param freqRange the frequency range the bands belong to * \param offset the offset to convert start and stop indices from old to new spectrum model */ void UpdateBands(const std::vector& bands, - const FrequencyRange& range, + const FrequencyRange& freqRange, int32_t offset); /** @@ -209,13 +209,13 @@ class InterferenceHelper : public Object /** * \param energyW the minimum energy (W) requested * \param band identify the requested band - * \param range the frequency range the requested band belongs to + * \param freqRange the frequency range the requested band belongs to * * \returns the expected amount of time the observed * energy on the medium for a given band will * be higher than the requested threshold. */ - Time GetEnergyDuration(double energyW, WifiSpectrumBand band, const FrequencyRange& range); + Time GetEnergyDuration(double energyW, WifiSpectrumBand band, const FrequencyRange& freqRange); /** * Add the PPDU-related signal to interference helper. @@ -224,7 +224,7 @@ class InterferenceHelper : public Object * \param txVector the TXVECTOR * \param duration the PPDU duration * \param rxPower received power per band (W) - * \param range the frequency range in which the signal has been detected + * \param freqRange the frequency range in which the signal has been detected * \param isStartOfdmaRxing flag whether the event corresponds to the start of the OFDMA payload * reception (only used for UL-OFDMA) //TODO simplify this once WifiPpdu is subclassed by adding * an attribute @@ -235,18 +235,18 @@ class InterferenceHelper : public Object const WifiTxVector& txVector, Time duration, RxPowerWattPerChannelBand& rxPower, - const FrequencyRange& range, + const FrequencyRange& freqRange, bool isStartOfdmaRxing = false); /** * Add a non-Wifi signal to interference helper. * \param duration the duration of the signal * \param rxPower received power per band (W) - * \param range the frequency range in which the non-wifi signal has been detected + * \param freqRange the frequency range in which the non-wifi signal has been detected */ void AddForeignSignal(Time duration, RxPowerWattPerChannelBand& rxPower, - const FrequencyRange& range); + const FrequencyRange& freqRange); /** * Calculate the SNIR at the start of the payload and accumulate * all SNIR changes in the SNIR vector for each MPDU of an A-MPDU. @@ -257,7 +257,7 @@ class InterferenceHelper : public Object * \param event the event corresponding to the first time the corresponding PPDU arrives * \param channelWidth the channel width used to transmit the PSDU (in MHz) * \param band identify the band used by the PSDU - * \param range the frequency range the band belongs to + * \param freqRange the frequency range the band belongs to * \param staId the station ID of the PSDU (only used for MU) * \param relativeMpduStartStop the time window (pair of start and end times) of PHY payload to * focus on @@ -267,7 +267,7 @@ class InterferenceHelper : public Object PhyEntity::SnrPer CalculatePayloadSnrPer(Ptr event, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t staId, std::pair relativeMpduStartStop) const; /** @@ -277,7 +277,7 @@ class InterferenceHelper : public Object * \param channelWidth the channel width (in MHz) * \param nss the number of spatial streams * \param band identify the band used by the PSDU - * \param range the frequency range the band belongs to + * \param freqRange the frequency range the band belongs to * * \return the SNR for the PPDU in linear scale */ @@ -285,7 +285,7 @@ class InterferenceHelper : public Object uint16_t channelWidth, uint8_t nss, WifiSpectrumBand band, - const FrequencyRange& range) const; + const FrequencyRange& freqRange) const; /** * Calculate the SNIR at the start of the PHY header and accumulate * all SNIR changes in the SNIR vector. @@ -293,7 +293,7 @@ class InterferenceHelper : public Object * \param event the event corresponding to the first time the corresponding PPDU arrives * \param channelWidth the channel width (in MHz) for header measurement * \param band identify the band used by the PSDU - * \param range the frequency range the band belongs to + * \param freqRange the frequency range the band belongs to * \param header the PHY header to consider * * \return struct of SNR and PER @@ -301,7 +301,7 @@ class InterferenceHelper : public Object PhyEntity::SnrPer CalculatePhyHeaderSnrPer(Ptr event, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, WifiPpduField header) const; /** @@ -312,20 +312,20 @@ class InterferenceHelper : public Object * Notify that RX has ended. * * \param endTime the end time of the signal - * \param range the frequency range in which the signal event has been detected + * \param freqRange the frequency range in which the signal event has been detected */ - void NotifyRxEnd(Time endTime, const FrequencyRange& range); + void NotifyRxEnd(Time endTime, const FrequencyRange& freqRange); /** * Update event to scale its received power (W) per band. * * \param event the event to be updated * \param rxPower the received power (W) per band to be added to the current event - * \param range the frequency range in which the signal event has been detected + * \param freqRange the frequency range in which the signal event has been detected */ void UpdateEvent(Ptr event, const RxPowerWattPerChannelBand& rxPower, - const FrequencyRange& range); + const FrequencyRange& freqRange); protected: void DoDispose() override; @@ -446,11 +446,11 @@ class InterferenceHelper : public Object * Append the given Event. * * \param event the event to be appended - * \param range the frequency range in which the signal event has been detected + * \param freqRange the frequency range in which the signal event has been detected * \param isStartOfdmaRxing flag whether event corresponds to the start of the OFDMA payload * reception (only used for UL-OFDMA) */ - void AppendEvent(Ptr event, const FrequencyRange& range, bool isStartOfdmaRxing); + void AppendEvent(Ptr event, const FrequencyRange& freqRange, bool isStartOfdmaRxing); /** * Calculate noise and interference power in W. @@ -458,14 +458,14 @@ class InterferenceHelper : public Object * \param event the event * \param nis the NiChanges * \param band the band - * \param range the frequency range + * \param freqRange the frequency range * * \return noise and interference power */ double CalculateNoiseInterferenceW(Ptr event, NiChangesPerBand* nis, WifiSpectrumBand band, - const FrequencyRange& range) const; + const FrequencyRange& freqRange) const; /** * Calculate the error rate of the given PHY payload only in the provided time * window (thus enabling per MPDU PER information). The PHY payload can be divided into @@ -475,7 +475,7 @@ class InterferenceHelper : public Object * \param channelWidth the channel width used to transmit the PSDU (in MHz) * \param nis the NiChanges * \param band identify the band used by the PSDU - * \param range the frequency range the band belongs to + * \param freqRange the frequency range the band belongs to * \param staId the station ID of the PSDU (only used for MU) * \param window time window (pair of start and end times) of PHY payload to focus on * @@ -485,7 +485,7 @@ class InterferenceHelper : public Object uint16_t channelWidth, NiChangesPerBand* nis, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t staId, std::pair window) const; /** @@ -496,7 +496,7 @@ class InterferenceHelper : public Object * \param nis the NiChanges * \param channelWidth the channel width (in MHz) for header measurement * \param band the band - * \param range the frequency range + * \param freqRange the frequency range * \param header the PHY header to consider * * \return the error rate of the HT PHY header @@ -505,7 +505,7 @@ class InterferenceHelper : public Object NiChangesPerBand* nis, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, WifiPpduField header) const; /** * Calculate the success rate of the PHY header sections for the provided event. @@ -514,7 +514,7 @@ class InterferenceHelper : public Object * \param nis the NiChanges * \param channelWidth the channel width (in MHz) for header measurement * \param band the band - * \param range the frequency range + * \param freqRange the frequency range * \param phyHeaderSections the map of PHY header sections (\see PhyEntity::PhyHeaderSections) * * \return the success rate of the PHY header sections @@ -523,7 +523,7 @@ class InterferenceHelper : public Object NiChangesPerBand* nis, uint16_t channelWidth, WifiSpectrumBand band, - const FrequencyRange& range, + const FrequencyRange& freqRange, PhyEntity::PhyHeaderSections phyHeaderSections) const; double m_noiseFigure; //!< noise figure (linear) diff --git a/src/wifi/model/spectrum-wifi-phy.cc b/src/wifi/model/spectrum-wifi-phy.cc index bb2a15bbd..b745b86f8 100644 --- a/src/wifi/model/spectrum-wifi-phy.cc +++ b/src/wifi/model/spectrum-wifi-phy.cc @@ -165,12 +165,12 @@ SpectrumWifiPhy::UpdateInterferenceHelperBands(std::optional indicesOff { HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(bw, ruType, phyIndex); - HeRu::SubcarrierRange range = + HeRu::SubcarrierRange subcarrierRange = std::make_pair(group.front().first, group.back().second); WifiSpectrumBand band = ConvertHeRuSubcarriers(bw, GetGuardBandwidth(channelWidth), - range, + subcarrierRange, i); std::size_t index = (bw == 160 && phyIndex > nRus / 2 ? phyIndex - nRus / 2 : phyIndex); @@ -351,8 +351,8 @@ void SpectrumWifiPhy::StartRx(Ptr rxParams, Ptr interface) { - const auto range = interface ? interface->GetFrequencyRange() : GetCurrentFrequencyRange(); - NS_LOG_FUNCTION(this << rxParams << interface << range); + const auto freqRange = interface ? interface->GetFrequencyRange() : GetCurrentFrequencyRange(); + NS_LOG_FUNCTION(this << rxParams << interface << freqRange); Time rxDuration = rxParams->duration; Ptr receivedSignalPsd = rxParams->psd; NS_LOG_DEBUG("Received signal with PSD " << *receivedSignalPsd << " and duration " @@ -375,7 +375,8 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, if ((channelWidth == 5) || (channelWidth == 10)) { - WifiSpectrumBand filteredBand = GetBandForInterface(channelWidth, 0, range, channelWidth); + WifiSpectrumBand filteredBand = + GetBandForInterface(channelWidth, 0, freqRange, channelWidth); double rxPowerPerBandW = WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, filteredBand); NS_LOG_DEBUG("Signal power received (watts) before antenna gain: " << rxPowerPerBandW); @@ -393,7 +394,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, for (uint32_t i = 0; i < (channelWidth / bw); i++) { NS_ASSERT(channelWidth >= bw); - WifiSpectrumBand filteredBand = GetBandForInterface(bw, i, range, channelWidth); + WifiSpectrumBand filteredBand = GetBandForInterface(bw, i, freqRange, channelWidth); double rxPowerPerBandW = WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, filteredBand); NS_LOG_DEBUG("Signal power received (watts) before antenna gain for " @@ -408,7 +409,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, for (uint32_t i = 0; i < (channelWidth / 20); i++) { - WifiSpectrumBand filteredBand = GetBandForInterface(20, i, range, channelWidth); + WifiSpectrumBand filteredBand = GetBandForInterface(20, i, freqRange, channelWidth); double rxPowerPerBandW = WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, filteredBand); NS_LOG_DEBUG("Signal power received (watts) before antenna gain for 20 MHz channel band " @@ -454,7 +455,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, if (!wifiRxParams) { NS_LOG_INFO("Received non Wi-Fi signal"); - m_interference->AddForeignSignal(rxDuration, rxPowerW, range); + m_interference->AddForeignSignal(rxDuration, rxPowerW, freqRange); SwitchMaybeToCcaBusy(nullptr); return; } @@ -462,7 +463,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, if (wifiRxParams && m_disableWifiReception) { NS_LOG_INFO("Received Wi-Fi signal but blocked from syncing"); - m_interference->AddForeignSignal(rxDuration, rxPowerW, range); + m_interference->AddForeignSignal(rxDuration, rxPowerW, freqRange); SwitchMaybeToCcaBusy(nullptr); return; } @@ -471,7 +472,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, (interface != m_currentSpectrumPhyInterface)) { NS_LOG_INFO("Received Wi-Fi signal from a non-active PHY interface"); - m_interference->AddForeignSignal(rxDuration, rxPowerW, range); + m_interference->AddForeignSignal(rxDuration, rxPowerW, freqRange); SwitchMaybeToCcaBusy(nullptr); return; } @@ -485,7 +486,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, if (totalRxPowerW < DbmToW(GetRxSensitivity()) * (txWidth / 20.0)) { NS_LOG_INFO("Received signal too weak to process: " << WToDbm(totalRxPowerW) << " dBm"); - m_interference->Add(ppdu, txVector, rxDuration, rxPowerW, range); + m_interference->Add(ppdu, txVector, rxDuration, rxPowerW, freqRange); SwitchMaybeToCcaBusy(nullptr); return; } @@ -495,7 +496,7 @@ SpectrumWifiPhy::StartRx(Ptr rxParams, if (!CanStartRx(ppdu, txWidth)) { NS_LOG_INFO("Cannot start reception of the PPDU, consider it as interference"); - m_interference->Add(ppdu, txVector, rxDuration, rxPowerW, range); + m_interference->Add(ppdu, txVector, rxDuration, rxPowerW, freqRange); SwitchMaybeToCcaBusy(ppdu); return; } @@ -619,7 +620,7 @@ SpectrumWifiPhy::GetBand(uint16_t bandWidth, uint8_t bandIndex /* = 0 */) WifiSpectrumBand SpectrumWifiPhy::GetBandForInterface(uint16_t bandWidth, uint8_t bandIndex, - FrequencyRange range, + FrequencyRange freqRange, uint16_t channelWidth) { uint32_t bandBandwidth = GetBandBandwidth(); @@ -629,7 +630,8 @@ SpectrumWifiPhy::GetBandForInterface(uint16_t bandWidth, { numBandsInChannel += 1; // symmetry around center frequency } - size_t totalNumBands = m_spectrumPhyInterfaces.at(range)->GetRxSpectrumModel()->GetNumBands(); + size_t totalNumBands = + m_spectrumPhyInterfaces.at(freqRange)->GetRxSpectrumModel()->GetNumBands(); NS_ASSERT_MSG((numBandsInChannel % 2 == 1) && (totalNumBands % 2 == 1), "Should have odd number of bands"); NS_ASSERT_MSG((bandIndex * bandWidth) < channelWidth, "Band index is out of bound"); @@ -648,7 +650,7 @@ SpectrumWifiPhy::GetBandForInterface(uint16_t bandWidth, WifiSpectrumBand SpectrumWifiPhy::ConvertHeRuSubcarriers(uint16_t bandWidth, uint16_t guardBandwidth, - HeRu::SubcarrierRange range, + HeRu::SubcarrierRange subcarrierRange, uint8_t bandIndex) const { WifiSpectrumBand convertedSubcarriers; @@ -677,8 +679,8 @@ SpectrumWifiPhy::ConvertHeRuSubcarriers(uint16_t bandWidth, size_t numBandsInBand = static_cast(bandWidth * 1e6 / GetBandBandwidth()); centerFrequencyIndex += numBandsInBand * bandIndex; - convertedSubcarriers.first = centerFrequencyIndex + range.first; - convertedSubcarriers.second = centerFrequencyIndex + range.second; + convertedSubcarriers.first = centerFrequencyIndex + subcarrierRange.first; + convertedSubcarriers.second = centerFrequencyIndex + subcarrierRange.second; return convertedSubcarriers; } diff --git a/src/wifi/model/spectrum-wifi-phy.h b/src/wifi/model/spectrum-wifi-phy.h index 5c8fe4143..306770bc7 100644 --- a/src/wifi/model/spectrum-wifi-phy.h +++ b/src/wifi/model/spectrum-wifi-phy.h @@ -134,7 +134,7 @@ class SpectrumWifiPhy : public WifiPhy */ WifiSpectrumBand GetBandForInterface(uint16_t bandWidth, uint8_t bandIndex, - FrequencyRange range, + FrequencyRange freqRange, uint16_t channelWidth); /** @@ -189,20 +189,9 @@ class SpectrumWifiPhy : public WifiPhy //!< reasons) private: - /** - * \param bandWidth the width (MHz) of the band used for the OFDMA transmission. Must be - * a multiple of 20 MHz - * \param guardBandwidth width of the guard band (MHz) - * \param range the subcarrier range of the HE RU - * \param bandIndex the index (starting at 0) of the band within the operating channel - * \return the converted subcarriers - * - * This is a helper function to convert HE RU subcarriers, which are relative to the center - * frequency subcarrier, to the indexes used by the Spectrum model. - */ WifiSpectrumBand ConvertHeRuSubcarriers(uint16_t bandWidth, uint16_t guardBandwidth, - HeRu::SubcarrierRange range, + HeRu::SubcarrierRange subcarrierRange, uint8_t bandIndex = 0) const override; /** diff --git a/src/wifi/model/wifi-phy.cc b/src/wifi/model/wifi-phy.cc index 2f188f0bc..9aacd3838 100644 --- a/src/wifi/model/wifi-phy.cc +++ b/src/wifi/model/wifi-phy.cc @@ -1856,14 +1856,13 @@ WifiPhy::StartReceivePreamble(Ptr ppdu, } WifiSpectrumBand -WifiPhy::ConvertHeRuSubcarriers(uint16_t bandWidth, - uint16_t guardBandwidth, - HeRu::SubcarrierRange range, - uint8_t bandIndex) const +WifiPhy::ConvertHeRuSubcarriers(uint16_t /*bandWidth*/, + uint16_t /*guardBandwidth*/, + HeRu::SubcarrierRange /*subcarrierRange*/, + uint8_t /*bandIndex*/) const { NS_ASSERT_MSG(false, "802.11ax can only be used with SpectrumWifiPhy"); - WifiSpectrumBand convertedSubcarriers; - return convertedSubcarriers; + return {0, 0}; } void diff --git a/src/wifi/model/wifi-phy.h b/src/wifi/model/wifi-phy.h index da9c00ba7..c7f2c4be4 100644 --- a/src/wifi/model/wifi-phy.h +++ b/src/wifi/model/wifi-phy.h @@ -1057,7 +1057,7 @@ class WifiPhy : public Object * \param bandWidth the width (MHz) of the band used for the OFDMA transmission. Must be * a multiple of 20 MHz * \param guardBandwidth width of the guard band (MHz) - * \param range the subcarrier range of the HE RU + * \param subcarrierRange the subcarrier range of the HE RU * \param bandIndex the index (starting at 0) of the band within the operating channel * \return the converted subcarriers * @@ -1066,7 +1066,7 @@ class WifiPhy : public Object */ virtual WifiSpectrumBand ConvertHeRuSubcarriers(uint16_t bandWidth, uint16_t guardBandwidth, - HeRu::SubcarrierRange range, + HeRu::SubcarrierRange subcarrierRange, uint8_t bandIndex = 0) const; /** diff --git a/src/wifi/model/wifi-spectrum-phy-interface.cc b/src/wifi/model/wifi-spectrum-phy-interface.cc index 29950a5c3..eac0833c1 100644 --- a/src/wifi/model/wifi-spectrum-phy-interface.cc +++ b/src/wifi/model/wifi-spectrum-phy-interface.cc @@ -40,12 +40,12 @@ WifiSpectrumPhyInterface::GetTypeId() return tid; } -WifiSpectrumPhyInterface::WifiSpectrumPhyInterface(FrequencyRange range) - : m_range{range}, +WifiSpectrumPhyInterface::WifiSpectrumPhyInterface(FrequencyRange freqRange) + : m_frequencyRange{freqRange}, m_centerFrequency{0}, m_channelWidth{0} { - NS_LOG_FUNCTION(this << range); + NS_LOG_FUNCTION(this << freqRange); } void @@ -138,7 +138,7 @@ WifiSpectrumPhyInterface::GetAntenna() const const FrequencyRange& WifiSpectrumPhyInterface::GetFrequencyRange() const { - return m_range; + return m_frequencyRange; } uint16_t diff --git a/src/wifi/model/wifi-spectrum-phy-interface.h b/src/wifi/model/wifi-spectrum-phy-interface.h index b562c4b2b..2ed86980e 100644 --- a/src/wifi/model/wifi-spectrum-phy-interface.h +++ b/src/wifi/model/wifi-spectrum-phy-interface.h @@ -51,9 +51,9 @@ class WifiSpectrumPhyInterface : public SpectrumPhy /** * Constructor * - * \param range the frequency range covered by the interface + * \param freqRange the frequency range covered by the interface */ - WifiSpectrumPhyInterface(FrequencyRange range); + WifiSpectrumPhyInterface(FrequencyRange freqRange); /** * Connect SpectrumWifiPhy object * \param phy SpectrumWifiPhy object to be connected to this object @@ -128,7 +128,7 @@ class WifiSpectrumPhyInterface : public SpectrumPhy private: void DoDispose() override; - FrequencyRange m_range; ///< frequency range + FrequencyRange m_frequencyRange; ///< frequency range Ptr m_spectrumWifiPhy; ///< spectrum PHY Ptr m_netDevice; ///< the device Ptr m_channel; ///< spectrum channel diff --git a/src/wifi/test/spectrum-wifi-phy-test.cc b/src/wifi/test/spectrum-wifi-phy-test.cc index f9c3672ea..0fc59c772 100644 --- a/src/wifi/test/spectrum-wifi-phy-test.cc +++ b/src/wifi/test/spectrum-wifi-phy-test.cc @@ -691,13 +691,15 @@ SpectrumWifiPhyFilterTest::RunOne() HeRu::RuType ruType = static_cast(type); for (std::size_t index = 1; index <= HeRu::GetNRus(bw, ruType); index++) { - HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(bw, ruType, index); - HeRu::SubcarrierRange range = - std::make_pair(group.front().first, group.back().second); + HeRu::SubcarrierGroup subcarrierGroup = + HeRu::GetSubcarrierGroup(bw, ruType, index); + HeRu::SubcarrierRange subcarrierRange = + std::make_pair(subcarrierGroup.front().first, + subcarrierGroup.back().second); WifiSpectrumBand band = m_rxPhy->ConvertHeRuSubcarriers( bw, m_rxPhy->GetGuardBandwidth(m_rxChannelWidth), - range, + subcarrierRange, i); m_ruBands.insert(band); } @@ -853,24 +855,24 @@ class SpectrumWifiPhyMultipleInterfacesTest : public TestCase /** * Schedule now to check the interferences * \param phy the PHY for which the check has to be executed - * \param range the frequency range for which the check has to be executed + * \param freqRange the frequency range for which the check has to be executed * \param channelWidth the channel width for which the check has to be executed * \param interferencesExpected flag whether interferences are expected to have been tracked */ void CheckInterferences(Ptr phy, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t channelWidth, bool interferencesExpected); /** * Check the interferences * \param phy the PHY for which the check has to be executed - * \param range the frequency range for which the check has to be executed + * \param freqRange the frequency range for which the check has to be executed * \param channelWidth the channel width for which the check has to be executed * \param interferencesExpected flag whether interferences are expected to have been tracked */ void DoCheckInterferences(Ptr phy, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t channelWidth, bool interferencesExpected); @@ -982,11 +984,11 @@ SpectrumWifiPhyMultipleInterfacesTest::RxCallback(std::size_t index, void SpectrumWifiPhyMultipleInterfacesTest::CheckInterferences(Ptr phy, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t channelWidth, bool interferencesExpected) { - if ((!m_trackSignalsInactiveInterfaces) && (phy->GetCurrentFrequencyRange() != range)) + if ((!m_trackSignalsInactiveInterfaces) && (phy->GetCurrentFrequencyRange() != freqRange)) { // ignore since no bands for that range exists in interference helper in that case return; @@ -996,24 +998,24 @@ SpectrumWifiPhyMultipleInterfacesTest::CheckInterferences(Ptr phy, - const FrequencyRange& range, + const FrequencyRange& freqRange, uint16_t channelWidth, bool interferencesExpected) { - NS_LOG_FUNCTION(this << phy << range << interferencesExpected); + NS_LOG_FUNCTION(this << phy << freqRange << interferencesExpected); PointerValue ptr; phy->GetAttribute("InterferenceHelper", ptr); auto interferenceHelper = DynamicCast(ptr.Get()); NS_ASSERT(interferenceHelper); - const auto band = phy->GetBandForInterface(channelWidth, 0, range, channelWidth); - const auto energyDuration = interferenceHelper->GetEnergyDuration(0, band, range); + const auto band = phy->GetBandForInterface(channelWidth, 0, freqRange, channelWidth); + const auto energyDuration = interferenceHelper->GetEnergyDuration(0, band, freqRange); NS_TEST_ASSERT_MSG_EQ(energyDuration.IsStrictlyPositive(), interferencesExpected, "Incorrect interferences detection");