PHY entity for HE (11ax) More...
#include "he-phy.h"
Public Types | |
typedef Callback< void, HeSigAParameters > | EndOfHeSigACallback |
Callback upon end of HE-SIG-A. | |
Public Types inherited from ns3::PhyEntity | |
typedef std::pair< std::pair< Time, Time >, WifiMode > | PhyHeaderChunkInfo |
A pair containing information on the PHY header chunk, namely the start and stop times of the chunk and the WifiMode used. | |
typedef std::map< WifiPpduField, PhyHeaderChunkInfo > | PhyHeaderSections |
A map of PhyHeaderChunkInfo elements per PPDU field. | |
enum | PhyRxFailureAction { DROP = 0 , ABORT , IGNORE } |
Action to perform in case of RX failure. More... | |
Public Member Functions | |
HePhy (bool buildModeList=true) | |
Constructor for HE PHY. | |
~HePhy () override | |
Destructor for HE PHY. | |
Ptr< WifiPpdu > | BuildPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override |
Build amendment-specific PPDU. | |
virtual Time | CalculateNonHeDurationForHeMu (const WifiTxVector &txVector) const |
virtual Time | CalculateNonHeDurationForHeTb (const WifiTxVector &txVector) const |
Time | CalculateTxDuration (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, WifiPhyBand band) const override |
void | CancelAllEvents () override |
Cancel and clear all running events. | |
bool | CanStartRx (Ptr< const WifiPpdu > ppdu) const override |
Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU. | |
Ptr< const WifiPsdu > | GetAddressedPsduInPpdu (Ptr< const WifiPpdu > ppdu) const override |
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU). | |
uint8_t | GetBssColor () const |
dBm_u | GetCcaThreshold (const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const override |
Return the CCA threshold for a given channel type. | |
std::vector< MHz_u > | GetCenterFrequenciesForNonHePart (const Ptr< const WifiPpdu > ppdu, uint16_t staId) const |
Get the center frequency per segment of the non-HE portion of the current PPDU for the given STA-ID. | |
uint64_t | GetCurrentHeTbPpduUid () const |
Time | GetLSigDuration (WifiPreamble preamble) const override |
MHz_u | GetMeasurementChannelWidth (const Ptr< const WifiPpdu > ppdu) const override |
Return the channel width used to measure the RSSI. | |
WifiSpectrumBandInfo | GetNonOfdmaBand (const WifiTxVector &txVector, uint16_t staId) const |
Get the band used to transmit the non-OFDMA part of an HE TB PPDU. | |
MHz_u | GetNonOfdmaWidth (HeRu::RuSpec ru) const |
Get the width of the non-OFDMA portion of an HE TB PPDU. | |
Ptr< ObssPdAlgorithm > | GetObssPdAlgorithm () const |
Gets the OBSS-PD algorithm. | |
const PpduFormats & | GetPpduFormats () const override |
Return the PPDU formats of the PHY. | |
WifiSpectrumBandInfo | GetRuBandForRx (const WifiTxVector &txVector, uint16_t staId) const |
Get the band in the RX spectrum associated with the RU used by the PSDU transmitted to/by a given STA in a DL MU PPDU/HE TB PPDU. | |
WifiSpectrumBandInfo | GetRuBandForTx (const WifiTxVector &txVector, uint16_t staId) const |
Get the band in the TX spectrum associated with the RU used by the PSDU transmitted to/by a given STA in a DL MU PPDU/HE TB PPDU. | |
Ptr< const WifiPpdu > | GetRxPpduFromTxPpdu (Ptr< const WifiPpdu > ppdu) override |
The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel. | |
Time | GetSigADuration (WifiPreamble preamble) const override |
WifiMode | GetSigAMode () const override |
Time | GetSigBDuration (const WifiTxVector &txVector) const override |
WifiMode | GetSigBMode (const WifiTxVector &txVector) const override |
WifiMode | GetSigMode (WifiPpduField field, const WifiTxVector &txVector) const override |
Get the WifiMode for the SIG field specified by the PPDU field. | |
uint16_t | GetStaId (const Ptr< const WifiPpdu > ppdu) const override |
Return the STA ID that has been assigned to the station this PHY belongs to. | |
Time | GetTrainingDuration (const WifiTxVector &txVector, uint8_t nDataLtf, uint8_t nExtensionLtf=0) const override |
void | NotifyCcaBusy (const Ptr< const WifiPpdu > ppdu, Time duration, WifiChannelListType channelType) override |
Notify PHY state helper to switch to CCA busy state,. | |
void | NotifyEndOfHeSigA (HeSigAParameters params) |
Fire a EndOfHeSigA callback (if connected) once HE-SIG-A field has been received. | |
void | SetEndOfHeSigACallback (EndOfHeSigACallback callback) |
Set a callback for a end of HE-SIG-A. | |
void | SetObssPdAlgorithm (const Ptr< ObssPdAlgorithm > algorithm) |
Sets the OBSS-PD algorithm. | |
void | SetTrigVector (const WifiTxVector &trigVector, Time validity) |
Set the TRIGVECTOR and the associated expiration time. | |
void | StartReceivePreamble (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration) override |
Start receiving the PHY preamble of a PPDU (i.e. | |
void | StartTx (Ptr< const WifiPpdu > ppdu) override |
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actions. | |
void | SwitchMaybeToCcaBusy (const Ptr< const WifiPpdu > ppdu) override |
Check if PHY state should move to CCA busy state based on current state of interference tracker. | |
Public Member Functions inherited from ns3::VhtPhy | |
VhtPhy (bool buildModeList=true) | |
Constructor for VHT PHY. | |
~VhtPhy () override | |
Destructor for VHT PHY. | |
Ptr< WifiPpdu > | BuildPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override |
Build amendment-specific PPDU. | |
dBm_u | GetCcaThreshold (const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const override |
Return the CCA threshold for a given channel type. | |
Time | GetDuration (WifiPpduField field, const WifiTxVector &txVector) const override |
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmission parameters. | |
Time | GetLSigDuration (WifiPreamble preamble) const override |
const PpduFormats & | GetPpduFormats () const override |
Return the PPDU formats of the PHY. | |
WifiMode | GetSigMode (WifiPpduField field, const WifiTxVector &txVector) const override |
Get the WifiMode for the SIG field specified by the PPDU field. | |
Time | GetTrainingDuration (const WifiTxVector &txVector, uint8_t nDataLtf, uint8_t nExtensionLtf=0) const override |
Public Member Functions inherited from ns3::HtPhy | |
HtPhy (uint8_t maxNss=1, bool buildModeList=true) | |
Constructor for HT PHY. | |
~HtPhy () override | |
Destructor for HT PHY. | |
uint8_t | GetBssMembershipSelector () const |
uint8_t | GetMaxSupportedMcsIndexPerSs () const |
Set the maximum supported MCS index per spatial stream. | |
WifiMode | GetMcs (uint8_t index) const override |
Get the WifiMode corresponding to the given MCS index. | |
Time | GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override |
bool | HandlesMcsModes () const override |
Check if the WifiModes handled by this PHY are MCSs. | |
bool | IsMcsSupported (uint8_t index) const override |
Check if the WifiMode corresponding to the given MCS index is supported. | |
void | SetMaxSupportedMcsIndexPerSs (uint8_t maxIndex) |
Set the maximum supported MCS index per spatial stream. | |
void | SetMaxSupportedNss (uint8_t maxNss) |
Configure the maximum number of spatial streams supported by this HT PHY. | |
Public Member Functions inherited from ns3::OfdmPhy | |
OfdmPhy (OfdmPhyVariant variant=OFDM_PHY_DEFAULT, bool buildModeList=true) | |
Constructor for OFDM PHY. | |
~OfdmPhy () override | |
Destructor for OFDM PHY. | |
Time | GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override |
Ptr< const WifiPpdu > | GetRxPpduFromTxPpdu (Ptr< const WifiPpdu > ppdu) override |
The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel. | |
Public Member Functions inherited from ns3::PhyEntity | |
virtual | ~PhyEntity () |
Destructor for PHY entity. | |
std::list< WifiMode >::const_iterator | begin () const |
Return a const iterator to the first WifiMode. | |
Time | CalculatePhyPreambleAndHeaderDuration (const WifiTxVector &txVector) const |
void | CancelRunningEndPreambleDetectionEvents () |
Cancel all end preamble detection events. | |
std::list< WifiMode >::const_iterator | end () const |
Return a const iterator to past-the-last WifiMode. | |
void | EndReceiveField (WifiPpduField field, Ptr< Event > event) |
End receiving a given field. | |
void | EndReceivePayload (Ptr< Event > event) |
The last symbol of the PPDU has arrived. | |
Time | GetDurationUpToField (WifiPpduField field, const WifiTxVector &txVector) const |
Get the duration of the PPDU up to (but excluding) the given field. | |
WifiPpduField | GetNextField (WifiPpduField currentField, WifiPreamble preamble) const |
Return the field following the provided one. | |
virtual uint8_t | GetNumModes () const |
PhyHeaderSections | GetPhyHeaderSections (const WifiTxVector &txVector, Time ppduStart) const |
Return a map of PHY header chunk information per PPDU field. | |
Time | GetRemainingDurationAfterField (Ptr< const WifiPpdu > ppdu, WifiPpduField field) const |
Get the remaining duration of the PPDU after the end of the given field. | |
virtual bool | IsModeSupported (WifiMode mode) const |
Check if the WifiMode is supported. | |
bool | NoEndPreambleDetectionEvents () const |
void | ResetReceive (Ptr< Event > event) |
Reset PHY at the end of the PPDU under reception after it has failed the PHY header. | |
void | SetOwner (Ptr< WifiPhy > wifiPhy) |
Set the WifiPhy owning this PHY entity. | |
void | StartReceiveField (WifiPpduField field, Ptr< Event > event) |
Start receiving a given field. | |
void | Transmit (Time txDuration, Ptr< const WifiPpdu > ppdu, dBm_u txPower, Ptr< SpectrumValue > txPowerSpectrum, const std::string &type) |
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPhy's Transmit method. | |
Public Member Functions inherited from ns3::SimpleRefCount< PhyEntity > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Static Public Member Functions | |
static std::vector< WifiSpectrumBandIndices > | ConvertHeRuSubcarriers (MHz_u bandWidth, MHz_u guardBandwidth, const std::vector< MHz_u > ¢erFrequencies, MHz_u totalWidth, Hz_u subcarrierSpacing, HeRu::SubcarrierRange subcarrierRange, uint8_t bandIndex=0) |
static std::pair< uint16_t, Time > | ConvertHeTbPpduDurationToLSigLength (Time ppduDuration, const WifiTxVector &txVector, WifiPhyBand band) |
Compute the L-SIG length value corresponding to the given HE TB PPDU duration. | |
static Time | ConvertLSigLengthToHeTbPpduDuration (uint16_t length, const WifiTxVector &txVector, WifiPhyBand band) |
static WifiMode | CreateHeMcs (uint8_t index) |
Create and return the HE MCS corresponding to the provided index. | |
static WifiCodeRate | GetCodeRate (uint8_t mcsValue) |
Return the coding rate corresponding to the supplied HE MCS index. | |
static uint16_t | GetConstellationSize (uint8_t mcsValue) |
Return the constellation size corresponding to the supplied HE MCS index. | |
static uint64_t | GetDataRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the data rate corresponding to the supplied HE MCS index, channel width, guard interval, and number of spatial streams. | |
static uint64_t | GetDataRateFromTxVector (const WifiTxVector &txVector, uint16_t staId=SU_STA_ID) |
Return the data rate corresponding to the supplied TXVECTOR for the STA-ID. | |
static WifiMode | GetHeMcs (uint8_t index) |
Return the HE MCS corresponding to the provided index. | |
static WifiMode | GetHeMcs0 () |
Return MCS 0 from HE MCS values. | |
static WifiMode | GetHeMcs1 () |
Return MCS 1 from HE MCS values. | |
static WifiMode | GetHeMcs10 () |
Return MCS 10 from HE MCS values. | |
static WifiMode | GetHeMcs11 () |
Return MCS 11 from HE MCS values. | |
static WifiMode | GetHeMcs2 () |
Return MCS 2 from HE MCS values. | |
static WifiMode | GetHeMcs3 () |
Return MCS 3 from HE MCS values. | |
static WifiMode | GetHeMcs4 () |
Return MCS 4 from HE MCS values. | |
static WifiMode | GetHeMcs5 () |
Return MCS 5 from HE MCS values. | |
static WifiMode | GetHeMcs6 () |
Return MCS 6 from HE MCS values. | |
static WifiMode | GetHeMcs7 () |
Return MCS 7 from HE MCS values. | |
static WifiMode | GetHeMcs8 () |
Return MCS 8 from HE MCS values. | |
static WifiMode | GetHeMcs9 () |
Return MCS 9 from HE MCS values. | |
static uint64_t | GetNonHtReferenceRate (uint8_t mcsValue) |
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HE MCS index. | |
static uint64_t | GetPhyRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the PHY rate corresponding to the supplied HE MCS index, channel width, guard interval, and number of spatial stream. | |
static uint64_t | GetPhyRateFromTxVector (const WifiTxVector &txVector, uint16_t staId=SU_STA_ID) |
Return the PHY rate corresponding to the supplied TXVECTOR for the STA-ID. | |
static Time | GetSymbolDuration (Time guardInterval) |
static void | InitializeModes () |
Initialize all HE modes. | |
static bool | IsAllowed (const WifiTxVector &txVector) |
Check whether the combination in TXVECTOR is allowed. | |
Static Public Member Functions inherited from ns3::VhtPhy | |
static WifiCodeRate | GetCodeRate (uint8_t mcsValue) |
Return the coding rate corresponding to the supplied VHT MCS index. | |
static uint16_t | GetConstellationSize (uint8_t mcsValue) |
Return the constellation size corresponding to the supplied VHT MCS index. | |
static uint64_t | GetDataRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the data rate corresponding to the supplied VHT MCS index, channel width, guard interval, and number of spatial streams. | |
static uint64_t | GetDataRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the data rate corresponding to the supplied TXVECTOR. | |
static uint64_t | GetNonHtReferenceRate (uint8_t mcsValue) |
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied VHT MCS index. | |
static uint64_t | GetPhyRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the PHY rate corresponding to the supplied VHT MCS index, channel width, guard interval, and number of spatial stream. | |
static uint64_t | GetPhyRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the PHY rate corresponding to the supplied TXVECTOR. | |
static WifiMode | GetVhtMcs (uint8_t index) |
Return the VHT MCS corresponding to the provided index. | |
static WifiMode | GetVhtMcs0 () |
Return MCS 0 from VHT MCS values. | |
static WifiMode | GetVhtMcs1 () |
Return MCS 1 from VHT MCS values. | |
static WifiMode | GetVhtMcs2 () |
Return MCS 2 from VHT MCS values. | |
static WifiMode | GetVhtMcs3 () |
Return MCS 3 from VHT MCS values. | |
static WifiMode | GetVhtMcs4 () |
Return MCS 4 from VHT MCS values. | |
static WifiMode | GetVhtMcs5 () |
Return MCS 5 from VHT MCS values. | |
static WifiMode | GetVhtMcs6 () |
Return MCS 6 from VHT MCS values. | |
static WifiMode | GetVhtMcs7 () |
Return MCS 7 from VHT MCS values. | |
static WifiMode | GetVhtMcs8 () |
Return MCS 8 from VHT MCS values. | |
static WifiMode | GetVhtMcs9 () |
Return MCS 9 from VHT MCS values. | |
static void | InitializeModes () |
Initialize all VHT modes. | |
static bool | IsAllowed (const WifiTxVector &txVector) |
Check whether the combination in TXVECTOR is allowed. | |
static bool | IsCombinationAllowed (uint8_t mcsValue, MHz_u channelWidth, uint8_t nss) |
Check whether the combination of <MCS, channel width, NSS> is allowed. | |
Static Public Member Functions inherited from ns3::HtPhy | |
static WifiCodeRate | GetCodeRate (uint8_t mcsValue) |
Return the coding rate corresponding to the supplied HT MCS index between 0 and 7, since HT MCS index > 8 is used for higher NSS. | |
static uint16_t | GetConstellationSize (uint8_t mcsValue) |
Return the constellation size corresponding to the supplied HT MCS index between 0 and 7, since HT MCS index > 8 is used for higher NSS. | |
static uint64_t | GetDataRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the data rate corresponding to the supplied HT MCS index, channel width, guard interval, and number of spatial streams. | |
static uint64_t | GetDataRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the data rate corresponding to the supplied TXVECTOR. | |
static WifiCodeRate | GetHtCodeRate (uint8_t mcsValue) |
Return the coding rate corresponding to the supplied HT MCS index. | |
static uint16_t | GetHtConstellationSize (uint8_t mcsValue) |
Return the constellation size corresponding to the supplied HT MCS index. | |
static WifiMode | GetHtMcs (uint8_t index) |
Return the HT MCS corresponding to the provided index. | |
static WifiMode | GetHtMcs0 () |
Return MCS 0 from HT MCS values. | |
static WifiMode | GetHtMcs1 () |
Return MCS 1 from HT MCS values. | |
static WifiMode | GetHtMcs10 () |
Return MCS 10 from HT MCS values. | |
static WifiMode | GetHtMcs11 () |
Return MCS 11 from HT MCS values. | |
static WifiMode | GetHtMcs12 () |
Return MCS 12 from HT MCS values. | |
static WifiMode | GetHtMcs13 () |
Return MCS 13 from HT MCS values. | |
static WifiMode | GetHtMcs14 () |
Return MCS 14 from HT MCS values. | |
static WifiMode | GetHtMcs15 () |
Return MCS 15 from HT MCS values. | |
static WifiMode | GetHtMcs16 () |
Return MCS 16 from HT MCS values. | |
static WifiMode | GetHtMcs17 () |
Return MCS 17 from HT MCS values. | |
static WifiMode | GetHtMcs18 () |
Return MCS 18 from HT MCS values. | |
static WifiMode | GetHtMcs19 () |
Return MCS 19 from HT MCS values. | |
static WifiMode | GetHtMcs2 () |
Return MCS 2 from HT MCS values. | |
static WifiMode | GetHtMcs20 () |
Return MCS 20 from HT MCS values. | |
static WifiMode | GetHtMcs21 () |
Return MCS 21 from HT MCS values. | |
static WifiMode | GetHtMcs22 () |
Return MCS 22 from HT MCS values. | |
static WifiMode | GetHtMcs23 () |
Return MCS 23 from HT MCS values. | |
static WifiMode | GetHtMcs24 () |
Return MCS 24 from HT MCS values. | |
static WifiMode | GetHtMcs25 () |
Return MCS 25 from HT MCS values. | |
static WifiMode | GetHtMcs26 () |
Return MCS 26 from HT MCS values. | |
static WifiMode | GetHtMcs27 () |
Return MCS 27 from HT MCS values. | |
static WifiMode | GetHtMcs28 () |
Return MCS 28 from HT MCS values. | |
static WifiMode | GetHtMcs29 () |
Return MCS 29 from HT MCS values. | |
static WifiMode | GetHtMcs3 () |
Return MCS 3 from HT MCS values. | |
static WifiMode | GetHtMcs30 () |
Return MCS 30 from HT MCS values. | |
static WifiMode | GetHtMcs31 () |
Return MCS 31 from HT MCS values. | |
static WifiMode | GetHtMcs4 () |
Return MCS 4 from HT MCS values. | |
static WifiMode | GetHtMcs5 () |
Return MCS 5 from HT MCS values. | |
static WifiMode | GetHtMcs6 () |
Return MCS 6 from HT MCS values. | |
static WifiMode | GetHtMcs7 () |
Return MCS 7 from HT MCS values. | |
static WifiMode | GetHtMcs8 () |
Return MCS 8 from HT MCS values. | |
static WifiMode | GetHtMcs9 () |
Return MCS 9 from HT MCS values. | |
static WifiMode | GetLSigMode () |
static uint64_t | GetNonHtReferenceRate (uint8_t mcsValue) |
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HT MCS index. | |
static uint64_t | GetPhyRate (uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss) |
Return the PHY rate corresponding to the supplied HT MCS index, channel width, guard interval, and number of spatial stream. | |
static uint64_t | GetPhyRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the PHY rate corresponding to the supplied TXVECTOR. | |
static void | InitializeModes () |
Initialize all HT modes. | |
static bool | IsAllowed (const WifiTxVector &txVector) |
Check whether the combination in TXVECTOR is allowed. | |
Static Public Member Functions inherited from ns3::OfdmPhy | |
static WifiCodeRate | GetCodeRate (const std::string &name) |
Return the WifiCodeRate from the OFDM mode's unique name using ModulationLookupTable. | |
static uint16_t | GetConstellationSize (const std::string &name) |
Return the constellation size from the OFDM mode's unique name using ModulationLookupTable. | |
static uint64_t | GetDataRate (const std::string &name, MHz_u channelWidth) |
Return the data rate from the OFDM mode's unique name and the supplied parameters. | |
static uint64_t | GetDataRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the data rate corresponding to the supplied TXVECTOR. | |
static WifiMode | GetOfdmRate (uint64_t rate, MHz_u bw=20) |
Return a WifiMode for OFDM corresponding to the provided rate and the channel bandwidth (20, 10, or 5 MHz). | |
static WifiMode | GetOfdmRate12Mbps () |
Return a WifiMode for OFDM at 12Mbps. | |
static WifiMode | GetOfdmRate12MbpsBW10MHz () |
Return a WifiMode for OFDM at 12 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate12MbpsBW5MHz () |
Return a WifiMode for OFDM at 12 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate13_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 13.5 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate18Mbps () |
Return a WifiMode for OFDM at 18 Mbps. | |
static WifiMode | GetOfdmRate18MbpsBW10MHz () |
Return a WifiMode for OFDM at 18 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate1_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 1.5 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate24Mbps () |
Return a WifiMode for OFDM at 24 Mbps. | |
static WifiMode | GetOfdmRate24MbpsBW10MHz () |
Return a WifiMode for OFDM at 24 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate27MbpsBW10MHz () |
Return a WifiMode for OFDM at 27 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate2_25MbpsBW5MHz () |
Return a WifiMode for OFDM at 2.25 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate36Mbps () |
Return a WifiMode for OFDM at 36 Mbps. | |
static WifiMode | GetOfdmRate3MbpsBW10MHz () |
Return a WifiMode for OFDM at 3 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate3MbpsBW5MHz () |
Return a WifiMode for OFDM at 3 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate48Mbps () |
Return a WifiMode for OFDM at 48 Mbps. | |
static WifiMode | GetOfdmRate4_5MbpsBW10MHz () |
Return a WifiMode for OFDM at 4.5 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate4_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 4.5 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate54Mbps () |
Return a WifiMode for OFDM at 54 Mbps. | |
static WifiMode | GetOfdmRate6Mbps () |
Return a WifiMode for OFDM at 6 Mbps. | |
static WifiMode | GetOfdmRate6MbpsBW10MHz () |
Return a WifiMode for OFDM at 6 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate6MbpsBW5MHz () |
Return a WifiMode for OFDM at 6 Mbps with 5 MHz channel spacing. | |
static WifiMode | GetOfdmRate9Mbps () |
Return a WifiMode for OFDM at 9 Mbps. | |
static WifiMode | GetOfdmRate9MbpsBW10MHz () |
Return a WifiMode for OFDM at 9 Mbps with 10 MHz channel spacing. | |
static WifiMode | GetOfdmRate9MbpsBW5MHz () |
Return a WifiMode for OFDM at 9 Mbps with 5 MHz channel spacing. | |
static uint64_t | GetPhyRate (const std::string &name, MHz_u channelWidth) |
Return the PHY rate from the OFDM mode's unique name and the supplied parameters. | |
static uint64_t | GetPhyRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the PHY rate corresponding to the supplied TXVECTOR. | |
static void | InitializeModes () |
Initialize all OFDM modes (for all variants). | |
static bool | IsAllowed (const WifiTxVector &txVector) |
Check whether the combination in TXVECTOR is allowed. | |
Protected Member Functions | |
void | DoAbortCurrentReception (WifiPhyRxfailureReason reason) override |
Perform amendment-specific actions before aborting the current reception. | |
void | DoEndReceivePayload (Ptr< const WifiPpdu > ppdu) override |
Perform amendment-specific actions at the end of the reception of the payload. | |
Ptr< Event > | DoGetEvent (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW) override |
Get the event corresponding to the incoming PPDU. | |
void | DoResetReceive (Ptr< Event > event) override |
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after it has failed the PHY header. | |
Time | DoStartReceivePayload (Ptr< Event > event) override |
Start receiving the PSDU (i.e. | |
std::pair< MHz_u, WifiSpectrumBandInfo > | GetChannelWidthAndBand (const WifiTxVector &txVector, uint16_t staId) const override |
Get the channel width and band to use (will be overloaded by child classes). | |
Time | GetMaxDelayPpduSameUid (const WifiTxVector &txVector) override |
Obtain the maximum time between two PPDUs with the same UID to consider they are identical and their power can be added construtively. | |
uint32_t | GetMaxPsduSize () const override |
Get the maximum PSDU size in bytes. | |
virtual uint32_t | GetSigBSize (const WifiTxVector &txVector) const |
Ptr< SpectrumValue > | GetTxPowerSpectralDensity (Watt_u txPower, Ptr< const WifiPpdu > ppdu) const override |
WifiConstPsduMap | GetWifiConstPsduMap (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) const override |
Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU. | |
void | HandleRxPpduWithSameContent (Ptr< Event > event, Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPower) override |
Handle reception of a PPDU that carries the same content of another PPDU. | |
bool | IsConfigSupported (Ptr< const WifiPpdu > ppdu) const override |
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. | |
uint64_t | ObtainNextUid (const WifiTxVector &txVector) override |
Obtain the next UID for the PPDU to transmit. | |
PhyFieldRxStatus | ProcessSig (Ptr< Event > event, PhyFieldRxStatus status, WifiPpduField field) override |
Process SIG-A or SIG-B, perform amendment-specific actions, and provide an updated status of the reception. | |
virtual PhyFieldRxStatus | ProcessSigA (Ptr< Event > event, PhyFieldRxStatus status) |
Process SIG-A, perform amendment-specific actions, and provide an updated status of the reception. | |
virtual PhyFieldRxStatus | ProcessSigB (Ptr< Event > event, PhyFieldRxStatus status) |
Process SIG-B, perform amendment-specific actions, and provide an updated status of the reception. | |
void | RxPayloadFailed (Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector) override |
Perform amendment-specific actions when the payload is unsuccessfuly received. | |
void | RxPayloadSucceeded (Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, uint16_t staId, const std::vector< bool > &statusPerMpdu) override |
Perform amendment-specific actions when the payload is successfully received. | |
void | StartReceiveMuPayload (Ptr< Event > event) |
Start receiving the PSDU (i.e. | |
Protected Member Functions inherited from ns3::VhtPhy | |
PhyFieldRxStatus | DoEndReceiveField (WifiPpduField field, Ptr< Event > event) override |
End receiving a given field, perform amendment-specific actions, and provide the status of the reception. | |
PhyFieldRxStatus | EndReceiveSig (Ptr< Event > event, WifiPpduField field) |
End receiving the SIG-A or SIG-B, perform VHT-specific actions, and provide the status of the reception. | |
CcaIndication | GetCcaIndication (const Ptr< const WifiPpdu > ppdu) override |
Get CCA end time and its corresponding channel list type when a new signal has been received by the PHY. | |
virtual WifiPhyRxfailureReason | GetFailureReason (WifiPpduField field) const |
Get the failure reason corresponding to the unsuccessful processing of a given PPDU field. | |
Time | GetHtSigDuration () const override |
WifiMode | GetHtSigMode () const override |
uint32_t | GetMaxPsduSize () const override |
Get the maximum PSDU size in bytes. | |
uint8_t | GetNumberBccEncoders (const WifiTxVector &txVector) const override |
bool | IsAllConfigSupported (WifiPpduField field, Ptr< const WifiPpdu > ppdu) const override |
Checks if the signaled configuration (including bandwidth) is supported by the PHY. | |
Protected Member Functions inherited from ns3::HtPhy | |
Ptr< SpectrumValue > | GetTxPowerSpectralDensity (Watt_u txPower, Ptr< const WifiPpdu > ppdu) const override |
bool | IsConfigSupported (Ptr< const WifiPpdu > ppdu) const override |
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. | |
Protected Member Functions inherited from ns3::OfdmPhy | |
PhyFieldRxStatus | EndReceiveHeader (Ptr< Event > event) |
End receiving the header, perform OFDM-specific actions, and provide the status of the reception. | |
virtual Time | GetHeaderDuration (const WifiTxVector &txVector) const |
virtual WifiMode | GetHeaderMode (const WifiTxVector &txVector) const |
MHz_u | GetMeasurementChannelWidth (const Ptr< const WifiPpdu > ppdu) const override |
Return the channel width used to measure the RSSI. | |
uint8_t | GetNumberServiceBits () const |
virtual Time | GetPreambleDuration (const WifiTxVector &txVector) const |
Time | GetSignalExtension (WifiPhyBand band) const |
Ptr< SpectrumValue > | GetTxPowerSpectralDensity (Watt_u txPower, Ptr< const WifiPpdu > ppdu) const override |
virtual bool | IsChannelWidthSupported (Ptr< const WifiPpdu > ppdu) const |
Checks if the PPDU's bandwidth is supported by the PHY. | |
Protected Member Functions inherited from ns3::PhyEntity | |
void | AbortCurrentReception (WifiPhyRxfailureReason reason) |
Abort the current reception. | |
void | AddPreambleEvent (Ptr< Event > event) |
Add an entry to the map of current preamble events (stored in WifiPhy). | |
Ptr< Event > | CreateInterferenceEvent (Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &rxPower, bool isStartHePortionRxing=false) |
Create an event using WifiPhy's InterferenceHelper class. | |
virtual PhyFieldRxStatus | DoEndReceivePreamble (Ptr< Event > event) |
End receiving the preamble, perform amendment-specific actions, and provide the status of the reception. | |
virtual bool | DoStartReceiveField (WifiPpduField field, Ptr< Event > event) |
Start receiving a given field, perform amendment-specific actions, and signify if it is supported. | |
void | DropPreambleEvent (Ptr< const WifiPpdu > ppdu, WifiPhyRxfailureReason reason, Time endRx) |
Drop the PPDU and the corresponding preamble detection event, but keep CCA busy state after the completion of the currently processed event. | |
void | EndOfMpdu (Ptr< Event > event, Ptr< WifiMpdu > mpdu, size_t mpduIndex, Time relativeStart, Time mpduDuration) |
The last symbol of an MPDU in an A-MPDU has arrived. | |
void | EndPreambleDetectionPeriod (Ptr< Event > event) |
End the preamble detection period. | |
void | ErasePreambleEvent (Ptr< const WifiPpdu > ppdu, Time rxDuration) |
Erase the event corresponding to the PPDU from the list of preamble events, but consider it as noise after the completion of the current event. | |
Ptr< const Event > | GetCurrentEvent () const |
Get the pointer to the current event (stored in WifiPhy). | |
const std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > & | GetCurrentPreambleEvents () const |
Get the map of current preamble events (stored in WifiPhy). | |
Time | GetDelayUntilCcaEnd (dBm_u threshold, const WifiSpectrumBandInfo &band) |
Return the delay until CCA busy is ended for a given sensitivity threshold and a given band. | |
MHz_u | GetGuardBandwidth (MHz_u currentChannelWidth) const |
SnrPer | GetPhyHeaderSnrPer (WifiPpduField field, Ptr< Event > event) const |
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class. | |
WifiSpectrumBandInfo | GetPrimaryBand (MHz_u bandWidth) const |
If the operating channel width is a multiple of 20 MHz, return the info corresponding to the primary channel of the given bandwidth (which must be a multiple of 20 MHz and not exceed the operating channel width). | |
double | GetRandomValue () const |
Obtain a random value from the WifiPhy's generator. | |
std::pair< bool, SignalNoiseDbm > | GetReceptionStatus (Ptr< WifiMpdu > mpdu, Ptr< Event > event, uint16_t staId, Time relativeMpduStart, Time mpduDuration) |
Get the reception status for the provided MPDU and notify. | |
virtual MHz_u | GetRxChannelWidth (const WifiTxVector &txVector) const |
Return the channel width used in the reception spectrum model. | |
Watt_u | GetRxPowerForPpdu (Ptr< Event > event) const |
Obtain the received power for a given band. | |
WifiSpectrumBandInfo | GetSecondaryBand (MHz_u bandWidth) const |
If the channel bonding is used, return the info corresponding to the secondary channel of the given bandwidth (which must be a multiple of 20 MHz and not exceed the operating channel width). | |
std::tuple< dBr_u, dBr_u, dBr_u > | GetTxMaskRejectionParams () const |
void | NotifyInterferenceRxEndAndClear (bool reset) |
Notify WifiPhy's InterferenceHelper of the end of the reception, clear maps and end of MPDU event, and eventually reset WifiPhy. | |
void | NotifyPayloadBegin (const WifiTxVector &txVector, const Time &payloadDuration) |
Fire the trace indicating that the PHY is starting to receive the payload of a PPDU. | |
void | ScheduleEndOfMpdus (Ptr< Event > event) |
Schedule end of MPDUs events. | |
void | StartPreambleDetectionPeriod (Ptr< Event > event) |
Start the preamble detection period. | |
void | StartReceivePayload (Ptr< Event > event) |
Start receiving the PSDU (i.e. | |
Static Protected Member Functions | |
static uint64_t | CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize) |
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and constellation size. | |
static uint16_t | GetUsableSubcarriers (MHz_u channelWidth) |
Static Protected Member Functions inherited from ns3::VhtPhy | |
static uint64_t | CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize) |
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and constellation size. | |
static uint16_t | GetUsableSubcarriers (MHz_u channelWidth) |
Static Protected Member Functions inherited from ns3::HtPhy | |
static uint64_t | CalculateDataRate (Time symbolDuration, uint16_t usableSubCarriers, uint16_t numberOfBitsPerSubcarrier, double codingRate, uint8_t nss) |
Calculates data rate from the supplied parameters. | |
static uint64_t | CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize) |
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and constellation size. | |
static uint64_t | CalculatePhyRate (WifiCodeRate codeRate, uint64_t dataRate) |
Return the PHY rate corresponding to the supplied code rate and data rate. | |
static double | GetCodeRatio (WifiCodeRate codeRate) |
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5. | |
static Time | GetSymbolDuration (Time guardInterval) |
static uint16_t | GetUsableSubcarriers (MHz_u channelWidth) |
Static Protected Member Functions inherited from ns3::OfdmPhy | |
static uint64_t | CalculateDataRate (Time symbolDuration, uint16_t usableSubCarriers, uint16_t numberOfBitsPerSubcarrier, double codingRate) |
Calculates data rate from the supplied parameters. | |
static uint64_t | CalculateDataRate (WifiCodeRate codeRate, uint16_t constellationSize, MHz_u channelWidth) |
Calculates data rate from the supplied parameters. | |
static uint64_t | CalculatePhyRate (WifiCodeRate codeRate, uint64_t dataRate) |
Calculate the PHY rate in bps from code rate and data rate. | |
static double | GetCodeRatio (WifiCodeRate codeRate) |
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5. | |
static Time | GetSymbolDuration (MHz_u channelWidth) |
static uint16_t | GetUsableSubcarriers () |
Protected Attributes | |
std::map< uint16_t, EventId > | m_beginMuPayloadRxEvents |
the beginning of the MU payload reception events (indexed by STA-ID) | |
uint64_t | m_currentMuPpduUid |
UID of the HE MU or HE TB PPDU being received. | |
std::optional< WifiTxVector > | m_currentTxVector |
If the STA is an AP STA, this holds the TXVECTOR of the PPDU that has been sent. | |
EndOfHeSigACallback | m_endOfHeSigACallback |
end of HE-SIG-A callback | |
uint64_t | m_previouslyTxPpduUid |
UID of the previously sent PPDU, used by AP to recognize response HE TB PPDUs. | |
std::optional< WifiTxVector > | m_trigVector |
the TRIGVECTOR | |
std::optional< Time > | m_trigVectorExpirationTime |
expiration time of the TRIGVECTOR | |
Protected Attributes inherited from ns3::HtPhy | |
uint8_t | m_bssMembershipSelector |
the BSS membership selector | |
uint8_t | m_maxMcsIndexPerSs |
the maximum MCS index per spatial stream as defined by the standard | |
uint8_t | m_maxSupportedMcsIndexPerSs |
the maximum supported MCS index per spatial stream | |
Protected Attributes inherited from ns3::PhyEntity | |
std::vector< EventId > | m_endOfMacHdrEvents |
the end of MAC header events | |
std::vector< EventId > | m_endOfMpduEvents |
the end of MPDU events (only used for A-MPDUs) | |
std::vector< EventId > | m_endPreambleDetectionEvents |
the end of preamble detection events | |
std::vector< EventId > | m_endRxPayloadEvents |
the end of receive events (only one unless UL MU reception) | |
std::list< WifiMode > | m_modeList |
the list of supported modes | |
std::map< UidStaIdPair, SignalNoiseDbm > | m_signalNoiseMap |
Map of the latest signal power and noise power in dBm (noise power includes the noise figure) | |
Ptr< WifiPhyStateHelper > | m_state |
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes) | |
std::map< UidStaIdPair, std::vector< bool > > | m_statusPerMpduMap |
Map of the current reception status per MPDU that is filled in as long as MPDUs are being processed by the PHY in case of an A-MPDU. | |
Ptr< WifiPhy > | m_wifiPhy |
Pointer to the owning WifiPhy. | |
Private Member Functions | |
void | BuildModeList () override |
Build mode list. | |
uint8_t | GetNumberBccEncoders (const WifiTxVector &txVector) const override |
std::vector< Time > | GetPer20MHzDurations (const Ptr< const WifiPpdu > ppdu) |
Compute the per-20 MHz CCA durations vector that indicates for how long each 20 MHz subchannel (corresponding to the index of the element in the vector) is busy and where a zero duration indicates that the subchannel is idle. | |
Time | GetSymbolDuration (const WifiTxVector &txVector) const override |
Ptr< SpectrumValue > | GetTxPowerSpectralDensity (Watt_u txPower, Ptr< const WifiPpdu > ppdu, HePpdu::TxPsdFlag flag) const |
This is a helper function to create the TX PSD of the non-HE and HE portions. | |
void | NotifyCcaBusy (Time duration, WifiChannelListType channelType, const std::vector< Time > &per20MHzDurations) |
Notify PHY state helper to switch to CCA busy state,. | |
void | StartTxHePortion (Ptr< const WifiPpdu > ppdu, dBm_u txPower, Ptr< SpectrumValue > txPowerSpectrum, Time hePortionDuration) |
Start the transmission of the HE portion of the MU PPDU. | |
Static Private Member Functions | |
static Time | GetValidPpduDuration (Time ppduDuration, const WifiTxVector &txVector, WifiPhyBand band) |
Given a PPDU duration value, the TXVECTOR used to transmit the PPDU and the PHY band, compute a valid PPDU duration considering the number and duration of symbols, the preamble duration and the guard interval. | |
Private Attributes | |
std::vector< Time > | m_lastPer20MHzDurations |
Hold the last per-20 MHz CCA durations vector. | |
Ptr< ObssPdAlgorithm > | m_obssPdAlgorithm |
OBSS-PD algorithm. | |
std::size_t | m_rxHeTbPpdus |
Number of successfully received HE TB PPDUS. | |
Static Private Attributes | |
static const PpduFormats | m_hePpduFormats |
HE PPDU formats. | |
Additional Inherited Members | |
Protected Types inherited from ns3::PhyEntity | |
using | CcaIndication |
CCA end time and its corresponding channel list type (can be std::nullopt if IDLE) | |
typedef std::pair< WifiCodeRate, uint16_t > | CodeRateConstellationSizePair |
A pair to hold modulation information: code rate and constellation size. | |
typedef std::map< std::string, CodeRateConstellationSizePair > | ModulationLookupTable |
A modulation lookup table using unique name of modulation as key. | |
typedef std::map< WifiPreamble, std::vector< WifiPpduField > > | PpduFormats |
A map of PPDU field elements per preamble type. | |
typedef std::pair< uint64_t, uint16_t > | UidStaIdPair |
A pair of a UID and STA_ID. | |
Static Protected Attributes inherited from ns3::PhyEntity | |
static uint64_t | m_globalPpduUid = 0 |
Global counter of the PPDU UID. | |
PHY entity for HE (11ax)
HE PHY is based on VHT PHY.
Refer to P802.11ax/D4.0, clause 27.
typedef Callback<void, HeSigAParameters> ns3::HePhy::EndOfHeSigACallback |
ns3::HePhy::HePhy | ( | bool | buildModeList = true | ) |
Constructor for HE PHY.
buildModeList | flag used to add HE modes to list (disabled by child classes to only add child classes' modes) |
Definition at line 70 of file he-phy.cc.
References BuildModeList(), HE_PHY, ns3::HtPhy::m_bssMembershipSelector, m_currentMuPpduUid, ns3::HtPhy::m_maxMcsIndexPerSs, ns3::HtPhy::m_maxSupportedMcsIndexPerSs, m_previouslyTxPpduUid, and NS_LOG_FUNCTION.
|
override |
|
overrideprivatevirtual |
Build mode list.
Should be redone whenever the maximum MCS index per spatial stream ,or any other important parameter having an impact on the MCS index (e.g. number of spatial streams for HT), changes.
Reimplemented from ns3::HtPhy.
Definition at line 96 of file he-phy.cc.
References CreateHeMcs(), HE_PHY, ns3::HtPhy::m_bssMembershipSelector, ns3::HtPhy::m_maxSupportedMcsIndexPerSs, ns3::PhyEntity::m_modeList, NS_ASSERT, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by HePhy().
|
overridevirtual |
Build amendment-specific PPDU.
psdus | the PHY payloads (PSDUs) |
txVector | the TXVECTOR that was used for the PPDU |
ppduDuration | the transmission duration of the PPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 343 of file he-phy.cc.
References ns3::Create(), ns3::WifiPhy::GetOperatingChannel(), ns3::PhyEntity::m_wifiPhy, NS_LOG_FUNCTION, ObtainNextUid(), and ns3::HePpdu::PSD_NON_HE_PORTION.
|
virtual |
txVector | the transmission parameters used for the HE MU PPDU |
Reimplemented in ns3::EhtPhy.
Definition at line 303 of file he-phy.cc.
References ns3::VhtPhy::GetDuration(), ns3::WIFI_PPDU_FIELD_NON_HT_HEADER, ns3::WIFI_PPDU_FIELD_PREAMBLE, ns3::WIFI_PPDU_FIELD_SIG_A, and ns3::WIFI_PPDU_FIELD_SIG_B.
Referenced by DoGetEvent(), and StartTx().
|
virtual |
txVector | the transmission parameters used for the HE TB PPDU |
Reimplemented in ns3::EhtPhy.
Definition at line 294 of file he-phy.cc.
References ns3::VhtPhy::GetDuration(), ns3::WIFI_PPDU_FIELD_NON_HT_HEADER, ns3::WIFI_PPDU_FIELD_PREAMBLE, and ns3::WIFI_PPDU_FIELD_SIG_A.
Referenced by DoGetEvent(), and StartTx().
|
staticprotected |
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and constellation size.
codeRate | the convolutional coding rate |
constellationSize | the size of modulation constellation |
To convert an HE MCS to its corresponding non-HT Reference Rate use the modulation and coding rate of the HT MCS and lookup in Table 10-10 of IEEE P802.11ax/D6.0.
Definition at line 1751 of file he-phy.cc.
References ns3::VhtPhy::CalculateNonHtReferenceRate(), NS_FATAL_ERROR, ns3::WIFI_CODE_RATE_3_4, and ns3::WIFI_CODE_RATE_5_6.
Referenced by ns3::EhtPhy::CalculateNonHtReferenceRate(), and GetNonHtReferenceRate().
|
overridevirtual |
psduMap | the PSDU(s) to transmit indexed by STA-ID |
txVector | the TXVECTOR used for the transmission of the PPDU |
band | the frequency band being used |
Reimplemented from ns3::PhyEntity.
Definition at line 1530 of file he-phy.cc.
References ns3::WifiPhy::CalculateTxDuration(), ConvertLSigLengthToHeTbPpduDuration(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetLength(), ns3::WifiTxVector::GetModulationClass(), ns3::WifiTxVector::IsDlMu(), ns3::Time::IsStrictlyPositive(), ns3::WifiTxVector::IsUlMu(), NS_ABORT_MSG_IF, NS_ASSERT, and ns3::WIFI_MOD_CLASS_HE.
|
overridevirtual |
Cancel and clear all running events.
Reimplemented from ns3::PhyEntity.
Definition at line 405 of file he-phy.cc.
References ns3::PhyEntity::CancelAllEvents(), m_beginMuPayloadRxEvents, and NS_LOG_FUNCTION.
Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU.
ppdu | the PPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 1800 of file he-phy.cc.
References ns3::AP, ns3::PhyEntity::CanStartRx(), ns3::WifiPhy::GetDevice(), and ns3::PhyEntity::m_wifiPhy.
|
static |
bandWidth | the width of the band used for the OFDMA transmission. Must be a multiple of 20 MHz |
guardBandwidth | width of the guard band |
centerFrequencies | the center frequency of each segment |
totalWidth | the width of the operating channel |
subcarrierSpacing | the subcarrier spacing |
subcarrierRange | the subcarrier range of the HE RU |
bandIndex | the index (starting at 0) of the band within the operating channel |
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. The size of the returned vector corresponds to the number of segments covered by the HE RU.
Definition at line 1845 of file he-phy.cc.
References ns3::SpectrumWifiPhy::GetNumBandsBetweenSegments(), NS_ASSERT, NS_ASSERT_MSG, and NS_FATAL_ERROR.
Referenced by ns3::SpectrumWifiPhy::GetHeRuBands(), GetNonOfdmaBand(), GetRuBandForRx(), and GetRuBandForTx().
|
static |
Compute the L-SIG length value corresponding to the given HE TB PPDU duration.
If the latter is not a feasible duration (considering the selected guard interval), a proper duration is computed and returned along with the L-SIG length value.
ppduDuration | the duration of the HE TB PPDU |
txVector | the TXVECTOR used for the transmission of this HE TB PPDU |
band | the frequency band being used |
Definition at line 261 of file he-phy.cc.
References ns3::WifiTxVector::GetModulationClass(), ns3::Time::GetNanoSeconds(), GetValidPpduDuration(), ns3::WifiTxVector::IsUlMu(), NS_ABORT_IF, ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PHY_BAND_2_4GHZ.
Referenced by WifiPrimaryChannelsTest::DoSendHeTbPpdu(), TestMultipleHeTbPreambles::RxHeTbPpdu(), TestMultiUserScheduler::SelectTxFormat(), TestPhyPaddingExclusion::SendHeTbPpdu(), TestUlMuMimoPhyTransmission::SendHeTbPpdu(), TestUlOfdmaPhyTransmission::SendHeTbPpdu(), TestUlOfdmaPowerControl::SendMuBar(), TestUlOfdmaPpduUid::SendTbPpdu(), TestPhyPaddingExclusion::SetTrigVector(), TestUlMuMimoPhyTransmission::SetTrigVector(), TestUlOfdmaPhyTransmission::SetTrigVector(), ns3::RrMultiUserScheduler::TrySendingBasicTf(), and ns3::RrMultiUserScheduler::TrySendingBsrpTf().
|
static |
length | the L-SIG length value |
txVector | the TXVECTOR used for the transmission of this HE TB PPDU |
band | the frequency band being used |
Definition at line 280 of file he-phy.cc.
References ns3::WifiTxVector::GetModulationClass(), GetValidPpduDuration(), ns3::WifiTxVector::IsUlMu(), ns3::MicroSeconds(), NS_ABORT_IF, ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PHY_BAND_2_4GHZ.
Referenced by CalculateTxDuration(), DoStartReceivePayload(), and ns3::HeFrameExchangeManager::SendPsduMapWithProtection().
|
static |
Create and return the HE MCS corresponding to the provided index.
This method binds all the callbacks used by WifiMode.
index | the index of the MCS |
Definition at line 1622 of file he-phy.cc.
References ns3::WifiModeFactory::CreateWifiMcs(), GetCodeRate(), GetConstellationSize(), GetDataRateFromTxVector(), GetNonHtReferenceRate(), GetPhyRateFromTxVector(), IsAllowed(), ns3::MakeBoundCallback(), ns3::MakeCallback(), NS_ASSERT_MSG, and ns3::WIFI_MOD_CLASS_HE.
Referenced by BuildModeList().
|
overrideprotectedvirtual |
Perform amendment-specific actions before aborting the current reception.
reason | the reason the reception is aborted |
Reimplemented from ns3::PhyEntity.
Definition at line 417 of file he-phy.cc.
References ns3::PhyEntity::DoAbortCurrentReception(), ns3::PhyEntity::m_endOfMpduEvents, NS_LOG_FUNCTION, and ns3::OBSS_PD_CCA_RESET.
Perform amendment-specific actions at the end of the reception of the payload.
ppdu | the incoming PPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 880 of file he-phy.cc.
References ns3::PhyEntity::DoEndReceivePayload(), ns3::WifiPhy::GetLastRxEndTime(), m_currentMuPpduUid, ns3::PhyEntity::m_endRxPayloadEvents, m_rxHeTbPpdus, ns3::PhyEntity::m_state, ns3::PhyEntity::m_wifiPhy, ns3::PhyEntity::NotifyInterferenceRxEndAndClear(), ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
overrideprotectedvirtual |
Get the event corresponding to the incoming PPDU.
We store all incoming preamble events, perform amendment-specific actions, and a decision is made at the end of the preamble detection window.
ppdu | the incoming PPDU |
rxPowersW | the receive power in W per band |
Reimplemented from ns3::PhyEntity.
Definition at line 450 of file he-phy.cc.
References ns3::PhyEntity::AddPreambleEvent(), CalculateNonHeDurationForHeMu(), CalculateNonHeDurationForHeTb(), ns3::PhyEntity::CreateInterferenceEvent(), ns3::PhyEntity::DoGetEvent(), ns3::PhyEntity::GetCurrentPreambleEvents(), HandleRxPpduWithSameContent(), m_previouslyTxPpduUid, NS_LOG_DEBUG, ns3::WIFI_PPDU_TYPE_DL_MU, and ns3::WIFI_PPDU_TYPE_UL_MU.
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after it has failed the PHY header.
event | the event holding incoming PPDU's information |
Reimplemented from ns3::PhyEntity.
Definition at line 435 of file he-phy.cc.
References m_beginMuPayloadRxEvents, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, and ns3::WIFI_PPDU_TYPE_UL_MU.
Start receiving the PSDU (i.e.
the first symbol of the PSDU has arrived) and perform amendment-specific actions.
event | the event holding incoming PPDU's information |
Reimplemented from ns3::PhyEntity.
Definition at line 782 of file he-phy.cc.
References ns3::AP, ns3::PhyEntity::CalculatePhyPreambleAndHeaderDuration(), ConvertLSigLengthToHeTbPpduDuration(), ns3::PhyEntity::DoStartReceivePayload(), ns3::Simulator::GetDelayLeft(), ns3::WifiPhy::GetDevice(), ns3::WifiPhy::GetPhyBand(), GetStaId(), m_beginMuPayloadRxEvents, ns3::PhyEntity::m_endRxPayloadEvents, ns3::PhyEntity::m_signalNoiseMap, ns3::PhyEntity::m_statusPerMpduMap, ns3::PhyEntity::m_wifiPhy, Max, ns3::PhyEntity::NotifyPayloadBegin(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::PhyEntity::ResetReceive(), ns3::Simulator::Schedule(), and ns3::WIFI_MOD_CLASS_HE.
|
overridevirtual |
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU).
ppdu | the PPDU to extract the PSDU from |
Reimplemented from ns3::PhyEntity.
Definition at line 538 of file he-phy.cc.
References ns3::DynamicCast(), ns3::PhyEntity::GetAddressedPsduInPpdu(), GetBssColor(), GetStaId(), NS_ASSERT, ns3::WIFI_PPDU_TYPE_DL_MU, and ns3::WIFI_PPDU_TYPE_UL_MU.
Referenced by ProcessSigA(), ProcessSigB(), and StartReceiveMuPayload().
uint8_t ns3::HePhy::GetBssColor | ( | ) | const |
Definition at line 550 of file he-phy.cc.
References ns3::WifiPhy::GetDevice(), and ns3::PhyEntity::m_wifiPhy.
Referenced by GetAddressedPsduInPpdu(), and ProcessSigA().
|
overridevirtual |
Return the CCA threshold for a given channel type.
If the channel type is not provided, the default CCA threshold is returned.
ppdu | the PPDU that is being received |
channelType | the channel type |
Reimplemented from ns3::PhyEntity.
Definition at line 1113 of file he-phy.cc.
References ns3::VhtPhy::GetCcaThreshold(), m_obssPdAlgorithm, and ns3::WIFI_CHANLIST_PRIMARY.
std::vector< MHz_u > ns3::HePhy::GetCenterFrequenciesForNonHePart | ( | const Ptr< const WifiPpdu > | ppdu, |
uint16_t | staId ) const |
Get the center frequency per segment of the non-HE portion of the current PPDU for the given STA-ID.
Note this method is only to be used for UL MU.
ppdu | the PPDU |
staId | the STA-ID of the station taking part of the UL MU |
Definition at line 1437 of file he-phy.cc.
References ns3::HeRu::FindOverlappingRu(), GetNonOfdmaWidth(), ns3::WifiPhy::GetOperatingChannel(), ns3::HeRu::RuSpec::GetPhyIndex(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::HeRu::GetRuType(), ns3::PhyEntity::m_wifiPhy, NS_ASSERT, NS_LOG_FUNCTION, and ns3::WIFI_MOD_CLASS_HE.
Referenced by GetTxPowerSpectralDensity().
|
overrideprotectedvirtual |
Get the channel width and band to use (will be overloaded by child classes).
txVector | the transmission parameters |
staId | the station ID of the PSDU |
Reimplemented from ns3::PhyEntity.
Definition at line 965 of file he-phy.cc.
References ns3::HeRu::GetBandwidth(), ns3::PhyEntity::GetChannelWidthAndBand(), ns3::WifiTxVector::GetRu(), GetRuBandForRx(), ns3::HeRu::RuSpec::GetRuType(), and ns3::WifiTxVector::IsMu().
|
static |
Return the coding rate corresponding to the supplied HE MCS index.
This function is used as a callback for WifiMode operation.
mcsValue | the MCS index |
Definition at line 1638 of file he-phy.cc.
References ns3::VhtPhy::GetCodeRate(), ns3::WIFI_CODE_RATE_3_4, and ns3::WIFI_CODE_RATE_5_6.
Referenced by CreateHeMcs(), ns3::EhtPhy::GetCodeRate(), GetDataRate(), GetNonHtReferenceRate(), and GetPhyRate().
|
static |
Return the constellation size corresponding to the supplied HE MCS index.
This function is used as a callback for WifiMode operation.
mcsValue | the MCS index |
Definition at line 1652 of file he-phy.cc.
References ns3::VhtPhy::GetConstellationSize().
Referenced by CreateHeMcs(), ns3::EhtPhy::GetConstellationSize(), GetDataRate(), and GetNonHtReferenceRate().
uint64_t ns3::HePhy::GetCurrentHeTbPpduUid | ( | ) | const |
Definition at line 1089 of file he-phy.cc.
References m_currentMuPpduUid.
|
static |
Return the data rate corresponding to the supplied HE MCS index, channel width, guard interval, and number of spatial streams.
mcsValue | the MCS index |
channelWidth | the channel width |
guardInterval | the guard interval duration |
nss | the number of spatial streams |
Definition at line 1701 of file he-phy.cc.
References ns3::HtPhy::CalculateDataRate(), GetCodeRate(), ns3::HtPhy::GetCodeRatio(), GetConstellationSize(), ns3::Time::GetNanoSeconds(), GetSymbolDuration(), ns3::OfdmPhy::GetUsableSubcarriers(), and NS_ASSERT.
Referenced by GetDataRateFromTxVector(), and GetPhyRate().
|
static |
Return the data rate corresponding to the supplied TXVECTOR for the STA-ID.
txVector | the TXVECTOR used for the transmission |
staId | the station ID for MU (unused if SU) |
Definition at line 1687 of file he-phy.cc.
References ns3::HeRu::GetBandwidth(), ns3::WifiTxVector::GetChannelWidth(), GetDataRate(), ns3::WifiTxVector::GetGuardInterval(), ns3::WifiMode::GetMcsValue(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), ns3::WifiTxVector::GetRu(), ns3::HeRu::RuSpec::GetRuType(), and ns3::WifiTxVector::IsMu().
Referenced by CreateHeMcs().
|
static |
Return the HE MCS corresponding to the provided index.
index | the index of the MCS |
Definition at line 1573 of file he-phy.cc.
References CASE, and NS_ABORT_MSG.
Referenced by HeRuMcsDataRateTestCase::CheckDataRate(), ns3::WifiTxVector::GetMode(), InitializeModes(), WifiPhyReceptionTest::SendPacket(), and ns3::HePpdu::SetTxVectorFromPhyHeaders().
|
static |
Return MCS 0 from HE MCS values.
Referenced by WifiPhyCcaThresholdsTest::CreateDummyHePpdu(), WifiPhyChannel80Plus80Test::CreateDummyHePpdu(), TxDurationTest::DoRun(), TestPhyDropDueToTx::Send(), TestAmpduReception::SendAmpduWithThreeMpdus(), WifiPhyCcaIndicationTest::SendHeSuPpdu(), SpectrumWifiPhyFilterTest::SendPpdu(), TestUnsupportedBandwidthReception::SendPpdu(), TestWifiPhyRxTraceHelper::SendPpduWithOneMpdu(), TestWifiPhyRxTraceHelperMloStr::SendPpduWithOneMpdu(), TestWifiPhyRxTraceHelperYans::SendPpduWithOneMpdu(), TestWifiPhyRxTraceHelper::SendPpduWithTwoMpdus(), TestWifiPhyRxTraceHelperMloStr::SendPpduWithTwoMpdus(), and TestWifiPhyRxTraceHelperYans::SendPpduWithTwoMpdus().
|
static |
Return MCS 1 from HE MCS values.
|
static |
Return MCS 10 from HE MCS values.
|
static |
Return MCS 11 from HE MCS values.
Referenced by WifiErrorRateModelsTestSuite::WifiErrorRateModelsTestSuite(), TxDurationTest::DoRun(), and SpectrumWifiPhyMultipleInterfacesTest::SendPpdu().
|
static |
Return MCS 2 from HE MCS values.
|
static |
Return MCS 3 from HE MCS values.
|
static |
Return MCS 4 from HE MCS values.
|
static |
Return MCS 5 from HE MCS values.
|
static |
Return MCS 6 from HE MCS values.
|
static |
Return MCS 7 from HE MCS values.
Referenced by TestPrimary20CoveredByPpdu::CreatePpdu(), TestUlMuMimoPhyTransmission::GetTxVectorForHeTbPpdu(), TestUlOfdmaPhyTransmission::GetTxVectorForHeTbPpdu(), TestMultipleHeTbPreambles::RxHeTbPpdu(), TestSpectrumChannelWithBandwidthFilter::Send(), SpectrumWifiPhy80Plus80Test::Send160MhzPpdu(), TestUlMuMimoPhyTransmission::SendHeSuPpdu(), TestUlOfdmaPhyTransmission::SendHeSuPpdu(), TestPhyPaddingExclusion::SendHeTbPpdu(), TestUlOfdmaPowerControl::SendMuBar(), TestDlMuMimoPhyTransmission::SendMuPpdu(), TestDlOfdmaPhyPuncturing::SendMuPpdu(), TestDlOfdmaPhyTransmission::SendMuPpdu(), TestUlOfdmaPpduUid::SendMuPpdu(), TestUlOfdmaPpduUid::SendSuPpdu(), TestUlOfdmaPpduUid::SendTbPpdu(), TestPhyPaddingExclusion::SetTrigVector(), TestUlMuMimoPhyTransmission::SetTrigVector(), and TestUlOfdmaPhyTransmission::SetTrigVector().
|
static |
Return MCS 8 from HE MCS values.
Referenced by WifiPrimaryChannelsTest::DoSendHeTbPpdu(), WifiRetransmitTest::DoSetup(), WifiPrimaryChannelsTest::SendDlMuPpdu(), and WifiPrimaryChannelsTest::SendDlSuPpdu().
|
static |
Return MCS 9 from HE MCS values.
Referenced by PhyHeaderSectionsTest::DoRun(), TestDlOfdmaPhyPuncturing::SendMuPpdu(), TestDlOfdmaPhyTransmission::SendMuPpdu(), TestUlOfdmaPpduUid::SendMuPpdu(), and TestUlOfdmaPpduUid::SendTbPpdu().
|
overridevirtual |
preamble | the type of preamble |
Reimplemented from ns3::HtPhy.
Definition at line 177 of file he-phy.cc.
References ns3::MicroSeconds().
|
overrideprotectedvirtual |
Obtain the maximum time between two PPDUs with the same UID to consider they are identical and their power can be added construtively.
txVector | the TXVECTOR used for the transmission of the PPDUs |
Reimplemented from ns3::PhyEntity.
Definition at line 1309 of file he-phy.cc.
References ns3::WifiPhy::GetDevice(), ns3::VhtPhy::GetDuration(), ns3::PhyEntity::m_wifiPhy, Min, NS_ASSERT, and ns3::WIFI_PPDU_FIELD_TRAINING.
|
overrideprotectedvirtual |
Get the maximum PSDU size in bytes.
Implements ns3::PhyEntity.
|
overridevirtual |
Return the channel width used to measure the RSSI.
ppdu | the PPDU that is being received |
The PHY shall not issue a PHY-RXSTART.indication primitive in response to a PPDU that does not overlap the primary channel unless the PHY at an AP receives the HE TB PPDU solicited by the AP. For the HE TB PPDU solicited by the AP, the PHY shall issue a PHY-RXSTART.indication primitive for a PPDU received in the primary or at the secondary 20 MHz channel, the secondary 40 MHz channel, or the secondary 80 MHz channel.
Implements ns3::PhyEntity.
Definition at line 1095 of file he-phy.cc.
References ns3::OfdmPhy::GetMeasurementChannelWidth(), and m_previouslyTxPpduUid.
|
static |
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HE MCS index.
This function calls CalculateNonHtReferenceRate and is used as a callback for WifiMode operation.
mcsValue | the HE MCS index |
Definition at line 1743 of file he-phy.cc.
References CalculateNonHtReferenceRate(), GetCodeRate(), and GetConstellationSize().
Referenced by CreateHeMcs().
WifiSpectrumBandInfo ns3::HePhy::GetNonOfdmaBand | ( | const WifiTxVector & | txVector, |
uint16_t | staId ) const |
Get the band used to transmit the non-OFDMA part of an HE TB PPDU.
txVector | the TXVECTOR used for the transmission |
staId | the STA-ID of the station taking part of the UL MU |
Definition at line 1040 of file he-phy.cc.
References ConvertHeRuSubcarriers(), ns3::WifiPhy::ConvertIndicesToFrequencies(), ns3::HeRu::FindOverlappingRu(), ns3::WifiPhy::GetChannelWidth(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhyOperatingChannel::GetFrequencies(), ns3::PhyEntity::GetGuardBandwidth(), ns3::WifiTxVector::GetModulationClass(), GetNonOfdmaWidth(), ns3::WifiPhy::GetOperatingChannel(), ns3::HeRu::RuSpec::GetPhyIndex(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::WifiTxVector::GetRu(), ns3::HeRu::GetRuType(), ns3::HeRu::RuSpec::GetRuType(), ns3::HeRu::GetSubcarrierGroup(), ns3::WifiPhy::GetSubcarrierSpacing(), ns3::WifiSpectrumBandInfo::indices, ns3::WifiTxVector::IsUlMu(), ns3::PhyEntity::m_wifiPhy, NS_ASSERT, and ns3::WIFI_MOD_CLASS_HE.
MHz_u ns3::HePhy::GetNonOfdmaWidth | ( | HeRu::RuSpec | ru | ) | const |
Get the width of the non-OFDMA portion of an HE TB PPDU.
ru | the RU in which the HE TB PPDU is sent |
Definition at line 1077 of file he-phy.cc.
References ns3::HeRu::GetBandwidth(), ns3::HeRu::RuSpec::GetIndex(), ns3::HeRu::RuSpec::GetRuType(), and ns3::HeRu::RU_26_TONE.
Referenced by GetCenterFrequenciesForNonHePart(), and GetNonOfdmaBand().
|
overrideprivatevirtual |
txVector | the transmission parameters |
Add an encoder when crossing maxRatePerCoder frontier.
The value of 320 Mbps and 350 Mbps for normal GI and short GI (resp.) were obtained by observing the rates for which Nes was incremented in tables 19-27 to 19-41 of IEEE 802.11-2016.
Reimplemented from ns3::HtPhy.
Ptr< ObssPdAlgorithm > ns3::HePhy::GetObssPdAlgorithm | ( | ) | const |
Gets the OBSS-PD algorithm.
Definition at line 700 of file he-phy.cc.
References m_obssPdAlgorithm.
Compute the per-20 MHz CCA durations vector that indicates for how long each 20 MHz subchannel (corresponding to the index of the element in the vector) is busy and where a zero duration indicates that the subchannel is idle.
The vector is non-empty if the operational channel width is larger than 20 MHz.
ppdu | the incoming PPDU or nullptr for any signal |
27.3.20.6.5 Per 20 MHz CCA sensitivity: If the operating channel width is greater than 20 MHz and the PHY issues a PHY-CCA.indication primitive, the PHY shall set the per20bitmap to indicate the busy/idle status of each 20 MHz subchannel.
A signal is present on the 20 MHz subchannel at or above a threshold of –62 dBm at the receiver's antenna(s). The PHY shall indicate that the 20 MHz subchannel is busy a period aCCATime after the signal starts and shall continue to indicate the 20 MHz subchannel is busy while the threshold continues to be exceeded.
A 20 MHz non-HT, HT_MF, HT_GF, VHT, or HE PPDU at or above max(–72 dBm, OBSS_ PDlevel) at the receiver's antenna(s) is present on the 20 MHz subchannel. The PHY shall indicate that the 20 MHz subchannel is busy with > 90% probability within a period aCCAMidTime.
The 20 MHz subchannel is in a channel on which a 40 MHz non-HT duplicate, HT_MF, HT_GF, VHT or HE PPDU at or above max(–72 dBm, OBSS_PDlevel + 3 dB) at the receiver's antenna(s) is present. The PHY shall indicate that the 20 MHz subchannel is busy with > 90% probability within a period aCCAMidTime.
The 20 MHz subchannel is in a channel on which an 80 MHz non-HT duplicate, VHT or HE PPDU at or above max(–69 dBm, OBSS_PDlevel + 6 dB) at the receiver's antenna(s) is present. The PHY shall indicate that the 20 MHz subchannel is busy with > 90% probability within a period aCCAMidTime.
Definition at line 1191 of file he-phy.cc.
References ns3::WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInPrimary(), ns3::WifiPhy::GetBand(), ns3::WifiPhy::GetChannelWidth(), ns3::PhyEntity::GetDelayUntilCcaEnd(), ns3::WifiPhy::GetFrequency(), ns3::WifiPhy::GetOperatingChannel(), m_obssPdAlgorithm, ns3::PhyEntity::m_wifiPhy, NS_ASSERT_MSG, and NS_LOG_FUNCTION.
Referenced by NotifyCcaBusy(), and SwitchMaybeToCcaBusy().
|
static |
Return the PHY rate corresponding to the supplied HE MCS index, channel width, guard interval, and number of spatial stream.
This function calls HtPhy::CalculatePhyRate and is mainly used as a callback for WifiMode operation.
mcsValue | the HE MCS index |
channelWidth | the considered channel width |
guardInterval | the considered guard interval duration |
nss | the considered number of stream |
Definition at line 1665 of file he-phy.cc.
References ns3::HtPhy::CalculatePhyRate(), GetCodeRate(), and GetDataRate().
Referenced by GetPhyRateFromTxVector().
|
static |
Return the PHY rate corresponding to the supplied TXVECTOR for the STA-ID.
txVector | the TXVECTOR used for the transmission |
staId | the station ID for MU (unused if SU) |
Definition at line 1673 of file he-phy.cc.
References ns3::HeRu::GetBandwidth(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiTxVector::GetGuardInterval(), ns3::WifiMode::GetMcsValue(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), GetPhyRate(), ns3::WifiTxVector::GetRu(), ns3::HeRu::RuSpec::GetRuType(), and ns3::WifiTxVector::IsMu().
Referenced by CreateHeMcs().
|
overridevirtual |
Return the PPDU formats of the PHY.
Implements ns3::PhyEntity.
Definition at line 171 of file he-phy.cc.
References m_hePpduFormats.
WifiSpectrumBandInfo ns3::HePhy::GetRuBandForRx | ( | const WifiTxVector & | txVector, |
uint16_t | staId ) const |
Get the band in the RX spectrum associated with the RU used by the PSDU transmitted to/by a given STA in a DL MU PPDU/HE TB PPDU.
txVector | the TXVECTOR used for the transmission |
staId | the STA-ID of the station |
Definition at line 1009 of file he-phy.cc.
References ConvertHeRuSubcarriers(), ns3::WifiPhy::ConvertIndicesToFrequencies(), ns3::WifiPhy::GetChannelWidth(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhyOperatingChannel::GetFrequencies(), ns3::PhyEntity::GetGuardBandwidth(), ns3::WifiPhy::GetOperatingChannel(), ns3::HeRu::RuSpec::GetPhyIndex(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::WifiTxVector::GetRu(), ns3::HeRu::RuSpec::GetRuType(), ns3::HeRu::GetSubcarrierGroup(), ns3::WifiPhy::GetSubcarrierSpacing(), ns3::WifiSpectrumBandInfo::indices, ns3::WifiTxVector::IsMu(), ns3::PhyEntity::m_wifiPhy, and NS_ASSERT.
Referenced by GetChannelWidthAndBand().
WifiSpectrumBandInfo ns3::HePhy::GetRuBandForTx | ( | const WifiTxVector & | txVector, |
uint16_t | staId ) const |
Get the band in the TX spectrum associated with the RU used by the PSDU transmitted to/by a given STA in a DL MU PPDU/HE TB PPDU.
txVector | the TXVECTOR used for the transmission |
staId | the STA-ID of the station |
Definition at line 979 of file he-phy.cc.
References ConvertHeRuSubcarriers(), ns3::WifiPhy::ConvertIndicesToFrequencies(), ns3::WifiPhy::GetChannelWidth(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhyOperatingChannel::GetFrequencies(), ns3::PhyEntity::GetGuardBandwidth(), ns3::WifiPhy::GetOperatingChannel(), ns3::HeRu::RuSpec::GetPhyIndex(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::WifiTxVector::GetRu(), ns3::HeRu::RuSpec::GetRuType(), ns3::HeRu::GetSubcarrierGroup(), ns3::WifiPhy::GetSubcarrierSpacing(), ns3::WifiSpectrumBandInfo::indices, ns3::WifiTxVector::IsMu(), ns3::PhyEntity::m_wifiPhy, and NS_ASSERT.
Referenced by GetTxPowerSpectralDensity().
The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel.
By default and for performance reasons, all RX PHYs will work on the same WifiPpdu instance from TX instead of a copy of it. Child classes can change that behavior and do a copy and/or change the content of the parameters stored in WifiPpdu.
ppdu | the WifiPpdu transmitted by the TX PHY |
Reimplemented from ns3::PhyEntity.
Definition at line 1819 of file he-phy.cc.
References ns3::DynamicCast(), ns3::OfdmPhy::GetRxPpduFromTxPpdu(), m_trigVector, m_trigVectorExpirationTime, ns3::Simulator::Now(), NS_ASSERT, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
overridevirtual |
preamble | the type of preamble |
Reimplemented from ns3::VhtPhy.
Definition at line 204 of file he-phy.cc.
References ns3::MicroSeconds(), and ns3::WIFI_PREAMBLE_HE_ER_SU.
Referenced by ns3::EhtPhy::GetDuration().
|
overridevirtual |
Reimplemented from ns3::VhtPhy.
Definition at line 132 of file he-phy.cc.
References ns3::VhtPhy::GetVhtMcs0().
Referenced by ns3::EhtPhy::GetSigMode(), and GetSigMode().
|
overridevirtual |
txVector | the transmission parameters |
Reimplemented from ns3::VhtPhy.
Definition at line 228 of file he-phy.cc.
References ns3::FemtoSeconds(), ns3::WifiMode::GetDataRate(), GetSigBMode(), GetSigBSize(), and ns3::MicroSeconds().
Referenced by ns3::EhtPhy::GetDuration().
|
overridevirtual |
txVector | the transmission parameters |
Get smallest HE MCS index among station's allocations and use the VHT version of the index. This enables to have 800 ns GI, 52 data tones, and 312.5 kHz spacing while ensuring that MCS will be decoded by all stations.
Reimplemented from ns3::VhtPhy.
Definition at line 138 of file he-phy.cc.
References ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetPreambleType(), ns3::VhtPhy::GetVhtMcs0(), ns3::VhtPhy::GetVhtMcs1(), ns3::VhtPhy::GetVhtMcs2(), ns3::VhtPhy::GetVhtMcs3(), ns3::VhtPhy::GetVhtMcs4(), ns3::VhtPhy::GetVhtMcs5(), ns3::IsDlMu(), and NS_ABORT_MSG_IF.
Referenced by GetSigBDuration(), ns3::EhtPhy::GetSigBMode(), and GetSigMode().
|
protectedvirtual |
txVector | the transmission parameters |
Reimplemented in ns3::EhtPhy.
Definition at line 212 of file he-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetModulationClass(), ns3::WifiPhy::GetOperatingChannel(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::WifiTxVector::GetRuAllocation(), ns3::HePpdu::GetSigBFieldSize(), ns3::IsDlMu(), ns3::WifiTxVector::IsSigBCompression(), ns3::PhyEntity::m_wifiPhy, NS_ASSERT, and ns3::WIFI_MOD_CLASS_HE.
Referenced by GetSigBDuration(), and ns3::EhtPhy::GetSigBSize().
|
overridevirtual |
Get the WifiMode for the SIG field specified by the PPDU field.
field | the PPDU field |
txVector | the transmission parameters |
Reimplemented from ns3::PhyEntity.
Definition at line 109 of file he-phy.cc.
References ns3::WifiTxVector::GetModulationClass(), GetSigAMode(), GetSigBMode(), ns3::VhtPhy::GetSigMode(), ns3::WifiTxVector::IsDlMu(), NS_ASSERT, ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PPDU_FIELD_TRAINING.
Referenced by ns3::EhtPhy::GetSigMode().
Return the STA ID that has been assigned to the station this PHY belongs to.
This is typically called for MU PPDUs, in order to pick the correct PSDU.
ppdu | the PPDU for which the STA ID is requested |
Reimplemented from ns3::PhyEntity.
Reimplemented in MuMimoTestHePhy, and OfdmaTestHePhy.
Definition at line 565 of file he-phy.cc.
References ns3::DynamicCast(), ns3::WifiPhy::GetDevice(), ns3::PhyEntity::GetStaId(), ns3::PhyEntity::m_wifiPhy, ns3::WIFI_PPDU_TYPE_DL_MU, and ns3::WIFI_PPDU_TYPE_UL_MU.
Referenced by DoStartReceivePayload(), GetAddressedPsduInPpdu(), MuMimoTestHePhy::GetStaId(), OfdmaTestHePhy::GetStaId(), GetTxPowerSpectralDensity(), IsConfigSupported(), StartReceiveMuPayload(), and StartReceivePreamble().
|
overrideprivatevirtual |
txVector | the transmission parameters |
Reimplemented from ns3::HtPhy.
Definition at line 319 of file he-phy.cc.
References ns3::WifiTxVector::GetGuardInterval(), ns3::Time::GetNanoSeconds(), GetSymbolDuration(), and NS_ASSERT.
guardInterval | the guard interval duration |
Definition at line 1737 of file he-phy.cc.
References ns3::NanoSeconds().
Referenced by ns3::EhtPhy::GetDataRate(), GetDataRate(), GetSymbolDuration(), and GetValidPpduDuration().
|
overridevirtual |
txVector | the transmission parameters |
nDataLtf | the number of data LTF fields (excluding those in preamble) |
nExtensionLtf | the number of extension LTF fields |
Reimplemented from ns3::HtPhy.
Definition at line 183 of file he-phy.cc.
References ns3::WifiTxVector::GetModulationClass(), ns3::WifiTxVector::IsUlMu(), ns3::MicroSeconds(), NS_ABORT_MSG_IF, NS_ASSERT, and ns3::WIFI_MOD_CLASS_HE.
|
overrideprotectedvirtual |
txPower | power to spread across the bands |
ppdu | the PPDU that will be transmitted |
This is a helper function to create the right TX PSD corresponding to the amendment of this PHY.
Implements ns3::PhyEntity.
Definition at line 1328 of file he-phy.cc.
References ns3::DynamicCast(), GetTxPowerSpectralDensity(), and NS_ASSERT.
Referenced by GetTxPowerSpectralDensity(), and StartTx().
|
private |
This is a helper function to create the TX PSD of the non-HE and HE portions.
txPower | power to spread across the bands |
ppdu | the PPDU that will be transmitted |
flag | flag indicating whether the PSD is for non-HE portion or HE portion |
Definition at line 1337 of file he-phy.cc.
References ns3::WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(), ns3::WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity(), ns3::WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(), ns3::WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInPrimary(), ns3::HeRu::GetBandwidth(), GetCenterFrequenciesForNonHePart(), ns3::PhyEntity::GetGuardBandwidth(), ns3::WifiPhy::GetOperatingChannel(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), GetRuBandForTx(), GetStaId(), ns3::PhyEntity::GetTxMaskRejectionParams(), ns3::WifiSpectrumBandInfo::indices, ns3::PhyEntity::m_wifiPhy, NS_ASSERT, NS_LOG_FUNCTION, ns3::HePpdu::PSD_NON_HE_PORTION, ns3::WIFI_PPDU_TYPE_DL_MU, ns3::WIFI_PPDU_TYPE_SU, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
staticprotected |
|
staticprivate |
Given a PPDU duration value, the TXVECTOR used to transmit the PPDU and the PHY band, compute a valid PPDU duration considering the number and duration of symbols, the preamble duration and the guard interval.
ppduDuration | the given PPDU duration |
txVector | the given TXVECTOR |
band | the PHY band |
Definition at line 248 of file he-phy.cc.
References ns3::WifiPhy::CalculatePhyPreambleAndHeaderDuration(), ns3::WifiTxVector::GetGuardInterval(), GetSymbolDuration(), ns3::MicroSeconds(), and ns3::WIFI_PHY_BAND_2_4GHZ.
Referenced by ConvertHeTbPpduDurationToLSigLength(), and ConvertLSigLengthToHeTbPpduDuration().
|
overrideprotectedvirtual |
Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU.
The STA-ID value is properly determined based on whether the given PSDU has to be transmitted as a DL or UL frame.
psdu | the given PSDU |
txVector | the TXVECTOR to use to send the PSDU |
Reimplemented from ns3::PhyEntity.
Definition at line 1780 of file he-phy.cc.
References ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetPreambleType(), ns3::IsUlMu(), NS_ASSERT, and ns3::SU_STA_ID.
|
overrideprotectedvirtual |
Handle reception of a PPDU that carries the same content of another PPDU.
This is typically called upon reception of preambles of HE MU PPDUs or reception of non-HT duplicate control frames that carries the exact same content sent from different STAs. If the delay between the PPDU and the first PPDU carrying the same content is small enough, PPDU can be decoded and its power is added constructively, and the TXVECTOR is updated accordingly. Otherwise, a new interference event is created and PPDU is dropped by the PHY.
event | the event of the ongoing reception |
ppdu | the newly received PPDU (UL MU or non-HT duplicate) |
rxPower | the received power (W) per band of the newly received PPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 516 of file he-phy.cc.
References ns3::PhyEntity::GetCurrentEvent(), ns3::PhyEntity::HandleRxPpduWithSameContent(), m_previouslyTxPpduUid, ns3::PhyEntity::m_wifiPhy, ns3::WifiPhy::NotifyRxPpduDrop(), NS_LOG_DEBUG, ns3::RXING, and ns3::WIFI_PPDU_TYPE_UL_MU.
Referenced by DoGetEvent().
|
static |
Initialize all HE modes.
Definition at line 1564 of file he-phy.cc.
References GetHeMcs().
Referenced by anonymous_namespace{he-phy.cc}::ConstructorHe::ConstructorHe().
|
static |
Check whether the combination in TXVECTOR is allowed.
This function is used as a callback for WifiMode operation.
txVector | the TXVECTOR |
Definition at line 1774 of file he-phy.cc.
Referenced by ns3::EhtPhy::CreateEhtMcs(), and CreateHeMcs().
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
ppdu | the received PPDU |
true
if supported, false
otherwise Reimplemented from ns3::PhyEntity.
Definition at line 743 of file he-phy.cc.
References ns3::WifiPhy::GetMaxSupportedRxSpatialStreams(), GetStaId(), ns3::PhyEntity::IsModeSupported(), ns3::PhyEntity::m_wifiPhy, NS_ASSERT, NS_LOG_DEBUG, ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
overridevirtual |
Notify PHY state helper to switch to CCA busy state,.
ppdu | the incoming PPDU or nullptr for any signal |
duration | the duration of the CCA state |
channelType | the channel type for which the CCA busy state is reported. |
Reimplemented from ns3::PhyEntity.
Definition at line 1172 of file he-phy.cc.
References ns3::Time::As(), GetPer20MHzDurations(), NotifyCcaBusy(), NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::Time::S.
Referenced by NotifyCcaBusy(), and SwitchMaybeToCcaBusy().
|
private |
Notify PHY state helper to switch to CCA busy state,.
duration | the duration of the CCA state |
channelType | the channel type for which the CCA busy state is reported. |
per20MHzDurations | the per-20 MHz CCA durations vector |
Definition at line 1181 of file he-phy.cc.
References m_lastPer20MHzDurations, ns3::PhyEntity::m_state, and NS_LOG_FUNCTION.
void ns3::HePhy::NotifyEndOfHeSigA | ( | HeSigAParameters | params | ) |
Fire a EndOfHeSigA callback (if connected) once HE-SIG-A field has been received.
This method is scheduled immediately after end of HE-SIG-A, once field processing is finished.
params | the HE-SIG-A parameters |
Definition at line 712 of file he-phy.cc.
References ns3::Callback< R, UArgs >::IsNull(), and m_endOfHeSigACallback.
Referenced by ProcessSigA().
|
overrideprotectedvirtual |
Obtain the next UID for the PPDU to transmit.
Note that the global UID counter could be incremented.
txVector | the transmission parameters |
Reimplemented from ns3::PhyEntity.
Definition at line 1289 of file he-phy.cc.
References ns3::WifiPhy::GetPreviouslyRxPpduUid(), ns3::WifiTxVector::IsTriggerResponding(), ns3::WifiTxVector::IsUlMu(), ns3::PhyEntity::m_globalPpduUid, m_previouslyTxPpduUid, ns3::PhyEntity::m_wifiPhy, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by ns3::EhtPhy::BuildPpdu(), and BuildPpdu().
|
overrideprotectedvirtual |
Process SIG-A or SIG-B, perform amendment-specific actions, and provide an updated status of the reception.
event | the event holding incoming PPDU's information |
status | the status of the reception of the correctly received SIG-A or SIG-B after the configuration support check |
field | the current PPDU field to identify whether it is SIG-A or SIG-B |
Reimplemented from ns3::VhtPhy.
Definition at line 583 of file he-phy.cc.
References NS_ASSERT, NS_ASSERT_MSG, NS_LOG_FUNCTION, ProcessSigA(), ProcessSigB(), ns3::WIFI_PPDU_FIELD_SIG_A, ns3::WIFI_PPDU_FIELD_SIG_B, and ns3::WIFI_PREAMBLE_HE_SU.
Referenced by ns3::EhtPhy::ProcessSig().
|
protectedvirtual |
Process SIG-A, perform amendment-specific actions, and provide an updated status of the reception.
event | the event holding incoming PPDU's information |
status | the status of the reception of the correctly received SIG-A after the configuration support check |
Definition at line 600 of file he-phy.cc.
References ns3::PhyEntity::DROP, ns3::FILTERED, GetAddressedPsduInPpdu(), GetBssColor(), ns3::PhyEntity::GetRxPowerForPpdu(), ns3::PhyEntity::PhyFieldRxStatus::isSuccess, m_currentMuPpduUid, m_trigVector, m_trigVectorExpirationTime, NotifyEndOfHeSigA(), ns3::Simulator::Now(), NS_ABORT_IF, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WIFI_MOD_CLASS_HE, ns3::WIFI_PPDU_TYPE_DL_MU, ns3::WIFI_PPDU_TYPE_UL_MU, and ns3::WToDbm().
Referenced by ns3::EhtPhy::ProcessSig(), and ProcessSig().
|
protectedvirtual |
Process SIG-B, perform amendment-specific actions, and provide an updated status of the reception.
event | the event holding incoming PPDU's information |
status | the status of the reception of the correctly received SIG-A after the configuration support check |
Definition at line 721 of file he-phy.cc.
References ns3::PhyEntity::DROP, ns3::FILTERED, GetAddressedPsduInPpdu(), ns3::IsDlMu(), ns3::PhyEntity::PhyFieldRxStatus::isSuccess, m_currentMuPpduUid, NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by ns3::EhtPhy::ProcessSig(), and ProcessSig().
|
overrideprotectedvirtual |
Perform amendment-specific actions when the payload is unsuccessfuly received.
psdu | the PSDU that we failed to received |
snr | the SNR of the received PSDU in linear scale |
txVector | TXVECTOR of the PSDU |
Reimplemented from ns3::PhyEntity.
Definition at line 870 of file he-phy.cc.
References ns3::WifiTxVector::IsUlMu(), ns3::PhyEntity::m_state, and NS_LOG_FUNCTION.
|
overrideprotectedvirtual |
Perform amendment-specific actions when the payload is successfully received.
psdu | the successfully received PSDU |
rxSignalInfo | the info on the received signal ( |
txVector | TXVECTOR of the PSDU |
staId | the station ID of the PSDU (only used for MU) |
statusPerMpdu | reception status per MPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 852 of file he-phy.cc.
References ns3::WifiTxVector::GetPreambleType(), ns3::IsUlMu(), m_rxHeTbPpdus, ns3::PhyEntity::m_state, and NS_LOG_FUNCTION.
void ns3::HePhy::SetEndOfHeSigACallback | ( | EndOfHeSigACallback | callback | ) |
Set a callback for a end of HE-SIG-A.
callback | the EndOfHeSigACallback to set |
Definition at line 706 of file he-phy.cc.
References m_endOfHeSigACallback.
void ns3::HePhy::SetObssPdAlgorithm | ( | const Ptr< ObssPdAlgorithm > | algorithm | ) |
Sets the OBSS-PD algorithm.
algorithm | the OBSS-PD algorithm |
Definition at line 694 of file he-phy.cc.
References m_obssPdAlgorithm.
void ns3::HePhy::SetTrigVector | ( | const WifiTxVector & | trigVector, |
Time | validity ) |
Set the TRIGVECTOR and the associated expiration time.
A TRIGVECTOR shall expire when the TX timer associated with the transmission of the Trigger Frame expires.
trigVector | the TRIGVECTOR |
validity | the amount of time (from now) until expiration of the TRIGVECTOR |
Definition at line 328 of file he-phy.cc.
References ns3::AP, ns3::WifiPhy::GetDevice(), ns3::WifiTxVector::GetGuardInterval(), ns3::Time::GetNanoSeconds(), m_trigVector, m_trigVectorExpirationTime, ns3::PhyEntity::m_wifiPhy, ns3::Simulator::Now(), NS_ASSERT_MSG, NS_LOG_FUNCTION, and ns3::Time::US.
Start receiving the PSDU (i.e.
the first symbol of the PSDU has arrived) of an MU transmission. This function is called upon the RX event corresponding to the HE portion of the MU PPDU.
event | the event holding incoming HE portion of the PPDU's information |
m_beginMuPayloadRxEvents should still be running only for APs, since canceled in StartReceivePayload for STAs. This is because SpectrumWifiPhy does not have access to the device type and thus blindly schedules things, letting the parent WifiPhy class take into account device type.
Definition at line 924 of file he-phy.cc.
References ns3::PhyEntity::CalculatePhyPreambleAndHeaderDuration(), ns3::PhyEntity::EndReceivePayload(), GetAddressedPsduInPpdu(), ns3::PhyEntity::GetCurrentEvent(), GetStaId(), ns3::LOG_FUNCTION, m_beginMuPayloadRxEvents, ns3::PhyEntity::m_endRxPayloadEvents, m_rxHeTbPpdus, ns3::PhyEntity::m_signalNoiseMap, ns3::PhyEntity::m_statusPerMpduMap, ns3::PhyEntity::NotifyPayloadBegin(), NS_ASSERT, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), and ns3::PhyEntity::ScheduleEndOfMpdus().
Referenced by StartReceivePreamble().
|
overridevirtual |
Start receiving the PHY preamble of a PPDU (i.e.
the first bit of the preamble has arrived).
This method triggers the start of the preamble detection period (
ppdu | the arriving PPDU |
rxPowersW | the receive power in W per band |
rxDuration | the duration of the PPDU |
Reimplemented from ns3::PhyEntity.
Definition at line 355 of file he-phy.cc.
References ns3::Time::As(), ns3::PhyEntity::CreateInterferenceEvent(), ns3::DynamicCast(), ns3::PhyEntity::ErasePreambleEvent(), ns3::PhyEntity::GetCurrentEvent(), ns3::VhtPhy::GetDuration(), GetStaId(), m_beginMuPayloadRxEvents, m_currentMuPpduUid, ns3::Time::NS, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::HePpdu::PSD_HE_PORTION, ns3::Simulator::Schedule(), StartReceiveMuPayload(), ns3::PhyEntity::StartReceivePreamble(), ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PPDU_FIELD_TRAINING.
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actions.
ppdu | the PPDU to send |
Reimplemented from ns3::PhyEntity.
Definition at line 1466 of file he-phy.cc.
References ns3::AP, CalculateNonHeDurationForHeMu(), CalculateNonHeDurationForHeTb(), ns3::DbmToW(), ns3::DynamicCast(), ns3::WifiPhy::GetDevice(), ns3::WifiPhy::GetTxGain(), ns3::WifiPhy::GetTxPowerForTransmission(), GetTxPowerSpectralDensity(), m_currentTxVector, ns3::PhyEntity::m_wifiPhy, NS_ASSERT, NS_LOG_FUNCTION, ns3::HePpdu::PSD_HE_PORTION, ns3::HePpdu::PSD_NON_HE_PORTION, ns3::Simulator::Schedule(), ns3::PhyEntity::StartTx(), StartTxHePortion(), ns3::PhyEntity::Transmit(), ns3::WIFI_PPDU_TYPE_DL_MU, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
private |
Start the transmission of the HE portion of the MU PPDU.
ppdu | the PPDU |
txPower | the total TX power |
txPowerSpectrum | the TX PSD |
hePortionDuration | the duration of the HE portion |
Definition at line 1517 of file he-phy.cc.
References ns3::DynamicCast(), NS_ASSERT, NS_LOG_FUNCTION, ns3::HePpdu::PSD_HE_PORTION, and ns3::PhyEntity::Transmit().
Referenced by StartTx().
Check if PHY state should move to CCA busy state based on current state of interference tracker.
ppdu | the incoming PPDU or nullptr for any signal |
Reimplemented from ns3::PhyEntity.
Definition at line 1143 of file he-phy.cc.
References ns3::VhtPhy::GetCcaIndication(), GetPer20MHzDurations(), m_lastPer20MHzDurations, NotifyCcaBusy(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Time::S, ns3::Seconds(), SwitchMaybeToCcaBusy(), and ns3::WIFI_CHANLIST_PRIMARY.
Referenced by SwitchMaybeToCcaBusy().
|
protected |
the beginning of the MU payload reception events (indexed by STA-ID)
Definition at line 557 of file he-phy.h.
Referenced by CancelAllEvents(), DoResetReceive(), DoStartReceivePayload(), StartReceiveMuPayload(), and StartReceivePreamble().
|
protected |
UID of the HE MU or HE TB PPDU being received.
Definition at line 554 of file he-phy.h.
Referenced by HePhy(), DoEndReceivePayload(), GetCurrentHeTbPpduUid(), ProcessSigA(), ProcessSigB(), and StartReceivePreamble().
|
protected |
If the STA is an AP STA, this holds the TXVECTOR of the PPDU that has been sent.
Definition at line 563 of file he-phy.h.
Referenced by MuRtsCtsHePhy::SetMuRtsTxVector(), and StartTx().
|
protected |
end of HE-SIG-A callback
Definition at line 560 of file he-phy.h.
Referenced by NotifyEndOfHeSigA(), and SetEndOfHeSigACallback().
|
staticprivate |
HE PPDU formats.
Definition at line 633 of file he-phy.h.
Referenced by GetPpduFormats().
|
private |
Hold the last per-20 MHz CCA durations vector.
Definition at line 637 of file he-phy.h.
Referenced by NotifyCcaBusy(), and SwitchMaybeToCcaBusy().
|
private |
OBSS-PD algorithm.
Definition at line 636 of file he-phy.h.
Referenced by GetCcaThreshold(), GetObssPdAlgorithm(), GetPer20MHzDurations(), and SetObssPdAlgorithm().
|
protected |
UID of the previously sent PPDU, used by AP to recognize response HE TB PPDUs.
Definition at line 552 of file he-phy.h.
Referenced by HePhy(), DoGetEvent(), GetMeasurementChannelWidth(), HandleRxPpduWithSameContent(), ObtainNextUid(), and MuRtsCtsHePhy::SetPreviousTxPpduUid().
|
private |
Number of successfully received HE TB PPDUS.
Definition at line 635 of file he-phy.h.
Referenced by DoEndReceivePayload(), RxPayloadSucceeded(), and StartReceiveMuPayload().
|
protected |
the TRIGVECTOR
Definition at line 561 of file he-phy.h.
Referenced by GetRxPpduFromTxPpdu(), ProcessSigA(), and SetTrigVector().
|
protected |
expiration time of the TRIGVECTOR
Definition at line 562 of file he-phy.h.
Referenced by GetRxPpduFromTxPpdu(), ProcessSigA(), and SetTrigVector().