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

#include <AdditiveScrambler.h>

Inheritance diagram for inet::physicallayer::AdditiveScrambler:
inet::physicallayer::IScrambler inet::IPrintableObject

Public Member Functions

 AdditiveScrambler (const AdditiveScrambling *scrambling)
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 
BitVector scramble (const BitVector &bits) const override
 
BitVector descramble (const BitVector &bits) const override
 
const AdditiveScramblinggetScrambling () const override
 
const BitVectorgetScramblingSequcene () 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 Member Functions

bool eXOR (bool alpha, bool beta) const
 
BitVector generateScramblingSequence (const ShortBitVector &generatorPolynomial, const ShortBitVector &seed) const
 

Protected Attributes

BitVector scramblingSequence
 
const AdditiveScramblingscrambling
 

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

◆ AdditiveScrambler()

inet::physicallayer::AdditiveScrambler::AdditiveScrambler ( const AdditiveScrambling scrambling)
56 {
57  ShortBitVector generatorPolynomial = scrambling->getGeneratorPolynomial();
58  ShortBitVector seed = scrambling->getSeed();
59  scramblingSequence = generateScramblingSequence(generatorPolynomial, seed);
60 }

Member Function Documentation

◆ descramble()

BitVector inet::physicallayer::AdditiveScrambler::descramble ( const BitVector bits) const
inlineoverridevirtual

◆ eXOR()

bool inet::physicallayer::AdditiveScrambler::eXOR ( bool  alpha,
bool  beta 
) const
inlineprotected
31 { return alpha != beta; }

Referenced by generateScramblingSequence(), and scramble().

◆ generateScramblingSequence()

BitVector inet::physicallayer::AdditiveScrambler::generateScramblingSequence ( const ShortBitVector generatorPolynomial,
const ShortBitVector seed 
) const
protected
38 {
39  BitVector scramblingSequence;
40  int sequenceLength = (int)pow(2, seed.getSize()) - 1;
41  ShortBitVector shiftRegisters = seed;
42  for (int i = 0; i < sequenceLength; i++) {
43  bool registerSum = false;
44  for (unsigned int j = 0; j < generatorPolynomial.getSize(); j++) {
45  if (generatorPolynomial.getBit(j))
46  registerSum = eXOR(shiftRegisters.getBit(j), registerSum);
47  }
48  shiftRegisters.leftShift(1);
49  shiftRegisters.setBit(0, registerSum);
50  scramblingSequence.appendBit(registerSum);
51  }
52  return scramblingSequence;
53 }

Referenced by AdditiveScrambler().

◆ getScrambling()

const AdditiveScrambling* inet::physicallayer::AdditiveScrambler::getScrambling ( ) const
inlineoverridevirtual

◆ getScramblingSequcene()

const BitVector& inet::physicallayer::AdditiveScrambler::getScramblingSequcene ( ) const
inline
41 { return scramblingSequence; }

◆ printToStream()

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

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

16 {
17  stream << "AdditiveScrambler";
18  if (level <= PRINT_LEVEL_TRACE)
19  stream << EV_FIELD(scrambling, printFieldToString(scrambling, level + 1, evFlags));
20  return stream;
21 }

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

◆ scramble()

BitVector inet::physicallayer::AdditiveScrambler::scramble ( const BitVector bits) const
overridevirtual

Implements inet::physicallayer::IScrambler.

24 {
25  EV_DEBUG << "Scrambling the following bits: " << bits << endl;
26  BitVector scrambledBits;
27  int sequenceLength = scramblingSequence.getSize();
28  for (unsigned int i = 0; i < bits.getSize(); i++) {
29  int scramblingIndex = i % sequenceLength;
30  bool scrambledBit = eXOR(bits.getBit(i), scramblingSequence.getBit(scramblingIndex));
31  scrambledBits.appendBit(scrambledBit);
32  }
33  EV_DEBUG << "The scrambled bits are: " << scrambledBits << endl;
34  return scrambledBits;
35 }

Referenced by inet::physicallayer::AdditiveScramblerModule::scramble().

Member Data Documentation

◆ scrambling

const AdditiveScrambling* inet::physicallayer::AdditiveScrambler::scrambling
protected

Referenced by AdditiveScrambler(), and printToStream().

◆ scramblingSequence

BitVector inet::physicallayer::AdditiveScrambler::scramblingSequence
protected

The documentation for this class was generated from the following files:
inet::physicallayer::AdditiveScrambler::scrambling
const AdditiveScrambling * scrambling
Definition: AdditiveScrambler.h:28
inet::physicallayer::AdditiveScrambler::scramblingSequence
BitVector scramblingSequence
Definition: AdditiveScrambler.h:27
inet::BitVector::getBit
bool getBit(int pos) const
Definition: BitVector.cc:71
inet::physicallayer::AdditiveScrambler::eXOR
bool eXOR(bool alpha, bool beta) const
Definition: AdditiveScrambler.h:31
inet::BitVector::appendBit
void appendBit(bool value)
Definition: BitVector.cc:94
inet::BitVector::getSize
unsigned int getSize() const
Definition: BitVector.h:44
inet::printFieldToString
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::physicallayer::AdditiveScrambler::scramble
BitVector scramble(const BitVector &bits) const override
Definition: AdditiveScrambler.cc:23
inet::IPrintableObject::PRINT_LEVEL_TRACE
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
inet::evFlags
int evFlags
Definition: INETDefs.cc:12
inet::physicallayer::AdditiveScrambler::generateScramblingSequence
BitVector generateScramblingSequence(const ShortBitVector &generatorPolynomial, const ShortBitVector &seed) const
Definition: AdditiveScrambler.cc:37
inet::units::constants::alpha
const value< double, units::unit > alpha(7.2973525376e-3)
inet::physicallayer::AdditiveScrambling::getSeed
const ShortBitVector & getSeed() const
Definition: AdditiveScrambling.h:29
inet::physicallayer::AdditiveScrambling::getGeneratorPolynomial
const ShortBitVector & getGeneratorPolynomial() const
Definition: AdditiveScrambling.h:28