This class stores the subcarrier groups of all the available HE RUs. More...
#include "he-ru.h"
Classes | |
class | RuSpec |
RU Specification. More... | |
struct | RuSpecCompare |
Struct providing a function call operator to compare two RUs. More... | |
Public Types | |
typedef std::pair< uint8_t, RuType > | BwTonesPair |
(bandwidth, number of tones) pair More... | |
using | RuAllocationMap = std::map< uint8_t, std::vector< RuSpec > > |
RU allocation map. More... | |
enum | RuType { RU_26_TONE = 0 , RU_52_TONE , RU_106_TONE , RU_242_TONE , RU_484_TONE , RU_996_TONE , RU_2x996_TONE } |
The different HE Resource Unit (RU) types. More... | |
typedef std::vector< SubcarrierRange > | SubcarrierGroup |
a vector of subcarrier ranges defining a subcarrier group More... | |
typedef std::map< BwTonesPair, std::vector< SubcarrierGroup > > | SubcarrierGroups |
map (bandwidth, number of tones) pairs to the group of subcarrier ranges More... | |
typedef std::pair< int16_t, int16_t > | SubcarrierRange |
(lowest index, highest index) pair defining a subcarrier range More... | |
Static Public Member Functions | |
static bool | DoesOverlap (uint16_t bw, RuSpec ru, const std::vector< RuSpec > &v) |
Check whether the given RU overlaps with the given set of RUs. More... | |
static bool | DoesOverlap (uint16_t bw, RuSpec ru, const SubcarrierGroup &toneRanges, uint8_t p20Index) |
Check whether the given RU overlaps with the given tone ranges. More... | |
static RuSpec | FindOverlappingRu (uint16_t bw, RuSpec referenceRu, RuType searchedRuType) |
Find the RU allocation of the given RU type overlapping the given reference RU allocation. More... | |
static uint16_t | GetBandwidth (RuType ruType) |
Get the approximate bandwidth occupied by a RU. More... | |
static std::vector< HeRu::RuSpec > | GetCentral26TonesRus (uint16_t bw, HeRu::RuType ruType) |
Get the set of 26-tone RUs that can be additionally allocated if the given bandwidth is split in RUs of the given type. More... | |
static uint8_t | GetEqualizedRuAllocation (RuType ruType, bool isOdd) |
Get the RU_ALLOCATION value for equal size RUs. More... | |
static RuType | GetEqualSizedRusForStations (uint16_t bandwidth, std::size_t &nStations, std::size_t &nCentral26TonesRus) |
Given the channel bandwidth and the number of stations candidate for being assigned an RU, maximize the number of candidate stations that can be assigned an RU subject to the constraint that all the stations must be assigned an RU of the same size (in terms of number of tones). More... | |
static std::size_t | GetNRus (uint16_t bw, RuType ruType) |
Get the number of distinct RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth. More... | |
static std::vector< HeRu::RuSpec > | GetRusOfType (uint16_t bw, HeRu::RuType ruType) |
Get the set of distinct RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth. More... | |
static std::vector< RuSpec > | GetRuSpecs (uint8_t ruAllocation) |
Get the RU specs based on RU_ALLOCATION. More... | |
static RuType | GetRuType (uint16_t bandwidth) |
Get the RU corresponding to the approximate bandwidth. More... | |
static SubcarrierGroup | GetSubcarrierGroup (uint16_t bw, RuType ruType, std::size_t phyIndex) |
Get the subcarrier group of the RU having the given PHY index among all the RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth. More... | |
Static Public Attributes | |
static constexpr uint8_t | EMPTY_242_TONE_RU = 113 |
Empty 242-tone RU identifier. More... | |
static const RuAllocationMap | m_heRuAllocations |
Table 27-26 of IEEE 802.11ax-2021. More... | |
static const SubcarrierGroups | m_heRuSubcarrierGroups |
Subcarrier groups for all RUs (with indices being applicable to primary 80 MHz channel) More... | |
This class stores the subcarrier groups of all the available HE RUs.
typedef std::pair<uint8_t, RuType> ns3::HeRu::BwTonesPair |
using ns3::HeRu::RuAllocationMap = std::map<uint8_t, std::vector<RuSpec> > |
typedef std::vector<SubcarrierRange> ns3::HeRu::SubcarrierGroup |
typedef std::map<BwTonesPair, std::vector<SubcarrierGroup> > ns3::HeRu::SubcarrierGroups |
typedef std::pair<int16_t, int16_t> ns3::HeRu::SubcarrierRange |
enum ns3::HeRu::RuType |
Check whether the given RU overlaps with the given set of RUs.
Note that for channel width of 160 MHz the returned range is relative to the 160 MHz channel (i.e. -1012 to 1012).
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ru | the given RU allocation |
v | the given set of RUs |
Definition at line 626 of file he-ru.cc.
References ns3::HeRu::RuSpec::GetIndex(), ns3::HeRu::RuSpec::GetPrimary80MHz(), ns3::HeRu::RuSpec::GetRuType(), GetSubcarrierGroup(), and RU_2x996_TONE.
Referenced by FindOverlappingRu(), and ns3::CtrlTriggerHeader::IsValid().
|
static |
Check whether the given RU overlaps with the given tone ranges.
Note that for channel width of 160 MHz the returned range is relative to the 160 MHz channel (i.e. -1012 to 1012).
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ru | the given RU allocation |
toneRanges | the given set of tone ranges |
p20Index | the index of the primary20 channel |
Definition at line 662 of file he-ru.cc.
References ns3::HeRu::RuSpec::GetPhyIndex(), ns3::HeRu::RuSpec::GetRuType(), GetSubcarrierGroup(), and RU_2x996_TONE.
|
static |
Find the RU allocation of the given RU type overlapping the given reference RU allocation.
Note that an assert is generated if the RU allocation is not found.
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
referenceRu | the reference RU allocation |
searchedRuType | the searched RU type |
Definition at line 685 of file he-ru.cc.
References DoesOverlap(), GetNRus(), ns3::HeRu::RuSpec::GetPrimary80MHz(), NS_ABORT_MSG, and RU_2x996_TONE.
Referenced by ns3::HePhy::GetCenterFrequencyForNonHePart(), and ns3::HePhy::GetNonOfdmaBand().
|
static |
Get the approximate bandwidth occupied by a RU.
ruType | the RU type |
Definition at line 763 of file he-ru.cc.
References NS_ABORT_MSG, RU_106_TONE, RU_242_TONE, RU_26_TONE, RU_2x996_TONE, RU_484_TONE, RU_52_TONE, and RU_996_TONE.
Referenced by ns3::WifiTxVector::DeriveRuAllocation(), ns3::WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(), ns3::HePhy::GetChannelWidthAndBand(), ns3::EhtPhy::GetDataRateFromTxVector(), ns3::HePhy::GetDataRateFromTxVector(), ns3::HePhy::GetNonOfdmaWidth(), ns3::EhtPhy::GetPhyRateFromTxVector(), ns3::HePhy::GetPhyRateFromTxVector(), ns3::HePhy::GetTxPowerSpectralDensity(), and ns3::HePpdu::SetHeMuUserInfos().
|
static |
Get the set of 26-tone RUs that can be additionally allocated if the given bandwidth is split in RUs of the given type.
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ruType | the RU type (number of tones) |
Definition at line 541 of file he-ru.cc.
References RU_106_TONE, RU_242_TONE, RU_26_TONE, RU_484_TONE, and RU_52_TONE.
|
static |
Get the RU_ALLOCATION value for equal size RUs.
ruType | equal size RU type (generated by GetEqualSizedRusForStations) |
isOdd | if number of stations is an odd number |
Definition at line 421 of file he-ru.cc.
References RU_106_TONE, RU_242_TONE, RU_26_TONE, RU_484_TONE, and RU_52_TONE.
Referenced by ns3::WifiTxVector::DeriveRuAllocation().
|
static |
Given the channel bandwidth and the number of stations candidate for being assigned an RU, maximize the number of candidate stations that can be assigned an RU subject to the constraint that all the stations must be assigned an RU of the same size (in terms of number of tones).
bandwidth | the channel bandwidth in MHz | |
nStations | the number of candidate stations. On return, it is set to the number of stations that are assigned an RU | |
[out] | nCentral26TonesRus | the number of additional 26-tone RUs that can be allocated if the returned RU size is greater than 26 tones |
Definition at line 813 of file he-ru.cc.
References m_heRuSubcarrierGroups, NS_ABORT_IF, RU_106_TONE, RU_242_TONE, RU_2x996_TONE, RU_484_TONE, and RU_52_TONE.
Referenced by ns3::RrMultiUserScheduler::GetTxVectorForUlMu(), and ns3::RrMultiUserScheduler::TrySendingDlMuPpdu().
|
static |
Get the number of distinct RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth.
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ruType | the RU type (number of tones) |
Definition at line 491 of file he-ru.cc.
References m_heRuSubcarrierGroups, and RU_2x996_TONE.
Referenced by FindOverlappingRu(), ns3::WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(), ns3::SpectrumWifiPhy::GetHeRuBands(), ns3::HeRu::RuSpec::GetPhyIndex(), and GetSubcarrierGroup().
|
static |
Get the set of distinct RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth.
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ruType | the RU type (number of tones) |
Definition at line 511 of file he-ru.cc.
References m_heRuSubcarrierGroups, NS_ASSERT, and RU_2x996_TONE.
Referenced by ns3::WifiTxVector::DeriveRuAllocation(), and ns3::HePpdu::SetHeMuUserInfos().
|
static |
Get the RU specs based on RU_ALLOCATION.
ruAllocation | 8 bit RU_ALLOCATION value |
Definition at line 393 of file he-ru.cc.
References m_heRuAllocations, and NS_FATAL_ERROR.
Referenced by ns3::HePpdu::SetHeMuUserInfos().
|
static |
Get the RU corresponding to the approximate bandwidth.
bandwidth | the approximate bandwidth (in MHz) occupied by the RU |
Definition at line 788 of file he-ru.cc.
References NS_ABORT_MSG, RU_106_TONE, RU_242_TONE, RU_26_TONE, RU_2x996_TONE, RU_484_TONE, RU_52_TONE, and RU_996_TONE.
Referenced by ns3::HePhy::GetCenterFrequencyForNonHePart(), and ns3::HePhy::GetNonOfdmaBand().
|
static |
Get the subcarrier group of the RU having the given PHY index among all the RUs of the given type (number of tones) available in a HE PPDU of the given bandwidth.
A subcarrier group is defined as one or more pairs indicating the lowest frequency index and the highest frequency index. Note that for channel width of 160 MHz the returned range is relative to the 160 MHz channel (i.e. -1012 to 1012). The PHY index parameter is used to distinguish between lower and higher 80 MHz subchannels.
bw | the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160) |
ruType | the RU type (number of tones) |
phyIndex | the PHY index (starting at 1) of the RU |
Definition at line 587 of file he-ru.cc.
References GetNRus(), m_heRuSubcarrierGroups, NS_ABORT_MSG_IF, and RU_2x996_TONE.
Referenced by DoesOverlap(), ns3::SpectrumWifiPhy::GetHeRuBands(), ns3::HePhy::GetNonOfdmaBand(), ns3::HePhy::GetRuBandForRx(), ns3::HePhy::GetRuBandForTx(), and ns3::HeRu::RuSpecCompare::operator()().
|
staticconstexpr |
Empty 242-tone RU identifier.
Definition at line 311 of file he-ru.h.
Referenced by ns3::WifiTxVector::DeriveRuAllocation().
|
static |
Table 27-26 of IEEE 802.11ax-2021.
Definition at line 297 of file he-ru.h.
Referenced by GetRuSpecs().
|
static |
Subcarrier groups for all RUs (with indices being applicable to primary 80 MHz channel)
Definition at line 291 of file he-ru.h.
Referenced by GetEqualSizedRusForStations(), GetNRus(), GetRusOfType(), and GetSubcarrierGroup().