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

#include <Ieee80211OFDMDemodulator.h>

Inheritance diagram for inet::physicallayer::Ieee80211OFDMDemodulator:
inet::physicallayer::IDemodulator inet::physicallayer::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) const override
 Prints this object to the provided output stream. More...
 
- Public Member Functions inherited from inet::physicallayer::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string getInfoStringRepresentation () const
 
virtual std::string getDetailStringRepresentation () const
 
virtual std::string getDebugStringRepresentation () const
 
virtual std::string getTraceStringRepresentation () const
 
virtual std::string getCompleteStringRepresentation () 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::physicallayer::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 

Constructor & Destructor Documentation

inet::physicallayer::Ieee80211OFDMDemodulator::Ieee80211OFDMDemodulator ( const Ieee80211OFDMModulation subcarrierModulation)
30  :
32 {
33 }
const Ieee80211OFDMModulation * subcarrierModulation
Definition: Ieee80211OFDMDemodulator.h:37

Member Function Documentation

const IReceptionBitModel * inet::physicallayer::Ieee80211OFDMDemodulator::createBitModel ( const BitVector bitRepresentation,
int  signalFieldBitLength,
bps  signalFieldBitRate,
int  dataFieldBitLength,
bps  dataFieldBitRate 
) const
protected

Referenced by demodulate().

61 {
62  return new ReceptionBitModel(signalFieldLength, signalFieldBitRate, dataFieldLength, dataFieldBitRate, bitRepresentation);
63 }
const IReceptionBitModel * inet::physicallayer::Ieee80211OFDMDemodulator::demodulate ( const IReceptionSymbolModel symbolModel) const
overridevirtual

Implements inet::physicallayer::IDemodulator.

Referenced by inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSignalFieldBitModel(), and inet::physicallayer::Ieee80211OFDMDemodulatorModule::demodulate().

71 {
72  const std::vector<const ISymbol *> *symbols = symbolModel->getSymbols();
73  BitVector *bitRepresentation = new BitVector();
74  for (auto & symbols_i : *symbols) {
75  const Ieee80211OFDMSymbol *symbol = dynamic_cast<const Ieee80211OFDMSymbol *>(symbols_i);
76  BitVector bits = demodulateSymbol(symbol);
77  for (unsigned int j = 0; j < bits.getSize(); j++)
78  bitRepresentation->appendBit(bits.getBit(j));
79  }
80  return createBitModel(bitRepresentation, -1, bps(NaN), -1, bps(NaN)); // TODO:
81 }
const IReceptionBitModel * createBitModel(const BitVector *bitRepresentation, int signalFieldBitLength, bps signalFieldBitRate, int dataFieldBitLength, bps dataFieldBitRate) const
Definition: Ieee80211OFDMDemodulator.cc:60
compose< b, pow< s,-1 > > bps
Definition: Units.h:985
BitVector demodulateSymbol(const Ieee80211OFDMSymbol *signalSymbol) const
Definition: Ieee80211OFDMDemodulator.cc:43
#define NaN
Definition: INETMath.h:103
BitVector inet::physicallayer::Ieee80211OFDMDemodulator::demodulateSymbol ( const Ieee80211OFDMSymbol signalSymbol) const
protected

Referenced by demodulate().

44 {
45  std::vector<const APSKSymbol *> apskSymbols = signalSymbol->getSubCarrierSymbols();
46  const APSKModulationBase *demodulationScheme = subcarrierModulation->getSubcarrierModulation();
47  BitVector field;
48  for (unsigned int i = 0; i < apskSymbols.size(); i++) {
49  if (!isPilotOrDcSubcarrier(i)) {
50  const APSKSymbol *apskSymbol = apskSymbols.at(i);
51  ShortBitVector bits = demodulationScheme->demapToBitRepresentation(apskSymbol);
52  for (unsigned int j = 0; j < bits.getSize(); j++)
53  field.appendBit(bits.getBit(j));
54  }
55  }
56  EV_DEBUG << "The field symbols has been demodulated into the following bit stream: " << field << endl;
57  return field;
58 }
const APSKModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OFDMModulation.h:34
void appendBit(bool value)
Definition: ShortBitVector.h:66
bool isPilotOrDcSubcarrier(int i) const
Definition: Ieee80211OFDMDemodulator.cc:65
virtual ShortBitVector demapToBitRepresentation(const APSKSymbol *symbol) const
Definition: APSKModulationBase.cc:77
const Ieee80211OFDMModulation * subcarrierModulation
Definition: Ieee80211OFDMDemodulator.h:37
const Ieee80211OFDMModulation* inet::physicallayer::Ieee80211OFDMDemodulator::getModulation ( ) const
inline

Referenced by inet::physicallayer::Ieee80211OFDMDemodulatorModule::getModulation().

47 { return subcarrierModulation; }
const Ieee80211OFDMModulation * subcarrierModulation
Definition: Ieee80211OFDMDemodulator.h:37
bool inet::physicallayer::Ieee80211OFDMDemodulator::isPilotOrDcSubcarrier ( int  i) const
protected

Referenced by demodulateSymbol().

66 {
67  return i == 5 || i == 19 || i == 33 || i == 47 || i == 26; // pilots are: 5,19,33,47, 26 (0+26) is a dc subcarrier
68 }
std::ostream & inet::physicallayer::Ieee80211OFDMDemodulator::printToStream ( std::ostream &  stream,
int  level 
) const
overridevirtual

Prints this object to the provided output stream.

Function calls to operator<< with pointers or references either const or not are all forwarded to this function.

Reimplemented from inet::physicallayer::IPrintableObject.

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

36 {
37  stream << "Ieee80211OFDMDemodulator";
38  if (level <= PRINT_LEVEL_TRACE)
39  stream << ", subcarrierModulation = " << printObjectToString(subcarrierModulation, level + 1);
40  return stream;
41 }
std::string printObjectToString(const IPrintableObject *object, int level)
Definition: IPrintableObject.h:73
const Ieee80211OFDMModulation * subcarrierModulation
Definition: Ieee80211OFDMDemodulator.h:37

Member Data Documentation

const Ieee80211OFDMModulation* inet::physicallayer::Ieee80211OFDMDemodulator::subcarrierModulation = nullptr
protected

Referenced by demodulateSymbol(), and printToStream().


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