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

Base class for gray coded rectangular quadrature amplitude modulations. More...

#include <MqamModulationBase.h>

Inheritance diagram for inet::physicallayer::MqamModulationBase:
inet::physicallayer::ApskModulationBase inet::physicallayer::IApskModulation inet::physicallayer::IModulation inet::IPrintableObject inet::physicallayer::BpskModulation inet::physicallayer::MqamModulation inet::physicallayer::Qam1024Modulation inet::physicallayer::Qam16Modulation inet::physicallayer::Qam256Modulation inet::physicallayer::Qam64Modulation inet::physicallayer::QbpskModulation inet::physicallayer::QpskModulation

Public Member Functions

 MqamModulationBase (double normalizationFactor, const std::vector< ApskSymbol > *constellation)
 
virtual double getNormalizationFactor () const
 
virtual double calculateSER (double snir, Hz bandwidth, bps bitrate) const override
 Returns the symbol error rate as a function of the signal to noise and interference ratio, the bandwidth, and the gross (physical) bitrate. More...
 
virtual double calculateBER (double snir, Hz bandwidth, bps bitrate) const override
 Returns the bit error rate as a function of the signal to noise and interference ratio, the bandwidth, and the gross (physical) bitrate. More...
 
- Public Member Functions inherited from inet::physicallayer::ApskModulationBase
 ApskModulationBase (const std::vector< ApskSymbol > *constellation)
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
virtual const std::vector< ApskSymbol > * getConstellation () const
 
virtual unsigned int getConstellationSize () const override
 
virtual unsigned int getCodeWordSize () const override
 
virtual const ApskSymbolmapToConstellationDiagram (const ShortBitVector &symbol) const
 
virtual ShortBitVector demapToBitRepresentation (const ApskSymbol *symbol) const
 
- 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 Attributes

double normalizationFactor = NaN
 
- Protected Attributes inherited from inet::physicallayer::ApskModulationBase
const std::vector< ApskSymbol > * constellation
 
const unsigned int codeWordSize
 
const unsigned int constellationSize
 

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) }
 
- Static Public Member Functions inherited from inet::physicallayer::ApskModulationBase
const static ApskModulationBasefindModulation (const char *name)
 

Detailed Description

Base class for gray coded rectangular quadrature amplitude modulations.

Constructor & Destructor Documentation

◆ MqamModulationBase()

inet::physicallayer::MqamModulationBase::MqamModulationBase ( double  normalizationFactor,
const std::vector< ApskSymbol > *  constellation 
)

Member Function Documentation

◆ calculateBER()

double inet::physicallayer::MqamModulationBase::calculateBER ( double  snir,
Hz  bandwidth,
bps  bitrate 
) const
overridevirtual

Returns the bit error rate as a function of the signal to noise and interference ratio, the bandwidth, and the gross (physical) bitrate.

Implements inet::physicallayer::IModulation.

Reimplemented in inet::physicallayer::BpskModulation, and inet::physicallayer::QbpskModulation.

33 {
34  double EbN0 = snir * bandwidth.get() / bitrate.get();
35  // http://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#Rectangular_QAM
36  double ber = 4.0 / codeWordSize * (1 - 1 / sqrt(constellationSize)) * 0.5 * erfc(1 / sqrt(2) * sqrt(3.0 * codeWordSize / (constellationSize - 1) * EbN0));
37  ASSERT(0.0 <= ber && ber <= 1.0);
38  return ber;
39 }

◆ calculateSER()

double inet::physicallayer::MqamModulationBase::calculateSER ( double  snir,
Hz  bandwidth,
bps  bitrate 
) const
overridevirtual

Returns the symbol error rate as a function of the signal to noise and interference ratio, the bandwidth, and the gross (physical) bitrate.

Implements inet::physicallayer::IModulation.

Reimplemented in inet::physicallayer::BpskModulation, and inet::physicallayer::QbpskModulation.

21 {
22  // http://en.wikipedia.org/wiki/Eb/N0
23  double EbN0 = snir * bandwidth.get() / bitrate.get();
24  double EsN0 = EbN0 * log2(constellationSize);
25  // http://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#Rectangular_QAM
26  double Psc = 2 * (1 - 1 / sqrt(constellationSize)) * 0.5 * erfc(1 / sqrt(2) * sqrt(3.0 / (constellationSize - 1) * EsN0));
27  double ser = 1 - (1 - Psc) * (1 - Psc);
28  ASSERT(0.0 <= ser && ser <= 1.0);
29  return ser;
30 }

◆ getNormalizationFactor()

virtual double inet::physicallayer::MqamModulationBase::getNormalizationFactor ( ) const
inlinevirtual
28 { return normalizationFactor; }

Member Data Documentation

◆ normalizationFactor

double inet::physicallayer::MqamModulationBase::normalizationFactor = NaN
protected

The documentation for this class was generated from the following files:
inet::physicallayer::ApskModulationBase::ApskModulationBase
ApskModulationBase(const std::vector< ApskSymbol > *constellation)
Definition: ApskModulationBase.cc:23
inet::physicallayer::MqamModulationBase::normalizationFactor
double normalizationFactor
Definition: MqamModulationBase.h:23
inet::units::sqrt
value< Value, pow< Unit, 1, 2 > > sqrt(const value< Value, Unit > &a)
Definition: Units.h:272
inet::physicallayer::ApskModulationBase::constellationSize
const unsigned int constellationSize
Definition: ApskModulationBase.h:27
inet::physicallayer::ApskModulationBase::codeWordSize
const unsigned int codeWordSize
Definition: ApskModulationBase.h:26
inet::physicallayer::ApskModulationBase::constellation
const std::vector< ApskSymbol > * constellation
Definition: ApskModulationBase.h:25