A Discrete-Event Network Simulator
API
ht-phy.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2020 Orange Labs
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Rediet <getachew.redieteab@orange.com>
19  * S├ębastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
20  */
21 
22 #ifndef HT_PHY_H
23 #define HT_PHY_H
24 
25 #include "ns3/ofdm-phy.h"
26 
33 namespace ns3 {
34 
38 #define HT_PHY 127
39 
50 class HtPhy : public OfdmPhy
51 {
52 public:
60  HtPhy (uint8_t maxNss = 1, bool buildModeList = true);
64  virtual ~HtPhy ();
65 
66  // Inherited
67  WifiMode GetMcs (uint8_t index) const override;
68  bool IsMcsSupported (uint8_t index) const override;
69  bool HandlesMcsModes (void) const override;
70  virtual WifiMode GetSigMode (WifiPpduField field, const WifiTxVector& txVector) const override;
71  virtual const PpduFormats & GetPpduFormats (void) const override;
72  virtual Time GetDuration (WifiPpduField field, const WifiTxVector& txVector) const override;
73  Time GetPayloadDuration (uint32_t size, const WifiTxVector& txVector, WifiPhyBand band, MpduType mpdutype,
74  bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols,
75  uint16_t staId) const override;
76  virtual Ptr<WifiPpdu> BuildPpdu (const WifiConstPsduMap & psdus, const WifiTxVector& txVector, Time ppduDuration) override;
77 
81  static WifiMode GetLSigMode (void);
85  virtual WifiMode GetHtSigMode (void) const;
86 
90  uint8_t GetBssMembershipSelector (void) const;
91 
98  uint8_t GetMaxSupportedMcsIndexPerSs (void) const;
107  void SetMaxSupportedMcsIndexPerSs (uint8_t maxIndex);
114  void SetMaxSupportedNss (uint8_t maxNss);
115 
122  virtual Time GetLSigDuration (WifiPreamble preamble) const;
131  virtual Time GetTrainingDuration (const WifiTxVector& txVector,
132  uint8_t nDataLtf, uint8_t nExtensionLtf = 0) const;
136  virtual Time GetHtSigDuration (void) const;
137 
141  static void InitializeModes (void);
149  static WifiMode GetHtMcs (uint8_t index);
150 
156  static WifiMode GetHtMcs0 (void);
162  static WifiMode GetHtMcs1 (void);
168  static WifiMode GetHtMcs2 (void);
174  static WifiMode GetHtMcs3 (void);
180  static WifiMode GetHtMcs4 (void);
186  static WifiMode GetHtMcs5 (void);
192  static WifiMode GetHtMcs6 (void);
198  static WifiMode GetHtMcs7 (void);
204  static WifiMode GetHtMcs8 (void);
210  static WifiMode GetHtMcs9 (void);
216  static WifiMode GetHtMcs10 (void);
222  static WifiMode GetHtMcs11 (void);
228  static WifiMode GetHtMcs12 (void);
234  static WifiMode GetHtMcs13 (void);
240  static WifiMode GetHtMcs14 (void);
246  static WifiMode GetHtMcs15 (void);
252  static WifiMode GetHtMcs16 (void);
258  static WifiMode GetHtMcs17 (void);
264  static WifiMode GetHtMcs18 (void);
270  static WifiMode GetHtMcs19 (void);
276  static WifiMode GetHtMcs20 (void);
282  static WifiMode GetHtMcs21 (void);
288  static WifiMode GetHtMcs22 (void);
294  static WifiMode GetHtMcs23 (void);
300  static WifiMode GetHtMcs24 (void);
306  static WifiMode GetHtMcs25 (void);
312  static WifiMode GetHtMcs26 (void);
318  static WifiMode GetHtMcs27 (void);
324  static WifiMode GetHtMcs28 (void);
330  static WifiMode GetHtMcs29 (void);
336  static WifiMode GetHtMcs30 (void);
342  static WifiMode GetHtMcs31 (void);
343 
353  static WifiCodeRate GetHtCodeRate (uint8_t mcsValue);
363  static WifiCodeRate GetCodeRate (uint8_t mcsValue);
371  static uint16_t GetHtConstellationSize (uint8_t mcsValue);
381  static uint16_t GetConstellationSize (uint8_t mcsValue);
395  static uint64_t GetPhyRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
406  static uint64_t GetPhyRateFromTxVector (const WifiTxVector& txVector, uint16_t staId);
417  static uint64_t GetDataRateFromTxVector (const WifiTxVector& txVector, uint16_t staId);
430  static uint64_t GetDataRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
439  static uint64_t GetNonHtReferenceRate (uint8_t mcsValue);
449  static bool IsModeAllowed (uint16_t channelWidth, uint8_t nss);
450 
451 protected:
452  // Inherited
453  virtual PhyFieldRxStatus DoEndReceiveField (WifiPpduField field, Ptr<Event> event) override;
454  virtual bool IsAllConfigSupported (WifiPpduField field, Ptr<const WifiPpdu> ppdu) const override;
455  virtual bool IsConfigSupported (Ptr<const WifiPpdu> ppdu) const override;
456  virtual Ptr<SpectrumValue> GetTxPowerSpectralDensity (double txPowerW, Ptr<const WifiPpdu> ppdu) const override;
457 
464  virtual void BuildModeList (void);
465 
470  virtual uint8_t GetNumberBccEncoders (const WifiTxVector& txVector) const;
475  virtual Time GetSymbolDuration (const WifiTxVector& txVector) const;
476 
485  static uint64_t CalculatePhyRate (WifiCodeRate codeRate, uint64_t dataRate);
499  static uint64_t CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize);
506  static double GetCodeRatio (WifiCodeRate codeRate);
519  static uint64_t CalculateDataRate (double symbolDuration, uint16_t guardInterval,
520  uint16_t usableSubCarriers, uint16_t numberOfBitsPerSubcarrier,
521  double codingRate, uint8_t nss);
526  static uint16_t GetUsableSubcarriers (uint16_t channelWidth);
527 
534  virtual uint32_t GetMaxPsduSize (void) const override;
535 
539 
540 private:
549 
558  static WifiMode CreateHtMcs (uint8_t index);
559 
561 
563 }; //class HtPhy
564 
565 } //namespace ns3
566 
567 #endif /* HT_PHY_H */
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
static WifiMode GetHtMcs2(void)
Return MCS 2 from HT MCS values.
static WifiMode GetHtMcs8(void)
Return MCS 8 from HT MCS values.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
static void InitializeModes(void)
Initialize all HT modes.
Definition: ht-phy.cc:447
static uint64_t GetNonHtReferenceRate(uint8_t mcsValue)
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HT MCS index...
Definition: ht-phy.cc:690
static uint64_t CalculateDataRate(double symbolDuration, uint16_t guardInterval, uint16_t usableSubCarriers, uint16_t numberOfBitsPerSubcarrier, double codingRate, uint8_t nss)
Calculates data rate from the supplied parameters.
Definition: ht-phy.cc:674
virtual Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition: ht-phy.cc:357
uint8_t GetMaxSupportedMcsIndexPerSs(void) const
Set the maximum supported MCS index per spatial stream.
Definition: ht-phy.cc:178
static uint64_t CalculatePhyRate(WifiCodeRate codeRate, uint64_t dataRate)
Return the PHY rate corresponding to the supplied code rate and data rate.
Definition: ht-phy.cc:627
static WifiMode GetHtMcs5(void)
Return MCS 5 from HT MCS values.
static WifiMode GetHtMcs25(void)
Return MCS 25 from HT MCS values.
static const PpduFormats m_htPpduFormats
HT PPDU formats.
Definition: ht-phy.h:562
static WifiMode GetHtMcs22(void)
Return MCS 22 from HT MCS values.
virtual uint8_t GetNumberBccEncoders(const WifiTxVector &txVector) const
Definition: ht-phy.cc:335
static uint64_t GetPhyRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the PHY rate corresponding to the supplied TXVECTOR.
Definition: ht-phy.cc:633
static WifiCodeRate GetHtCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied HT MCS index.
Definition: ht-phy.cc:563
static WifiMode GetHtMcs4(void)
Return MCS 4 from HT MCS values.
void SetMaxSupportedNss(uint8_t maxNss)
Configure the maximum number of spatial streams supported by this HT PHY.
Definition: ht-phy.cc:184
static WifiMode GetHtMcs0(void)
Return MCS 0 from HT MCS values.
static WifiMode GetHtMcs13(void)
Return MCS 13 from HT MCS values.
static WifiMode GetHtMcs10(void)
Return MCS 10 from HT MCS values.
static WifiMode GetHtMcs14(void)
Return MCS 14 from HT MCS values.
static WifiMode GetHtMcs6(void)
Return MCS 6 from HT MCS values.
static WifiMode GetHtMcs3(void)
Return MCS 3 from HT MCS values.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:47
static WifiMode GetHtMcs31(void)
Return MCS 31 from HT MCS values.
static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize)
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and...
Definition: ht-phy.cc:698
MpduType
The type of an MPDU.
static WifiMode GetHtMcs20(void)
Return MCS 20 from HT MCS values.
virtual bool IsAllConfigSupported(WifiPpduField field, Ptr< const WifiPpdu > ppdu) const override
Checks if the signaled configuration (including bandwidth) is supported by the PHY.
Definition: ht-phy.cc:407
Time GetPayloadDuration(uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override
Definition: ht-phy.cc:261
uint8_t m_maxSupportedNss
Maximum supported number of spatial streams (used to build HT MCS indices)
Definition: ht-phy.h:560
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
PHY entity for HT (11n)HT PHY is based on OFDM PHY.
Definition: ht-phy.h:50
virtual Time GetTrainingDuration(const WifiTxVector &txVector, uint8_t nDataLtf, uint8_t nExtensionLtf=0) const
Definition: ht-phy.cc:245
virtual WifiMode GetHtSigMode(void) const
Definition: ht-phy.cc:152
virtual Time GetLSigDuration(WifiPreamble preamble) const
Definition: ht-phy.cc:239
static WifiMode GetHtMcs27(void)
Return MCS 27 from HT MCS values.
Status of the reception of the PPDU field.
Definition: phy-entity.h:110
virtual ~HtPhy()
Destructor for HT PHY.
Definition: ht-phy.cc:63
HtPhy(uint8_t maxNss=1, bool buildModeList=true)
Constructor for HT PHY.
Definition: ht-phy.cc:48
static bool IsModeAllowed(uint16_t channelWidth, uint8_t nss)
Check whether the combination of <MCS, channel width, NSS> is allowed.
Definition: ht-phy.cc:766
static WifiMode GetHtMcs24(void)
Return MCS 24 from HT MCS values.
virtual Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const override
Definition: ht-phy.cc:434
virtual void BuildModeList(void)
Build mode list.
Definition: ht-phy.cc:69
PhyFieldRxStatus EndReceiveHtSig(Ptr< Event > event)
End receiving the HT-SIG, perform HT-specific actions, and provide the status of the reception...
Definition: ht-phy.cc:382
virtual Time GetSymbolDuration(const WifiTxVector &txVector) const
Definition: ht-phy.cc:349
WifiPpduField
The type of PPDU field (grouped for convenience)
bool IsMcsSupported(uint8_t index) const override
Check if the WifiMode corresponding to the given MCS index is supported.
Definition: ht-phy.cc:105
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const override
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Definition: ht-phy.cc:417
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the data rate corresponding to the supplied TXVECTOR.
Definition: ht-phy.cc:654
uint8_t m_maxMcsIndexPerSs
the maximum MCS index per spatial stream as defined by the standard
Definition: ht-phy.h:536
static WifiMode GetHtMcs19(void)
Return MCS 19 from HT MCS values.
virtual Time GetHtSigDuration(void) const
Definition: ht-phy.cc:255
virtual 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 transmissio...
Definition: ht-phy.cc:199
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
static WifiMode GetHtMcs21(void)
Return MCS 21 from HT MCS values.
static WifiMode GetHtMcs12(void)
Return MCS 12 from HT MCS values.
uint8_t GetBssMembershipSelector(void) const
Definition: ht-phy.cc:158
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition: ht-phy.cc:365
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static WifiMode GetHtMcs9(void)
Return MCS 9 from HT MCS values.
static WifiMode GetHtMcs1(void)
Return MCS 1 from HT MCS values.
static WifiMode GetHtMcs11(void)
Return MCS 11 from HT MCS values.
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied HT MCS index between 0 and 7...
Definition: ht-phy.cc:597
static WifiMode GetHtMcs29(void)
Return MCS 29 from HT MCS values.
uint8_t m_maxSupportedMcsIndexPerSs
the maximum supported MCS index per spatial stream
Definition: ht-phy.h:537
bool HandlesMcsModes(void) const override
Check if the WifiModes handled by this PHY are MCSs.
Definition: ht-phy.cc:118
void SetMaxSupportedMcsIndexPerSs(uint8_t maxIndex)
Set the maximum supported MCS index per spatial stream.
Definition: ht-phy.cc:164
static WifiMode CreateHtMcs(uint8_t index)
Return the HT MCS corresponding to the provided index.
Definition: ht-phy.cc:546
static WifiMode GetHtMcs30(void)
Return MCS 30 from HT MCS values.
PHY entity for OFDM (11a)This class is also used for the 10 MHz and 5 MHz bandwidth variants addressi...
Definition: ofdm-phy.h:60
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied HT MCS index between 0 and 7, since HT MCS index > 8 is used for higher NSS.
Definition: ht-phy.cc:569
static WifiMode GetHtMcs26(void)
Return MCS 26 from HT MCS values.
static double GetCodeRatio(WifiCodeRate codeRate)
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5.
Definition: ht-phy.cc:642
WifiPhyBand
Identifies the PHY band.
Definition: wifi-phy-band.h:32
virtual uint32_t GetMaxPsduSize(void) const override
Get the maximum PSDU size in bytes (see Table 19-25 HT PHY characteristics of IEEE 802...
Definition: ht-phy.cc:772
static WifiMode GetLSigMode(void)
Definition: ht-phy.cc:146
static uint16_t GetHtConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied HT MCS index.
Definition: ht-phy.cc:591
static WifiMode GetHtMcs23(void)
Return MCS 23 from HT MCS values.
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:499
static WifiMode GetHtMcs7(void)
Return MCS 7 from HT MCS values.
static WifiMode GetHtMcs17(void)
Return MCS 17 from HT MCS values.
virtual const PpduFormats & GetPpduFormats(void) const override
Return the PPDU formats of the PHY.
Definition: ht-phy.cc:124
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition: ht-phy.cc:130
static uint64_t GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the data rate corresponding to the supplied HT MCS index, channel width, guard interval...
Definition: ht-phy.cc:663
static WifiMode GetHtMcs15(void)
Return MCS 15 from HT MCS values.
static WifiMode GetHtMcs28(void)
Return MCS 28 from HT MCS values.
uint8_t m_bssMembershipSelector
the BSS membership selector
Definition: ht-phy.h:538
static WifiMode GetHtMcs16(void)
Return MCS 16 from HT MCS values.
static WifiMode GetHtMcs18(void)
Return MCS 18 from HT MCS values.
static uint64_t GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the PHY rate corresponding to the supplied HT MCS index, channel width, guard interval...
Definition: ht-phy.cc:619
static uint16_t GetUsableSubcarriers(uint16_t channelWidth)
Definition: ht-phy.cc:684
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
WifiMode GetMcs(uint8_t index) const override
Get the WifiMode corresponding to the given MCS index.
Definition: ht-phy.cc:89
static WifiMode GetHtMcs(uint8_t index)
Return the HT MCS corresponding to the provided index.
Definition: ht-phy.cc:456