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

Implements the ApskErrorModel model, see the NED file for details. More...

#include <ApskErrorModel.h>

Inheritance diagram for inet::physicallayer::ApskErrorModel:
inet::physicallayer::ErrorModelBase inet::physicallayer::IErrorModel inet::IPrintableObject

Public Member Functions

virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
virtual double computePacketErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the packet error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics. More...
 
virtual double computeBitErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the bit error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics. More...
 
virtual double computeSymbolErrorRate (const ISnir *snir, IRadioSignal::SignalPart part) const override
 Returns the symbol error rate based on SNIR, modulation, and any other physical layer characteristics. 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
 

Additional Inherited Members

- Public Types inherited from inet::physicallayer::ErrorModelBase
enum  CorruptionMode {
  CorruptionMode::CM_UNDEFINED = -1, CorruptionMode::CM_PACKET, CorruptionMode::CM_CHUNK, CorruptionMode::CM_BYTE,
  CorruptionMode::CM_BIT
}
 
enum  SnirMode { SnirMode::SM_UNDEFINED = -1, SnirMode::SM_MIN, SnirMode::SM_MEAN }
 
- 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) }
 
- Protected Member Functions inherited from inet::physicallayer::ErrorModelBase
virtual void initialize (int stage) override
 
virtual double getScalarSnir (const ISnir *snir) const
 
virtual bool hasProbabilisticError (b length, double ber) const
 
virtual PacketcorruptBits (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptBytes (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptChunks (const Packet *packet, double ber, bool &isCorrupted) const
 
virtual PacketcorruptPacket (const Packet *packet, bool &isCorrupted) const
 
virtual PacketcomputeCorruptedPacket (const Packet *packet, double ber) const
 
virtual PacketcomputeCorruptedPacket (const ISnir *snir) const override
 
- Protected Attributes inherited from inet::physicallayer::ErrorModelBase
CorruptionMode corruptionMode = CorruptionMode::CM_UNDEFINED
 
SnirMode snirMode = SnirMode::SM_UNDEFINED
 
double snirOffset = NaN
 

Detailed Description

Implements the ApskErrorModel model, see the NED file for details.

Member Function Documentation

◆ computeBitErrorRate()

double inet::physicallayer::ApskErrorModel::computeBitErrorRate ( const ISnir snir,
IRadioSignal::SignalPart  part 
) const
overridevirtual

Returns the bit error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics.

Implements inet::physicallayer::IErrorModel.

52 {
53  Enter_Method("computeBitErrorRate");
54  const FlatTransmissionBase *flatTransmission = check_and_cast<const FlatTransmissionBase *>(snir->getReception()->getTransmission());
55  const ApskModulationBase *modulation = check_and_cast<const ApskModulationBase *>(flatTransmission->getModulation());
56  return modulation->calculateBER(getScalarSnir(snir), flatTransmission->getBandwidth(), flatTransmission->getBitrate());
57 }

Referenced by computePacketErrorRate().

◆ computePacketErrorRate()

double inet::physicallayer::ApskErrorModel::computePacketErrorRate ( const ISnir snir,
IRadioSignal::SignalPart  part 
) const
overridevirtual

Returns the packet error rate based on SNIR, modulation, FEC encoding and any other physical layer characteristics.

Implements inet::physicallayer::IErrorModel.

25 {
26  Enter_Method("computePacketErrorRate");
27  double bitErrorRate = computeBitErrorRate(snir, part);
28  if (bitErrorRate == 0.0)
29  return 0.0;
30  else if (bitErrorRate == 1.0)
31  return 1.0;
32  else {
33  const FlatTransmissionBase *flatTransmission = check_and_cast<const FlatTransmissionBase *>(snir->getReception()->getTransmission());
34  double headerSuccessRate = pow(1.0 - bitErrorRate, b(flatTransmission->getHeaderLength()).get());
35  double dataSuccessRate = pow(1.0 - bitErrorRate, b(flatTransmission->getDataLength()).get());
36  switch (part) {
38  return 1.0 - headerSuccessRate * dataSuccessRate;
40  return 0;
42  return 1.0 - headerSuccessRate;
44  return 1.0 - dataSuccessRate;
45  default:
46  throw cRuntimeError("Unknown signal part: '%s'", IRadioSignal::getSignalPartName(part));
47  }
48  }
49 }

◆ computeSymbolErrorRate()

double inet::physicallayer::ApskErrorModel::computeSymbolErrorRate ( const ISnir snir,
IRadioSignal::SignalPart  part 
) const
overridevirtual

Returns the symbol error rate based on SNIR, modulation, and any other physical layer characteristics.

Implements inet::physicallayer::IErrorModel.

60 {
61  Enter_Method("computeSymbolErrorRate");
62  const FlatTransmissionBase *flatTransmission = check_and_cast<const FlatTransmissionBase *>(snir->getReception()->getTransmission());
63  const ApskModulationBase *modulation = check_and_cast<const ApskModulationBase *>(flatTransmission->getModulation());
64  return modulation->calculateSER(getScalarSnir(snir), flatTransmission->getBandwidth(), flatTransmission->getBitrate());
65 }

◆ printToStream()

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

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

20 {
21  return stream << "ApskErrorModel";
22 }

The documentation for this class was generated from the following files:
inet::physicallayer::IRadioSignal::SIGNAL_PART_WHOLE
@ SIGNAL_PART_WHOLE
Definition: IRadioSignal.h:26
inet::physicallayer::ApskErrorModel::computeBitErrorRate
virtual double computeBitErrorRate(const ISnir *snir, IRadioSignal::SignalPart part) const override
Returns the bit error rate based on SNIR, modulation, FEC encoding and any other physical layer chara...
Definition: ApskErrorModel.cc:51
inet::physicallayer::IRadioSignal::SIGNAL_PART_HEADER
@ SIGNAL_PART_HEADER
Definition: IRadioSignal.h:28
inet::physicallayer::IRadioSignal::SIGNAL_PART_PREAMBLE
@ SIGNAL_PART_PREAMBLE
Definition: IRadioSignal.h:27
inet::physicallayer::IRadioSignal::getSignalPartName
static const char * getSignalPartName(SignalPart signalPart)
Returns the name of the provided signal part.
Definition: IRadioSignal.cc:23
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::physicallayer::IRadioSignal::SIGNAL_PART_DATA
@ SIGNAL_PART_DATA
Definition: IRadioSignal.h:29
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::physicallayer::ErrorModelBase::getScalarSnir
virtual double getScalarSnir(const ISnir *snir) const
Definition: ErrorModelBase.cc:41