PHY entity for OFDM (11a) More...
#include "ofdm-phy.h"
Public Member Functions | |
OfdmPhy (OfdmPhyVariant variant=OFDM_PHY_DEFAULT, bool buildModeList=true) | |
Constructor for OFDM PHY. | |
~OfdmPhy () override | |
Destructor for OFDM PHY. | |
Ptr< WifiPpdu > | BuildPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override |
Build amendment-specific PPDU. | |
double | GetCcaThreshold (const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const override |
Return the CCA threshold in dBm 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 | GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) 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. | |
![]() | |
virtual | ~PhyEntity () |
Destructor for PHY entity. | |
std::list< WifiMode >::const_iterator | begin () const |
Return a const iterator to the first WifiMode. | |
virtual Ptr< WifiPpdu > | BuildPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) |
Build amendment-specific PPDU. | |
Time | CalculatePhyPreambleAndHeaderDuration (const WifiTxVector &txVector) const |
virtual Time | CalculateTxDuration (WifiConstPsduMap psduMap, const WifiTxVector &txVector, WifiPhyBand band) const |
virtual void | CancelAllEvents () |
Cancel and clear all running events. | |
void | CancelRunningEndPreambleDetectionEvents (bool clear=false) |
Cancel and eventually clear all end preamble detection events. | |
virtual bool | CanStartRx (Ptr< const WifiPpdu > ppdu, uint16_t txChannelWidth) const |
Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU. | |
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. | |
virtual Ptr< const WifiPsdu > | GetAddressedPsduInPpdu (Ptr< const WifiPpdu > ppdu) const |
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU). | |
virtual double | GetCcaThreshold (const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const |
Return the CCA threshold in dBm for a given channel type. | |
virtual Time | GetDuration (WifiPpduField field, const WifiTxVector &txVector) const |
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmission parameters. | |
Time | GetDurationUpToField (WifiPpduField field, const WifiTxVector &txVector) const |
Get the duration of the PPDU up to (but excluding) the given field. | |
virtual Time | GetMaxDelayPpduSameUid (const WifiTxVector &txVector) |
Obtain the maximum time between two PPDUs with the same UID to consider they are identical and their power can be added construtively. | |
virtual uint32_t | GetMaxPsduSize () const =0 |
Get the maximum PSDU size in bytes. | |
virtual WifiMode | GetMcs (uint8_t index) const |
Get the WifiMode corresponding to the given MCS index. | |
WifiPpduField | GetNextField (WifiPpduField currentField, WifiPreamble preamble) const |
Return the field following the provided one. | |
virtual uint8_t | GetNumModes () const |
virtual Time | GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const =0 |
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 Ptr< const WifiPpdu > | GetRxPpduFromTxPpdu (Ptr< const WifiPpdu > ppdu) |
The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel. | |
virtual WifiMode | GetSigMode (WifiPpduField field, const WifiTxVector &txVector) const |
Get the WifiMode for the SIG field specified by the PPDU field. | |
virtual uint16_t | GetStaId (const Ptr< const WifiPpdu > ppdu) const |
Return the STA ID that has been assigned to the station this PHY belongs to. | |
virtual WifiConstPsduMap | GetWifiConstPsduMap (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) const |
Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU. | |
virtual bool | HandlesMcsModes () const |
Check if the WifiModes handled by this PHY are MCSs. | |
virtual bool | IsMcsSupported (uint8_t index) const |
Check if the WifiMode corresponding to the given MCS index is supported. | |
virtual bool | IsModeSupported (WifiMode mode) const |
Check if the WifiMode is supported. | |
bool | NoEndPreambleDetectionEvents () const |
virtual void | NotifyCcaBusy (const Ptr< const WifiPpdu > ppdu, Time duration, WifiChannelListType channelType) |
Notify PHY state helper to switch to CCA busy state,. | |
virtual uint64_t | ObtainNextUid (const WifiTxVector &txVector) |
Obtain the next UID for the PPDU to transmit. | |
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. | |
virtual void | StartReceivePreamble (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration) |
Start receiving the PHY preamble of a PPDU (i.e. | |
virtual void | StartTx (Ptr< const WifiPpdu > ppdu) |
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actions. | |
virtual void | SwitchMaybeToCcaBusy (const Ptr< const WifiPpdu > ppdu) |
Check if PHY state should move to CCA busy state based on current state of interference tracker. | |
void | Transmit (Time txDuration, Ptr< const WifiPpdu > ppdu, double txPowerDbm, Ptr< SpectrumValue > txPowerSpectrum, const std::string &type) |
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPhy's Transmit method. | |
![]() | |
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 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, uint16_t 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, uint16_t 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, uint16_t 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 | |
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 | 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 |
uint32_t | GetMaxPsduSize () const override |
Get the maximum PSDU size in bytes. | |
uint16_t | 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 (double txPowerW, Ptr< const WifiPpdu > ppdu) const override |
virtual bool | IsAllConfigSupported (WifiPpduField field, Ptr< const WifiPpdu > ppdu) const |
Checks if the signaled configuration (including bandwidth) is supported by the PHY. | |
virtual bool | IsChannelWidthSupported (Ptr< const WifiPpdu > ppdu) const |
Checks if the PPDU's bandwidth is supported by the PHY. | |
![]() | |
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 isStartOfdmaRxing=false) |
Create an event using WifiPhy's InterferenceHelper class. | |
virtual void | DoAbortCurrentReception (WifiPhyRxfailureReason reason) |
Perform amendment-specific actions before aborting the current reception. | |
virtual PhyFieldRxStatus | DoEndReceiveField (WifiPpduField field, Ptr< Event > event) |
End receiving a given field, perform amendment-specific actions, and provide the status of the reception. | |
virtual void | DoEndReceivePayload (Ptr< const WifiPpdu > ppdu) |
Perform amendment-specific actions at the end of the reception of the payload. | |
virtual PhyFieldRxStatus | DoEndReceivePreamble (Ptr< Event > event) |
End receiving the preamble, perform amendment-specific actions, and provide the status of the reception. | |
virtual Ptr< Event > | DoGetEvent (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW) |
Get the event corresponding to the incoming PPDU. | |
virtual void | DoResetReceive (Ptr< Event > event) |
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after it has failed the PHY header. | |
virtual bool | DoStartReceiveField (WifiPpduField field, Ptr< Event > event) |
Start receiving a given field, perform amendment-specific actions, and signify if it is supported. | |
virtual Time | DoStartReceivePayload (Ptr< Event > event) |
Start receiving the PSDU (i.e. | |
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< const WifiPsdu > psdu, 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. | |
virtual CcaIndication | GetCcaIndication (const Ptr< const WifiPpdu > ppdu) |
Get CCA end time and its corresponding channel list type when a new signal has been received by the PHY. | |
uint16_t | GetCenterFrequencyForChannelWidth (const WifiTxVector &txVector) const |
Get the center frequency of the channel corresponding the current TxVector rather than that of the supported channel width. | |
virtual std::pair< uint16_t, WifiSpectrumBandInfo > | GetChannelWidthAndBand (const WifiTxVector &txVector, uint16_t staId) const |
Get the channel width and band to use (will be overloaded by child classes). | |
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 (double thresholdDbm, const WifiSpectrumBandInfo &band) |
Return the delay until CCA busy is ended for a given sensitivity threshold (in dBm) and a given band. | |
uint16_t | GetGuardBandwidth (uint16_t currentChannelWidth) const |
virtual uint16_t | GetMeasurementChannelWidth (const Ptr< const WifiPpdu > ppdu) const =0 |
Return the channel width used to measure the RSSI. | |
SnrPer | GetPhyHeaderSnrPer (WifiPpduField field, Ptr< Event > event) const |
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class. | |
virtual const PpduFormats & | GetPpduFormats () const =0 |
Return the PPDU formats of the PHY. | |
WifiSpectrumBandInfo | GetPrimaryBand (uint16_t 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< const WifiPsdu > psdu, Ptr< Event > event, uint16_t staId, Time relativeMpduStart, Time mpduDuration) |
Get the reception status for the provided MPDU and notify. | |
virtual uint16_t | GetRxChannelWidth (const WifiTxVector &txVector) const |
Return the channel width used in the reception spectrum model. | |
double | GetRxPowerWForPpdu (Ptr< Event > event) const |
Obtain the received power (W) for a given band. | |
WifiSpectrumBandInfo | GetSecondaryBand (uint16_t 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< double, double, double > | GetTxMaskRejectionParams () const |
virtual Ptr< SpectrumValue > | GetTxPowerSpectralDensity (double txPowerW, Ptr< const WifiPpdu > ppdu) const =0 |
virtual bool | IsConfigSupported (Ptr< const WifiPpdu > ppdu) const |
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. | |
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. | |
virtual void | RxPayloadFailed (Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector) |
Perform amendment-specific actions when the payload is unsuccessfuly received. | |
virtual void | RxPayloadSucceeded (Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, uint16_t staId, const std::vector< bool > &statusPerMpdu) |
Perform amendment-specific actions when the payload is successfully received. | |
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. | |
void | UpdateInterferenceEvent (Ptr< Event > event, const RxPowerWattPerChannelBand &rxPower) |
Update an event in WifiPhy's InterferenceHelper class. | |
Static Protected Member Functions | |
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, uint16_t 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 (uint16_t channelWidth) |
static uint16_t | GetUsableSubcarriers () |
Static Private Member Functions | |
static WifiMode | CreateOfdmMode (std::string uniqueName, bool isMandatory) |
Create an OFDM mode from a unique name, the unique name must already be contained inside ModulationLookupTable. | |
Static Private Attributes | |
static const ModulationLookupTable | m_ofdmModulationLookupTable |
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulation | |
static const PpduFormats | m_ofdmPpduFormats |
OFDM PPDU formats. | |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
using | CcaIndication = std::optional< std::pair< Time, WifiChannelListType > > |
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. | |
![]() | |
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. | |
![]() | |
static uint64_t | m_globalPpduUid = 0 |
Global counter of the PPDU UID. | |
PHY entity for OFDM (11a)
This class is also used for the 10 MHz and 5 MHz bandwidth variants addressing vehicular communications (default is 20 MHz bandwidth).
Refer to IEEE 802.11-2016, clause 17.
Definition at line 60 of file ofdm-phy.h.
ns3::OfdmPhy::OfdmPhy | ( | OfdmPhyVariant | variant = OFDM_PHY_DEFAULT , |
bool | buildModeList = true |
||
) |
Constructor for OFDM PHY.
variant | the OFDM PHY variant |
buildModeList | flag used to add OFDM modes to list (disabled by child classes to only add child classes' modes) |
Definition at line 106 of file ofdm-phy.cc.
References GetOfdmRate(), ns3::GetOfdmRatesBpsList(), ns3::PhyEntity::m_modeList, NS_ABORT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::OFDM_PHY_10_MHZ, ns3::OFDM_PHY_5_MHZ, and ns3::OFDM_PHY_DEFAULT.
|
override |
|
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.
Reimplemented in ns3::VhtPhy.
Definition at line 293 of file ofdm-phy.cc.
References ns3::WifiPhy::GetLatestPhyEntity(), ns3::WifiPhy::GetOperatingChannel(), ns3::PhyEntity::m_wifiPhy, and NS_LOG_FUNCTION.
|
staticprotected |
Calculates data rate from the supplied parameters.
symbolDuration | the symbol duration |
usableSubCarriers | the number of usable subcarriers for data |
numberOfBitsPerSubcarrier | the number of data bits per subcarrier |
codingRate | the coding rate |
Definition at line 621 of file ofdm-phy.cc.
References ns3::Time::GetNanoSeconds().
|
staticprotected |
Calculates data rate from the supplied parameters.
codeRate | the code rate of the mode |
constellationSize | the size of modulation constellation |
channelWidth | the considered channel width in MHz |
Definition at line 612 of file ofdm-phy.cc.
References CalculateDataRate(), GetCodeRatio(), GetSymbolDuration(), and GetUsableSubcarriers().
Referenced by ns3::HtPhy::CalculateDataRate(), CalculateDataRate(), ns3::ErpOfdmPhy::GetDataRate(), GetDataRate(), and ns3::ErpOfdmPhy::GetPhyRate().
|
staticprotected |
Calculate the PHY rate in bps from code rate and data rate.
codeRate | the WifiCodeRate |
dataRate | the data rate in bps |
Definition at line 568 of file ofdm-phy.cc.
References GetCodeRatio().
Referenced by ns3::ErpOfdmPhy::GetPhyRate(), and GetPhyRate().
|
staticprivate |
Create an OFDM mode from a unique name, the unique name must already be contained inside ModulationLookupTable.
This method binds all the callbacks used by WifiMode.
Definition at line 530 of file ofdm-phy.cc.
References ns3::WifiModeFactory::CreateWifiMode(), GetCodeRate(), GetConstellationSize(), GetDataRateFromTxVector(), GetPhyRateFromTxVector(), IsAllowed(), m_ofdmModulationLookupTable, ns3::MakeBoundCallback(), ns3::MakeCallback(), NS_ASSERT_MSG, and ns3::WIFI_MOD_CLASS_OFDM.
|
overrideprotectedvirtual |
End receiving a given field, perform amendment-specific actions, and provide the status of the reception.
field | the ending PPDU field |
event | the event holding incoming PPDU's information |
Reimplemented from ns3::PhyEntity.
Reimplemented in ns3::VhtPhy.
Definition at line 307 of file ofdm-phy.cc.
References ns3::PhyEntity::DoEndReceiveField(), EndReceiveHeader(), NS_LOG_FUNCTION, and ns3::WIFI_PPDU_FIELD_NON_HT_HEADER.
Referenced by ns3::HtPhy::DoEndReceiveField().
|
protected |
End receiving the header, perform OFDM-specific actions, and provide the status of the reception.
event | the event holding incoming PPDU's information |
Definition at line 318 of file ofdm-phy.cc.
References ns3::PhyEntity::ABORT, ns3::PhyEntity::PhyFieldRxStatus::actionIfFailure, ns3::PhyEntity::DROP, ns3::PhyEntity::GetPhyHeaderSnrPer(), ns3::PhyEntity::GetRandomValue(), IsAllConfigSupported(), ns3::PhyEntity::PhyFieldRxStatus::isSuccess, ns3::L_SIG_FAILURE, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::PhyEntity::SnrPer::per, ns3::RatioToDb(), ns3::PhyEntity::PhyFieldRxStatus::reason, ns3::PhyEntity::SnrPer::snr, ns3::UNSUPPORTED_SETTINGS, and ns3::WIFI_PPDU_FIELD_NON_HT_HEADER.
Referenced by DoEndReceiveField().
|
overridevirtual |
Return the CCA threshold in dBm 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.
Reimplemented in ns3::VhtPhy.
Definition at line 675 of file ofdm-phy.cc.
References ns3::DbmToW(), ns3::WifiPhy::GetCcaSensitivityThreshold(), ns3::PhyEntity::GetCcaThreshold(), ns3::PhyEntity::GetRxChannelWidth(), ns3::PhyEntity::m_wifiPhy, and ns3::WToDbm().
Referenced by ns3::HtPhy::GetCcaIndication().
|
static |
Return the WifiCodeRate from the OFDM mode's unique name using ModulationLookupTable.
This is mainly used as a callback for WifiMode operation.
name | the unique name of the OFDM mode |
Definition at line 548 of file ofdm-phy.cc.
References m_ofdmModulationLookupTable.
Referenced by CreateOfdmMode(), GetDataRate(), and GetPhyRate().
|
staticprotected |
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5.
codeRate | the WifiCodeRate |
Definition at line 580 of file ofdm-phy.cc.
References NS_FATAL_ERROR, ns3::WIFI_CODE_RATE_1_2, ns3::WIFI_CODE_RATE_2_3, ns3::WIFI_CODE_RATE_3_4, and ns3::WIFI_CODE_RATE_UNDEFINED.
Referenced by CalculateDataRate(), CalculatePhyRate(), and ns3::HtPhy::GetCodeRatio().
|
static |
Return the constellation size from the OFDM mode's unique name using ModulationLookupTable.
This is mainly used as a callback for WifiMode operation.
name | the unique name of the OFDM mode |
Definition at line 554 of file ofdm-phy.cc.
References m_ofdmModulationLookupTable.
Referenced by CreateOfdmMode(), and GetDataRate().
|
static |
Return the data rate from the OFDM mode's unique name and the supplied parameters.
This function calls CalculateDataRate and is mainly used as a callback for WifiMode operation.
name | the unique name of the OFDM mode |
channelWidth | the considered channel width in MHz |
Definition at line 604 of file ofdm-phy.cc.
References CalculateDataRate(), GetCodeRate(), and GetConstellationSize().
Referenced by GetDataRateFromTxVector(), and GetPhyRate().
|
static |
Return the data rate corresponding to the supplied TXVECTOR.
This function is mainly used as a callback for WifiMode operation.
txVector | the TXVECTOR used for the transmission |
staId | the station ID (only here to have a common signature for all callbacks) |
Definition at line 598 of file ofdm-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), GetDataRate(), ns3::WifiTxVector::GetMode(), and ns3::WifiMode::GetUniqueName().
Referenced by CreateOfdmMode().
|
overridevirtual |
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmission parameters.
field | the PPDU field (or group of fields) |
txVector | the transmission parameters |
Reimplemented from ns3::PhyEntity.
Reimplemented in ns3::VhtPhy.
Definition at line 191 of file ofdm-phy.cc.
References ns3::PhyEntity::GetDuration(), GetHeaderDuration(), GetPreambleDuration(), ns3::WIFI_PPDU_FIELD_NON_HT_HEADER, and ns3::WIFI_PPDU_FIELD_PREAMBLE.
|
protectedvirtual |
txVector | the transmission parameters |
Reimplemented in ns3::ErpOfdmPhy.
Definition at line 229 of file ofdm-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), and ns3::MicroSeconds().
Referenced by GetDuration().
|
protectedvirtual |
txVector | the transmission parameters |
Reimplemented in ns3::ErpOfdmPhy.
Definition at line 166 of file ofdm-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), GetOfdmRate1_5MbpsBW5MHz(), GetOfdmRate3MbpsBW10MHz(), and GetOfdmRate6Mbps().
Referenced by GetSigMode().
|
overrideprotectedvirtual |
Get the maximum PSDU size in bytes.
Implements ns3::PhyEntity.
Reimplemented in ns3::VhtPhy.
Definition at line 659 of file ofdm-phy.cc.
|
overrideprotectedvirtual |
Return the channel width used to measure the RSSI.
ppdu | the PPDU that is being received |
Implements ns3::PhyEntity.
Definition at line 665 of file ofdm-phy.cc.
References ns3::PhyEntity::GetRxChannelWidth().
Referenced by ns3::HePhy::GetMeasurementChannelWidth().
|
protected |
Definition at line 281 of file ofdm-phy.cc.
Referenced by ns3::HtPhy::GetPayloadDuration(), and GetPayloadDuration().
|
static |
Return a WifiMode for OFDM corresponding to the provided rate and the channel bandwidth (20, 10, or 5 MHz).
rate | the rate in bps |
bw | the bandwidth in MHz |
Definition at line 411 of file ofdm-phy.cc.
References GetOfdmRate12Mbps(), GetOfdmRate12MbpsBW10MHz(), GetOfdmRate12MbpsBW5MHz(), GetOfdmRate13_5MbpsBW5MHz(), GetOfdmRate18Mbps(), GetOfdmRate18MbpsBW10MHz(), GetOfdmRate1_5MbpsBW5MHz(), GetOfdmRate24Mbps(), GetOfdmRate24MbpsBW10MHz(), GetOfdmRate27MbpsBW10MHz(), GetOfdmRate2_25MbpsBW5MHz(), GetOfdmRate36Mbps(), GetOfdmRate3MbpsBW10MHz(), GetOfdmRate3MbpsBW5MHz(), GetOfdmRate48Mbps(), GetOfdmRate4_5MbpsBW10MHz(), GetOfdmRate4_5MbpsBW5MHz(), GetOfdmRate54Mbps(), GetOfdmRate6Mbps(), GetOfdmRate6MbpsBW10MHz(), GetOfdmRate6MbpsBW5MHz(), GetOfdmRate9Mbps(), GetOfdmRate9MbpsBW10MHz(), GetOfdmRate9MbpsBW5MHz(), and NS_ABORT_MSG.
Referenced by OfdmPhy(), PhyHeaderSectionsTest::DoRun(), InitializeModes(), and ns3::OfdmPpdu::SetTxVectorFromLSigHeader().
|
static |
Return a WifiMode for OFDM at 12Mbps.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 12 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 12 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 13.5 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 18 Mbps.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 18 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 1.5 Mbps with 5 MHz channel spacing.
Referenced by GetHeaderMode(), and GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 24 Mbps.
Referenced by GetOfdmRate(), and TestNonHtDuplicatePhyReception::SendNonHtDuplicatePpdu().
|
static |
Return a WifiMode for OFDM at 24 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 27 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 2.25 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 36 Mbps.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 3 Mbps with 10 MHz channel spacing.
Referenced by GetHeaderMode(), and GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 3 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 48 Mbps.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 4.5 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 4.5 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 54 Mbps.
Referenced by TxDurationTest::DoRun(), GetOfdmRate(), and TestMultipleCtsResponsesFromMuRts::TxNonHtDuplicateCts().
|
static |
Return a WifiMode for OFDM at 6 Mbps.
Referenced by WifiPhyCcaThresholdsTest::CreateDummyNonHtPpdu(), PhyHeaderSectionsTest::DoRun(), WifiPrimaryChannelsTest::DoSetup(), GetHeaderMode(), ns3::HtPhy::GetLSigMode(), GetOfdmRate(), SpectrumWifiPhyBasicTest::MakeSignal(), and WifiPhyThresholdsTest::MakeWifiSignal().
|
static |
Return a WifiMode for OFDM at 6 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 6 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 9 Mbps.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 9 Mbps with 10 MHz channel spacing.
Referenced by GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 9 Mbps with 5 MHz channel spacing.
Referenced by GetOfdmRate().
|
overridevirtual |
size | the number of bytes in the packet to send |
txVector | the TXVECTOR used for the transmission of this packet |
band | the frequency band |
mpdutype | the type of the MPDU as defined in WifiPhy::MpduType. |
incFlag | this flag is used to indicate that the variables need to be update or not This function is called a couple of times for the same packet so variables should not be increased each time. |
totalAmpduSize | the total size of the previously transmitted MPDUs for the concerned A-MPDU. If incFlag is set, this parameter will be updated. |
totalAmpduNumSymbols | the number of symbols previously transmitted for the MPDUs in the concerned A-MPDU, used for the computation of the number of symbols needed for the last MPDU. If incFlag is set, this parameter will be updated. |
staId | the STA-ID of the PSDU (only used for MU PPDUs) |
Implements ns3::PhyEntity.
Definition at line 253 of file ofdm-phy.cc.
References ns3::FemtoSeconds(), ns3::WifiMode::GetDataRate(), ns3::Time::GetFemtoSeconds(), ns3::WifiTxVector::GetMode(), ns3::Time::GetNanoSeconds(), GetNumberServiceBits(), GetSignalExtension(), and ns3::MicroSeconds().
|
static |
Return the PHY rate from the OFDM mode's unique name and the supplied parameters.
This function calls CalculatePhyRate and is mainly used as a callback for WifiMode operation.
name | the unique name of the OFDM mode |
channelWidth | the considered channel width in MHz |
Definition at line 560 of file ofdm-phy.cc.
References CalculatePhyRate(), GetCodeRate(), and GetDataRate().
Referenced by GetPhyRateFromTxVector().
|
static |
Return the PHY rate corresponding to the supplied TXVECTOR.
This function is mainly used as a callback for WifiMode operation.
txVector | the TXVECTOR used for the transmission |
staId | the station ID (only here to have a common signature for all callbacks) |
Definition at line 574 of file ofdm-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), ns3::WifiTxVector::GetMode(), GetPhyRate(), and ns3::WifiMode::GetUniqueName().
Referenced by CreateOfdmMode().
|
overridevirtual |
Return the PPDU formats of the PHY.
Implements ns3::PhyEntity.
Reimplemented in ns3::VhtPhy.
Definition at line 185 of file ofdm-phy.cc.
References m_ofdmPpduFormats.
|
protectedvirtual |
txVector | the transmission parameters |
Reimplemented in ns3::ErpOfdmPhy.
Definition at line 205 of file ofdm-phy.cc.
References ns3::WifiTxVector::GetChannelWidth(), and ns3::MicroSeconds().
Referenced by GetDuration().
|
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.
Reimplemented in ns3::VhtPhy.
Definition at line 152 of file ofdm-phy.cc.
References GetHeaderMode(), ns3::PhyEntity::GetSigMode(), ns3::WIFI_PPDU_FIELD_NON_HT_HEADER, and ns3::WIFI_PPDU_FIELD_PREAMBLE.
|
protected |
band | the frequency band being used |
Definition at line 287 of file ofdm-phy.cc.
References ns3::MicroSeconds(), and ns3::WIFI_PHY_BAND_2_4GHZ.
Referenced by ns3::HtPhy::GetPayloadDuration(), and GetPayloadDuration().
|
staticprotected |
channelWidth | the channel width in MHz |
Definition at line 637 of file ofdm-phy.cc.
References ns3::MicroSeconds().
Referenced by CalculateDataRate().
|
overrideprotectedvirtual |
txPowerW | power in W 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 365 of file ofdm-phy.cc.
References ns3::WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(), ns3::WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(), ns3::PhyEntity::GetCenterFrequencyForChannelWidth(), ns3::PhyEntity::GetGuardBandwidth(), ns3::PhyEntity::GetTxMaskRejectionParams(), and NS_LOG_FUNCTION.
|
staticprotected |
Definition at line 631 of file ofdm-phy.cc.
Referenced by CalculateDataRate(), ns3::EhtPhy::GetDataRate(), ns3::HePhy::GetDataRate(), ns3::HtPhy::GetDataRate(), ns3::VhtPhy::GetDataRate(), and ns3::VhtPhy::GetUsableSubcarriers().
|
static |
Initialize all OFDM modes (for all variants).
Definition at line 399 of file ofdm-phy.cc.
References GetOfdmRate(), and ns3::GetOfdmRatesBpsList().
Referenced by anonymous_namespace{ofdm-phy.cc}::ConstructorOfdm::ConstructorOfdm().
|
protectedvirtual |
Checks if the signaled configuration (including bandwidth) is supported by the PHY.
field | the current PPDU field (SIG used for checking config) |
ppdu | the received PPDU |
true
if supported, false
otherwise Reimplemented in ns3::HtPhy, and ns3::VhtPhy.
Definition at line 355 of file ofdm-phy.cc.
References IsChannelWidthSupported(), and ns3::PhyEntity::IsConfigSupported().
Referenced by EndReceiveHeader(), and ns3::HtPhy::IsAllConfigSupported().
|
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 653 of file ofdm-phy.cc.
Referenced by CreateOfdmMode().
Checks if the PPDU's bandwidth is supported by the PHY.
ppdu | the received PPDU |
true
if supported, false
otherwise Definition at line 342 of file ofdm-phy.cc.
References ns3::WifiPhy::GetChannelWidth(), ns3::PhyEntity::m_wifiPhy, and NS_LOG_DEBUG.
Referenced by IsAllConfigSupported(), and ns3::VhtPhy::IsAllConfigSupported().
|
staticprivate |
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulation
Definition at line 454 of file ofdm-phy.h.
Referenced by CreateOfdmMode(), GetCodeRate(), and GetConstellationSize().
|
staticprivate |
OFDM PPDU formats.
Definition at line 451 of file ofdm-phy.h.
Referenced by GetPpduFormats().