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

#include <Ieee80211OfdmDemodulator.h>

Inheritance diagram for inet::physicallayer::Ieee80211OfdmDemodulator:
inet::physicallayer::IDemodulator inet::IPrintableObject

Public Member Functions

 Ieee80211OfdmDemodulator (const Ieee80211OfdmModulation *subcarrierModulation)
 
const Ieee80211OfdmModulationgetModulation () const
 
virtual const IReceptionBitModeldemodulate (const IReceptionSymbolModel *symbolModel) const override
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
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
 

Protected Member Functions

BitVector demodulateSymbol (const Ieee80211OfdmSymbol *signalSymbol) const
 
const IReceptionBitModelcreateBitModel (const BitVector *bitRepresentation, int signalFieldBitLength, bps signalFieldBitRate, int dataFieldBitLength, bps dataFieldBitRate) const
 
bool isPilotOrDcSubcarrier (int i) const
 

Protected Attributes

const Ieee80211OfdmModulationsubcarrierModulation = nullptr
 

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) }
 

Constructor & Destructor Documentation

◆ Ieee80211OfdmDemodulator()

inet::physicallayer::Ieee80211OfdmDemodulator::Ieee80211OfdmDemodulator ( const Ieee80211OfdmModulation subcarrierModulation)
20  :
22 {
23 }

Member Function Documentation

◆ createBitModel()

const IReceptionBitModel * inet::physicallayer::Ieee80211OfdmDemodulator::createBitModel ( const BitVector bitRepresentation,
int  signalFieldBitLength,
bps  signalFieldBitRate,
int  dataFieldBitLength,
bps  dataFieldBitRate 
) const
protected
51 {
52  return new ReceptionBitModel(b(signalFieldLength), signalFieldBitRate, b(dataFieldLength), dataFieldBitRate, bitRepresentation, NaN);
53 }

Referenced by demodulate().

◆ demodulate()

const IReceptionBitModel * inet::physicallayer::Ieee80211OfdmDemodulator::demodulate ( const IReceptionSymbolModel symbolModel) const
overridevirtual

Implements inet::physicallayer::IDemodulator.

61 {
62  const std::vector<const ISymbol *> *symbols = symbolModel->getSymbols();
63  BitVector *bitRepresentation = new BitVector();
64  for (auto& symbols_i : *symbols) {
65  const Ieee80211OfdmSymbol *symbol = dynamic_cast<const Ieee80211OfdmSymbol *>(symbols_i);
66  BitVector bits = demodulateSymbol(symbol);
67  for (unsigned int j = 0; j < bits.getSize(); j++)
68  bitRepresentation->appendBit(bits.getBit(j));
69  }
70  return createBitModel(bitRepresentation, -1, bps(NaN), -1, bps(NaN)); // TODO
71 }

Referenced by inet::physicallayer::Ieee80211LayeredOfdmReceiver::createDataFieldBitModel(), inet::physicallayer::Ieee80211LayeredOfdmReceiver::createSignalFieldBitModel(), and inet::physicallayer::Ieee80211OfdmDemodulatorModule::demodulate().

◆ demodulateSymbol()

BitVector inet::physicallayer::Ieee80211OfdmDemodulator::demodulateSymbol ( const Ieee80211OfdmSymbol signalSymbol) const
protected
34 {
35  std::vector<const ApskSymbol *> apskSymbols = signalSymbol->getSubCarrierSymbols();
36  const ApskModulationBase *demodulationScheme = subcarrierModulation->getSubcarrierModulation();
37  BitVector field;
38  for (unsigned int i = 0; i < apskSymbols.size(); i++) {
39  if (!isPilotOrDcSubcarrier(i)) {
40  const ApskSymbol *apskSymbol = apskSymbols.at(i);
41  ShortBitVector bits = demodulationScheme->demapToBitRepresentation(apskSymbol);
42  for (unsigned int j = 0; j < bits.getSize(); j++)
43  field.appendBit(bits.getBit(j));
44  }
45  }
46  EV_DEBUG << "The field symbols has been demodulated into the following bit stream: " << field << endl;
47  return field;
48 }

Referenced by demodulate().

◆ getModulation()

◆ isPilotOrDcSubcarrier()

bool inet::physicallayer::Ieee80211OfdmDemodulator::isPilotOrDcSubcarrier ( int  i) const
protected
56 {
57  return i == 5 || i == 19 || i == 33 || i == 47 || i == 26; // pilots are: 5,19,33,47, 26 (0+26) is a dc subcarrier
58 }

Referenced by demodulateSymbol().

◆ printToStream()

std::ostream & inet::physicallayer::Ieee80211OfdmDemodulator::printToStream ( std::ostream &  stream,
int  level,
int  evFlags = 0 
) const
overridevirtual

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

26 {
27  stream << "Ieee80211OfdmDemodulator";
28  if (level <= PRINT_LEVEL_TRACE)
30  return stream;
31 }

Referenced by inet::physicallayer::Ieee80211OfdmDemodulatorModule::printToStream().

Member Data Documentation

◆ subcarrierModulation

const Ieee80211OfdmModulation* inet::physicallayer::Ieee80211OfdmDemodulator::subcarrierModulation = nullptr
protected

Referenced by demodulateSymbol(), and printToStream().


The documentation for this class was generated from the following files:
inet::physicallayer::Ieee80211OfdmDemodulator::demodulateSymbol
BitVector demodulateSymbol(const Ieee80211OfdmSymbol *signalSymbol) const
Definition: Ieee80211OfdmDemodulator.cc:33
inet::physicallayer::Ieee80211OfdmDemodulator::createBitModel
const IReceptionBitModel * createBitModel(const BitVector *bitRepresentation, int signalFieldBitLength, bps signalFieldBitRate, int dataFieldBitLength, bps dataFieldBitRate) const
Definition: Ieee80211OfdmDemodulator.cc:50
inet::units::units::bps
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
inet::physicallayer::Ieee80211OfdmDemodulator::isPilotOrDcSubcarrier
bool isPilotOrDcSubcarrier(int i) const
Definition: Ieee80211OfdmDemodulator.cc:55
inet::physicallayer::ApskModulationBase::demapToBitRepresentation
virtual ShortBitVector demapToBitRepresentation(const ApskSymbol *symbol) const
Definition: ApskModulationBase.cc:70
inet::printFieldToString
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::ShortBitVector::appendBit
void appendBit(bool value)
Definition: ShortBitVector.h:56
inet::physicallayer::Ieee80211OfdmDemodulator::subcarrierModulation
const Ieee80211OfdmModulation * subcarrierModulation
Definition: Ieee80211OfdmDemodulator.h:26
NaN
#define NaN
Definition: INETMath.h:91
inet::physicallayer::Ieee80211OfdmModulation::getSubcarrierModulation
const ApskModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OfdmModulation.h:24
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::evFlags
int evFlags
Definition: INETDefs.cc:12