|
INET Framework for OMNeT++/OMNEST
|
#include <ConvolutionalCoder.h>
|
| bool | eXOR (bool alpha, bool beta) const |
| |
| void | setTransferFunctionMatrix (std::vector< std::vector< int >> &transferFMatrix) |
| |
| ShortBitVector | inputSymbolToOutputSymbol (const ShortBitVector &state, const ShortBitVector &inputSymbol) const |
| |
| bool | modulo2Adder (const ShortBitVector &shiftRegisters, const ShortBitVector &generatorPolynomial) const |
| |
| ShortBitVector | giveNextOutputSymbol (const BitVector &encodedBits, int decodedLength, const BitVector &isPunctured, ShortBitVector &excludedFromHammingDistance) const |
| |
| BitVector | puncturing (const BitVector &informationBits) const |
| |
| BitVector | depuncturing (const BitVector &decodedBits, BitVector &isPunctured) const |
| |
| BitVector | getPuncturedIndices (unsigned int length) const |
| |
| unsigned int | computeHammingDistance (const ShortBitVector &u, const ShortBitVector &excludedBits, const ShortBitVector &w) const |
| |
| void | updateTrellisGraph (TrellisGraphNode **trellisGraph, unsigned int time, const ShortBitVector &outputSymbol, const ShortBitVector &excludedFromHammingDistance) const |
| |
| bool | isCompletelyDecoded (unsigned int encodedLength, unsigned int decodedLength) const |
| |
| void | initParameters () |
| |
| void | memoryAllocations () |
| |
| void | computeHammingDistanceLookupTable () |
| |
| void | computeMemorySizes () |
| |
| void | computeMemorySizeSum () |
| |
| void | computeNumberOfStates () |
| |
| void | computeNumberOfInputAndOutputSymbols () |
| |
| void | computeStateTransitions () |
| |
| void | computeOutputAndInputSymbols () |
| |
| void | computeDecimalToOutputSymbolVector () |
| |
| void | printStateTransitions () const |
| |
| void | printOutputs () const |
| |
| void | printTransferFunctionMatrix () const |
| |
| void | parseMatrix (const char *strMatrix, std::vector< std::vector< int >> &matrix) const |
| |
| void | parseVector (const char *strVector, std::vector< int > &vector) const |
| |
| void | convertToShortBitVectorMatrix (std::vector< std::vector< int >> &matrix, std::vector< ShortBitVector > &boolMatrix) const |
| |
| ShortBitVector | octalToBinary (int octalNum, int fixedSize) const |
| |
| int | octalToDec (int octalNum) const |
| |
| std::pair< BitVector, bool > | traversePath (const TrellisGraphNode &bestNode, TrellisGraphNode **bestPaths, bool isTruncatedMode) const |
| |
◆ ShortBitVectorMatrix
◆ ConvolutionalCoder()
| inet::physicallayer::ConvolutionalCoder::ConvolutionalCoder |
( |
const ConvolutionalCode * |
convolutionalCode | ) |
|
494 if (strcmp(
mode,
"terminated") && strcmp(
mode,
"truncated"))
495 throw cRuntimeError(
"Unknown (= %s ) coding mode",
mode);
499 std::vector<std::vector<int>> pMatrix;
502 std::vector<std::vector<int>> transferFMatrix;
503 parseMatrix(strTransferFunctionMatrix, transferFMatrix);
506 for (
unsigned int i = 0; i < transferFMatrix.size(); i++) {
507 for (
unsigned int j = 0; j < transferFMatrix.at(i).size(); j++) {
508 int decPolynom =
octalToDec(transferFMatrix.at(i).at(j));
510 if (decPolynom >= pow(2, constraintLength))
511 throw cRuntimeError(
"Code size is greater then constraint length");
517 throw cRuntimeError(
"Transfer function matrix must be a k-by-n matrix of octal numbers");
519 throw cRuntimeError(
"Constraint length vector must be a 1-by-k vector of integers");
521 throw cRuntimeError(
"Puncturing matrix must be a n-by-arbitrary bool matrix");
◆ ~ConvolutionalCoder()
| inet::physicallayer::ConvolutionalCoder::~ConvolutionalCoder |
( |
| ) |
|
◆ computeDecimalToOutputSymbolVector()
| void inet::physicallayer::ConvolutionalCoder::computeDecimalToOutputSymbolVector |
( |
| ) |
|
|
protected |
◆ computeHammingDistance()
88 if (u.isEmpty() || w.isEmpty())
89 throw cRuntimeError(
"You can't compute the Hamming distance between undefined BitVectors");
90 if (u.getSize() != w.getSize())
91 throw cRuntimeError(
"You can't compute Hamming distance between two vectors with different sizes");
92 #endif // ifndef NDEBUG
Referenced by updateTrellisGraph().
◆ computeHammingDistanceLookupTable()
| void inet::physicallayer::ConvolutionalCoder::computeHammingDistanceLookupTable |
( |
| ) |
|
|
protected |
174 unsigned int hammingDistance = i ^ j;
175 hammingDistance = hammingDistance &
k;
176 hammingDistance = hammingDistance - ((hammingDistance >> 1) & 0x55555555);
177 hammingDistance = (hammingDistance & 0x33333333) + ((hammingDistance >> 2) & 0x33333333);
Referenced by initParameters().
◆ computeMemorySizes()
| void inet::physicallayer::ConvolutionalCoder::computeMemorySizes |
( |
| ) |
|
|
protected |
◆ computeMemorySizeSum()
| void inet::physicallayer::ConvolutionalCoder::computeMemorySizeSum |
( |
| ) |
|
|
protected |
◆ computeNumberOfInputAndOutputSymbols()
| void inet::physicallayer::ConvolutionalCoder::computeNumberOfInputAndOutputSymbols |
( |
| ) |
|
|
protected |
◆ computeNumberOfStates()
| void inet::physicallayer::ConvolutionalCoder::computeNumberOfStates |
( |
| ) |
|
|
protected |
◆ computeOutputAndInputSymbols()
| void inet::physicallayer::ConvolutionalCoder::computeOutputAndInputSymbols |
( |
| ) |
|
|
protected |
111 int decOutputSymbol = outputSymbol.reverseToDecimal();
112 int reverseDec = state.reverseToDecimal();
114 inputSymbols[reverseDec][decOutputSymbol] = decInputSymbol;
Referenced by initParameters().
◆ computeStateTransitions()
| void inet::physicallayer::ConvolutionalCoder::computeStateTransitions |
( |
| ) |
|
|
protected |
247 ShortBitVector shiftedState = state;
248 shiftedState.leftShift(1);
250 ShortBitVector nextState = shiftedState;
253 for (
int m = inputSymbol.getSize() - 1;
m >= 0;
m--) {
254 nextState.setBit(shift, inputSymbol.getBit(
m));
257 stateTransitions[state.reverseToDecimal()][inputSymbol.reverseToDecimal()] = nextState.reverseToDecimal();
Referenced by initParameters().
◆ convertToShortBitVectorMatrix()
| void inet::physicallayer::ConvolutionalCoder::convertToShortBitVectorMatrix |
( |
std::vector< std::vector< int >> & |
matrix, |
|
|
std::vector< ShortBitVector > & |
boolMatrix |
|
) |
| const |
|
protected |
304 for (
auto& elem : matrix) {
305 std::vector<int> matrixRow = elem;
307 for (
auto& matrixRow_j : matrixRow) {
308 if (matrixRow_j == 1)
310 else if (matrixRow_j == 0)
311 row.appendBit(
false);
313 throw cRuntimeError(
"A bool matrix only contains 0-1 values");
315 boolMatrix.push_back(row);
Referenced by ConvolutionalCoder().
◆ decode()
| std::pair< BitVector, bool > inet::physicallayer::ConvolutionalCoder::decode |
( |
const BitVector & |
encodedBits | ) |
const |
|
overridevirtual |
Implements inet::physicallayer::IFecCoder.
429 BitVector isPunctured;
430 BitVector depuncturedEncodedBits =
depuncturing(encodedBits, isPunctured);
431 unsigned int encodedBitsSize = depuncturedEncodedBits.getSize();
433 throw cRuntimeError(
"Length of encodedBits must be a multiple of codeRateParamaterN = %d",
codeRateParamaterN);
434 bool isTruncatedMode =
false;
435 if (!strcmp(
mode,
"truncated"))
436 isTruncatedMode =
true;
437 else if (!strcmp(
mode,
"terminated"))
438 isTruncatedMode =
false;
440 throw cRuntimeError(
"Unknown decodingMode = %s decodingMode",
mode);
446 for (
int j = 0; j < length; j++)
447 trellisGraph[i][j] = TrellisGraphNode(-1, -1, -1, INT32_MAX, 0, 0);
450 EV_DEBUG <<
"Decoding the following bits: " << depuncturedEncodedBits << endl;
451 ShortBitVector countsOnHammingDistance;
453 ShortBitVector nextOutputSymbol =
giveNextOutputSymbol(depuncturedEncodedBits, 0, isPunctured, countsOnHammingDistance);
454 unsigned int time = 0;
455 while (!nextOutputSymbol.isEmpty()) {
458 countsOnHammingDistance = ShortBitVector();
462 TrellisGraphNode bestNode;
463 if (!isTruncatedMode)
469 if (currentNode.symbol != -1 && currentNode.comulativeHammingDistance < bestNode.comulativeHammingDistance)
470 bestNode = currentNode;
475 EV_DEBUG <<
"Recovered message: " << result.first << endl;
476 EV_DEBUG <<
"Number of errors: " << bestNode.numberOfErrors
477 <<
" Cumulative error (Hamming distance): " << bestNode.comulativeHammingDistance
478 <<
" End state: " << bestNode.state << endl;
481 EV_DEBUG <<
"None of the paths in the trellis graph lead to the all-zeros state" << endl;
Referenced by inet::physicallayer::ConvolutionalCoderModule::decode().
◆ depuncturing()
57 BitVector depuncturedDecodedBits;
59 for (
int i = 0; i < depuncturedLength; i++) {
60 if (isPunctured.getBit(i))
61 depuncturedDecodedBits.appendBit(
false);
63 depuncturedDecodedBits.appendBit(decodedBits.getBit(idx));
67 return depuncturedDecodedBits;
Referenced by decode().
◆ encode()
| BitVector inet::physicallayer::ConvolutionalCoder::encode |
( |
const BitVector & |
informationBits | ) |
const |
|
overridevirtual |
Implements inet::physicallayer::IFecCoder.
199 EV_DEBUG <<
"Encoding the following bits: " << informationBits << endl;
201 throw cRuntimeError(
"Length of informationBits must be a multiple of codeRateParamaterK = %d",
codeRateParamaterK);
202 BitVector encodedInformationBits;
205 ShortBitVector inputSymbol;
207 inputSymbol.appendBit(informationBits.getBit(j));
208 int inputSymbolDec = inputSymbol.reverseToDecimal();
209 const ShortBitVector& encodedSymbol =
outputSymbols[state][inputSymbolDec];
211 for (
unsigned int j = 0; j < encodedSymbol.getSize(); j++)
212 encodedInformationBits.appendBit(encodedSymbol.getBit(j));
214 BitVector puncturedEncodedInformationBits =
puncturing(encodedInformationBits);
215 EV_DEBUG <<
"The encoded bits are: " << puncturedEncodedInformationBits << endl;
216 return puncturedEncodedInformationBits;
Referenced by inet::physicallayer::ConvolutionalCoderModule::encode().
◆ eXOR()
| bool inet::physicallayer::ConvolutionalCoder::eXOR |
( |
bool |
alpha, |
|
|
bool |
beta |
|
) |
| const |
|
inlineprotected |
◆ getConstraintLengthVector()
| const std::vector<int>& inet::physicallayer::ConvolutionalCoder::getConstraintLengthVector |
( |
| ) |
const |
|
inline |
◆ getForwardErrorCorrection()
| const ConvolutionalCode* inet::physicallayer::ConvolutionalCoder::getForwardErrorCorrection |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getMemorySizeSum()
| unsigned int inet::physicallayer::ConvolutionalCoder::getMemorySizeSum |
( |
| ) |
const |
|
inline |
◆ getNumberOfInputSymbols()
| int inet::physicallayer::ConvolutionalCoder::getNumberOfInputSymbols |
( |
| ) |
const |
|
inline |
◆ getNumberOfOutputSymbols()
| int inet::physicallayer::ConvolutionalCoder::getNumberOfOutputSymbols |
( |
| ) |
const |
|
inline |
◆ getNumberOfStates()
| int inet::physicallayer::ConvolutionalCoder::getNumberOfStates |
( |
| ) |
const |
|
inline |
◆ getOutputTable()
| const int** inet::physicallayer::ConvolutionalCoder::getOutputTable |
( |
| ) |
const |
|
inline |
◆ getPuncturedIndices()
| BitVector inet::physicallayer::ConvolutionalCoder::getPuncturedIndices |
( |
unsigned int |
length | ) |
const |
|
protected |
26 BitVector isPunctured;
27 isPunctured.appendBit(
false, length);
32 int place = idx % puncturingMatrixSize;
Referenced by depuncturing(), and puncturing().
◆ getPuncturingMatrix()
| const std::vector<ShortBitVector>& inet::physicallayer::ConvolutionalCoder::getPuncturingMatrix |
( |
| ) |
const |
|
inline |
◆ getStateTransitionTable()
| const int** inet::physicallayer::ConvolutionalCoder::getStateTransitionTable |
( |
| ) |
const |
|
inline |
◆ getTransferFunctionMatrix()
| const ShortBitVectorMatrix& inet::physicallayer::ConvolutionalCoder::getTransferFunctionMatrix |
( |
| ) |
const |
|
inline |
◆ giveNextOutputSymbol()
265 return ShortBitVector();
267 ShortBitVector nextSymbol;
270 if (isPunctured.getBit(i))
271 countsOnHammingDistance.setBit(idx,
false);
272 nextSymbol.appendBit(encodedBits.getBit(i));
Referenced by decode().
◆ initParameters()
| void inet::physicallayer::ConvolutionalCoder::initParameters |
( |
| ) |
|
|
protected |
◆ inputSymbolToOutputSymbol()
72 ShortBitVector outputSymbol;
75 for (
int i = inputSymbol.getSize() - 1; i >= 0; i--) {
76 ShortBitVector shiftRegisters;
77 shiftRegisters.appendBit(inputSymbol.getBit(i));
79 shiftRegisters.appendBit((
unsigned int)
k >= state.getSize() ?
false : state.getBit(
k));
81 for (
unsigned int j = 0; j < row.size(); j++) {
82 const ShortBitVector& generatorPolynomial = row.at(j);
83 outputSymbol.setBit(j,
eXOR(outputSymbol.getBit(j),
modulo2Adder(shiftRegisters, generatorPolynomial)));
Referenced by computeOutputAndInputSymbols().
◆ isCompletelyDecoded()
| bool inet::physicallayer::ConvolutionalCoder::isCompletelyDecoded |
( |
unsigned int |
encodedLength, |
|
|
unsigned int |
decodedLength |
|
) |
| const |
|
protected |
◆ memoryAllocations()
| void inet::physicallayer::ConvolutionalCoder::memoryAllocations |
( |
| ) |
|
|
protected |
◆ modulo2Adder()
| bool inet::physicallayer::ConvolutionalCoder::modulo2Adder |
( |
const ShortBitVector & |
shiftRegisters, |
|
|
const ShortBitVector & |
generatorPolynomial |
|
) |
| const |
|
protected |
93 for (
unsigned int i = 0; i < generatorPolynomial.getSize(); i++) {
94 if (generatorPolynomial.getBit(i))
95 sum =
eXOR(sum, shiftRegisters.getBit(i));
Referenced by inputSymbolToOutputSymbol().
◆ octalToBinary()
| ShortBitVector inet::physicallayer::ConvolutionalCoder::octalToBinary |
( |
int |
octalNum, |
|
|
int |
fixedSize |
|
) |
| const |
|
protected |
321 unsigned int powerOfEight = 1;
322 unsigned int decimal = 0;
323 while (octalNum > 0) {
324 unsigned int octalDigit = octalNum % 10;
326 decimal += octalDigit * powerOfEight;
329 return ShortBitVector(decimal, fixedSize);
Referenced by setTransferFunctionMatrix().
◆ octalToDec()
| int inet::physicallayer::ConvolutionalCoder::octalToDec |
( |
int |
octalNum | ) |
const |
|
protected |
528 int powersOfEight = 1;
530 while (octalNum != 0) {
531 int octDigit = octalNum % 10;
532 decVal += octDigit * powersOfEight;
Referenced by ConvolutionalCoder().
◆ parseMatrix()
| void inet::physicallayer::ConvolutionalCoder::parseMatrix |
( |
const char * |
strMatrix, |
|
|
std::vector< std::vector< int >> & |
matrix |
|
) |
| const |
|
protected |
287 cStringTokenizer tokenizer(strMatrix,
";");
288 while (tokenizer.hasMoreTokens()) {
289 std::vector<int> row;
291 matrix.push_back(row);
Referenced by ConvolutionalCoder().
◆ parseVector()
| void inet::physicallayer::ConvolutionalCoder::parseVector |
( |
const char * |
strVector, |
|
|
std::vector< int > & |
vector |
|
) |
| const |
|
protected |
297 cStringTokenizer tokenizer(strVector);
298 while (tokenizer.hasMoreTokens())
299 vector.push_back(atoi(tokenizer.nextToken()));
Referenced by ConvolutionalCoder(), and parseMatrix().
◆ printOutputs()
| void inet::physicallayer::ConvolutionalCoder::printOutputs |
( |
| ) |
const |
|
protected |
221 std::cout <<
"Outputs" << endl;
228 std::cout <<
"End Outputs" << endl;
◆ printStateTransitions()
| void inet::physicallayer::ConvolutionalCoder::printStateTransitions |
( |
| ) |
const |
|
protected |
233 std::cout <<
"State transitions" << endl;
240 std::cout <<
"End State transitions" << endl;
◆ printToStream()
| std::ostream & inet::physicallayer::ConvolutionalCoder::printToStream |
( |
std::ostream & |
stream, |
|
|
int |
level, |
|
|
int |
evFlags = 0 |
|
) |
| const |
|
overridevirtual |
◆ printTransferFunctionMatrix()
| void inet::physicallayer::ConvolutionalCoder::printTransferFunctionMatrix |
( |
| ) |
const |
|
protected |
350 std::cout <<
"Transfer function matrix" << endl;
352 std::cout << elem.at(0);
353 for (
unsigned int j = 1; j < elem.size(); j++)
354 std::cout <<
"," << elem.at(j);
◆ puncturing()
| BitVector inet::physicallayer::ConvolutionalCoder::puncturing |
( |
const BitVector & |
informationBits | ) |
const |
|
protected |
43 BitVector puncturedInformationBits;
45 for (
unsigned int i = 0; i < informationBits.getSize(); i++)
46 if (!isPunctured.getBit(i))
47 puncturedInformationBits.appendBit(informationBits.getBit(i));
48 return puncturedInformationBits;
Referenced by encode().
◆ setTransferFunctionMatrix()
| void inet::physicallayer::ConvolutionalCoder::setTransferFunctionMatrix |
( |
std::vector< std::vector< int >> & |
transferFMatrix | ) |
|
|
protected |
334 for (
unsigned int i = 0; i < transferFMatrix.size(); i++) {
335 const std::vector<int>& row = transferFMatrix.at(i);
336 std::vector<ShortBitVector> bitRow;
337 for (
auto& elem : row) {
339 ShortBitVector reverseBin;
340 for (
int k = bin.getSize() - 1;
k >= 0;
k--)
341 reverseBin.appendBit(bin.getBit(
k));
342 bitRow.push_back(reverseBin);
Referenced by ConvolutionalCoder().
◆ traversePath()
410 if (!isTruncatedMode && bestNode.symbol == -1)
411 return std::pair<BitVector, bool>(BitVector(),
false);
412 TrellisGraphNode path = bestNode;
413 BitVector reverseDecodedBits;
414 int depth = bestNode.depth;
417 for (
int i = inputSymbol.getSize() - 1; i >= 0; i--)
418 reverseDecodedBits.
appendBit(inputSymbol.getBit(i));
421 BitVector decodedBits;
422 for (
int i = reverseDecodedBits.getSize() - 1; i >= 0; i--)
423 decodedBits.appendBit(reverseDecodedBits.getBit(i));
424 return std::pair<BitVector, bool>(decodedBits,
true);
Referenced by decode().
◆ updateTrellisGraph()
369 int tieBreakingCounter = 0;
370 for (
int prevState = 0; prevState !=
numberOfStates; prevState++) {
371 const TrellisGraphNode& node =
trellisGraph[prevState][time];
374 if (feasibleDecodedSymbol != -1) {
376 int hammingDistance =
computeHammingDistance(outputSymbol, excludedFromHammingDistance, otherOutputSymbol);
378 int cumulativeHammingDistance = hammingDistance;
379 if (node.comulativeHammingDistance != INT32_MAX)
380 cumulativeHammingDistance += node.comulativeHammingDistance;
381 TrellisGraphNode& best =
trellisGraph[newState][time + 1];
382 bool replace =
false;
383 if (cumulativeHammingDistance == best.comulativeHammingDistance) {
384 tieBreakingCounter++;
385 if (
RNGCONTEXT dblrand() < 1.0 / tieBreakingCounter)
388 else if (cumulativeHammingDistance < best.comulativeHammingDistance) {
389 tieBreakingCounter = 0;
393 best.state = newState;
394 best.prevState = prevState;
395 best.depth = node.depth + 1;
396 best.comulativeHammingDistance = cumulativeHammingDistance;
397 if (hammingDistance > 0)
398 best.numberOfErrors = node.numberOfErrors + 1;
400 best.numberOfErrors = node.numberOfErrors;
401 best.symbol = feasibleDecodedSymbol;
Referenced by decode().
◆ codeRateParamaterK
| unsigned int inet::physicallayer::ConvolutionalCoder::codeRateParamaterK |
|
protected |
◆ codeRateParamaterN
| unsigned int inet::physicallayer::ConvolutionalCoder::codeRateParamaterN |
|
protected |
◆ codeRatePuncturingK
| unsigned int inet::physicallayer::ConvolutionalCoder::codeRatePuncturingK |
|
protected |
◆ codeRatePuncturingN
| unsigned int inet::physicallayer::ConvolutionalCoder::codeRatePuncturingN |
|
protected |
◆ constraintLengths
| std::vector<int> inet::physicallayer::ConvolutionalCoder::constraintLengths |
|
protected |
◆ convolutionalCode
◆ decimalToInputSymbol
| ShortBitVector* inet::physicallayer::ConvolutionalCoder::decimalToInputSymbol |
|
protected |
◆ decimalToOutputSymbol
| ShortBitVector* inet::physicallayer::ConvolutionalCoder::decimalToOutputSymbol |
|
protected |
◆ hammingDistanceLookupTable
| unsigned char*** inet::physicallayer::ConvolutionalCoder::hammingDistanceLookupTable |
|
protected |
◆ inputSymbols
| int** inet::physicallayer::ConvolutionalCoder::inputSymbols |
|
protected |
◆ memorySizes
| std::vector<int> inet::physicallayer::ConvolutionalCoder::memorySizes |
|
protected |
◆ memorySizeSum
| int inet::physicallayer::ConvolutionalCoder::memorySizeSum |
|
protected |
◆ mode
| const char* inet::physicallayer::ConvolutionalCoder::mode |
|
protected |
◆ numberOfInputSymbols
| int inet::physicallayer::ConvolutionalCoder::numberOfInputSymbols |
|
protected |
◆ numberOfOutputSymbols
| int inet::physicallayer::ConvolutionalCoder::numberOfOutputSymbols |
|
protected |
◆ numberOfStates
| int inet::physicallayer::ConvolutionalCoder::numberOfStates |
|
protected |
◆ outputSymbols
| ShortBitVector** inet::physicallayer::ConvolutionalCoder::outputSymbols |
|
protected |
◆ puncturingMatrix
| std::vector<ShortBitVector> inet::physicallayer::ConvolutionalCoder::puncturingMatrix |
|
protected |
◆ stateTransitions
| int** inet::physicallayer::ConvolutionalCoder::stateTransitions |
|
protected |
◆ transferFunctionMatrix
◆ trellisGraph
| std::vector<std::vector<TrellisGraphNode> > inet::physicallayer::ConvolutionalCoder::trellisGraph |
|
protected |
The documentation for this class was generated from the following files:
const char * mode
Definition: ConvolutionalCoder.h:56
unsigned int codeRateParamaterK
Definition: ConvolutionalCoder.h:57
unsigned int codeRatePuncturingK
Definition: ConvolutionalCoder.h:58
int getCodeRatePuncturingK() const
Definition: ConvolutionalCode.h:30
ShortBitVector giveNextOutputSymbol(const BitVector &encodedBits, int decodedLength, const BitVector &isPunctured, ShortBitVector &excludedFromHammingDistance) const
Definition: ConvolutionalCoder.cc:262
int ** inputSymbols
Definition: ConvolutionalCoder.h:67
unsigned char *** hammingDistanceLookupTable
Definition: ConvolutionalCoder.h:72
void updateTrellisGraph(TrellisGraphNode **trellisGraph, unsigned int time, const ShortBitVector &outputSymbol, const ShortBitVector &excludedFromHammingDistance) const
Definition: ConvolutionalCoder.cc:367
#define RNGCONTEXT
Definition: INETDefs.h:82
std::vector< std::vector< TrellisGraphNode > > trellisGraph
Definition: ConvolutionalCoder.h:73
void computeDecimalToOutputSymbolVector()
Definition: ConvolutionalCoder.cc:359
bool isCompletelyDecoded(unsigned int encodedLength, unsigned int decodedLength) const
Definition: ConvolutionalCoder.cc:278
int numberOfStates
Definition: ConvolutionalCoder.h:62
int octalToDec(int octalNum) const
Definition: ConvolutionalCoder.cc:526
unsigned int reverseToDecimal() const
Definition: ShortBitVector.h:40
void computeNumberOfStates()
Definition: ConvolutionalCoder.cc:151
unsigned int codeRatePuncturingN
Definition: ConvolutionalCoder.h:58
const char * getConstraintLengthVector() const
Definition: ConvolutionalCode.h:32
int memorySizeSum
Definition: ConvolutionalCoder.h:59
ShortBitVector ** outputSymbols
Definition: ConvolutionalCoder.h:68
int numberOfOutputSymbols
Definition: ConvolutionalCoder.h:64
void computeStateTransitions()
Definition: ConvolutionalCoder.cc:243
unsigned int codeRateParamaterN
Definition: ConvolutionalCoder.h:57
ShortBitVector * decimalToInputSymbol
Definition: ConvolutionalCoder.h:69
void parseMatrix(const char *strMatrix, std::vector< std::vector< int >> &matrix) const
Definition: ConvolutionalCoder.cc:285
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
void setTransferFunctionMatrix(std::vector< std::vector< int >> &transferFMatrix)
Definition: ConvolutionalCoder.cc:332
bool eXOR(bool alpha, bool beta) const
Definition: ConvolutionalCoder.h:77
void computeMemorySizes()
Definition: ConvolutionalCoder.cc:145
ShortBitVector octalToBinary(int octalNum, int fixedSize) const
Definition: ConvolutionalCoder.cc:319
ShortBitVectorMatrix transferFunctionMatrix
Definition: ConvolutionalCoder.h:65
#define EV_FIELD(...)
Definition: INETDefs.h:112
void initParameters()
Definition: ConvolutionalCoder.cc:184
BitVector puncturing(const BitVector &informationBits) const
Definition: ConvolutionalCoder.cc:41
void computeNumberOfInputAndOutputSymbols()
Definition: ConvolutionalCoder.cc:156
ShortBitVector inputSymbolToOutputSymbol(const ShortBitVector &state, const ShortBitVector &inputSymbol) const
Definition: ConvolutionalCoder.cc:70
int getCodeRatePuncturingN() const
Definition: ConvolutionalCode.h:31
std::vector< ShortBitVector > puncturingMatrix
Definition: ConvolutionalCoder.h:66
void appendBit(bool value)
Definition: ShortBitVector.h:56
bool modulo2Adder(const ShortBitVector &shiftRegisters, const ShortBitVector &generatorPolynomial) const
Definition: ConvolutionalCoder.cc:90
const char * getPuncturingMatrix() const
Definition: ConvolutionalCode.h:34
const ConvolutionalCode * convolutionalCode
Definition: ConvolutionalCoder.h:74
std::vector< int > constraintLengths
Definition: ConvolutionalCoder.h:61
void computeMemorySizeSum()
Definition: ConvolutionalCoder.cc:162
void computeOutputAndInputSymbols()
Definition: ConvolutionalCoder.cc:100
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
int numberOfInputSymbols
Definition: ConvolutionalCoder.h:63
void memoryAllocations()
Definition: ConvolutionalCoder.cc:119
const double k
Definition: Qam1024Modulation.cc:14
BitVector depuncturing(const BitVector &decodedBits, BitVector &isPunctured) const
Definition: ConvolutionalCoder.cc:51
int evFlags
Definition: INETDefs.cc:12
int ** stateTransitions
Definition: ConvolutionalCoder.h:71
void parseVector(const char *strVector, std::vector< int > &vector) const
Definition: ConvolutionalCoder.cc:295
void computeHammingDistanceLookupTable()
Definition: ConvolutionalCoder.cc:169
const value< double, units::unit > alpha(7.2973525376e-3)
unsigned int computeHammingDistance(const ShortBitVector &u, const ShortBitVector &excludedBits, const ShortBitVector &w) const
Definition: ConvolutionalCoder.h:85
std::vector< int > memorySizes
Definition: ConvolutionalCoder.h:60
const char * getTransferFunctionMatrix() const
Definition: ConvolutionalCode.h:35
value< double, units::m > m
Definition: Units.h:1233
ShortBitVector * decimalToOutputSymbol
Definition: ConvolutionalCoder.h:70
const char * getMode() const
Definition: ConvolutionalCode.h:33
void convertToShortBitVectorMatrix(std::vector< std::vector< int >> &matrix, std::vector< ShortBitVector > &boolMatrix) const
Definition: ConvolutionalCoder.cc:302
std::pair< BitVector, bool > traversePath(const TrellisGraphNode &bestNode, TrellisGraphNode **bestPaths, bool isTruncatedMode) const
Definition: ConvolutionalCoder.cc:408
BitVector getPuncturedIndices(unsigned int length) const
Definition: ConvolutionalCoder.cc:24