INET Framework for OMNeT++/OMNEST
inet::physicallayer::Ieee80211HtDataMode Class Reference

#include <Ieee80211HtMode.h>

Inheritance diagram for inet::physicallayer::Ieee80211HtDataMode:
inet::physicallayer::IIeee80211DataMode inet::physicallayer::Ieee80211HtModeBase inet::physicallayer::Ieee80211HtTimingRelatedParametersBase inet::IPrintableObject

Public Member Functions

 Ieee80211HtDataMode (const Ieee80211Htmcs *modulationAndCodingScheme, const Hz bandwidth, GuardIntervalType guardIntervalType)
 
b getServiceFieldLength () const
 
b getTailFieldLength () const
 
virtual Hz getBandwidth () const override
 
virtual int getNumberOfSpatialStreams () const override
 
virtual b getPaddingLength (b dataLength) const override
 
virtual b getCompleteLength (b dataLength) const override
 
virtual const simtime_t getDuration (b dataLength) const override
 
virtual bps getNetBitrate () const override
 
virtual bps getGrossBitrate () const override
 
virtual const Ieee80211HtmcsgetModulationAndCodingScheme () const
 
virtual const Ieee80211HtCodegetCode () const
 
virtual const Ieee80211OfdmModulationgetModulation () const override
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const
 Prints this object to the provided output stream. More...
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 
- Public Member Functions inherited from inet::physicallayer::Ieee80211HtModeBase
 Ieee80211HtModeBase (unsigned int modulationAndCodingScheme, unsigned int numberOfSpatialStreams, const Hz bandwidth, GuardIntervalType guardIntervalType)
 
virtual int getNumberOfDataSubcarriers () const
 
virtual int getNumberOfPilotSubcarriers () const
 
virtual int getNumberOfTotalSubcarriers () const
 
virtual GuardIntervalType getGuardIntervalType () const
 
virtual unsigned int getMcsIndex () const
 

Protected Member Functions

bps computeGrossBitrate () const override
 
bps computeNetBitrate () const override
 
unsigned int computeNumberOfSpatialStreams (const Ieee80211OfdmModulation *stream1Modulation, const Ieee80211OfdmModulation *stream2Modulation, const Ieee80211OfdmModulation *stream3Modulation, const Ieee80211OfdmModulation *stream4Modulation) const
 
unsigned int computeNumberOfCodedBitsPerSubcarrierSum () const
 
unsigned int computeNumberOfBccEncoders () const
 

Protected Attributes

const Ieee80211HtmcsmodulationAndCodingScheme
 
const unsigned int numberOfBccEncoders
 
- Protected Attributes inherited from inet::physicallayer::Ieee80211HtModeBase
const Hz bandwidth
 
const GuardIntervalType guardIntervalType
 
const unsigned int mcsIndex
 
const unsigned int numberOfSpatialStreams
 
bps netBitrate
 
bps grossBitrate
 

Additional Inherited Members

- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 
- Public Types inherited from inet::physicallayer::Ieee80211HtModeBase
enum  GuardIntervalType { HT_GUARD_INTERVAL_SHORT, HT_GUARD_INTERVAL_LONG }
 

Constructor & Destructor Documentation

◆ Ieee80211HtDataMode()

Member Function Documentation

◆ computeGrossBitrate()

bps inet::physicallayer::Ieee80211HtDataMode::computeGrossBitrate ( ) const
overrideprotectedvirtual

Implements inet::physicallayer::Ieee80211HtModeBase.

195 {
196  unsigned int numberOfCodedBitsPerSubcarrierSum = computeNumberOfCodedBitsPerSubcarrierSum();
197  unsigned int numberOfCodedBitsPerSymbol = numberOfCodedBitsPerSubcarrierSum * getNumberOfDataSubcarriers();
199  return bps(numberOfCodedBitsPerSymbol / getSymbolInterval());
201  return bps(numberOfCodedBitsPerSymbol / getShortGISymbolInterval());
202  else
203  throw cRuntimeError("Unknown guard interval type");
204 }

◆ computeNetBitrate()

bps inet::physicallayer::Ieee80211HtDataMode::computeNetBitrate ( ) const
overrideprotectedvirtual

◆ computeNumberOfBccEncoders()

unsigned int inet::physicallayer::Ieee80211HtDataMode::computeNumberOfBccEncoders ( ) const
protected
268 {
269  // When the BCC FEC encoder is used, a single encoder is used, except that two encoders
270  // are used when the selected MCS has a PHY rate greater than 300 Mb/s (see 20.6).
271  return getGrossBitrate() > Mbps(300) ? 2 : 1;
272 }

◆ computeNumberOfCodedBitsPerSubcarrierSum()

◆ computeNumberOfSpatialStreams()

unsigned int inet::physicallayer::Ieee80211HtDataMode::computeNumberOfSpatialStreams ( const Ieee80211OfdmModulation stream1Modulation,
const Ieee80211OfdmModulation stream2Modulation,
const Ieee80211OfdmModulation stream3Modulation,
const Ieee80211OfdmModulation stream4Modulation 
) const
protected
254 {
255  return (stream1Modulation ? 1 : 0) + (stream2Modulation ? 1 : 0) +
256  (stream3Modulation ? 1 : 0) + (stream4Modulation ? 1 : 0);
257 }

◆ getBandwidth()

virtual Hz inet::physicallayer::Ieee80211HtDataMode::getBandwidth ( ) const
inlineoverridevirtual

Reimplemented from inet::physicallayer::Ieee80211HtModeBase.

207 { return bandwidth; }

◆ getCode()

virtual const Ieee80211HtCode* inet::physicallayer::Ieee80211HtDataMode::getCode ( ) const
inlinevirtual
215 { return modulationAndCodingScheme->getCode(); }

Referenced by computeNetBitrate(), and getDuration().

◆ getCompleteLength()

b inet::physicallayer::Ieee80211HtDataMode::getCompleteLength ( b  dataLength) const
overridevirtual

Implements inet::physicallayer::IIeee80211DataMode.

249 {
250  return getServiceFieldLength() + getTailFieldLength() + dataLength; // TODO padding?
251 }

Referenced by getDuration().

◆ getDuration()

const simtime_t inet::physicallayer::Ieee80211HtDataMode::getDuration ( b  dataLength) const
overridevirtual

Implements inet::physicallayer::IIeee80211DataMode.

275 {
276  unsigned int numberOfCodedBitsPerSubcarrierSum = computeNumberOfCodedBitsPerSubcarrierSum();
277  unsigned int numberOfCodedBitsPerSymbol = numberOfCodedBitsPerSubcarrierSum * getNumberOfDataSubcarriers();
278  const IForwardErrorCorrection *forwardErrorCorrection = getCode() ? getCode()->getForwardErrorCorrection() : nullptr;
279  unsigned int dataBitsPerSymbol = forwardErrorCorrection ? forwardErrorCorrection->getDecodedLength(numberOfCodedBitsPerSymbol) : numberOfCodedBitsPerSymbol;
280  int numberOfSymbols = lrint(ceil((double)getCompleteLength(dataLength).get() / dataBitsPerSymbol)); // TODO getBitLength(dataLength) should be divisible by dataBitsPerSymbol
281  return numberOfSymbols * getSymbolInterval();
282 }

Referenced by inet::physicallayer::Ieee80211HtMode::getDuration().

◆ getGrossBitrate()

virtual bps inet::physicallayer::Ieee80211HtDataMode::getGrossBitrate ( ) const
inlineoverridevirtual

◆ getModulation()

virtual const Ieee80211OfdmModulation* inet::physicallayer::Ieee80211HtDataMode::getModulation ( ) const
inlineoverridevirtual

◆ getModulationAndCodingScheme()

virtual const Ieee80211Htmcs* inet::physicallayer::Ieee80211HtDataMode::getModulationAndCodingScheme ( ) const
inlinevirtual
214 { return modulationAndCodingScheme; }

◆ getNetBitrate()

virtual bps inet::physicallayer::Ieee80211HtDataMode::getNetBitrate ( ) const
inlineoverridevirtual

◆ getNumberOfSpatialStreams()

virtual int inet::physicallayer::Ieee80211HtDataMode::getNumberOfSpatialStreams ( ) const
inlineoverridevirtual

◆ getPaddingLength()

virtual b inet::physicallayer::Ieee80211HtDataMode::getPaddingLength ( b  dataLength) const
inlineoverridevirtual

Implements inet::physicallayer::IIeee80211DataMode.

209 { return b(0); }

◆ getServiceFieldLength()

b inet::physicallayer::Ieee80211HtDataMode::getServiceFieldLength ( ) const
inline
204 { return b(16); }

Referenced by getCompleteLength().

◆ getTailFieldLength()

b inet::physicallayer::Ieee80211HtDataMode::getTailFieldLength ( ) const
inline
205 { return b(6) * numberOfBccEncoders; }

Referenced by getCompleteLength().

Member Data Documentation

◆ modulationAndCodingScheme

const Ieee80211Htmcs* inet::physicallayer::Ieee80211HtDataMode::modulationAndCodingScheme
protected

◆ numberOfBccEncoders

const unsigned int inet::physicallayer::Ieee80211HtDataMode::numberOfBccEncoders
protected

The documentation for this class was generated from the following files:
inet::units::units::Mbps
mega< bps >::type Mbps
Definition: Units.h:1171
inet::physicallayer::Ieee80211HtDataMode::computeNumberOfCodedBitsPerSubcarrierSum
unsigned int computeNumberOfCodedBitsPerSubcarrierSum() const
Definition: Ieee80211HtMode.cc:259
inet::physicallayer::Ieee80211HtModeBase::HT_GUARD_INTERVAL_LONG
@ HT_GUARD_INTERVAL_LONG
Definition: Ieee80211HtMode.h:36
inet::physicallayer::Ieee80211HtDataMode::getTailFieldLength
b getTailFieldLength() const
Definition: Ieee80211HtMode.h:205
inet::physicallayer::ApskModulationBase::getCodeWordSize
virtual unsigned int getCodeWordSize() const override
Definition: ApskModulationBase.h:37
inet::physicallayer::Ieee80211HtModeBase::guardIntervalType
const GuardIntervalType guardIntervalType
Definition: Ieee80211HtMode.h:41
inet::physicallayer::Ieee80211Htmcs::getStreamExtension3Modulation
virtual const Ieee80211OfdmModulation * getStreamExtension3Modulation() const
Definition: Ieee80211HtMode.h:184
inet::units::units::bps
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
inet::physicallayer::Ieee80211HtDataMode::computeNumberOfSpatialStreams
unsigned int computeNumberOfSpatialStreams(const Ieee80211OfdmModulation *stream1Modulation, const Ieee80211OfdmModulation *stream2Modulation, const Ieee80211OfdmModulation *stream3Modulation, const Ieee80211OfdmModulation *stream4Modulation) const
Definition: Ieee80211HtMode.cc:253
inet::physicallayer::Ieee80211HtDataMode::getGrossBitrate
virtual bps getGrossBitrate() const override
Definition: Ieee80211HtMode.h:213
inet::physicallayer::Ieee80211HtCode::getForwardErrorCorrection
const Ieee80211ConvolutionalCode * getForwardErrorCorrection() const
Definition: Ieee80211HtCode.h:30
inet::physicallayer::ConvolutionalCode::getCodeRate
virtual double getCodeRate() const override
Definition: ConvolutionalCode.cc:38
inet::physicallayer::Ieee80211Htmcs::getStreamExtension1Modulation
virtual const Ieee80211OfdmModulation * getStreamExtension1Modulation() const
Definition: Ieee80211HtMode.h:182
inet::physicallayer::Ieee80211Htmcs::getStreamExtension2Modulation
virtual const Ieee80211OfdmModulation * getStreamExtension2Modulation() const
Definition: Ieee80211HtMode.h:183
inet::physicallayer::Ieee80211HtDataMode::getCode
virtual const Ieee80211HtCode * getCode() const
Definition: Ieee80211HtMode.h:215
inet::physicallayer::Ieee80211Htmcs::getMcsIndex
unsigned int getMcsIndex() const
Definition: Ieee80211HtMode.h:180
inet::physicallayer::Ieee80211HtDataMode::getServiceFieldLength
b getServiceFieldLength() const
Definition: Ieee80211HtMode.h:204
inet::physicallayer::Ieee80211Htmcs::getCode
const Ieee80211HtCode * getCode() const
Definition: Ieee80211HtMode.h:179
inet::physicallayer::Ieee80211HtModeBase::bandwidth
const Hz bandwidth
Definition: Ieee80211HtMode.h:40
inet::physicallayer::Ieee80211HtModeBase::getGrossBitrate
virtual bps getGrossBitrate() const
Definition: Ieee80211HtMode.cc:218
inet::physicallayer::Ieee80211HtDataMode::numberOfBccEncoders
const unsigned int numberOfBccEncoders
Definition: Ieee80211HtMode.h:192
inet::physicallayer::ConvolutionalCode::getDecodedLength
virtual int getDecodedLength(int encodedLength) const override
Definition: ConvolutionalCode.cc:49
inet::physicallayer::Ieee80211OfdmModulation::getSubcarrierModulation
const ApskModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OfdmModulation.h:24
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::physicallayer::Ieee80211HtModeBase::HT_GUARD_INTERVAL_SHORT
@ HT_GUARD_INTERVAL_SHORT
Definition: Ieee80211HtMode.h:35
inet::physicallayer::Ieee80211HtModeBase::getNetBitrate
virtual bps getNetBitrate() const
Definition: Ieee80211HtMode.cc:211
inet::physicallayer::Ieee80211HtDataMode::getCompleteLength
virtual b getCompleteLength(b dataLength) const override
Definition: Ieee80211HtMode.cc:248
inet::physicallayer::Ieee80211HtModeBase::Ieee80211HtModeBase
Ieee80211HtModeBase(unsigned int modulationAndCodingScheme, unsigned int numberOfSpatialStreams, const Hz bandwidth, GuardIntervalType guardIntervalType)
Definition: Ieee80211HtMode.cc:28
inet::physicallayer::Ieee80211Htmcs::getModulation
virtual const Ieee80211OfdmModulation * getModulation() const
Definition: Ieee80211HtMode.h:181
inet::physicallayer::Ieee80211HtModeBase::getNumberOfSpatialStreams
virtual int getNumberOfSpatialStreams() const
Definition: Ieee80211HtMode.h:59
inet::physicallayer::Ieee80211HtDataMode::computeNumberOfBccEncoders
unsigned int computeNumberOfBccEncoders() const
Definition: Ieee80211HtMode.cc:267
inet::physicallayer::Ieee80211HtModeBase::getNumberOfDataSubcarriers
virtual int getNumberOfDataSubcarriers() const
Definition: Ieee80211HtMode.cc:225
inet::physicallayer::Ieee80211HtDataMode::modulationAndCodingScheme
const Ieee80211Htmcs * modulationAndCodingScheme
Definition: Ieee80211HtMode.h:191