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. More... | |
~OfdmPhy () override | |
Destructor for OFDM PHY. More... | |
Ptr< WifiPpdu > | BuildPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override |
Build amendment-specific PPDU. More... | |
double | GetCcaThreshold (const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const override |
Return the CCA threshold in dBm for a given channel type. More... | |
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. More... | |
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. More... | |
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. More... | |
WifiMode | GetSigMode (WifiPpduField field, const WifiTxVector &txVector) const override |
Get the WifiMode for the SIG field specified by the PPDU field. More... | |
Public Member Functions inherited from ns3::PhyEntity | |
virtual | ~PhyEntity () |
Destructor for PHY entity. More... | |
std::list< WifiMode >::const_iterator | begin () const |
Return a const iterator to the first WifiMode. More... | |
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. More... | |
void | CancelRunningEndPreambleDetectionEvents () |
Cancel all end preamble detection events. More... | |
virtual bool | CanStartRx (Ptr< const WifiPpdu > ppdu) const |
Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU. More... | |
std::list< WifiMode >::const_iterator | end () const |
Return a const iterator to past-the-last WifiMode. More... | |
void | EndReceiveField (WifiPpduField field, Ptr< Event > event) |
End receiving a given field. More... | |
void | EndReceivePayload (Ptr< Event > event) |
The last symbol of the PPDU has arrived. More... | |
virtual Ptr< const WifiPsdu > | GetAddressedPsduInPpdu (Ptr< const WifiPpdu > ppdu) const |
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU). More... | |
Time | GetDurationUpToField (WifiPpduField field, const WifiTxVector &txVector) const |
Get the duration of the PPDU up to (but excluding) the given field. More... | |
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. More... | |
virtual WifiMode | GetMcs (uint8_t index) const |
Get the WifiMode corresponding to the given MCS index. More... | |
WifiPpduField | GetNextField (WifiPpduField currentField, WifiPreamble preamble) const |
Return the field following the provided one. More... | |
virtual uint8_t | GetNumModes () const |
PhyHeaderSections | GetPhyHeaderSections (const WifiTxVector &txVector, Time ppduStart) const |
Return a map of PHY header chunk information per PPDU field. More... | |
Time | GetRemainingDurationAfterField (Ptr< const WifiPpdu > ppdu, WifiPpduField field) const |
Get the remaining duration of the PPDU after the end of the given field. More... | |
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. More... | |
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. More... | |
virtual bool | HandlesMcsModes () const |
Check if the WifiModes handled by this PHY are MCSs. More... | |
virtual bool | IsMcsSupported (uint8_t index) const |
Check if the WifiMode corresponding to the given MCS index is supported. More... | |
virtual bool | IsModeSupported (WifiMode mode) const |
Check if the WifiMode is supported. More... | |
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,. More... | |
virtual uint64_t | ObtainNextUid (const WifiTxVector &txVector) |
Obtain the next UID for the PPDU to transmit. More... | |
void | ResetReceive (Ptr< Event > event) |
Reset PHY at the end of the PPDU under reception after it has failed the PHY header. More... | |
void | SetOwner (Ptr< WifiPhy > wifiPhy) |
Set the WifiPhy owning this PHY entity. More... | |
void | StartReceiveField (WifiPpduField field, Ptr< Event > event) |
Start receiving a given field. More... | |
virtual void | StartReceivePreamble (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration) |
Start receiving the PHY preamble of a PPDU (i.e. More... | |
virtual void | StartTx (Ptr< const WifiPpdu > ppdu) |
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actions. More... | |
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. More... | |
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. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< PhyEntity > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Static Public Member Functions | |
static WifiCodeRate | GetCodeRate (const std::string &name) |
Return the WifiCodeRate from the OFDM mode's unique name using ModulationLookupTable. More... | |
static uint16_t | GetConstellationSize (const std::string &name) |
Return the constellation size from the OFDM mode's unique name using ModulationLookupTable. More... | |
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. More... | |
static uint64_t | GetDataRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the data rate corresponding to the supplied TXVECTOR. More... | |
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). More... | |
static WifiMode | GetOfdmRate12Mbps () |
Return a WifiMode for OFDM at 12Mbps. More... | |
static WifiMode | GetOfdmRate12MbpsBW10MHz () |
Return a WifiMode for OFDM at 12 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate12MbpsBW5MHz () |
Return a WifiMode for OFDM at 12 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate13_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 13.5 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate18Mbps () |
Return a WifiMode for OFDM at 18 Mbps. More... | |
static WifiMode | GetOfdmRate18MbpsBW10MHz () |
Return a WifiMode for OFDM at 18 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate1_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 1.5 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate24Mbps () |
Return a WifiMode for OFDM at 24 Mbps. More... | |
static WifiMode | GetOfdmRate24MbpsBW10MHz () |
Return a WifiMode for OFDM at 24 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate27MbpsBW10MHz () |
Return a WifiMode for OFDM at 27 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate2_25MbpsBW5MHz () |
Return a WifiMode for OFDM at 2.25 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate36Mbps () |
Return a WifiMode for OFDM at 36 Mbps. More... | |
static WifiMode | GetOfdmRate3MbpsBW10MHz () |
Return a WifiMode for OFDM at 3 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate3MbpsBW5MHz () |
Return a WifiMode for OFDM at 3 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate48Mbps () |
Return a WifiMode for OFDM at 48 Mbps. More... | |
static WifiMode | GetOfdmRate4_5MbpsBW10MHz () |
Return a WifiMode for OFDM at 4.5 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate4_5MbpsBW5MHz () |
Return a WifiMode for OFDM at 4.5 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate54Mbps () |
Return a WifiMode for OFDM at 54 Mbps. More... | |
static WifiMode | GetOfdmRate6Mbps () |
Return a WifiMode for OFDM at 6 Mbps. More... | |
static WifiMode | GetOfdmRate6MbpsBW10MHz () |
Return a WifiMode for OFDM at 6 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate6MbpsBW5MHz () |
Return a WifiMode for OFDM at 6 Mbps with 5 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate9Mbps () |
Return a WifiMode for OFDM at 9 Mbps. More... | |
static WifiMode | GetOfdmRate9MbpsBW10MHz () |
Return a WifiMode for OFDM at 9 Mbps with 10 MHz channel spacing. More... | |
static WifiMode | GetOfdmRate9MbpsBW5MHz () |
Return a WifiMode for OFDM at 9 Mbps with 5 MHz channel spacing. More... | |
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. More... | |
static uint64_t | GetPhyRateFromTxVector (const WifiTxVector &txVector, uint16_t staId) |
Return the PHY rate corresponding to the supplied TXVECTOR. More... | |
static void | InitializeModes () |
Initialize all OFDM modes (for all variants). More... | |
static bool | IsAllowed (const WifiTxVector &txVector) |
Check whether the combination in TXVECTOR is allowed. More... | |
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. More... | |
PhyFieldRxStatus | EndReceiveHeader (Ptr< Event > event) |
End receiving the header, perform OFDM-specific actions, and provide the status of the reception. More... | |
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. More... | |
uint16_t | GetMeasurementChannelWidth (const Ptr< const WifiPpdu > ppdu) const override |
Return the channel width used to measure the RSSI. More... | |
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. More... | |
virtual bool | IsChannelWidthSupported (Ptr< const WifiPpdu > ppdu) const |
Checks if the PPDU's bandwidth is supported by the PHY. More... | |
Protected Member Functions inherited from ns3::PhyEntity | |
void | AbortCurrentReception (WifiPhyRxfailureReason reason) |
Abort the current reception. More... | |
void | AddPreambleEvent (Ptr< Event > event) |
Add an entry to the map of current preamble events (stored in WifiPhy). More... | |
Ptr< Event > | CreateInterferenceEvent (Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &rxPower, bool isStartHePortionRxing=false) |
Create an event using WifiPhy's InterferenceHelper class. More... | |
virtual void | DoAbortCurrentReception (WifiPhyRxfailureReason reason) |
Perform amendment-specific actions before aborting the current reception. More... | |
virtual void | DoEndReceivePayload (Ptr< const WifiPpdu > ppdu) |
Perform amendment-specific actions at the end of the reception of the payload. More... | |
virtual PhyFieldRxStatus | DoEndReceivePreamble (Ptr< Event > event) |
End receiving the preamble, perform amendment-specific actions, and provide the status of the reception. More... | |
virtual Ptr< Event > | DoGetEvent (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW) |
Get the event corresponding to the incoming PPDU. More... | |
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. More... | |
virtual bool | DoStartReceiveField (WifiPpduField field, Ptr< Event > event) |
Start receiving a given field, perform amendment-specific actions, and signify if it is supported. More... | |
virtual Time | DoStartReceivePayload (Ptr< Event > event) |
Start receiving the PSDU (i.e. More... | |
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. More... | |
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. More... | |
void | EndPreambleDetectionPeriod (Ptr< Event > event) |
End the preamble detection period. More... | |
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. More... | |
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. More... | |
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. More... | |
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). More... | |
Ptr< const Event > | GetCurrentEvent () const |
Get the pointer to the current event (stored in WifiPhy). More... | |
const std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > & | GetCurrentPreambleEvents () const |
Get the map of current preamble events (stored in WifiPhy). More... | |
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. More... | |
uint16_t | GetGuardBandwidth (uint16_t 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. More... | |
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). More... | |
double | GetRandomValue () const |
Obtain a random value from the WifiPhy's generator. More... | |
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. More... | |
virtual uint16_t | GetRxChannelWidth (const WifiTxVector &txVector) const |
Return the channel width used in the reception spectrum model. More... | |
double | GetRxPowerWForPpdu (Ptr< Event > event) const |
Obtain the received power (W) for a given band. More... | |
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). More... | |
std::tuple< double, double, double > | GetTxMaskRejectionParams () const |
virtual void | HandleRxPpduWithSameContent (Ptr< Event > event, Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPower) |
Handle reception of a PPDU that carries the same content of another PPDU. More... | |
virtual bool | IsConfigSupported (Ptr< const WifiPpdu > ppdu) const |
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. More... | |
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. More... | |
void | NotifyPayloadBegin (const WifiTxVector &txVector, const Time &payloadDuration) |
Fire the trace indicating that the PHY is starting to receive the payload of a PPDU. More... | |
virtual void | RxPayloadFailed (Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector) |
Perform amendment-specific actions when the payload is unsuccessfuly received. More... | |
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. More... | |
void | ScheduleEndOfMpdus (Ptr< Event > event) |
Schedule end of MPDUs events. More... | |
void | StartPreambleDetectionPeriod (Ptr< Event > event) |
Start the preamble detection period. More... | |
void | StartReceivePayload (Ptr< Event > event) |
Start receiving the PSDU (i.e. More... | |
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. More... | |
static uint64_t | CalculateDataRate (WifiCodeRate codeRate, uint16_t constellationSize, uint16_t channelWidth) |
Calculates data rate from the supplied parameters. More... | |
static uint64_t | CalculatePhyRate (WifiCodeRate codeRate, uint64_t dataRate) |
Calculate the PHY rate in bps from code rate and data rate. More... | |
static double | GetCodeRatio (WifiCodeRate codeRate) |
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5. More... | |
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. More... | |
Static Private Attributes | |
static const ModulationLookupTable | m_ofdmModulationLookupTable |
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulation More... | |
static const PpduFormats | m_ofdmPpduFormats |
OFDM PPDU formats. More... | |
Additional Inherited Members | |
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. More... | |
typedef std::map< WifiPpduField, PhyHeaderChunkInfo > | PhyHeaderSections |
A map of PhyHeaderChunkInfo elements per PPDU field. More... | |
enum | PhyRxFailureAction { DROP = 0 , ABORT , IGNORE } |
Action to perform in case of RX failure. More... | |
Protected Types inherited from ns3::PhyEntity | |
using | CcaIndication = std::optional< std::pair< Time, WifiChannelListType > > |
CCA end time and its corresponding channel list type (can be std::nullopt if IDLE) More... | |
typedef std::pair< WifiCodeRate, uint16_t > | CodeRateConstellationSizePair |
A pair to hold modulation information: code rate and constellation size. More... | |
typedef std::map< std::string, CodeRateConstellationSizePair > | ModulationLookupTable |
A modulation lookup table using unique name of modulation as key. More... | |
typedef std::map< WifiPreamble, std::vector< WifiPpduField > > | PpduFormats |
A map of PPDU field elements per preamble type. More... | |
typedef std::pair< uint64_t, uint16_t > | UidStaIdPair |
A pair of a UID and STA_ID. More... | |
Protected Attributes inherited from ns3::PhyEntity | |
std::vector< EventId > | m_endOfMpduEvents |
the end of MPDU events (only used for A-MPDUs) More... | |
std::vector< EventId > | m_endPreambleDetectionEvents |
the end of preamble detection events More... | |
std::vector< EventId > | m_endRxPayloadEvents |
the end of receive events (only one unless UL MU reception) More... | |
std::list< WifiMode > | m_modeList |
the list of supported modes More... | |
std::map< UidStaIdPair, SignalNoiseDbm > | m_signalNoiseMap |
Map of the latest signal power and noise power in dBm (noise power includes the noise figure) More... | |
Ptr< WifiPhyStateHelper > | m_state |
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes) More... | |
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. More... | |
Ptr< WifiPhy > | m_wifiPhy |
Pointer to the owning WifiPhy. More... | |
Static Protected Attributes inherited from ns3::PhyEntity | |
static uint64_t | m_globalPpduUid = 0 |
Global counter of the PPDU UID. More... | |
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 GetCodeRatio(), GetSymbolDuration(), and GetUsableSubcarriers().
Referenced by ns3::HtPhy::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.
Referenced by ns3::HtPhy::GetDuration().
|
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(), ns3::WifiRemoteStationManager::AdjustTxVectorForIcf(), 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().
|
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 GetOfdmRate().
|
static |
Return a WifiMode for OFDM at 6 Mbps.
Referenced by GetHeaderMode(), ns3::HtPhy::GetLSigMode(), and GetOfdmRate().
|
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 |
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 688 of file ofdm-phy.cc.
References ns3::WifiPhy::GetChannelWidth(), ns3::PhyEntity::GetRxPpduFromTxPpdu(), ns3::PhyEntity::m_wifiPhy, and min.
Referenced by ns3::HePhy::GetRxPpduFromTxPpdu().
|
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.
Referenced by ns3::HtPhy::GetSigMode().
|
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::VhtPhy, and ns3::HtPhy.
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 455 of file ofdm-phy.h.
Referenced by CreateOfdmMode(), GetCodeRate(), and GetConstellationSize().
|
staticprivate |
OFDM PPDU formats.
Definition at line 452 of file ofdm-phy.h.
Referenced by GetPpduFormats().