A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::SpectrumWifiPhy Class Reference

802.11 PHY layer model More...

#include "spectrum-wifi-phy.h"

+ Inheritance diagram for ns3::SpectrumWifiPhy:
+ Collaboration diagram for ns3::SpectrumWifiPhy:

Public Types

typedef void(* SignalArrivalCallback) (Ptr< const SpectrumSignalParameters > signal, uint32_t senderNodeId, double rxPower, Time duration)
 Callback invoked when the PHY model starts to process a signal.
 
- Public Types inherited from ns3::WifiPhy
using ChannelSegments
 segments identifying an operating channel
 
using ChannelTuple
 Tuple identifying a segment of an operating channel.
 
typedef void(* MonitorSnifferRxCallback) (Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise, uint16_t staId)
 TracedCallback signature for monitor mode receive events.
 
typedef void(* MonitorSnifferTxCallback) (const Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, uint16_t staId)
 TracedCallback signature for monitor mode transmit events.
 
typedef void(* PhyRxBeginTracedCallback) (Ptr< const Packet > packet, RxPowerWattPerChannelBand rxPowersW)
 TracedCallback signature for PhyRxBegin trace source.
 
typedef void(* PhyRxMacHeaderEndTracedCallback) (const WifiMacHeader &macHdr, const WifiTxVector &txVector, Time psduDuration)
 TracedCallback signature for end of MAC header reception events.
 
typedef void(* PhyRxPayloadBeginTracedCallback) (WifiTxVector txVector, Time psduDuration)
 TracedCallback signature for start of PSDU reception events.
 
typedef void(* PhyRxPpduDropTracedCallback) (Ptr< const WifiPpdu > ppdu, WifiPhyRxfailureReason reason)
 TracedCallback signature for start of PSDU reception events.
 
typedef void(* PhyTxBeginTracedCallback) (Ptr< const Packet > packet, double txPowerW)
 TracedCallback signature for Phy transmit events.
 
typedef void(* PsduTxBeginCallback) (WifiConstPsduMap psduMap, const WifiTxVector &txVector, double txPowerW)
 TracedCallback signature for PSDU transmit events.
 
typedef void(* SignalTransmissionCallback) (Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector)
 Callback invoked when the PHY model starts to transmit a signal.
 

Public Member Functions

 SpectrumWifiPhy ()
 
 ~SpectrumWifiPhy () override
 
void AddChannel (const Ptr< SpectrumChannel > channel, const FrequencyRange &freqRange=WHOLE_WIFI_SPECTRUM)
 Attach a SpectrumChannel to use for a given frequency range.
 
void ConfigureInterface (const std::vector< MHz_u > &frequencies, MHz_u width)
 Configure a non-active spectrum PHY interface to operate on a given frequency (or several frequencies for non-contiguous) with a given total width.
 
WifiSpectrumBandFrequencies ConvertIndicesToFrequencies (const WifiSpectrumBandIndices &indices) const override
 This is a helper function to convert start and stop indices to start and stop frequencies.
 
Ptr< AntennaModelGetAntenna () const
 Get the antenna model used for reception.
 
WifiSpectrumBandInfo GetBand (MHz_u bandWidth, uint8_t bandIndex=0) override
 Get the info of a given band.
 
Ptr< ChannelGetChannel () const override
 Return the Channel this WifiPhy is connected to.
 
FrequencyRange GetCurrentFrequencyRange () const override
 Get the frequency range of the current RF interface.
 
Ptr< WifiSpectrumPhyInterfaceGetCurrentInterface () const
 Get the currently active spectrum PHY interface.
 
MHz_u GetGuardBandwidth (MHz_u currentChannelWidth) const override
 
Ptr< const WifiPpduGetRxPpduFromTxPpdu (Ptr< const WifiPpdu > ppdu)
 Determine the WifiPpdu to be used by the RX PHY based on the WifiPpdu sent by the TX PHY.
 
const std::map< FrequencyRange, Ptr< WifiSpectrumPhyInterface > > & GetSpectrumPhyInterfaces () const
 Get the map of interfaces attached to this spectrum PHY.
 
std::tuple< dBr_u, dBr_u, dBr_uGetTxMaskRejectionParams () const override
 
void SetAntenna (const Ptr< AntennaModel > antenna)
 
void SetChannelSwitchedCallback (Callback< void > callback)
 
void SetDevice (const Ptr< WifiNetDevice > device) override
 Sets the device this PHY is associated with.
 
void StartRx (Ptr< SpectrumSignalParameters > rxParams, Ptr< const WifiSpectrumPhyInterface > interface)
 Input method for delivering a signal from the spectrum channel and low-level PHY interface to this SpectrumWifiPhy instance.
 
void StartTx (Ptr< const WifiPpdu > ppdu) override
 
void Transmit (Ptr< WifiSpectrumSignalParameters > txParams)
 This function is sending the signal to the Spectrum channel after finishing the configuration of the transmit parameters.
 
- Public Member Functions inherited from ns3::WifiPhy
 WifiPhy ()
 
 ~WifiPhy () override
 
virtual int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model.
 
double CalculateSnr (const WifiTxVector &txVector, double ber) const
 
virtual void ConfigureStandard (WifiStandard standard)
 Configure the PHY-level parameters for different Wi-Fi standard.
 
void EndReceiveInterBss ()
 For HE receptions only, check and possibly modify the transmit power restriction state at the end of PPDU reception.
 
Time GetAckTxTime () const
 Return the estimated Ack TX time for this PHY.
 
Time GetBlockAckTxTime () const
 Return the estimated BlockAck TX time for this PHY.
 
std::list< uint8_t > GetBssMembershipSelectorList () const
 The WifiPhy::BssMembershipSelector() method is used (e.g., by a WifiRemoteStationManager) to determine the set of transmission/reception modes that this WifiPhy(-derived class) can support - a set of WifiMode objects which we call the BssMembershipSelectorSet, and which is stored inside HT PHY (and above) instances.
 
dBm_u GetCcaEdThreshold () const
 Return the CCA energy detection threshold.
 
dBm_u GetCcaSensitivityThreshold () const
 Return the CCA sensitivity threshold.
 
uint8_t GetChannelNumber () const
 Return current channel number.
 
Time GetChannelSwitchDelay () const
 
MHz_u GetChannelWidth () const
 
WifiMode GetDefaultMode () const
 Get the default WifiMode supported by the PHY.
 
Time GetDelayUntilIdle ()
 
Ptr< WifiNetDeviceGetDevice () const
 Return the device this PHY is associated with.
 
MHz_u GetFrequency () const
 
Time GetLastRxEndTime () const
 Return the end time of the last received packet.
 
Time GetLastRxStartTime () const
 Return the start time of the last received packet.
 
Ptr< PhyEntityGetLatestPhyEntity () const
 Get the latest PHY entity supported by this PHY instance.
 
WifiModulationClass GetMaxModulationClassSupported () const
 
uint8_t GetMaxSupportedRxSpatialStreams () const
 
uint8_t GetMaxSupportedTxSpatialStreams () const
 
WifiMode GetMcs (WifiModulationClass modulation, uint8_t mcs) const
 Get the WifiMode object corresponding to the given MCS of the given modulation class.
 
std::list< WifiModeGetMcsList () const
 The WifiPhy::GetMcsList() method is used (e.g., by a WifiRemoteStationManager) to determine the set of transmission/reception MCS indices that this WifiPhy(-derived class) can support - a set of MCS indices which is stored by each HT PHY (and above).
 
std::list< WifiModeGetMcsList (WifiModulationClass modulation) const
 Get the list of supported MCSs for the given modulation class (i.e.
 
Ptr< MobilityModelGetMobility () const
 Return the mobility model this PHY is associated with.
 
std::list< WifiModeGetModeList () const
 The WifiPhy::GetModeList() method is used (e.g., by a WifiRemoteStationManager) to determine the set of transmission/reception (non-MCS) modes that this WifiPhy(-derived class) can support - a set of modes which is stored by each non-HT PHY.
 
std::list< WifiModeGetModeList (WifiModulationClass modulation) const
 Get the list of supported (non-MCS) modes for the given modulation class (i.e.
 
uint16_t GetNMcs () const
 
uint8_t GetNTxPower () const
 Return the number of available transmission power levels.
 
uint8_t GetNumberOfAntennas () const
 
const WifiPhyOperatingChannelGetOperatingChannel () const
 Get a const reference to the operating channel.
 
WifiPhyBand GetPhyBand () const
 Get the configured Wi-Fi band.
 
Ptr< PhyEntityGetPhyEntity (WifiModulationClass modulation) const
 Get the supported PHY entity corresponding to the modulation class.
 
Ptr< PhyEntityGetPhyEntity (WifiStandard standard) const
 Get the supported PHY entity corresponding to the wifi standard.
 
Ptr< PhyEntityGetPhyEntityForPpdu (const Ptr< const WifiPpdu > ppdu) const
 Get the supported PHY entity to use for a received PPDU.
 
uint8_t GetPhyId () const
 Get the index allocated to this PHY.
 
Time GetPifs () const
 Return the PCF Interframe Space (PIFS) for this PHY.
 
dBm_u GetPower (uint8_t powerLevel) const
 Get the power of the given power level.
 
uint64_t GetPreviouslyRxPpduUid () const
 
uint8_t GetPrimary20Index () const
 
uint8_t GetPrimaryChannelNumber (MHz_u primaryChannelWidth) const
 Get channel number of the primary channel.
 
dB_u GetRxGain () const
 Return the reception gain.
 
dBm_u GetRxSensitivity () const
 Return the receive sensitivity threshold.
 
bool GetShortPhyPreambleSupported () const
 Return whether short PHY preamble is supported.
 
Time GetSifs () const
 Return the Short Interframe Space (SIFS) for this PHY.
 
Time GetSlot () const
 Return the slot duration for this PHY.
 
WifiStandard GetStandard () const
 Get the configured Wi-Fi standard.
 
Ptr< WifiPhyStateHelperGetState () const
 Return the WifiPhyStateHelper of this PHY.
 
Hz_u GetSubcarrierSpacing () const
 
MHz_u GetTxBandwidth (WifiMode mode, MHz_u maxAllowedBandWidth=std::numeric_limits< MHz_u >::max()) const
 Get the bandwidth for a transmission occurring on the current operating channel and using the given WifiMode, subject to the constraint that the TX bandwidth cannot exceed the given maximum allowed value.
 
dB_u GetTxGain () const
 Return the transmission gain.
 
dBm_u GetTxPowerEnd () const
 Return the maximum available transmission power level.
 
dBm_u GetTxPowerForTransmission (Ptr< const WifiPpdu > ppdu) const
 Compute the transmit power for the next transmission.
 
dBm_u GetTxPowerStart () const
 Return the minimum available transmission power level.
 
bool HasFixedPhyBand () const
 
bool IsMcsSupported (WifiModulationClass modulation, uint8_t mcs) const
 Check if the given MCS of the given modulation class is supported by the PHY.
 
bool IsModeSupported (WifiMode mode) const
 Check if the given WifiMode is supported by the PHY.
 
bool IsReceivingPhyHeader () const
 
bool IsStateCcaBusy () const
 
bool IsStateIdle () const
 
bool IsStateOff () const
 
bool IsStateRx () const
 
bool IsStateSleep () const
 
bool IsStateSwitching () const
 
bool IsStateTx () const
 
void NotifyChannelAccessRequested ()
 Notify the PHY that an access to the channel was requested.
 
void NotifyMonitorSniffRx (Ptr< const WifiPsdu > psdu, MHz_u channelFreq, const WifiTxVector &txVector, SignalNoiseDbm signalNoise, const std::vector< bool > &statusPerMpdu, uint16_t staId=SU_STA_ID)
 Public method used to fire a MonitorSniffer trace for a wifi PSDU being received.
 
void NotifyMonitorSniffTx (Ptr< const WifiPsdu > psdu, MHz_u channelFreq, const WifiTxVector &txVector, uint16_t staId=SU_STA_ID)
 Public method used to fire a MonitorSniffer trace for a wifi PSDU being transmitted.
 
void NotifyRxBegin (Ptr< const WifiPsdu > psdu, const RxPowerWattPerChannelBand &rxPowersW)
 Public method used to fire a PhyRxBegin trace.
 
void NotifyRxDrop (Ptr< const WifiPsdu > psdu, WifiPhyRxfailureReason reason)
 Public method used to fire a PhyRxDrop trace.
 
void NotifyRxEnd (Ptr< const WifiPsdu > psdu)
 Public method used to fire a PhyRxEnd trace.
 
void NotifyRxPpduDrop (Ptr< const WifiPpdu > ppdu, WifiPhyRxfailureReason reason)
 Public method used to fire a PhyRxPpduDrop trace.
 
void NotifyTxBegin (const WifiConstPsduMap &psdus, Watt_u txPower)
 Public method used to fire a PhyTxBegin trace.
 
void NotifyTxDrop (Ptr< const WifiPsdu > psdu)
 Public method used to fire a PhyTxDrop trace.
 
void NotifyTxEnd (const WifiConstPsduMap &psdus)
 Public method used to fire a PhyTxEnd trace.
 
void RegisterListener (const std::shared_ptr< WifiPhyListener > &listener)
 
void ResetCca (bool powerRestricted, dBm_u txPowerMaxSiso=0, dBm_u txPowerMaxMimo=0)
 Reset PHY to IDLE, with some potential TX power restrictions for the next transmission.
 
void ResumeFromOff ()
 Resume from off mode.
 
void ResumeFromSleep ()
 Resume from sleep mode.
 
void Send (const WifiConstPsduMap &psdus, const WifiTxVector &txVector)
 
void Send (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector)
 This function is a wrapper for the Send variant that accepts a WifiConstPsduMap as first argument.
 
void SetCapabilitiesChangedCallback (Callback< void > callback)
 
void SetCcaEdThreshold (dBm_u threshold)
 Sets the CCA energy detection threshold.
 
void SetCcaSensitivityThreshold (dBm_u threshold)
 Sets the CCA sensitivity threshold.
 
void SetErrorRateModel (const Ptr< ErrorRateModel > model)
 Sets the error rate model.
 
void SetFixedPhyBand (bool enable)
 Configure whether it is prohibited to change PHY band after initialization.
 
void SetFrameCaptureModel (const Ptr< FrameCaptureModel > frameCaptureModel)
 Sets the frame capture model.
 
virtual void SetInterferenceHelper (const Ptr< InterferenceHelper > helper)
 Sets the interference helper.
 
void SetMaxModulationClassSupported (WifiModulationClass modClass)
 Set the maximum modulation class that has to be supported by this PHY object.
 
void SetMaxSupportedRxSpatialStreams (uint8_t streams)
 
void SetMaxSupportedTxSpatialStreams (uint8_t streams)
 
void SetMobility (const Ptr< MobilityModel > mobility)
 assign a mobility model to this device
 
void SetNTxPower (uint8_t n)
 Sets the number of transmission power levels available between the minimum level and the maximum level.
 
void SetNumberOfAntennas (uint8_t antennas)
 
void SetOffMode ()
 Put in off mode.
 
void SetOperatingChannel (const ChannelSegments &channelSegments)
 This overloaded function is used to pass a list of segments from which the operating channel can be deduced.
 
void SetOperatingChannel (const ChannelTuple &tuple)
 This overloaded function is used when the operating channel consists of a single segment, identified by a tuple.
 
void SetOperatingChannel (const WifiPhyOperatingChannel &channel)
 If the standard for this object has not been set yet, store the channel settings corresponding to the given operating channel.
 
void SetPhyId (uint8_t phyId)
 Set the index allocated to this PHY.
 
void SetPifs (Time pifs)
 Set the PCF Interframe Space (PIFS) for this PHY.
 
void SetPostReceptionErrorModel (const Ptr< ErrorModel > em)
 Attach a receive ErrorModel to the WifiPhy.
 
void SetPreambleDetectionModel (const Ptr< PreambleDetectionModel > preambleDetectionModel)
 Sets the preamble detection model.
 
void SetPreviouslyRxPpduUid (uint64_t uid)
 Set the UID of the previously received PPDU.
 
void SetReceiveErrorCallback (RxErrorCallback callback)
 
void SetReceiveOkCallback (RxOkCallback callback)
 
void SetRxGain (dB_u gain)
 Sets the reception gain.
 
void SetRxNoiseFigure (dB_u noiseFigure)
 Sets the RX loss in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
 
void SetRxSensitivity (dBm_u threshold)
 Sets the receive sensitivity threshold.
 
void SetShortPhyPreambleSupported (bool preamble)
 Enable or disable short PHY preamble.
 
void SetSifs (Time sifs)
 Set the Short Interframe Space (SIFS) for this PHY.
 
void SetSleepMode (bool forceSleepWhileInRx=false)
 Put in sleep mode.
 
void SetSlot (Time slot)
 Set the slot duration for this PHY.
 
void SetTxGain (dB_u gain)
 Sets the transmission gain.
 
void SetTxPowerEnd (dBm_u end)
 Sets the maximum available transmission power level.
 
void SetTxPowerStart (dBm_u start)
 Sets the minimum available transmission power level.
 
void SetWifiRadioEnergyModel (const Ptr< WifiRadioEnergyModel > wifiRadioEnergyModel)
 Sets the wifi radio energy model.
 
void StartReceivePreamble (Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration)
 Start receiving the PHY preamble of a PPDU (i.e.
 
void UnregisterListener (const std::shared_ptr< WifiPhyListener > &listener)
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor.
 
 ~Object () override
 Destructor.
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
 
void Dispose ()
 Dispose of this Object.
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
 
bool IsInitialized () const
 Check if the object has been initialized.
 
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor.
 
uint32_t GetReferenceCount () const
 Get the reference count of the object.
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
 
void Ref () const
 Increment the reference count.
 
void Unref () const
 Decrement the reference count.
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
 
void GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.
 

Static Public Member Functions

static uint32_t GetNumBandsBetweenSegments (const std::vector< MHz_u > &centerFrequencies, MHz_u totalWidth, uint32_t subcarrierSpacing)
 Determine the number of bands between the two segments if the operating channel is made of non-contiguous segments, otherwise the function returns zero.
 
static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::WifiPhy
static void AddStaticPhyEntity (WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
 Add the PHY entity to the map of implemented PHY entities for the given modulation class.
 
static Time CalculatePhyPreambleAndHeaderDuration (const WifiTxVector &txVector)
 
static Time CalculateTxDuration (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, WifiPhyBand band)
 
static Time CalculateTxDuration (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, WifiPhyBand band)
 This function is a wrapper for the CalculateTxDuration variant that accepts a WifiConstPsduMap as first argument.
 
static Time CalculateTxDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, uint16_t staId=SU_STA_ID)
 
static uint32_t GetMaxPsduSize (WifiModulationClass modulation)
 Get the maximum PSDU size in bytes for the given modulation class.
 
static Time GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId)
 
static Time GetPayloadDuration (uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype=NORMAL_MPDU, uint16_t staId=SU_STA_ID)
 
static Time GetPreambleDetectionDuration ()
 
static Time GetStartOfPacketDuration (const WifiTxVector &txVector)
 
static const Ptr< const PhyEntityGetStaticPhyEntity (WifiModulationClass modulation)
 Get the implemented PHY entity corresponding to the modulation class.
 
static TypeId GetTypeId ()
 Get the type ID.
 
static WifiConstPsduMap GetWifiConstPsduMap (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector)
 Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU.
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type.
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.
 

Protected Member Functions

void DoChannelSwitch () override
 Actually switch channel based on the stored channel settings.
 
void DoDispose () override
 Destructor implementation.
 
void DoInitialize () override
 Initialize() implementation.
 
- Protected Member Functions inherited from ns3::WifiPhy
void AddPhyEntity (WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
 Add the PHY entity to the map of supported PHY entities for the given modulation class for the WifiPhy instance.
 
void DoDispose () override
 Destructor implementation.
 
void DoInitialize () override
 Initialize() implementation.
 
std::optional< TimeGetDelayUntilChannelSwitch ()
 Perform any actions necessary when user changes operating channel after initialization.
 
void NotifyCcaBusy (const Ptr< const WifiPpdu > ppdu, Time duration)
 Notify PHY state helper to switch to CCA busy state,.
 
void Reset ()
 Reset data upon end of TX or RX.
 
void SwitchMaybeToCcaBusy (const Ptr< const WifiPpdu > ppdu=nullptr)
 Check if PHY state should move to CCA busy state based on current state of interference tracker.
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated.
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.
 

Protected Attributes

Ptr< WifiSpectrumPhyInterfacem_currentSpectrumPhyInterface
 The current Spectrum PHY interface (held for performance reasons)
 
std::map< FrequencyRange, Ptr< WifiSpectrumPhyInterface > > m_spectrumPhyInterfaces
 Spectrum PHY interfaces.
 
- Protected Attributes inherited from ns3::WifiPhy
Ptr< Eventm_currentEvent
 Hold the current event.
 
std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > m_currentPreambleEvents
 store event associated to a PPDU (that has a unique ID and preamble combination) whose preamble is being received
 
EventId m_endPhyRxEvent
 the end of PHY receive event
 
EventId m_endTxEvent
 the end of transmit event
 
Ptr< InterferenceHelperm_interference
 Pointer to a helper responsible for interference computations.
 
std::map< WifiModulationClass, Ptr< PhyEntity > > m_phyEntities
 This map holds the supported PHY entities.
 
uint8_t m_phyId
 the index of the PHY in the vector of PHYs held by the WifiNetDevice
 
uint64_t m_previouslyRxPpduUid
 UID of the previously received PPDU, reset to UINT64_MAX upon transmission.
 
Ptr< UniformRandomVariablem_random
 Provides uniform random variables.
 
uint32_t m_rxMpduReferenceNumber
 A-MPDU reference number to identify all received subframes belonging to the same received A-MPDU.
 
TracedCallback< Ptr< const WifiPpdu >, const WifiTxVector & > m_signalTransmissionCb
 Signal Transmission callback.
 
Ptr< WifiPhyStateHelperm_state
 Pointer to WifiPhyStateHelper.
 
uint32_t m_txMpduReferenceNumber
 A-MPDU reference number to identify all transmitted subframes belonging to the same received A-MPDU.
 

Private Member Functions

bool CanStartRx (Ptr< const WifiPpdu > ppdu) const
 Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU.
 
WifiSpectrumBands ComputeBands (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface)
 This function computes the bands that belong to a given spectrum PHY interface.
 
WifiSpectrumBandFrequencies ConvertIndicesToFrequenciesForInterface (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface, const WifiSpectrumBandIndices &indices) const
 This is a helper function to convert start and stop indices to start and stop frequencies.
 
void FinalizeChannelSwitch () override
 Method that can be overridden by subclasses to perform operations after the channel is actually switched but before the MAC is notified of the channel switch.
 
WifiSpectrumBandInfo GetBandForInterface (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface, MHz_u bandWidth, uint8_t bandIndex=0)
 Get the info of a given band that belongs to a given spectrum PHY interface.
 
HeRuBands GetHeRuBands (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface, MHz_u guardBandwidth)
 This function computes the RU bands that belong to a given spectrum PHY interface.
 
Ptr< WifiSpectrumPhyInterfaceGetInterfaceCoveringChannelBand (MHz_u frequency, MHz_u width) const
 Get the spectrum PHY interface that covers a band portion of the RF channel.
 
void NotifyChannelSwitched ()
 Notify the spectrum channel has switched.
 
void ResetSpectrumModel (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface, const std::vector< MHz_u > &centerFrequencies, MHz_u channelWidth)
 Perform run-time spectrum model change.
 
void UpdateInterferenceHelperBands (Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface)
 This function is called to update the bands handled by the InterferenceHelper.
 

Private Attributes

Ptr< AntennaModelm_antenna
 antenna model
 
Callback< void > m_channelSwitchedCallback
 Callback when channel switched.
 
bool m_disableWifiReception
 forces this PHY to fail to sync on any signal
 
std::vector< MHz_um_frequenciesBeforeSwitch
 center frequency before channel switch
 
TracedCallback< Ptr< const SpectrumSignalParameters >, uint32_t, double, Timem_signalCb
 Signal callback.
 
bool m_trackSignalsInactiveInterfaces
 flag whether signals coming from inactive spectrum PHY interfaces are tracked
 
dBr_u m_txMaskInnerBandMinimumRejection
 The minimum rejection for the inner band of the transmit spectrum mask.
 
dBr_u m_txMaskOuterBandMaximumRejection
 The maximum rejection for the outer band of the transmit spectrum mask.
 
dBr_u m_txMaskOuterBandMinimumRejection
 The minimum rejection for the outer band of the transmit spectrum mask.
 
std::vector< MHz_um_widthsBeforeSwitch
 channel width before channel switch
 

Friends

class ::SpectrumWifiPhyFilterTest
 allow SpectrumWifiPhyFilterTest class access
 

Additional Inherited Members

Detailed Description

802.11 PHY layer model

This PHY implements a spectrum-aware enhancement of the 802.11 SpectrumWifiPhy model.

This PHY model depends on a channel loss and delay model as provided by the ns3::SpectrumPropagationLossModel and ns3::PropagationDelayModel classes.

Config Paths

ns3::SpectrumWifiPhy is accessible through the following paths with Config::Set and Config::Connect:

  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Phy/$ns3::SpectrumWifiPhy"
  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Phys/[i]/$ns3::SpectrumWifiPhy"

Attributes

  • DisableWifiReception: Prevent Wi-Fi frame sync from ever happening
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TrackSignalsFromInactiveInterfaces: Enable or disable tracking signals coming from inactive spectrum PHY interfaces
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxMaskInnerBandMinimumRejection: Minimum rejection (dBr) for the inner band of the transmit spectrum mask
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -20
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxMaskOuterBandMaximumRejection: Maximum rejection (dBr) for the outer band of the transmit spectrum mask
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -40
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxMaskOuterBandMinimumRejection: Minimum rejection (dBr) for the outer band of the transmit spectrum mask
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -28
    • Flags: constructwriteread
    • Support level: SUPPORTED

Attributes defined in parent class ns3::WifiPhy

  • Antennas: The number of antennas on the device.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 1:8
    • Initial value: 1
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • CcaEdThreshold: The energy of all received signals should be higher than this threshold (dBm) in the primary channel to allow the PHY layer to declare CCA BUSY state.
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -62
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • CcaSensitivity: The energy of a received wifi signal should be higher than this threshold (dBm) in the primary channel to allow the PHY layer to declare CCA BUSY state.
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -82
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • Channel: The channel attached to this PHY
  • ChannelNumber: The channel number of the current operating channel.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 0:233
    • Flags: read
    • Support level: SUPPORTED
  • ChannelSettings: A vector of tuple {channel number, channel width (MHz), PHY band, primary20 index} describing the settings of the operating channel for each segment. The primary20 index (only the value set for the first segment is used) is the index of the primary 20 MHz channel within the operating channel (0 indicates the 20 MHz subchannel with the lowest center frequency) and is only valid if the width of the operating channel is a multiple of 20 MHz. If the standard for this object has not been set yet, the value of this attribute is saved and will be used to set the operating channel when the standard is configured. If the PHY band is left unspecified, the default band for the configured standard is used. If the channel width and the channel number are both 0, the default channel width for the configured standard and band are used. If the channel number is 0, the default channel number for the configured standard, band and channel width is used. Note that the channel width can be left unspecified (0) if the channel number uniquely identify a frequency channel for the given standard and band.
  • ChannelSwitchDelay: Delay between two short frames transmitted on different frequencies.
    • Set with class: ns3::TimeValue
    • Underlying type: Time +0ns:+9.22337e+18ns
    • Initial value: +250000ns
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • ChannelWidth: The width in MHz of the current operating channel (5, 10, 20, 22, 40, 80 or 160). If 80+80MHz is used, this corresponds to the total channel width, hence 160 MHz.
    • Set with class: ns3::UintegerValue
    • Underlying type: double 5:160
    • Flags: read
    • Support level: SUPPORTED
  • FixedPhyBand: If set to true, changing PHY band is prohibited after initialization.
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • FrameCaptureModel: Ptr to an object that implements the frame capture model
  • Frequency: The center frequency (MHz) of the current operating channel.
    • Set with class: ns3::UintegerValue
    • Underlying type: int64_t 9223372036854775808:9223372036854775807
    • Flags: read
    • Support level: SUPPORTED
  • InterferenceHelper: Ptr to an object that implements the interference helper
  • MaxSupportedRxSpatialStreams: The maximum number of supported RX spatial streams.This parameter is only valuable for 802.11n/ac/ax STAs and APs.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 1:8
    • Initial value: 1
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • MaxSupportedTxSpatialStreams: The maximum number of supported TX spatial streams.This parameter is only valuable for 802.11n/ac/ax STAs and APs.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 1:8
    • Initial value: 1
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • NotifyMacHdrRxEnd: Whether the PHY is capable of notifying the MAC about the end of the reception of the MAC header of every MPDU.
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • Pifs: The duration of the PCF Interframe Space. NOTE that the default value is overwritten by the value defined by the standard; if you want to set this attribute, you have to do it after that the PHY object is initialized.
    • Set with class: ns3::TimeValue
    • Underlying type: Time -9.22337e+18ns:+9.22337e+18ns
    • Initial value: +0ns
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • PostReceptionErrorModel: An optional packet error model can be added to the receive packet process after any propagation-based (SNR-based) error models have been applied. Typically this is used to force specific packet drops, for testing purposes.
  • PowerDensityLimit: The mean equivalent isotropically radiated power densitylimit (in dBm/MHz) set by regulators.
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 100
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • PreambleDetectionModel: Ptr to an object that implements the preamble detection model
  • Primary20MHzIndex: The index of the primary 20 MHz channel within the current operating channel (0 indicates the 20 MHz subchannel with the lowest center frequency).
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 0:7
    • Flags: read
    • Support level: SUPPORTED
  • RxGain: Reception gain (dB).
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 0
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • RxNoiseFigure: Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver. According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "the difference in decibels (dB) between the noise output of the actual receiver to the noise output of an ideal receiver with the same overall gain and bandwidth when the receivers are connected to sources at the standard noise temperature T0 (usually 290 K)".
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 7
    • Flags: constructwrite
    • Support level: SUPPORTED
  • RxSensitivity: The energy of a received signal should be higher than this threshold (dBm) for the PHY to detect the signal. This threshold refers to a width of 20 MHz and will be scaled to match the width of the received signal.
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: -101
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • ShortPlcpPreambleSupported: Whether or not short PHY preamble is supported.This parameter is only valuable for 802.11b STAs and APs.Note: 802.11g APs and STAs always support short PHY preamble.
    • Set with class: ns3::BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • Sifs: The duration of the Short Interframe Space. NOTE that the default value is overwritten by the value defined by the standard; if you want to set this attribute, you have to do it after that the PHY object is initialized.
    • Set with class: ns3::TimeValue
    • Underlying type: Time -9.22337e+18ns:+9.22337e+18ns
    • Initial value: +0ns
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • Slot: The duration of a slot. NOTE that the default value is overwritten by the value defined by the standard; if you want to set this attribute, you have to do it after that the PHY object is initialized.
    • Set with class: ns3::TimeValue
    • Underlying type: Time -9.22337e+18ns:+9.22337e+18ns
    • Initial value: +0ns
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • State: The state of the PHY layer.
  • TxGain: Transmission gain (dB).
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 0
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxPowerEnd: Maximum available transmission level (dBm).
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 16.0206
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxPowerLevels: Number of transmission power levels available between TxPowerStart and TxPowerEnd included.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 0:255
    • Initial value: 1
    • Flags: constructwriteread
    • Support level: SUPPORTED
  • TxPowerStart: Minimum available transmission level (dBm).
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 16.0206
    • Flags: constructwriteread
    • Support level: SUPPORTED

TraceSources

TraceSources defined in parent class ns3::WifiPhy

  • MonitorSnifferRx: Trace source simulating a wifi device in monitor mode sniffing all received frames
    • Callback signature: ns3::WifiPhy::MonitorSnifferRxTracedCallback
    • Support level: SUPPORTED
  • MonitorSnifferTx: Trace source simulating the capability of a wifi device in monitor mode to sniff all frames being transmitted
    • Callback signature: ns3::WifiPhy::MonitorSnifferTxTracedCallback
    • Support level: SUPPORTED
  • PhyRxBegin: Trace source indicating a packet has begun being received from the channel medium by the device
  • PhyRxDrop: Trace source indicating a packet has been dropped by the device during reception
  • PhyRxEnd: Trace source indicating a packet has been completely received from the channel medium by the device
  • PhyRxMacHeaderEnd: Trace source indicating the MAC header of an MPDU has been completely received.
  • PhyRxPayloadBegin: Trace source indicating the reception of the payload of a PPDU has begun
  • PhyRxPpduDrop: Trace source indicating a ppdu has been dropped by the device during reception
  • PhyTxBegin: Trace source indicating a packet has begun transmitting over the medium; the packet holds a single MPDU even if the MPDU is transmitted within an A-MPDU (in which case this trace fires for each MPDU in the A-MPDU).
  • PhyTxDrop: Trace source indicating a packet has been dropped by the device during transmission
  • PhyTxEnd: Trace source indicating a packet has been completely transmitted over the channel.
  • PhyTxPsduBegin: Trace source indicating a PSDU has begun transmitting over the channel medium; this trace returns a WifiConstPsduMap with a single element (in the case of SU PPDU) or multiple elements (in the case of MU PPDU)
  • SignalTransmission: Trace start of signal transmission

Group: Wifi

Size of this type is 1080 bytes (on a 64-bit architecture).

Definition at line 50 of file spectrum-wifi-phy.h.

Member Typedef Documentation

◆ SignalArrivalCallback

typedef void(* ns3::SpectrumWifiPhy::SignalArrivalCallback) (Ptr< const SpectrumSignalParameters > signal, uint32_t senderNodeId, double rxPower, Time duration)

Callback invoked when the PHY model starts to process a signal.

Parameters
senderNodeIdNode Id of the sender of the signal
rxPowerreceived signal power (dBm)
durationSignal duration

Definition at line 121 of file spectrum-wifi-phy.h.

Constructor & Destructor Documentation

◆ SpectrumWifiPhy()

ns3::SpectrumWifiPhy::SpectrumWifiPhy ( )

Definition at line 89 of file spectrum-wifi-phy.cc.

References NS_LOG_FUNCTION.

◆ ~SpectrumWifiPhy()

ns3::SpectrumWifiPhy::~SpectrumWifiPhy ( )
override

Definition at line 98 of file spectrum-wifi-phy.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ AddChannel()

void ns3::SpectrumWifiPhy::AddChannel ( const Ptr< SpectrumChannel > channel,
const FrequencyRange & freqRange = WHOLE_WIFI_SPECTRUM )

Attach a SpectrumChannel to use for a given frequency range.

Parameters
channelthe SpectrumChannel to attach
freqRangethe frequency range, bounded by a minFrequency and a maxFrequency in MHz

Definition at line 237 of file spectrum-wifi-phy.cc.

References ns3::CreateObject(), ns3::WifiPhy::GetDevice(), m_spectrumPhyInterfaces, NS_ABORT_MSG_IF, and NS_LOG_FUNCTION.

Referenced by SpectrumWifiPhyFilterTest::DoSetup(), SpectrumWifiPhyTrackedBandsTest::DoSetup(), TestDlMuMimoPhyTransmission::DoSetup(), TestDlOfdmaPhyPuncturing::DoSetup(), TestDlOfdmaPhyTransmission::DoSetup(), TestMultipleCtsResponsesFromMuRts::DoSetup(), TestMultipleHeTbPreambles::DoSetup(), TestPhyPaddingExclusion::DoSetup(), TestUlMuMimoPhyTransmission::DoSetup(), TestUlOfdmaPhyTransmission::DoSetup(), and TestUlOfdmaPpduUid::DoSetup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CanStartRx()

bool ns3::SpectrumWifiPhy::CanStartRx ( Ptr< const WifiPpdu > ppdu) const
private

Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU.

Parameters
ppduthe PPDU
Returns
true if the PHY shall issue a PHY-RXSTART.indication primitive in response to a PPDU, false otherwise

Definition at line 457 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::GetLatestPhyEntity().

Referenced by StartRx().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ComputeBands()

WifiSpectrumBands ns3::SpectrumWifiPhy::ComputeBands ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface)
private

This function computes the bands that belong to a given spectrum PHY interface.

Parameters
spectrumPhyInterfacethe spectrum PHY interface to consider to compute the bands
Returns
the computed bands for the spectrum PHY interface

Definition at line 122 of file spectrum-wifi-phy.cc.

References GetBandForInterface(), and NS_LOG_FUNCTION.

Referenced by UpdateInterferenceHelperBands().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ConfigureInterface()

void ns3::SpectrumWifiPhy::ConfigureInterface ( const std::vector< MHz_u > & frequencies,
MHz_u width )

Configure a non-active spectrum PHY interface to operate on a given frequency (or several frequencies for non-contiguous) with a given total width.

The function searches for the non-active PHY interface that operates on the frequency range corresponding to the spectrum portion specified by the caller. It takes care to configure the RX spectrum model of the PHY interface and to update the bands tracked in interference helper.

Parameters
frequenciesthe center frequency of each segment the PHY interface should use
widththe total channel width the PHY interface should use

Definition at line 406 of file spectrum-wifi-phy.cc.

References GetInterfaceCoveringChannelBand(), m_currentSpectrumPhyInterface, m_trackSignalsInactiveInterfaces, NS_ABORT_MSG_IF, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ResetSpectrumModel().

+ Here is the call graph for this function:

◆ ConvertIndicesToFrequencies()

WifiSpectrumBandFrequencies ns3::SpectrumWifiPhy::ConvertIndicesToFrequencies ( const WifiSpectrumBandIndices & indices) const
overridevirtual

This is a helper function to convert start and stop indices to start and stop frequencies.

Parameters
indicesthe start/stop indices to convert
Returns
the converted frequencies

Implements ns3::WifiPhy.

Definition at line 776 of file spectrum-wifi-phy.cc.

References ConvertIndicesToFrequenciesForInterface(), m_currentSpectrumPhyInterface, and NS_ABORT_IF.

+ Here is the call graph for this function:

◆ ConvertIndicesToFrequenciesForInterface()

WifiSpectrumBandFrequencies ns3::SpectrumWifiPhy::ConvertIndicesToFrequenciesForInterface ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface,
const WifiSpectrumBandIndices & indices ) const
private

This is a helper function to convert start and stop indices to start and stop frequencies.

Parameters
spectrumPhyInterfacethe spectrum PHY interface to consider for the calculations
indicesthe start/stop indices to convert
Returns
the converted frequencies

Definition at line 783 of file spectrum-wifi-phy.cc.

References NS_ABORT_IF.

Referenced by ConvertIndicesToFrequencies(), GetBandForInterface(), and GetHeRuBands().

+ Here is the caller graph for this function:

◆ DoChannelSwitch()

void ns3::SpectrumWifiPhy::DoChannelSwitch ( )
overrideprotectedvirtual

Actually switch channel based on the stored channel settings.

Reimplemented from ns3::WifiPhy.

Definition at line 297 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::DoChannelSwitch(), ns3::WifiPhyOperatingChannel::GetFrequencies(), ns3::WifiPhy::GetOperatingChannel(), ns3::WifiPhyOperatingChannel::GetWidths(), ns3::WifiPhyOperatingChannel::IsSet(), m_frequenciesBeforeSwitch, m_widthsBeforeSwitch, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DoDispose()

void ns3::SpectrumWifiPhy::DoDispose ( )
overrideprotectedvirtual

Destructor implementation.

This method is called by Dispose() or by the Object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.

It is safe to call GetObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 104 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::DoDispose(), m_antenna, m_channelSwitchedCallback, m_currentSpectrumPhyInterface, m_spectrumPhyInterfaces, NS_LOG_FUNCTION, and ns3::Callback< R, UArgs >::Nullify().

Referenced by MuMimoSpectrumWifiPhy::DoDispose(), MuRtsCtsSpectrumWifiPhy::DoDispose(), and OfdmaSpectrumWifiPhy::DoDispose().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DoInitialize()

void ns3::SpectrumWifiPhy::DoInitialize ( )
overrideprotectedvirtual

Initialize() implementation.

This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.

Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 115 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::DoInitialize(), and NS_LOG_FUNCTION.

Referenced by MuMimoSpectrumWifiPhy::DoInitialize(), MuRtsCtsSpectrumWifiPhy::DoInitialize(), and OfdmaSpectrumWifiPhy::DoInitialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ FinalizeChannelSwitch()

void ns3::SpectrumWifiPhy::FinalizeChannelSwitch ( )
overrideprivatevirtual

Method that can be overridden by subclasses to perform operations after the channel is actually switched but before the MAC is notified of the channel switch.

Implements ns3::WifiPhy.

Definition at line 309 of file spectrum-wifi-phy.cc.

References ns3::WifiPhyOperatingChannel::GetFrequencies(), GetInterfaceCoveringChannelBand(), ns3::WifiPhyOperatingChannel::GetNSegments(), ns3::WifiPhy::GetOperatingChannel(), ns3::WifiPhyOperatingChannel::GetWidths(), ns3::Object::IsInitialized(), m_currentSpectrumPhyInterface, m_frequenciesBeforeSwitch, m_trackSignalsInactiveInterfaces, m_widthsBeforeSwitch, NotifyChannelSwitched(), NS_ABORT_MSG_IF, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ResetSpectrumModel(), ns3::Simulator::ScheduleNow(), and ns3::WifiPhy::SwitchMaybeToCcaBusy().

+ Here is the call graph for this function:

◆ GetAntenna()

Ptr< AntennaModel > ns3::SpectrumWifiPhy::GetAntenna ( ) const

Get the antenna model used for reception.

Returns
the AntennaModel used for reception

Definition at line 623 of file spectrum-wifi-phy.cc.

References m_antenna.

◆ GetBand()

WifiSpectrumBandInfo ns3::SpectrumWifiPhy::GetBand ( MHz_u bandWidth,
uint8_t bandIndex = 0 )
overridevirtual

Get the info of a given band.

Parameters
bandWidththe width of the band to be returned
bandIndexthe index of the band to be returned
Returns
the info that defines the band

Implements ns3::WifiPhy.

Definition at line 769 of file spectrum-wifi-phy.cc.

References GetBandForInterface(), m_currentSpectrumPhyInterface, and NS_ABORT_IF.

+ Here is the call graph for this function:

◆ GetBandForInterface()

WifiSpectrumBandInfo ns3::SpectrumWifiPhy::GetBandForInterface ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface,
MHz_u bandWidth,
uint8_t bandIndex = 0 )
private

Get the info of a given band that belongs to a given spectrum PHY interface.

Parameters
spectrumPhyInterfacethe spectrum PHY interface
bandWidththe width of the band to be returned
bandIndexthe index of the band to be returned
Returns
the info that defines the band

Definition at line 705 of file spectrum-wifi-phy.cc.

References ConvertIndicesToFrequenciesForInterface(), ns3::WifiSpectrumBandInfo::frequencies, GetNumBandsBetweenSegments(), ns3::WifiPhy::GetSubcarrierSpacing(), ns3::WifiSpectrumBandInfo::indices, NS_ASSERT, and NS_ASSERT_MSG.

Referenced by ComputeBands(), and GetBand().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetChannel()

Ptr< Channel > ns3::SpectrumWifiPhy::GetChannel ( ) const
overridevirtual

Return the Channel this WifiPhy is connected to.

Returns
the Channel this WifiPhy is connected to

Implements ns3::WifiPhy.

Definition at line 230 of file spectrum-wifi-phy.cc.

References m_currentSpectrumPhyInterface, and NS_ABORT_IF.

◆ GetCurrentFrequencyRange()

FrequencyRange ns3::SpectrumWifiPhy::GetCurrentFrequencyRange ( ) const
overridevirtual

Get the frequency range of the current RF interface.

Returns
the frequency range of the current RF interface

Implements ns3::WifiPhy.

Definition at line 804 of file spectrum-wifi-phy.cc.

References m_currentSpectrumPhyInterface, and NS_ABORT_IF.

Referenced by StartRx().

+ Here is the caller graph for this function:

◆ GetCurrentInterface()

Ptr< WifiSpectrumPhyInterface > ns3::SpectrumWifiPhy::GetCurrentInterface ( ) const

Get the currently active spectrum PHY interface.

Returns
the current spectrum PHY interface

Definition at line 835 of file spectrum-wifi-phy.cc.

References m_currentSpectrumPhyInterface.

Referenced by SpectrumWifiPhyFilterTest::RxCallback().

+ Here is the caller graph for this function:

◆ GetGuardBandwidth()

MHz_u ns3::SpectrumWifiPhy::GetGuardBandwidth ( MHz_u currentChannelWidth) const
overridevirtual
Parameters
currentChannelWidthchannel width of the current transmission
Returns
the width of the guard band

Note: in order to properly model out of band transmissions for OFDM, the guard band has been configured so as to expand the modeled spectrum up to the outermost referenced point in "Transmit spectrum mask" sections' PSDs of each PHY specification of 802.11-2016 standard. It thus ultimately corresponds to the current channel bandwidth (which can be different from devices max channel width).

This method is only relevant for SpectrumWifiPhy.

Implements ns3::WifiPhy.

Definition at line 663 of file spectrum-wifi-phy.cc.

Referenced by ResetSpectrumModel(), SpectrumWifiPhyFilterTest::RxCallback(), TestMultipleHeTbPreambles::RxHeTbPpdu(), and UpdateInterferenceHelperBands().

+ Here is the caller graph for this function:

◆ GetHeRuBands()

HeRuBands ns3::SpectrumWifiPhy::GetHeRuBands ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface,
MHz_u guardBandwidth )
private

This function computes the RU bands that belong to a given spectrum PHY interface.

Parameters
spectrumPhyInterfacethe spectrum PHY interface to consider to compute the RU bands
guardBandwidthwidth of the guard band
Returns
the computed RU bands for the spectrum PHY interface

Definition at line 145 of file spectrum-wifi-phy.cc.

References ns3::HePhy::ConvertHeRuSubcarriers(), ConvertIndicesToFrequenciesForInterface(), ns3::HeRu::GetNRus(), ns3::WifiPhy::GetOperatingChannel(), ns3::HeRu::RuSpec::GetPhyIndex(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::HeRu::GetSubcarrierGroup(), ns3::WifiPhy::GetSubcarrierSpacing(), ns3::WifiSpectrumBandInfo::indices, NS_ABORT_IF, and ns3::HeRu::RU_2x996_TONE.

Referenced by SpectrumWifiPhyFilterTest::RxCallback(), StartRx(), and UpdateInterferenceHelperBands().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetInterfaceCoveringChannelBand()

Ptr< WifiSpectrumPhyInterface > ns3::SpectrumWifiPhy::GetInterfaceCoveringChannelBand ( MHz_u frequency,
MHz_u width ) const
private

Get the spectrum PHY interface that covers a band portion of the RF channel.

Parameters
frequencythe center frequency of the RF channel band
widththe width of the RF channel band
Returns
the spectrum PHY interface that covers the indicated band of the RF channel

Definition at line 817 of file spectrum-wifi-phy.cc.

References m_spectrumPhyInterfaces.

Referenced by ConfigureInterface(), and FinalizeChannelSwitch().

+ Here is the caller graph for this function:

◆ GetNumBandsBetweenSegments()

uint32_t ns3::SpectrumWifiPhy::GetNumBandsBetweenSegments ( const std::vector< MHz_u > & centerFrequencies,
MHz_u totalWidth,
uint32_t subcarrierSpacing )
static

Determine the number of bands between the two segments if the operating channel is made of non-contiguous segments, otherwise the function returns zero.

Parameters
centerFrequenciesthe center frequency of each segment
totalWidththe width of the operating channel
subcarrierSpacingthe subcarrier spacing
Returns
the number of bands between the two segments if the operating channel is made of non-contiguous segments, zero otherwise

Definition at line 685 of file spectrum-wifi-phy.cc.

References NS_ABORT_MSG_IF, and NS_ASSERT.

Referenced by ns3::HePhy::ConvertHeRuSubcarriers(), and GetBandForInterface().

+ Here is the caller graph for this function:

◆ GetRxPpduFromTxPpdu()

Ptr< const WifiPpdu > ns3::SpectrumWifiPhy::GetRxPpduFromTxPpdu ( Ptr< const WifiPpdu > ppdu)

Determine the WifiPpdu to be used by the RX PHY based on the WifiPpdu sent by the TX PHY.

Parameters
ppduthe WifiPpdu transmitted by the TX PHY
Returns
the WifiPpdu to be used by the RX PHY

Definition at line 617 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::GetPhyEntityForPpdu().

Referenced by StartRx().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetSpectrumPhyInterfaces()

const std::map< FrequencyRange, Ptr< WifiSpectrumPhyInterface > > & ns3::SpectrumWifiPhy::GetSpectrumPhyInterfaces ( ) const

Get the map of interfaces attached to this spectrum PHY.

Returns
the map of interfaces attached to this spectrum PHY

Definition at line 811 of file spectrum-wifi-phy.cc.

References m_spectrumPhyInterfaces.

◆ GetTxMaskRejectionParams()

std::tuple< dBr_u, dBr_u, dBr_u > ns3::SpectrumWifiPhy::GetTxMaskRejectionParams ( ) const
overridevirtual
Returns
a tuple containing the minimum rejection for the inner band, the minimum rejection for the outer band, and the maximum rejection for the outer band for the transmit spectrum mask.

This method is only relevant for SpectrumWifiPhy.

Implements ns3::WifiPhy.

Definition at line 796 of file spectrum-wifi-phy.cc.

References m_txMaskInnerBandMinimumRejection, m_txMaskOuterBandMaximumRejection, and m_txMaskOuterBandMinimumRejection.

◆ GetTypeId()

TypeId ns3::SpectrumWifiPhy::GetTypeId ( )
static

Get the type ID.

Returns
the object TypeId

Definition at line 45 of file spectrum-wifi-phy.cc.

References m_disableWifiReception, m_signalCb, m_trackSignalsInactiveInterfaces, m_txMaskInnerBandMinimumRejection, m_txMaskOuterBandMaximumRejection, m_txMaskOuterBandMinimumRejection, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeDoubleAccessor(), ns3::MakeDoubleChecker(), ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ NotifyChannelSwitched()

void ns3::SpectrumWifiPhy::NotifyChannelSwitched ( )
private

Notify the spectrum channel has switched.

Definition at line 397 of file spectrum-wifi-phy.cc.

References ns3::Callback< R, UArgs >::IsNull(), and m_channelSwitchedCallback.

Referenced by FinalizeChannelSwitch().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ResetSpectrumModel()

void ns3::SpectrumWifiPhy::ResetSpectrumModel ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface,
const std::vector< MHz_u > & centerFrequencies,
MHz_u channelWidth )
private

Perform run-time spectrum model change.

Parameters
spectrumPhyInterfacethe spectrum PHY interface for which the spectrum model should be changed
centerFrequenciesthe center frequency of each segment the PHY interface should use
channelWidththe total channel width the PHY interface should use

Definition at line 266 of file spectrum-wifi-phy.cc.

References GetGuardBandwidth(), ns3::WifiPhy::GetSubcarrierSpacing(), NS_LOG_FUNCTION, and UpdateInterferenceHelperBands().

Referenced by ConfigureInterface(), and FinalizeChannelSwitch().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetAntenna()

void ns3::SpectrumWifiPhy::SetAntenna ( const Ptr< AntennaModel > antenna)
Parameters
antennaan AntennaModel to include in the transmitted SpectrumSignalParameters (in case any objects downstream of the SpectrumWifiPhy wish to adjust signal properties based on the transmitted antenna model. This antenna is also used when the underlying WifiSpectrumPhyInterface::GetAntenna() method is called.

Note: this method may be split into separate SetTx and SetRx methods in the future if the modeling need for this arises

Definition at line 629 of file spectrum-wifi-phy.cc.

References m_antenna, and NS_LOG_FUNCTION.

◆ SetChannelSwitchedCallback()

void ns3::SpectrumWifiPhy::SetChannelSwitchedCallback ( Callback< void > callback)
Parameters
callbackthe callback to invoke when operating channel has switched.

Definition at line 841 of file spectrum-wifi-phy.cc.

References m_channelSwitchedCallback.

◆ SetDevice()

void ns3::SpectrumWifiPhy::SetDevice ( const Ptr< WifiNetDevice > device)
overridevirtual

Sets the device this PHY is associated with.

Parameters
devicethe device this PHY is associated with

Reimplemented from ns3::WifiPhy.

Definition at line 636 of file spectrum-wifi-phy.cc.

References m_spectrumPhyInterfaces, NS_LOG_FUNCTION, and ns3::WifiPhy::SetDevice().

Referenced by SpectrumWifiPhyFilterTest::DoSetup(), SpectrumWifiPhyTrackedBandsTest::DoSetup(), TestDlMuMimoPhyTransmission::DoSetup(), TestDlOfdmaPhyPuncturing::DoSetup(), TestDlOfdmaPhyTransmission::DoSetup(), TestMultipleCtsResponsesFromMuRts::DoSetup(), TestMultipleHeTbPreambles::DoSetup(), TestPhyPaddingExclusion::DoSetup(), TestUlMuMimoPhyTransmission::DoSetup(), TestUlOfdmaPhyTransmission::DoSetup(), and TestUlOfdmaPpduUid::DoSetup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ StartRx()

void ns3::SpectrumWifiPhy::StartRx ( Ptr< SpectrumSignalParameters > rxParams,
Ptr< const WifiSpectrumPhyInterface > interface )

Input method for delivering a signal from the spectrum channel and low-level PHY interface to this SpectrumWifiPhy instance.

Parameters
rxParamsInput signal parameters
interfacethe Spectrum PHY interface for which the signal has been detected

Definition at line 463 of file spectrum-wifi-phy.cc.

References ns3::Time::As(), CanStartRx(), ns3::DbmToW(), ns3::DbToRatio(), ns3::DynamicCast(), ns3::WifiPhy::GetChannelWidth(), GetCurrentFrequencyRange(), GetHeRuBands(), GetRxPpduFromTxPpdu(), ns3::WifiPhy::GetRxSensitivity(), ns3::WifiPhy::GetStandard(), ns3::Integral(), m_currentSpectrumPhyInterface, m_disableWifiReception, ns3::WifiPhy::m_interference, m_signalCb, m_trackSignalsInactiveInterfaces, ns3::Time::NS, NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::WifiPhy::StartReceivePreamble(), ns3::WifiPhy::SwitchMaybeToCcaBusy(), ns3::WIFI_STANDARD_80211ax, and ns3::WToDbm().

Referenced by TestMultipleHeTbPreambles::DoRxHeTbPpduOfdmaPart(), and TestMultipleHeTbPreambles::RxHeTbPpdu().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ StartTx()

void ns3::SpectrumWifiPhy::StartTx ( Ptr< const WifiPpdu > ppdu)
overridevirtual
Parameters
ppduthe PPDU to send

Implements ns3::WifiPhy.

Definition at line 647 of file spectrum-wifi-phy.cc.

References ns3::WifiPhy::GetPhyEntity(), ns3::WifiPhy::m_signalTransmissionCb, and NS_LOG_FUNCTION.

Referenced by OfdmaSpectrumWifiPhy::StartTx().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Transmit()

void ns3::SpectrumWifiPhy::Transmit ( Ptr< WifiSpectrumSignalParameters > txParams)

This function is sending the signal to the Spectrum channel after finishing the configuration of the transmit parameters.

Parameters
txParamsthe parameters to be provided to the Spectrum channel

Definition at line 655 of file spectrum-wifi-phy.cc.

References m_currentSpectrumPhyInterface, NS_ABORT_IF, and NS_LOG_FUNCTION.

◆ UpdateInterferenceHelperBands()

void ns3::SpectrumWifiPhy::UpdateInterferenceHelperBands ( Ptr< WifiSpectrumPhyInterface > spectrumPhyInterface)
private

This function is called to update the bands handled by the InterferenceHelper.

Parameters
spectrumPhyInterfacethe spectrum PHY interface for which the bands should be updated

Definition at line 198 of file spectrum-wifi-phy.cc.

References ComputeBands(), GetGuardBandwidth(), GetHeRuBands(), ns3::WifiPhy::GetStandard(), ns3::WifiPhy::m_interference, NS_LOG_FUNCTION, and ns3::WIFI_STANDARD_80211ax.

Referenced by ResetSpectrumModel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ ::SpectrumWifiPhyFilterTest

friend class ::SpectrumWifiPhyFilterTest
friend

allow SpectrumWifiPhyFilterTest class access

Definition at line 54 of file spectrum-wifi-phy.h.

Member Data Documentation

◆ m_antenna

Ptr<AntennaModel> ns3::SpectrumWifiPhy::m_antenna
private

antenna model

Definition at line 289 of file spectrum-wifi-phy.h.

Referenced by DoDispose(), GetAntenna(), and SetAntenna().

◆ m_channelSwitchedCallback

Callback<void> ns3::SpectrumWifiPhy::m_channelSwitchedCallback
private

Callback when channel switched.

Definition at line 307 of file spectrum-wifi-phy.h.

Referenced by DoDispose(), NotifyChannelSwitched(), and SetChannelSwitchedCallback().

◆ m_currentSpectrumPhyInterface

Ptr<WifiSpectrumPhyInterface> ns3::SpectrumWifiPhy::m_currentSpectrumPhyInterface
protected

The current Spectrum PHY interface (held for performance reasons)

Definition at line 199 of file spectrum-wifi-phy.h.

Referenced by ConfigureInterface(), ConvertIndicesToFrequencies(), DoDispose(), FinalizeChannelSwitch(), GetBand(), GetChannel(), GetCurrentFrequencyRange(), GetCurrentInterface(), StartRx(), and Transmit().

◆ m_disableWifiReception

bool ns3::SpectrumWifiPhy::m_disableWifiReception
private

forces this PHY to fail to sync on any signal

Definition at line 291 of file spectrum-wifi-phy.h.

Referenced by GetTypeId(), and StartRx().

◆ m_frequenciesBeforeSwitch

std::vector<MHz_u> ns3::SpectrumWifiPhy::m_frequenciesBeforeSwitch
private

center frequency before channel switch

Definition at line 294 of file spectrum-wifi-phy.h.

Referenced by DoChannelSwitch(), and FinalizeChannelSwitch().

◆ m_signalCb

TracedCallback<Ptr<const SpectrumSignalParameters>, uint32_t, double, Time> ns3::SpectrumWifiPhy::m_signalCb
private

Signal callback.

Definition at line 298 of file spectrum-wifi-phy.h.

Referenced by GetTypeId(), and StartRx().

◆ m_spectrumPhyInterfaces

std::map<FrequencyRange, Ptr<WifiSpectrumPhyInterface> > ns3::SpectrumWifiPhy::m_spectrumPhyInterfaces
protected

Spectrum PHY interfaces.

Definition at line 196 of file spectrum-wifi-phy.h.

Referenced by AddChannel(), DoDispose(), GetInterfaceCoveringChannelBand(), GetSpectrumPhyInterfaces(), and SetDevice().

◆ m_trackSignalsInactiveInterfaces

bool ns3::SpectrumWifiPhy::m_trackSignalsInactiveInterfaces
private

flag whether signals coming from inactive spectrum PHY interfaces are tracked

Definition at line 292 of file spectrum-wifi-phy.h.

Referenced by ConfigureInterface(), FinalizeChannelSwitch(), GetTypeId(), and StartRx().

◆ m_txMaskInnerBandMinimumRejection

dBr_u ns3::SpectrumWifiPhy::m_txMaskInnerBandMinimumRejection
private

The minimum rejection for the inner band of the transmit spectrum mask.

Definition at line 300 of file spectrum-wifi-phy.h.

Referenced by GetTxMaskRejectionParams(), and GetTypeId().

◆ m_txMaskOuterBandMaximumRejection

dBr_u ns3::SpectrumWifiPhy::m_txMaskOuterBandMaximumRejection
private

The maximum rejection for the outer band of the transmit spectrum mask.

Definition at line 304 of file spectrum-wifi-phy.h.

Referenced by GetTxMaskRejectionParams(), and GetTypeId().

◆ m_txMaskOuterBandMinimumRejection

dBr_u ns3::SpectrumWifiPhy::m_txMaskOuterBandMinimumRejection
private

The minimum rejection for the outer band of the transmit spectrum mask.

Definition at line 302 of file spectrum-wifi-phy.h.

Referenced by GetTxMaskRejectionParams(), and GetTypeId().

◆ m_widthsBeforeSwitch

std::vector<MHz_u> ns3::SpectrumWifiPhy::m_widthsBeforeSwitch
private

channel width before channel switch

Definition at line 295 of file spectrum-wifi-phy.h.

Referenced by DoChannelSwitch(), and FinalizeChannelSwitch().


The documentation for this class was generated from the following files: