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

#include <ConvolutionalCode.h>

Inheritance diagram for inet::physicallayer::ConvolutionalCode:
inet::physicallayer::IForwardErrorCorrection inet::IPrintableObject inet::physicallayer::Ieee80211ConvolutionalCode

Public Member Functions

 ConvolutionalCode (const char *transferFunctionMatrix, const char *puncturingMatrix, const char *constraintLengthVector, int codeRatePuncturingK, int codeRatePuncturingN, const char *mode)
 
int getCodeRatePuncturingK () const
 
int getCodeRatePuncturingN () const
 
const char * getConstraintLengthVector () const
 
const char * getMode () const
 
const char * getPuncturingMatrix () const
 
const char * getTransferFunctionMatrix () const
 
std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
virtual double getCodeRate () const override
 
virtual int getEncodedLength (int decodedLength) const override
 
virtual int getDecodedLength (int encodedLength) const override
 
virtual double computeNetBitErrorRate (double grossBitErrorRate) const override
 
- 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

const char * transferFunctionMatrix
 
const char * puncturingMatrix
 
const char * constraintLengthVector
 
int codeRatePuncturingK
 
int codeRatePuncturingN
 
int memory
 
const char * mode
 

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

◆ ConvolutionalCode()

inet::physicallayer::ConvolutionalCode::ConvolutionalCode ( const char *  transferFunctionMatrix,
const char *  puncturingMatrix,
const char *  constraintLengthVector,
int  codeRatePuncturingK,
int  codeRatePuncturingN,
const char *  mode 
)
15  :
21  memory(0),
22  mode(mode)
23 {
24  cStringTokenizer tokenizer(constraintLengthVector);
25  while (tokenizer.hasMoreTokens())
26  memory = std::max(memory, atoi(tokenizer.nextToken()) - 1);
27 }

Member Function Documentation

◆ computeNetBitErrorRate()

double inet::physicallayer::ConvolutionalCode::computeNetBitErrorRate ( double  grossBitErrorRate) const
overridevirtual

Implements inet::physicallayer::IForwardErrorCorrection.

57 {
58  double p = grossBitErrorRate;
59  double netBitErrorRate;
60  if (codeRatePuncturingK == 1 && codeRatePuncturingN == 2) {
61  if (memory == 1)
62  netBitErrorRate = pow(p, 2) * (14 - 23 * p + 16 * pow(p, 2) + 2 * pow(p, 3) - 16 * pow(p, 4) + 8 * pow(p, 5))
63  / ((1 + 3 * pow(p, 2) - 2 * pow(p, 3)) * (2 - p + 4 * pow(p, 2) - 4 * pow(p, 3)));
64  else if (memory == 2)
65  netBitErrorRate = 44 * pow(p, 3) + 3519.0 / 8.0 * pow(p, 4) - 14351.0 / 32.0 * pow(p, 5) - 1267079.0 / 64.0 * pow(p, 6) - 31646405.0 / 512.0 * pow(p, 7) + 978265739.0 / 2048.0 * pow(p, 8) + 3931764263.0 / 1024.0 * pow(p, 9) - 48978857681.0 / 32768.0 * pow(p, 10);
66  else
67  throw cRuntimeError("Not yet implemented");
68  }
69  else
70  throw cRuntimeError("Not yet implemented");
71  return math::maxnan(math::minnan(netBitErrorRate, 1.0), 0.0);
72 }

◆ getCodeRate()

◆ getCodeRatePuncturingK()

◆ getCodeRatePuncturingN()

◆ getConstraintLengthVector()

const char* inet::physicallayer::ConvolutionalCode::getConstraintLengthVector ( ) const
inline

◆ getDecodedLength()

int inet::physicallayer::ConvolutionalCode::getDecodedLength ( int  encodedLength) const
overridevirtual

◆ getEncodedLength()

int inet::physicallayer::ConvolutionalCode::getEncodedLength ( int  decodedLength) const
overridevirtual

◆ getMode()

const char* inet::physicallayer::ConvolutionalCode::getMode ( ) const
inline

◆ getPuncturingMatrix()

const char* inet::physicallayer::ConvolutionalCode::getPuncturingMatrix ( ) const
inline

◆ getTransferFunctionMatrix()

const char* inet::physicallayer::ConvolutionalCode::getTransferFunctionMatrix ( ) const
inline

◆ printToStream()

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

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

30 {
31  stream << "ConvolutionalCode";
32  if (level <= PRINT_LEVEL_TRACE)
33  stream << EV_FIELD(codeRatePuncturingK)
35  return stream;
36 }

Member Data Documentation

◆ codeRatePuncturingK

◆ codeRatePuncturingN

◆ constraintLengthVector

const char* inet::physicallayer::ConvolutionalCode::constraintLengthVector
protected

Referenced by ConvolutionalCode().

◆ memory

int inet::physicallayer::ConvolutionalCode::memory
protected

◆ mode

const char* inet::physicallayer::ConvolutionalCode::mode
protected

◆ puncturingMatrix

const char* inet::physicallayer::ConvolutionalCode::puncturingMatrix
protected

◆ transferFunctionMatrix

const char* inet::physicallayer::ConvolutionalCode::transferFunctionMatrix
protected

The documentation for this class was generated from the following files:
inet::physicallayer::ConvolutionalCode::constraintLengthVector
const char * constraintLengthVector
Definition: ConvolutionalCode.h:21
inet::physicallayer::ConvolutionalCode::codeRatePuncturingN
int codeRatePuncturingN
Definition: ConvolutionalCode.h:23
inet::physicallayer::ConvolutionalCode::transferFunctionMatrix
const char * transferFunctionMatrix
Definition: ConvolutionalCode.h:19
inet::physicallayer::ConvolutionalCode::memory
int memory
Definition: ConvolutionalCode.h:24
inet::physicallayer::ConvolutionalCode::mode
const char * mode
Definition: ConvolutionalCode.h:25
inet::physicallayer::ConvolutionalCode::codeRatePuncturingK
int codeRatePuncturingK
Definition: ConvolutionalCode.h:22
inet::math::maxnan
const T maxnan(const T &a, const T &b)
This function properly and symmetrically handles NaNs in contrast with std::max and std::fmax.
Definition: INETMath.h:234
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::sctp::max
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
inet::math::minnan
const T minnan(const T &a, const T &b)
This function properly and symmetrically handles NaNs in contrast with std::min and std::fmin.
Definition: INETMath.h:216
inet::physicallayer::ConvolutionalCode::puncturingMatrix
const char * puncturingMatrix
Definition: ConvolutionalCode.h:20