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

#include <Ieee80211LayeredOFDMReceiver.h>

Inheritance diagram for inet::physicallayer::Ieee80211LayeredOFDMReceiver:
inet::physicallayer::SNIRReceiverBase inet::physicallayer::ReceiverBase inet::physicallayer::IReceiver inet::physicallayer::IPrintableObject

Public Types

enum  LevelOfDetail { PACKET_DOMAIN, BIT_DOMAIN, SYMBOL_DOMAIN, SAMPLE_DOMAIN }
 
- 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
}
 

Public Member Functions

virtual ~Ieee80211LayeredOFDMReceiver ()
 
virtual bool computeIsReceptionPossible (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part) const override
 Returns whether the reception of the provided part is possible or not. More...
 
virtual const IListeningDecisioncomputeListeningDecision (const IListening *listening, const IInterference *interference) const override
 Returns the result of the listening process specifying the reception state of the receiver. More...
 
virtual const IListeningcreateListening (const IRadio *radio, const simtime_t startTime, const simtime_t endTime, const Coord startPosition, const Coord endPosition) const override
 Returns a description of how the receiver is listening on the medium. More...
 
virtual const IReceptionResultcomputeReceptionResult (const IListening *listening, const IReception *reception, const IInterference *interference, const ISNIR *snir) const override
 Returns the complete result of the reception process for the provided reception. More...
 
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::SNIRReceiverBase
 SNIRReceiverBase ()
 
virtual double getSNIRThreshold () const
 
virtual bool computeIsReceptionSuccessful (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference, const ISNIR *snir) const override
 Returns whether the reception of the provided part is actually successful or failed by the receiver. More...
 
- Public Member Functions inherited from inet::physicallayer::ReceiverBase
 ReceiverBase ()
 
virtual W getMinInterferencePower () const override
 Returns the minimum interference power below which receptions are to be ignored while computing the interference. More...
 
virtual W getMinReceptionPower () const override
 Returns the minimum reception power below which successful reception is definitely not possible. More...
 
virtual bool computeIsReceptionPossible (const IListening *listening, const ITransmission *transmission) const override
 Returns whether the reception of the provided transmission is possible or not independently of the reception conditions. More...
 
virtual bool computeIsReceptionAttempted (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference) const override
 Returns whether the reception of the provided part is actually attempted or ignored by the receiver. More...
 
virtual const IReceptionDecisioncomputeReceptionDecision (const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part, const IInterference *interference, const ISNIR *snir) const override
 Returns the reception decision for the transmission part that specifies whether the reception is possible, attempted, and successful. More...
 
virtual ReceptionIndicationcreateReceptionIndication () const
 Returns an empty reception indication (control info). 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

virtual void initialize (int stage) override
 
const IReceptionAnalogModelcreateAnalogModel (const LayeredTransmission *transmission, const ISNIR *snir) const
 
const IReceptionSampleModelcreateSampleModel (const LayeredTransmission *transmission, const ISNIR *snir) const
 
const IReceptionSymbolModelcreateSignalFieldSymbolModel (const IReceptionSymbolModel *symbolModel) const
 
const IReceptionSymbolModelcreateDataFieldSymbolModel (const IReceptionSymbolModel *symbolModel) const
 
const IReceptionSymbolModelcreateSymbolModel (const LayeredTransmission *transmission, const ISNIR *snir) const
 
const IReceptionSymbolModelcreateCompleteSymbolModel (const IReceptionSymbolModel *signalFieldSymbolModel, const IReceptionSymbolModel *dataFieldSymbolModel) const
 
const IReceptionBitModelcreateSignalFieldBitModel (const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel) const
 
const IReceptionBitModelcreateDataFieldBitModel (const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionBitModel *signalFieldBitModel) const
 
const IReceptionBitModelcreateBitModel (const LayeredTransmission *transmission, const ISNIR *snir) const
 
const IReceptionBitModelcreateCompleteBitModel (const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel) const
 
const IReceptionPacketModelcreateSignalFieldPacketModel (const IReceptionBitModel *signalFieldBitModel) const
 
const IReceptionPacketModelcreateDataFieldPacketModel (const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel, const IReceptionPacketModel *signalFieldPacketModel) const
 
const IReceptionPacketModelcreatePacketModel (const LayeredTransmission *transmission, const ISNIR *snir) const
 
const IReceptionPacketModelcreateCompletePacketModel (const IReceptionPacketModel *signalFieldPacketModel, const IReceptionPacketModel *dataFieldPacketModel) const
 
const Ieee80211OFDMModecomputeMode (Hz bandwidth) const
 
uint8_t getRate (const BitVector *serializedPacket) const
 
unsigned int getSignalFieldLength (const BitVector *signalField) const
 
unsigned int calculatePadding (unsigned int dataFieldLengthInBits, const APSKModulationBase *modulation, double codeRate) const
 
double getCodeRateFromDecoderModule (const IDecoder *decoder) const
 
- Protected Member Functions inherited from inet::physicallayer::SNIRReceiverBase
virtual const ReceptionIndicationcomputeReceptionIndication (const ISNIR *snir) const override
 Returns the physical properties of the reception including noise and signal related measures, error probabilities, actual error counts, etc. More...
 
- Protected Member Functions inherited from inet::physicallayer::ReceiverBase
virtual int numInitStages () const override
 

Protected Attributes

LevelOfDetail levelOfDetail
 
const Ieee80211OFDMModemode = nullptr
 
const ILayeredErrorModelerrorModel = nullptr
 
const IDecoderdataDecoder = nullptr
 
const IDecodersignalDecoder = nullptr
 
const IDemodulatordataDemodulator = nullptr
 
const IDemodulatorsignalDemodulator = nullptr
 
const IPulseFilterpulseFilter = nullptr
 
const IAnalogDigitalConverteranalogDigitalConverter = nullptr
 
W energyDetection
 
W sensitivity
 
Hz carrierFrequency
 
Hz bandwidth
 
Hz channelSpacing
 
double snirThreshold
 
bool isCompliant
 
- Protected Attributes inherited from inet::physicallayer::SNIRReceiverBase
double snirThreshold
 

Member Enumeration Documentation

Enumerator
PACKET_DOMAIN 
BIT_DOMAIN 
SYMBOL_DOMAIN 
SAMPLE_DOMAIN 
41  {
43  BIT_DOMAIN,
46  };
Definition: Ieee80211LayeredOFDMReceiver.h:42
Definition: Ieee80211LayeredOFDMReceiver.h:44
Definition: Ieee80211LayeredOFDMReceiver.h:45
Definition: Ieee80211LayeredOFDMReceiver.h:43

Constructor & Destructor Documentation

inet::physicallayer::Ieee80211LayeredOFDMReceiver::~Ieee80211LayeredOFDMReceiver ( )
virtual
457 {
458  if (!isCompliant) {
459  delete mode->getPreambleMode();
460  delete mode->getSignalMode();
461  delete mode->getDataMode();
462  delete mode;
463  }
464 }
virtual const Ieee80211OFDMSignalMode * getSignalMode() const
Definition: Ieee80211OFDMMode.h:153
virtual const Ieee80211OFDMPreambleMode * getPreambleMode() const override
Definition: Ieee80211OFDMMode.h:150
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
const Ieee80211OFDMMode * mode
Definition: Ieee80211LayeredOFDMReceiver.h:50
virtual const Ieee80211OFDMDataMode * getDataMode() const override
Definition: Ieee80211OFDMMode.h:152

Member Function Documentation

unsigned int inet::physicallayer::Ieee80211LayeredOFDMReceiver::calculatePadding ( unsigned int  dataFieldLengthInBits,
const APSKModulationBase modulation,
double  codeRate 
) const
protected
192 {
193  ASSERT(modulation != nullptr);
194  unsigned int codedBitsPerOFDMSymbol = modulation->getCodeWordSize() * NUMBER_OF_OFDM_DATA_SUBCARRIERS;
195  unsigned int dataBitsPerOFDMSymbol = codedBitsPerOFDMSymbol * codeRate;
196  return dataBitsPerOFDMSymbol - dataFieldLengthInBits % dataBitsPerOFDMSymbol;
197 }
#define NUMBER_OF_OFDM_DATA_SUBCARRIERS
Definition: Ieee80211OFDMDefs.h:25
bool inet::physicallayer::Ieee80211LayeredOFDMReceiver::computeIsReceptionPossible ( const IListening listening,
const IReception reception,
IRadioSignal::SignalPart  part 
) const
overridevirtual

Returns whether the reception of the provided part is possible or not.

For example, it might check if the reception power is above sensitivity.

This function may be called before the reception actually starts at the receiver, thus it must be purely functional and support optimistic parallel computation.

Reimplemented from inet::physicallayer::ReceiverBase.

438 {
439  const BandListening *bandListening = check_and_cast<const BandListening *>(listening);
440  const LayeredReception *scalarReception = check_and_cast<const LayeredReception *>(reception);
441  // TODO: scalar
442  const ScalarReceptionSignalAnalogModel *analogModel = check_and_cast<const ScalarReceptionSignalAnalogModel *>(scalarReception->getAnalogModel());
443  if (bandListening->getCarrierFrequency() != analogModel->getCarrierFrequency() || bandListening->getBandwidth() != analogModel->getBandwidth()) {
444  EV_DEBUG << "Computing reception possible: listening and reception bands are different -> reception is impossible" << endl;
445  return false;
446  }
447  else {
448  const INarrowbandSignal *narrowbandSignalAnalogModel = check_and_cast<const INarrowbandSignal *>(reception->getAnalogModel());
449  W minReceptionPower = narrowbandSignalAnalogModel->computeMinPower(reception->getStartTime(), reception->getEndTime());
450  bool isReceptionPossible = minReceptionPower >= sensitivity;
451  EV_DEBUG << "Computing reception possible: minimum reception power = " << minReceptionPower << ", sensitivity = " << sensitivity << " -> reception is " << (isReceptionPossible ? "possible" : "impossible") << endl;
452  return isReceptionPossible;
453  }
454 }
compose< J, pow< s,-1 > > W
Definition: Units.h:770
W sensitivity
Definition: Ieee80211LayeredOFDMReceiver.h:60
const IListeningDecision * inet::physicallayer::Ieee80211LayeredOFDMReceiver::computeListeningDecision ( const IListening listening,
const IInterference interference 
) const
overridevirtual

Returns the result of the listening process specifying the reception state of the receiver.

This function must be purely functional and support optimistic parallel computation.

Implements inet::physicallayer::IReceiver.

422 {
423  const IRadio *receiver = listening->getReceiver();
424  const IRadioMedium *radioMedium = receiver->getMedium();
425  const IAnalogModel *analogModel = radioMedium->getAnalogModel();
426  const INoise *noise = analogModel->computeNoise(listening, interference);
427  const NarrowbandNoiseBase *flatNoise = check_and_cast<const NarrowbandNoiseBase *>(noise);
428  W maxPower = flatNoise->computeMaxPower(listening->getStartTime(), listening->getEndTime());
429  bool isListeningPossible = maxPower >= energyDetection;
430  delete noise;
431  EV_DEBUG << "Computing listening possible: maximum power = " << maxPower << ", energy detection = " << energyDetection << " -> listening is " << (isListeningPossible ? "possible" : "impossible") << endl;
432  return new ListeningDecision(listening, isListeningPossible);
433 }
compose< J, pow< s,-1 > > W
Definition: Units.h:770
W energyDetection
Definition: Ieee80211LayeredOFDMReceiver.h:59
const Ieee80211OFDMMode * inet::physicallayer::Ieee80211LayeredOFDMReceiver::computeMode ( Hz  bandwidth) const
protected
358 {
359  const Ieee80211OFDMDecoderModule *ofdmSignalDecoderModule = check_and_cast<const Ieee80211OFDMDecoderModule *>(signalDecoder);
360  const Ieee80211OFDMDecoderModule *ofdmDataDecoderModule = check_and_cast<const Ieee80211OFDMDecoderModule *>(dataDecoder);
361  const Ieee80211OFDMDemodulatorModule *ofdmSignalDemodulatorModule = check_and_cast<const Ieee80211OFDMDemodulatorModule *>(signalDemodulator);
362  const Ieee80211OFDMDemodulatorModule *ofdmDataDemodulatorModule = check_and_cast<const Ieee80211OFDMDemodulatorModule *>(dataDemodulator);
363  const Ieee80211OFDMSignalMode *signalMode = new Ieee80211OFDMSignalMode(ofdmSignalDecoderModule->getCode(), ofdmSignalDemodulatorModule->getModulation(), channelSpacing, bandwidth, 0);
364  const Ieee80211OFDMDataMode *dataMode = new Ieee80211OFDMDataMode(ofdmDataDecoderModule->getCode(), ofdmDataDemodulatorModule->getModulation(), channelSpacing, bandwidth);
365  return new Ieee80211OFDMMode("", new Ieee80211OFDMPreambleMode(channelSpacing), signalMode, dataMode, channelSpacing, bandwidth);
366 }
Hz channelSpacing
Definition: Ieee80211LayeredOFDMReceiver.h:63
const IDemodulator * dataDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:54
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:52
const IDemodulator * signalDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:55
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:53
Hz bandwidth
Definition: Ieee80211LayeredOFDMReceiver.h:62
const IReceptionResult * inet::physicallayer::Ieee80211LayeredOFDMReceiver::computeReceptionResult ( const IListening listening,
const IReception reception,
const IInterference interference,
const ISNIR snir 
) const
overridevirtual

Returns the complete result of the reception process for the provided reception.

This function may be called before the reception actually starts at the receiver, thus it must be purely functional and support optimistic parallel computation.

Reimplemented from inet::physicallayer::ReceiverBase.

369 {
370  const LayeredTransmission *transmission = dynamic_cast<const LayeredTransmission *>(reception->getTransmission());
371  const IReceptionAnalogModel *analogModel = createAnalogModel(transmission, snir);
372  const IReceptionSampleModel *sampleModel = createSampleModel(transmission, snir);
373  const IReceptionSymbolModel *symbolModel = createSymbolModel(transmission, snir);
374  const IReceptionBitModel *bitModel = createBitModel(transmission, snir);
375  const IReceptionPacketModel *packetModel = createPacketModel(transmission, snir);
376 
377  const IReceptionSymbolModel *signalFieldSymbolModel = createSignalFieldSymbolModel(symbolModel);
378  const IReceptionSymbolModel *dataFieldSymbolModel = createDataFieldSymbolModel(symbolModel);
379  const IReceptionBitModel *signalFieldBitModel = createSignalFieldBitModel(bitModel, signalFieldSymbolModel);
380  const IReceptionPacketModel *signalFieldPacketModel = createSignalFieldPacketModel(signalFieldBitModel);
381  if (isCompliant) {
382  uint8_t rate = getRate(signalFieldPacketModel->getSerializedPacket());
383  // TODO: handle erroneous rate field
385  }
386  else if (!mode)
388  const IReceptionBitModel *dataFieldBitModel = createDataFieldBitModel(bitModel, dataFieldSymbolModel, signalFieldPacketModel, signalFieldBitModel);
389  const IReceptionPacketModel *dataFieldPacketModel = createDataFieldPacketModel(signalFieldBitModel, dataFieldBitModel, signalFieldPacketModel);
390 
391 // if (!sampleModel)
392 // sampleModel = createCompleteSampleModel(signalFieldSampleModel, dataFieldSampleModel);
393  if (!symbolModel)
394  symbolModel = createCompleteSymbolModel(signalFieldSymbolModel, dataFieldSymbolModel);
395  if (!bitModel)
396  bitModel = createCompleteBitModel(signalFieldBitModel, dataFieldBitModel);
397  if (!packetModel)
398  packetModel = createCompletePacketModel(signalFieldPacketModel, dataFieldPacketModel);
399 
400  delete signalFieldSymbolModel;
401  delete dataFieldSymbolModel;
402  delete signalFieldBitModel;
403  delete dataFieldBitModel;
404  delete signalFieldPacketModel;
405  delete dataFieldPacketModel;
406 
407  ReceptionIndication *receptionIndication = new ReceptionIndication();
408  receptionIndication->setMinSNIR(snir->getMin());
409  receptionIndication->setPacketErrorRate(packetModel->getPER());
410 // TODO: true, true, packetModel->isPacketErrorless()
411  return new LayeredReceptionResult(reception, new std::vector<const IReceptionDecision *>(), receptionIndication, packetModel, bitModel, symbolModel, sampleModel, analogModel);
412 }
const IReceptionPacketModel * createCompletePacketModel(const IReceptionPacketModel *signalFieldPacketModel, const IReceptionPacketModel *dataFieldPacketModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:339
const IReceptionPacketModel * createPacketModel(const LayeredTransmission *transmission, const ISNIR *snir) const
Definition: Ieee80211LayeredOFDMReceiver.cc:127
const IReceptionSymbolModel * createSymbolModel(const LayeredTransmission *transmission, const ISNIR *snir) const
Definition: Ieee80211LayeredOFDMReceiver.cc:134
const IReceptionSampleModel * createSampleModel(const LayeredTransmission *transmission, const ISNIR *snir) const
Definition: Ieee80211LayeredOFDMReceiver.cc:113
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
const Ieee80211OFDMMode * mode
Definition: Ieee80211LayeredOFDMReceiver.h:50
Hz channelSpacing
Definition: Ieee80211LayeredOFDMReceiver.h:63
static const Ieee80211OFDMMode & getCompliantMode(unsigned int signalRateField, Hz channelSpacing)
Definition: Ieee80211OFDMMode.cc:198
const IReceptionAnalogModel * createAnalogModel(const LayeredTransmission *transmission, const ISNIR *snir) const
Definition: Ieee80211LayeredOFDMReceiver.cc:85
uint8_t getRate(const BitVector *serializedPacket) const
Definition: Ieee80211LayeredOFDMReceiver.cc:207
const IReceptionPacketModel * createDataFieldPacketModel(const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel, const IReceptionPacketModel *signalFieldPacketModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:161
const IReceptionSymbolModel * createCompleteSymbolModel(const IReceptionSymbolModel *signalFieldSymbolModel, const IReceptionSymbolModel *dataFieldSymbolModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:326
const IReceptionBitModel * createSignalFieldBitModel(const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:248
const IReceptionBitModel * createBitModel(const LayeredTransmission *transmission, const ISNIR *snir) const
Definition: Ieee80211LayeredOFDMReceiver.cc:120
const IReceptionBitModel * createCompleteBitModel(const IReceptionBitModel *signalFieldBitModel, const IReceptionBitModel *dataFieldBitModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:149
const IReceptionBitModel * createDataFieldBitModel(const IReceptionBitModel *bitModel, const IReceptionSymbolModel *symbolModel, const IReceptionPacketModel *signalFieldPacketModel, const IReceptionBitModel *signalFieldBitModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:279
const Ieee80211OFDMMode * computeMode(Hz bandwidth) const
Definition: Ieee80211LayeredOFDMReceiver.cc:357
const IReceptionSymbolModel * createSignalFieldSymbolModel(const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:215
const IReceptionSymbolModel * createDataFieldSymbolModel(const IReceptionSymbolModel *symbolModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:230
const IReceptionPacketModel * createSignalFieldPacketModel(const IReceptionBitModel *signalFieldBitModel) const
Definition: Ieee80211LayeredOFDMReceiver.cc:176
Hz bandwidth
Definition: Ieee80211LayeredOFDMReceiver.h:62
const IReceptionAnalogModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createAnalogModel ( const LayeredTransmission transmission,
const ISNIR snir 
) const
protected
86 {
87  return nullptr;
88 }
const IReceptionBitModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createBitModel ( const LayeredTransmission transmission,
const ISNIR snir 
) const
protected
121 {
122  if (levelOfDetail == BIT_DOMAIN)
123  return errorModel->computeBitModel(transmission, snir);
124  return nullptr;
125 }
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
virtual const IReceptionBitModel * computeBitModel(const LayeredTransmission *transmission, const ISNIR *snir) const =0
Computes the bit domain representation at the receiver using a simplified model for the underlying do...
Definition: Ieee80211LayeredOFDMReceiver.h:43
const IReceptionBitModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createCompleteBitModel ( const IReceptionBitModel signalFieldBitModel,
const IReceptionBitModel dataFieldBitModel 
) const
protected
150 {
151  if (levelOfDetail >= BIT_DOMAIN) {
152  BitVector *bits = new BitVector(*signalFieldBitModel->getBits());
153  const BitVector *dataBits = dataFieldBitModel->getBits();
154  for (unsigned int i = 0; i < dataBits->getSize(); i++)
155  bits->appendBit(dataBits->getBit(i));
156  return new ReceptionBitModel(signalFieldBitModel->getHeaderBitLength(), signalFieldBitModel->getHeaderBitRate(), dataFieldBitModel->getPayloadBitLength(), dataFieldBitModel->getPayloadBitRate(), bits);
157  }
158  return nullptr;
159 }
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
Definition: Ieee80211LayeredOFDMReceiver.h:43
const IReceptionPacketModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createCompletePacketModel ( const IReceptionPacketModel signalFieldPacketModel,
const IReceptionPacketModel dataFieldPacketModel 
) const
protected
340 {
341  const BitVector *headerBits = signalFieldPacketModel->getSerializedPacket();
342  BitVector *mergedBits = new BitVector(*headerBits);
343  const BitVector *dataBits = dataFieldPacketModel->getSerializedPacket();
344  for (unsigned int i = 0; i < dataBits->getSize(); i++)
345  mergedBits->appendBit(dataBits->getBit(i));
346  Ieee80211PhySerializer deserializer;
347  cPacket *phyFrame = deserializer.deserialize(mergedBits);
348  bool isReceptionSuccessful = true;
349  cPacket *packet = phyFrame;
350  while (packet != nullptr) {
351  isReceptionSuccessful &= !packet->hasBitError();
352  packet = packet->getEncapsulatedPacket();
353  }
354  return new ReceptionPacketModel(phyFrame, mergedBits, bps(NaN), 0, isReceptionSuccessful);
355 }
compose< b, pow< s,-1 > > bps
Definition: Units.h:985
#define NaN
Definition: INETMath.h:103
const IReceptionSymbolModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createCompleteSymbolModel ( const IReceptionSymbolModel signalFieldSymbolModel,
const IReceptionSymbolModel dataFieldSymbolModel 
) const
protected
327 {
328  if (levelOfDetail >= SYMBOL_DOMAIN) {
329  const std::vector<const ISymbol *> *symbols = signalFieldSymbolModel->getSymbols();
330  std::vector<const ISymbol *> *completeSymbols = new std::vector<const ISymbol *>(*symbols);
331  symbols = dataFieldSymbolModel->getSymbols();
332  for (auto & symbol : *symbols)
333  completeSymbols->push_back(new Ieee80211OFDMSymbol(*static_cast<const Ieee80211OFDMSymbol *>(symbol)));
334  return new Ieee80211OFDMReceptionSymbolModel(signalFieldSymbolModel->getHeaderSymbolLength(), signalFieldSymbolModel->getHeaderSymbolRate(), dataFieldSymbolModel->getPayloadSymbolLength(), dataFieldSymbolModel->getPayloadSymbolRate(), completeSymbols);
335  }
336  return nullptr;
337 }
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
Definition: Ieee80211LayeredOFDMReceiver.h:44
const IReceptionBitModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createDataFieldBitModel ( const IReceptionBitModel bitModel,
const IReceptionSymbolModel symbolModel,
const IReceptionPacketModel signalFieldPacketModel,
const IReceptionBitModel signalFieldBitModel 
) const
protected
280 {
281  const IReceptionBitModel *dataFieldBitModel = nullptr;
282  if (levelOfDetail > BIT_DOMAIN) { // Create from symbol model
283  if (dataDemodulator) // non-compliant
284  dataFieldBitModel = dataDemodulator->demodulate(dataFieldSymbolModel);
285  else { // compliant
286  const Ieee80211OFDMDataMode *dataMode = mode->getDataMode();
287  const Ieee80211OFDMDemodulator ofdmDemodulator(dataMode->getModulation());
288  dataFieldBitModel = ofdmDemodulator.demodulate(dataFieldSymbolModel);
289  }
290  }
291  else if (levelOfDetail == BIT_DOMAIN) { // Create from bit model (made by the error model)
292  const ConvolutionalCode *convolutionalCode = nullptr;
293  const APSKModulationBase *modulation = nullptr;
294  double codeRate = NaN;
295  unsigned int psduLengthInBits = getSignalFieldLength(signalFieldPacketModel->getSerializedPacket()) * 8;
296  unsigned int dataFieldLengthInBits = psduLengthInBits + PPDU_SERVICE_FIELD_BITS_LENGTH + PPDU_TAIL_BITS_LENGTH;
297  if (isCompliant) {
298  const Ieee80211OFDMDataMode *dataMode = mode->getDataMode();
299  modulation = dataMode->getModulation()->getSubcarrierModulation();
300  const Ieee80211OFDMCode *code = dataMode->getCode();
301  convolutionalCode = code->getConvolutionalCode();
302  codeRate = convolutionalCode->getCodeRatePuncturingN() * 1.0 / convolutionalCode->getCodeRatePuncturingK();
303  }
304  else {
305  const Ieee80211OFDMDecoderModule *decoderModule = check_and_cast<const Ieee80211OFDMDecoderModule *>(dataDecoder);
306  const Ieee80211OFDMCode *code = decoderModule->getCode();
307  convolutionalCode = code->getConvolutionalCode();
310  }
311  dataFieldLengthInBits += calculatePadding(dataFieldLengthInBits, modulation, 1.0 / codeRate);
312 // ASSERT(dataFieldLengthInBits % convolutionalCode->getCodeRatePuncturingK() == 0);
313  unsigned int encodedDataFieldLengthInBits = dataFieldLengthInBits * codeRate;
314  const BitVector *bits = bitModel->getBits();
315  unsigned int encodedSignalFieldLength = signalFieldBitModel->getHeaderBitLength();
316  if (dataFieldLengthInBits + encodedSignalFieldLength > bits->getSize())
317  throw cRuntimeError("The calculated data field length = %d is greater then the actual bitvector length = %d", dataFieldLengthInBits, bits->getSize());
318  BitVector *dataBits = new BitVector();
319  for (unsigned int i = 0; i < encodedDataFieldLengthInBits; i++)
320  dataBits->appendBit(bits->getBit(encodedSignalFieldLength + i));
321  dataFieldBitModel = new ReceptionBitModel(-1, bps(NaN), encodedDataFieldLengthInBits, bitModel->getPayloadBitRate(), dataBits);
322  }
323  return dataFieldBitModel;
324 }
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
const Ieee80211OFDMMode * mode
Definition: Ieee80211LayeredOFDMReceiver.h:50
virtual const Ieee80211OFDMDataMode * getDataMode() const override
Definition: Ieee80211OFDMMode.h:152
const Ieee80211OFDMModulation * getModulation() const override
Definition: Ieee80211OFDMMode.h:128
virtual const IReceptionBitModel * demodulate(const IReceptionSymbolModel *symbolModel) const =0
const APSKModulationBase * getSubcarrierModulation() const
Definition: Ieee80211OFDMModulation.h:34
compose< b, pow< s,-1 > > bps
Definition: Units.h:985
#define NaN
Definition: INETMath.h:103
unsigned int calculatePadding(unsigned int dataFieldLengthInBits, const APSKModulationBase *modulation, double codeRate) const
Definition: Ieee80211LayeredOFDMReceiver.cc:191
double getCodeRateFromDecoderModule(const IDecoder *decoder) const
Definition: Ieee80211LayeredOFDMReceiver.cc:141
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
unsigned int getSignalFieldLength(const BitVector *signalField) const
Definition: Ieee80211LayeredOFDMReceiver.cc:199
const IDemodulator * dataDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:54
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:52
#define PPDU_TAIL_BITS_LENGTH
Definition: Ieee80211OFDMDefs.h:34
#define PPDU_SERVICE_FIELD_BITS_LENGTH
Definition: Ieee80211OFDMDefs.h:33
Definition: Ieee80211LayeredOFDMReceiver.h:43
const IReceptionPacketModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createDataFieldPacketModel ( const IReceptionBitModel signalFieldBitModel,
const IReceptionBitModel dataFieldBitModel,
const IReceptionPacketModel signalFieldPacketModel 
) const
protected
162 {
163  const IReceptionPacketModel *dataFieldPacketModel = nullptr;
164  if (levelOfDetail > PACKET_DOMAIN) { // Create from the bit model
165  if (dataDecoder)
166  dataFieldPacketModel = dataDecoder->decode(dataFieldBitModel);
167  else {
168  const Ieee80211OFDMCode *code = mode->getDataMode()->getCode();
169  const Ieee80211OFDMDecoder decoder(code);
170  dataFieldPacketModel = decoder.decode(dataFieldBitModel);
171  }
172  }
173  return dataFieldPacketModel;
174 }
const Ieee80211OFDMMode * mode
Definition: Ieee80211LayeredOFDMReceiver.h:50
virtual const Ieee80211OFDMDataMode * getDataMode() const override
Definition: Ieee80211OFDMMode.h:152
Definition: Ieee80211LayeredOFDMReceiver.h:42
virtual const IReceptionPacketModel * decode(const IReceptionBitModel *bitModel) const =0
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:52
const Ieee80211OFDMCode * getCode() const
Definition: Ieee80211OFDMMode.h:127
const IReceptionSymbolModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createDataFieldSymbolModel ( const IReceptionSymbolModel symbolModel) const
protected
231 {
232  const Ieee80211OFDMReceptionSymbolModel *dataFieldSymbolModel = nullptr;
234  throw cRuntimeError("This level of detail is unimplemented!");
235  else if (levelOfDetail == SYMBOL_DOMAIN) { // Create from symbol model (made by the error model)
236  const std::vector<const ISymbol *> *symbols = receptionSymbolModel->getSymbols();
237  std::vector<const ISymbol *> *dataSymbols = new std::vector<const ISymbol *>();
238  const Ieee80211OFDMSymbol *ofdmSymbol = nullptr;
239  for (unsigned int i = 1; i < symbols->size(); i++) {
240  ofdmSymbol = check_and_cast<const Ieee80211OFDMSymbol *>(symbols->at(i));
241  dataSymbols->push_back(new Ieee80211OFDMSymbol(*ofdmSymbol));
242  }
243  dataFieldSymbolModel = new Ieee80211OFDMReceptionSymbolModel(-1, NaN, symbols->size() - 1, receptionSymbolModel->getPayloadSymbolRate(), dataSymbols);
244  }
245  return dataFieldSymbolModel;
246 }
#define NaN
Definition: INETMath.h:103
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
Definition: Ieee80211LayeredOFDMReceiver.h:44
const IListening * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createListening ( const IRadio radio,
const simtime_t  startTime,
const simtime_t  endTime,
const Coord  startPosition,
const Coord  endPosition 
) const
overridevirtual

Returns a description of how the receiver is listening on the medium.

Implements inet::physicallayer::IReceiver.

415 {
416  // We assume that in compliant mode the bandwidth is always 20MHz.
417  return new BandListening(radio, startTime, endTime, startPosition, endPosition, carrierFrequency, isCompliant ? Hz(20000000) : bandwidth);
418 }
pow< s,-1 > Hz
Definition: Units.h:766
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
Hz carrierFrequency
Definition: Ieee80211LayeredOFDMReceiver.h:61
Hz bandwidth
Definition: Ieee80211LayeredOFDMReceiver.h:62
const IReceptionPacketModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createPacketModel ( const LayeredTransmission transmission,
const ISNIR snir 
) const
protected
128 {
130  return errorModel->computePacketModel(transmission, snir);
131  return nullptr;
132 }
Definition: Ieee80211LayeredOFDMReceiver.h:42
virtual const IReceptionPacketModel * computePacketModel(const LayeredTransmission *transmission, const ISNIR *snir) const =0
Computes the packet domain representation at the receiver using a simplified model for the underlying...
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
const IReceptionSampleModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSampleModel ( const LayeredTransmission transmission,
const ISNIR snir 
) const
protected
114 {
116  return errorModel->computeSampleModel(transmission, snir);
117  return nullptr;
118 }
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
virtual const IReceptionSampleModel * computeSampleModel(const LayeredTransmission *transmission, const ISNIR *snir) const =0
Computes the sample domain representation at the receiver using a simplified model for the underlying...
Definition: Ieee80211LayeredOFDMReceiver.h:45
const IReceptionBitModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSignalFieldBitModel ( const IReceptionBitModel bitModel,
const IReceptionSymbolModel symbolModel 
) const
protected
249 {
250  const IReceptionBitModel *signalFieldBitModel = nullptr;
251  if (levelOfDetail > BIT_DOMAIN) { // Create from symbol model
252  if (signalDemodulator) // non-compliant
253  signalFieldBitModel = signalDemodulator->demodulate(signalFieldSymbolModel);
254  else { // compliant
255  // In compliant mode, the signal field modulation is always BPSK
256  const Ieee80211OFDMModulation *signalModulation = new Ieee80211OFDMModulation(&BPSKModulation::singleton);
257  const Ieee80211OFDMDemodulator demodulator(signalModulation);
258  signalFieldBitModel = demodulator.demodulate(signalFieldSymbolModel);
259  delete signalModulation;
260  }
261  }
262  else if (levelOfDetail == BIT_DOMAIN) { // Create from bit model (made by the error model)
263  unsigned int signalFieldLength = 0;
264  if (isCompliant)
265  signalFieldLength = ENCODED_SIGNAL_FIELD_LENGTH;
266  else {
267  double codeRate = getCodeRateFromDecoderModule(signalDecoder);
268  signalFieldLength = DECODED_SIGNAL_FIELD_LENGTH * codeRate;
269  }
270  BitVector *signalFieldBits = new BitVector();
271  const BitVector *bits = bitModel->getBits();
272  for (unsigned int i = 0; i < signalFieldLength; i++)
273  signalFieldBits->appendBit(bits->getBit(i));
274  signalFieldBitModel = new ReceptionBitModel(signalFieldLength, bitModel->getHeaderBitRate(), -1, bps(NaN), signalFieldBits);
275  }
276  return signalFieldBitModel;
277 }
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
virtual const IReceptionBitModel * demodulate(const IReceptionSymbolModel *symbolModel) const =0
static const BPSKModulation singleton
Definition: BPSKModulation.h:35
compose< b, pow< s,-1 > > bps
Definition: Units.h:985
#define NaN
Definition: INETMath.h:103
#define DECODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OFDMDefs.h:26
double getCodeRateFromDecoderModule(const IDecoder *decoder) const
Definition: Ieee80211LayeredOFDMReceiver.cc:141
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
const IDemodulator * signalDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:55
#define ENCODED_SIGNAL_FIELD_LENGTH
Definition: Ieee80211OFDMDefs.h:27
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:53
Definition: Ieee80211LayeredOFDMReceiver.h:43
const IReceptionPacketModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSignalFieldPacketModel ( const IReceptionBitModel signalFieldBitModel) const
protected
177 {
178  const IReceptionPacketModel *signalFieldPacketModel = nullptr;
179  if (levelOfDetail > PACKET_DOMAIN) { // Create from the bit model
180  if (signalDecoder) // non-complaint
181  signalFieldPacketModel = signalDecoder->decode(signalFieldBitModel);
182  else { // complaint
183  // In compliant mode the code for the signal field is always the following:
185  signalFieldPacketModel = decoder.decode(signalFieldBitModel);
186  }
187  }
188  return signalFieldPacketModel;
189 }
Definition: Ieee80211LayeredOFDMReceiver.h:42
virtual const IReceptionPacketModel * decode(const IReceptionBitModel *bitModel) const =0
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
static const Ieee80211OFDMCode ofdmCC1_2BPSKInterleavingWithoutScrambling
Definition: Ieee80211OFDMCode.h:65
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:53
const IReceptionSymbolModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSignalFieldSymbolModel ( const IReceptionSymbolModel symbolModel) const
protected
216 {
217  const Ieee80211OFDMReceptionSymbolModel *signalFieldSymbolModel = nullptr;
219  throw cRuntimeError("This level of detail is unimplemented!");
220  else if (levelOfDetail == SYMBOL_DOMAIN) { // Create from symbol model (made by the error model)
221  const std::vector<const ISymbol *> *symbols = receptionSymbolModel->getSymbols();
222  std::vector<const ISymbol *> *signalSymbols = new std::vector<const ISymbol *>();
223  const Ieee80211OFDMSymbol *signalSymbol = check_and_cast<const Ieee80211OFDMSymbol *>(symbols->at(0));
224  signalSymbols->push_back(new Ieee80211OFDMSymbol(*signalSymbol)); // The first symbol is the signal field symbol
225  signalFieldSymbolModel = new Ieee80211OFDMReceptionSymbolModel(1, receptionSymbolModel->getHeaderSymbolRate(), -1, NaN, signalSymbols);
226  }
227  return signalFieldSymbolModel;
228 }
#define NaN
Definition: INETMath.h:103
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
Definition: Ieee80211LayeredOFDMReceiver.h:44
const IReceptionSymbolModel * inet::physicallayer::Ieee80211LayeredOFDMReceiver::createSymbolModel ( const LayeredTransmission transmission,
const ISNIR snir 
) const
protected
135 {
137  return errorModel->computeSymbolModel(transmission, snir);
138  return nullptr;
139 }
virtual const IReceptionSymbolModel * computeSymbolModel(const LayeredTransmission *transmission, const ISNIR *snir) const =0
Computes the symbol domain representation at the receiver using a simplified model for the underlying...
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
Definition: Ieee80211LayeredOFDMReceiver.h:44
double inet::physicallayer::Ieee80211LayeredOFDMReceiver::getCodeRateFromDecoderModule ( const IDecoder decoder) const
protected
142 {
143  const Ieee80211OFDMDecoderModule *decoderModule = check_and_cast<const Ieee80211OFDMDecoderModule *>(decoder);
144  const Ieee80211OFDMCode *code = decoderModule->getCode();
145  const ConvolutionalCode *convolutionalCode = code->getConvolutionalCode();
146  return convolutionalCode ? 1.0 * convolutionalCode->getCodeRatePuncturingN() / convolutionalCode->getCodeRatePuncturingK() : 1;
147 }
uint8_t inet::physicallayer::Ieee80211LayeredOFDMReceiver::getRate ( const BitVector serializedPacket) const
protected
208 {
209  ShortBitVector rate;
210  for (unsigned int i = 0; i < 4; i++)
211  rate.appendBit(serializedPacket->getBit(i));
212  return rate.toDecimal();
213 }
unsigned int inet::physicallayer::Ieee80211LayeredOFDMReceiver::getSignalFieldLength ( const BitVector signalField) const
protected
200 {
201  ShortBitVector length;
202  for (int i = SIGNAL_LENGTH_FIELD_START; i <= SIGNAL_LENGTH_FIELD_END; i++)
203  length.appendBit(signalField->getBit(i));
204  return length.toDecimal();
205 }
#define SIGNAL_LENGTH_FIELD_END
Definition: Ieee80211OFDMDefs.h:31
#define SIGNAL_LENGTH_FIELD_START
Definition: Ieee80211OFDMDefs.h:30
void inet::physicallayer::Ieee80211LayeredOFDMReceiver::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::physicallayer::SNIRReceiverBase.

50 {
51  if (stage == INITSTAGE_LOCAL) {
52  errorModel = dynamic_cast<ILayeredErrorModel *>(getSubmodule("errorModel"));
53  dataDecoder = dynamic_cast<IDecoder *>(getSubmodule("dataDecoder"));
54  signalDecoder = dynamic_cast<IDecoder *>(getSubmodule("signalDecoder"));
55  dataDemodulator = dynamic_cast<IDemodulator *>(getSubmodule("dataDemodulator"));
56  signalDemodulator = dynamic_cast<IDemodulator *>(getSubmodule("signalDemodulator"));
57  pulseFilter = dynamic_cast<IPulseFilter *>(getSubmodule("pulseFilter"));
58  analogDigitalConverter = dynamic_cast<IAnalogDigitalConverter *>(getSubmodule("analogDigitalConverter"));
59 
60  energyDetection = mW(math::dBm2mW(par("energyDetection")));
61  sensitivity = mW(math::dBm2mW(par("sensitivity")));
62  carrierFrequency = Hz(par("carrierFrequency"));
63  bandwidth = Hz(par("bandwidth"));
64  snirThreshold = math::dB2fraction(par("snirThreshold"));
65  channelSpacing = Hz(par("channelSpacing"));
66  isCompliant = par("isCompliant").boolValue();
68  {
69  throw cRuntimeError("In compliant mode it is forbidden to the following parameters: dataDecoder, signalDecoder, dataDemodulator, signalDemodulator, pulseFilter, analogDigitalConverter.");
70  }
71  const char *levelOfDetailStr = par("levelOfDetail").stringValue();
72  if (strcmp("bit", levelOfDetailStr) == 0)
74  else if (strcmp("symbol", levelOfDetailStr) == 0)
76  else if (strcmp("sample", levelOfDetailStr) == 0)
78  else if (strcmp("packet", levelOfDetailStr) == 0)
80  else
81  throw cRuntimeError("Unknown level of detail='%s'", levelOfDetailStr);
82  }
83 }
pow< s,-1 > Hz
Definition: Units.h:766
double dBm2mW(double dBm)
Converts a dBm value into milliwatts.
Definition: INETMath.h:176
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
double snirThreshold
Definition: Ieee80211LayeredOFDMReceiver.h:64
Hz channelSpacing
Definition: Ieee80211LayeredOFDMReceiver.h:63
Definition: Ieee80211LayeredOFDMReceiver.h:42
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
const IPulseFilter * pulseFilter
Definition: Ieee80211LayeredOFDMReceiver.h:56
W sensitivity
Definition: Ieee80211LayeredOFDMReceiver.h:60
double dB2fraction(double dB)
Converts a dB value to fraction.
Definition: INETMath.h:166
Local initializations.
Definition: InitStages.h:35
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
const IDemodulator * dataDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:54
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:52
W energyDetection
Definition: Ieee80211LayeredOFDMReceiver.h:59
const IDemodulator * signalDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:55
milli< W >::type mW
Definition: Units.h:903
Definition: Ieee80211LayeredOFDMReceiver.h:44
Hz carrierFrequency
Definition: Ieee80211LayeredOFDMReceiver.h:61
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:53
Definition: Ieee80211LayeredOFDMReceiver.h:45
Hz bandwidth
Definition: Ieee80211LayeredOFDMReceiver.h:62
const IAnalogDigitalConverter * analogDigitalConverter
Definition: Ieee80211LayeredOFDMReceiver.h:57
Definition: Ieee80211LayeredOFDMReceiver.h:43
std::ostream & inet::physicallayer::Ieee80211LayeredOFDMReceiver::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::SNIRReceiverBase.

91 {
92  stream << "Ieee80211LayeredOFDMReceiver";
93  if (level <= PRINT_LEVEL_TRACE)
94  stream << ", levelOfDetail = " << levelOfDetail
95  << ", mode = " << printObjectToString(mode, level + 1)
96  << ", errorModel = " << printObjectToString(errorModel, level + 1)
97  << ", dataDecoder = " << printObjectToString(dataDecoder, level + 1)
98  << ", signalDecoder = " << printObjectToString(signalDecoder, level + 1)
99  << ", dataDemodulator = " << printObjectToString(dataDemodulator, level + 1)
100  << ", signalDemodulator = " << printObjectToString(signalDemodulator, level + 1)
101  << ", pulseFilter = " << printObjectToString(pulseFilter, level + 1)
102  << ", analogDigitalConverter = " << printObjectToString(analogDigitalConverter, level + 1)
103  << ", energyDetection = " << energyDetection
104  << ", sensitivity = " << energyDetection
105  << ", carrierFrequency = " << carrierFrequency
106  << ", bandwidth = " << bandwidth
107  << ", channelSpacing = " << channelSpacing
108  << ", snirThreshold = " << snirThreshold
109  << ", isCompliant = " << isCompliant;
110  return stream;
111 }
std::string printObjectToString(const IPrintableObject *object, int level)
Definition: IPrintableObject.h:73
bool isCompliant
Definition: Ieee80211LayeredOFDMReceiver.h:65
const Ieee80211OFDMMode * mode
Definition: Ieee80211LayeredOFDMReceiver.h:50
double snirThreshold
Definition: Ieee80211LayeredOFDMReceiver.h:64
Hz channelSpacing
Definition: Ieee80211LayeredOFDMReceiver.h:63
const ILayeredErrorModel * errorModel
Definition: Ieee80211LayeredOFDMReceiver.h:51
const IPulseFilter * pulseFilter
Definition: Ieee80211LayeredOFDMReceiver.h:56
LevelOfDetail levelOfDetail
Definition: Ieee80211LayeredOFDMReceiver.h:49
const IDemodulator * dataDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:54
const IDecoder * dataDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:52
W energyDetection
Definition: Ieee80211LayeredOFDMReceiver.h:59
const IDemodulator * signalDemodulator
Definition: Ieee80211LayeredOFDMReceiver.h:55
Hz carrierFrequency
Definition: Ieee80211LayeredOFDMReceiver.h:61
const IDecoder * signalDecoder
Definition: Ieee80211LayeredOFDMReceiver.h:53
Hz bandwidth
Definition: Ieee80211LayeredOFDMReceiver.h:62
const IAnalogDigitalConverter * analogDigitalConverter
Definition: Ieee80211LayeredOFDMReceiver.h:57

Member Data Documentation

const IAnalogDigitalConverter* inet::physicallayer::Ieee80211LayeredOFDMReceiver::analogDigitalConverter = nullptr
protected
Hz inet::physicallayer::Ieee80211LayeredOFDMReceiver::bandwidth
protected
Hz inet::physicallayer::Ieee80211LayeredOFDMReceiver::carrierFrequency
protected
Hz inet::physicallayer::Ieee80211LayeredOFDMReceiver::channelSpacing
protected
const IDecoder* inet::physicallayer::Ieee80211LayeredOFDMReceiver::dataDecoder = nullptr
protected
const IDemodulator* inet::physicallayer::Ieee80211LayeredOFDMReceiver::dataDemodulator = nullptr
protected
W inet::physicallayer::Ieee80211LayeredOFDMReceiver::energyDetection
protected
const ILayeredErrorModel* inet::physicallayer::Ieee80211LayeredOFDMReceiver::errorModel = nullptr
protected
bool inet::physicallayer::Ieee80211LayeredOFDMReceiver::isCompliant
protected
LevelOfDetail inet::physicallayer::Ieee80211LayeredOFDMReceiver::levelOfDetail
protected
const Ieee80211OFDMMode* inet::physicallayer::Ieee80211LayeredOFDMReceiver::mode = nullptr
mutableprotected
const IPulseFilter* inet::physicallayer::Ieee80211LayeredOFDMReceiver::pulseFilter = nullptr
protected
W inet::physicallayer::Ieee80211LayeredOFDMReceiver::sensitivity
protected
const IDecoder* inet::physicallayer::Ieee80211LayeredOFDMReceiver::signalDecoder = nullptr
protected
const IDemodulator* inet::physicallayer::Ieee80211LayeredOFDMReceiver::signalDemodulator = nullptr
protected
double inet::physicallayer::Ieee80211LayeredOFDMReceiver::snirThreshold
protected

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