A Discrete-Event Network Simulator
API
vht-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 VHT_PHY_H
23 #define VHT_PHY_H
24 
25 #include "ns3/ht-phy.h"
26 
33 namespace ns3 {
34 
38 #define VHT_PHY 126
39 
48 class VhtPhy : public HtPhy
49 {
50 public:
57  VhtPhy (bool buildModeList = true);
61  virtual ~VhtPhy ();
62 
63  WifiMode GetSigMode (WifiPpduField field, const WifiTxVector& txVector) const override;
64  const PpduFormats & GetPpduFormats (void) const override;
65  Time GetDuration (WifiPpduField field, const WifiTxVector& txVector) const override;
66  Time GetLSigDuration (WifiPreamble preamble) const override;
67  Time GetTrainingDuration (const WifiTxVector& txVector,
68  uint8_t nDataLtf,
69  uint8_t nExtensionLtf = 0) const override;
71  const WifiTxVector& txVector,
72  Time ppduDuration) override;
73 
77  virtual WifiMode GetSigAMode (void) const;
82  virtual WifiMode GetSigBMode (const WifiTxVector& txVector) const;
83 
88  virtual Time GetSigADuration (WifiPreamble preamble) const;
93  virtual Time GetSigBDuration (const WifiTxVector& txVector) const;
94 
98  static void InitializeModes (void);
106  static WifiMode GetVhtMcs (uint8_t index);
107 
113  static WifiMode GetVhtMcs0 (void);
119  static WifiMode GetVhtMcs1 (void);
125  static WifiMode GetVhtMcs2 (void);
131  static WifiMode GetVhtMcs3 (void);
137  static WifiMode GetVhtMcs4 (void);
143  static WifiMode GetVhtMcs5 (void);
149  static WifiMode GetVhtMcs6 (void);
155  static WifiMode GetVhtMcs7 (void);
161  static WifiMode GetVhtMcs8 (void);
167  static WifiMode GetVhtMcs9 (void);
168 
178  static WifiCodeRate GetCodeRate (uint8_t mcsValue);
188  static uint16_t GetConstellationSize (uint8_t mcsValue);
202  static uint64_t GetPhyRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
213  static uint64_t GetPhyRateFromTxVector (const WifiTxVector& txVector, uint16_t staId);
224  static uint64_t GetDataRateFromTxVector (const WifiTxVector& txVector, uint16_t staId);
237  static uint64_t GetDataRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
246  static uint64_t GetNonHtReferenceRate (uint8_t mcsValue);
256  static bool IsModeAllowed (uint8_t mcsValue, uint16_t channelWidth, uint8_t nss);
257 
258 protected:
259  WifiMode GetHtSigMode (void) const override;
260  Time GetHtSigDuration (void) const override;
261  uint8_t GetNumberBccEncoders (const WifiTxVector& txVector) const override;
263  bool IsAllConfigSupported (WifiPpduField field, Ptr<const WifiPpdu> ppdu) const override;
264  uint32_t GetMaxPsduSize (void) const override;
265 
288 
307 
321  static uint64_t CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize);
326  static uint16_t GetUsableSubcarriers (uint16_t channelWidth);
327 
328 private:
329  void BuildModeList (void) override;
330 
339  static WifiMode CreateVhtMcs (uint8_t index);
340 
344  typedef std::map< std::tuple<uint16_t /* channelWidth in MHz */,
345  uint8_t /* Nss */,
346  uint8_t /* MCS index */>, uint8_t /* Nes */ > NesExceptionMap;
349 }; //class VhtPhy
350 
351 } //namespace ns3
352 
353 #endif /* VHT_PHY_H */
uint8_t GetNumberBccEncoders(const WifiTxVector &txVector) const override
Definition: vht-phy.cc:192
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
uint32_t GetMaxPsduSize(void) const override
Get the maximum PSDU size in bytes.
Definition: vht-phy.cc:514
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
static WifiMode GetVhtMcs(uint8_t index)
Return the VHT MCS corresponding to the provided index.
Definition: vht-phy.cc:328
static WifiMode GetVhtMcs5(void)
Return MCS 5 from VHT MCS values.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
virtual WifiMode GetSigAMode(void) const
Definition: vht-phy.cc:132
WifiMode GetHtSigMode(void) const override
Definition: vht-phy.cc:124
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied VHT MCS index.
Definition: vht-phy.cc:391
static const NesExceptionMap m_exceptionsMap
exception map for number of BCC encoders (extracted from VHT-MCS tables)
Definition: vht-phy.h:347
virtual Time GetSigBDuration(const WifiTxVector &txVector) const
Definition: vht-phy.cc:186
static WifiMode GetVhtMcs6(void)
Return MCS 6 from VHT MCS values.
static uint64_t GetNonHtReferenceRate(uint8_t mcsValue)
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied VHT MCS index...
Definition: vht-phy.cc:470
static WifiMode GetVhtMcs8(void)
Return MCS 8 from VHT MCS values.
static WifiMode CreateVhtMcs(uint8_t index)
Return the VHT MCS corresponding to the provided index.
Definition: vht-phy.cc:374
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:47
static WifiMode GetVhtMcs4(void)
Return MCS 4 from VHT MCS values.
static uint64_t GetPhyRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the PHY rate corresponding to the supplied TXVECTOR.
Definition: vht-phy.cc:426
virtual PhyFieldRxStatus ProcessSigA(Ptr< Event > event, PhyFieldRxStatus status)
Process SIG-A, perform amendment-specific actions, and provide an updated status of the reception...
Definition: vht-phy.cc:267
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
static WifiMode GetVhtMcs1(void)
Return MCS 1 from VHT MCS values.
Status of the reception of the PPDU field.
Definition: phy-entity.h:110
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the data rate corresponding to the supplied TXVECTOR.
Definition: vht-phy.cc:435
Time GetTrainingDuration(const WifiTxVector &txVector, uint8_t nDataLtf, uint8_t nExtensionLtf=0) const override
Definition: vht-phy.cc:171
const PpduFormats & GetPpduFormats(void) const override
Return the PPDU formats of the PHY.
Definition: vht-phy.cc:103
static bool IsModeAllowed(uint8_t mcsValue, uint16_t channelWidth, uint8_t nss)
Check whether the combination of <MCS, channel width, NSS> is allowed.
Definition: vht-phy.cc:500
WifiPpduField
The type of PPDU field (grouped for convenience)
static uint64_t GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the PHY rate corresponding to the supplied VHT MCS index, channel width, guard interval...
Definition: vht-phy.cc:418
static uint16_t GetUsableSubcarriers(uint16_t channelWidth)
Definition: vht-phy.cc:456
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
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: vht-phy.cc:478
virtual Time GetSigADuration(WifiPreamble preamble) const
Definition: vht-phy.cc:180
static WifiMode GetVhtMcs9(void)
Return MCS 9 from VHT MCS values.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void BuildModeList(void) override
Build mode list.
Definition: vht-phy.cc:90
static WifiMode GetVhtMcs0(void)
Return MCS 0 from VHT MCS values.
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied VHT MCS index.
Definition: vht-phy.cc:405
Time GetLSigDuration(WifiPreamble preamble) const override
Definition: vht-phy.cc:159
PhyFieldRxStatus EndReceiveSigB(Ptr< Event > event)
End receiving the SIG-B, perform VHT-specific actions, and provide the status of the reception...
Definition: vht-phy.cc:275
bool IsAllConfigSupported(WifiPpduField field, Ptr< const WifiPpdu > ppdu) const override
Checks if the signaled configuration (including bandwidth) is supported by the PHY.
Definition: vht-phy.cc:309
PhyFieldRxStatus EndReceiveSigA(Ptr< Event > event)
End receiving the SIG-A, perform VHT-specific actions, and provide the status of the reception...
Definition: vht-phy.cc:241
virtual PhyFieldRxStatus ProcessSigB(Ptr< Event > event, PhyFieldRxStatus status)
Process SIG-B, perform amendment-specific actions, and provide an updated status of the reception...
Definition: vht-phy.cc:301
static WifiMode GetVhtMcs2(void)
Return MCS 2 from VHT MCS values.
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: vht-phy.cc:226
Time GetHtSigDuration(void) const override
Definition: vht-phy.cc:165
static void InitializeModes(void)
Initialize all VHT modes.
Definition: vht-phy.cc:319
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:477
static const PpduFormats m_vhtPpduFormats
VHT PPDU formats.
Definition: vht-phy.h:348
virtual ~VhtPhy()
Destructor for VHT PHY.
Definition: vht-phy.cc:84
PHY entity for VHT (11ac)VHT PHY is based on HT PHY.
Definition: vht-phy.h:48
static WifiMode GetVhtMcs3(void)
Return MCS 3 from VHT MCS values.
virtual WifiMode GetSigBMode(const WifiTxVector &txVector) const
Definition: vht-phy.cc:138
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition: vht-phy.cc:218
std::map< std::tuple< uint16_t, uint8_t, uint8_t >, uint8_t > NesExceptionMap
Typedef for storing exceptions in the number of BCC encoders for VHT MCSs.
Definition: vht-phy.h:346
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition: vht-phy.cc:109
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: vht-phy.cc:145
VhtPhy(bool buildModeList=true)
Constructor for VHT PHY.
Definition: vht-phy.cc:71
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
static WifiMode GetVhtMcs7(void)
Return MCS 7 from VHT MCS values.
static uint64_t GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the data rate corresponding to the supplied VHT MCS index, channel width, guard interval...
Definition: vht-phy.cc:444