diff options
Diffstat (limited to 'gr-fec/lib/tpc_encoder.cc')
-rw-r--r--[-rwxr-xr-x] | gr-fec/lib/tpc_encoder.cc | 349 |
1 files changed, 191 insertions, 158 deletions
diff --git a/gr-fec/lib/tpc_encoder.cc b/gr-fec/lib/tpc_encoder.cc index c9d89d7531..381235c62c 100755..100644 --- a/gr-fec/lib/tpc_encoder.cc +++ b/gr-fec/lib/tpc_encoder.cc @@ -31,103 +31,123 @@ #include <stdio.h> #include <vector> -#include <algorithm> // for std::reverse -#include <string.h> // for memcpy +#include <algorithm> // for std::reverse +#include <string.h> // for memcpy namespace gr { namespace fec { -generic_encoder::sptr -tpc_encoder::make(std::vector<int> row_polys, std::vector<int> col_polys, int krow, int kcol, int bval, int qval) +generic_encoder::sptr tpc_encoder::make(std::vector<int> row_polys, + std::vector<int> col_polys, + int krow, + int kcol, + int bval, + int qval) { - return generic_encoder::sptr(new tpc_encoder(row_polys, col_polys, krow, kcol, bval, qval)); + return generic_encoder::sptr( + new tpc_encoder(row_polys, col_polys, krow, kcol, bval, qval)); } -tpc_encoder::tpc_encoder (std::vector<int> row_polys, std::vector<int> col_polys, int krow, int kcol, int bval, int qval) - : d_rowpolys(row_polys), d_colpolys(col_polys), d_krow(krow), d_kcol(kcol), - d_bval(bval), d_qval(qval) +tpc_encoder::tpc_encoder(std::vector<int> row_polys, + std::vector<int> col_polys, + int krow, + int kcol, + int bval, + int qval) + : d_rowpolys(row_polys), + d_colpolys(col_polys), + d_krow(krow), + d_kcol(kcol), + d_bval(bval), + d_qval(qval) { // first we operate on data chunks of get_input_size() // TODO: should we verify this and throw an error if it doesn't match? YES // hwo do we do that? // calculate the input and output sizes - inputSize = (d_krow*d_kcol - (d_bval+d_qval)); - rowEncoder_K = ceil(log(d_rowpolys[0])/log(2)); // rowEncoder_K is the constraint length of the row encoder polynomial + inputSize = (d_krow * d_kcol - (d_bval + d_qval)); + rowEncoder_K = ceil( + log(d_rowpolys[0]) / + log(2)); // rowEncoder_K is the constraint length of the row encoder polynomial rowEncoder_n = d_rowpolys.size(); rowEncoder_m = rowEncoder_K - 1; - colEncoder_K = ceil(log(d_colpolys[0])/log(2)); // colEncoder_K is the constraint length of the col encoder polynomial + colEncoder_K = ceil( + log(d_colpolys[0]) / + log(2)); // colEncoder_K is the constraint length of the col encoder polynomial colEncoder_n = d_colpolys.size(); colEncoder_m = colEncoder_K - 1; - outputSize = ((d_krow+rowEncoder_m)*rowEncoder_n)*((d_kcol+colEncoder_m)*colEncoder_n) - d_bval; + outputSize = ((d_krow + rowEncoder_m) * rowEncoder_n) * + ((d_kcol + colEncoder_m) * colEncoder_n) - + d_bval; fp = NULL; - //DEBUG_PRINT("inputSize=%d outputSize=%d\n", inputSize, outputSize); - //fp = fopen("c_encoder_output.txt", "w"); + // DEBUG_PRINT("inputSize=%d outputSize=%d\n", inputSize, outputSize); + // fp = fopen("c_encoder_output.txt", "w"); // resize internal matrices - rowNumStates = 1 << (rowEncoder_K-1); // 2^(row_mm) - colNumStates = 1 << (colEncoder_K-1); // 2^(col_mm) - rowOutputs.resize(2, std::vector<int>(rowNumStates,0)); - rowNextStates.resize(2, std::vector<int>(rowNumStates,0)); - colOutputs.resize(2, std::vector<int>(colNumStates,0)); - colNextStates.resize(2, std::vector<int>(colNumStates,0));; + rowNumStates = 1 << (rowEncoder_K - 1); // 2^(row_mm) + colNumStates = 1 << (colEncoder_K - 1); // 2^(col_mm) + rowOutputs.resize(2, std::vector<int>(rowNumStates, 0)); + rowNextStates.resize(2, std::vector<int>(rowNumStates, 0)); + colOutputs.resize(2, std::vector<int>(colNumStates, 0)); + colNextStates.resize(2, std::vector<int>(colNumStates, 0)); + ; rowTail.resize(rowNumStates, 0); colTail.resize(colNumStates, 0); // precalculate the state transition matrix for the row polynomial - tpc_common::precomputeStateTransitionMatrix_RSCPoly(rowNumStates, d_rowpolys, rowEncoder_K, rowEncoder_n, - rowOutputs, rowNextStates); + tpc_common::precomputeStateTransitionMatrix_RSCPoly( + rowNumStates, d_rowpolys, rowEncoder_K, rowEncoder_n, rowOutputs, rowNextStates); // calculate the tail for the row tpc_common::rsc_tail(rowTail, d_rowpolys, rowNumStates, rowEncoder_m); // precalculate the state transition matrix for the column polynomial - tpc_common::precomputeStateTransitionMatrix_RSCPoly(colNumStates, d_colpolys, colEncoder_K, colEncoder_n, - colOutputs, colNextStates); + tpc_common::precomputeStateTransitionMatrix_RSCPoly( + colNumStates, d_colpolys, colEncoder_K, colEncoder_n, colOutputs, colNextStates); // calculate the tail for the col tpc_common::rsc_tail(colTail, d_colpolys, colNumStates, colEncoder_m); // pre-allocate memory we use for encoding - inputSizeWithPad = d_bval+d_qval+inputSize; + inputSizeWithPad = d_bval + d_qval + inputSize; inputWithPad.resize(inputSizeWithPad, 0); - numRowsToEncode = inputSizeWithPad/d_krow; // this should be OK w/ integer division -- TODO: check this? - rowToEncode.resize(d_krow,0); - rowEncoded_block.resize(d_krow+(rowEncoder_m*rowEncoder_n), 0); - rowEncodedBits.resize(d_kcol, std::vector<uint8_t>(rowEncoder_m*rowEncoder_n,0) ); - - numColsToEncode = d_krow+(rowEncoder_m*rowEncoder_n); - colToEncode.resize(d_kcol,0); - colEncoded_block.resize(d_kcol+(colEncoder_m*colEncoder_n), 0); - colEncodedBits.resize(d_krow+(rowEncoder_m*rowEncoder_n), std::vector<uint8_t>(colEncoder_m*colEncoder_n,0) ); + numRowsToEncode = + inputSizeWithPad / + d_krow; // this should be OK w/ integer division -- TODO: check this? + rowToEncode.resize(d_krow, 0); + rowEncoded_block.resize(d_krow + (rowEncoder_m * rowEncoder_n), 0); + rowEncodedBits.resize(d_kcol, std::vector<uint8_t>(rowEncoder_m * rowEncoder_n, 0)); + + numColsToEncode = d_krow + (rowEncoder_m * rowEncoder_n); + colToEncode.resize(d_kcol, 0); + colEncoded_block.resize(d_kcol + (colEncoder_m * colEncoder_n), 0); + colEncodedBits.resize(d_krow + (rowEncoder_m * rowEncoder_n), + std::vector<uint8_t>(colEncoder_m * colEncoder_n, 0)); } -int tpc_encoder::get_output_size() { - return outputSize; -} +int tpc_encoder::get_output_size() { return outputSize; } -int tpc_encoder::get_input_size() { - return inputSize; -} +int tpc_encoder::get_input_size() { return inputSize; } -void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, - std::vector<uint8_t> input, - std::vector< std::vector<int> > transOutputVec, - std::vector< std::vector<int> > transNextStateVec, - std::vector<int> tail, - size_t KK, - size_t nn) +void tpc_encoder::block_conv_encode(std::vector<uint8_t>& output, + std::vector<uint8_t> input, + std::vector<std::vector<int>> transOutputVec, + std::vector<std::vector<int>> transNextStateVec, + std::vector<int> tail, + size_t KK, + size_t nn) { size_t outsym, ii, jj; int state = 0; size_t LL = input.size(); - std::vector<int> binVec(nn,0); + std::vector<int> binVec(nn, 0); // encode data bits one bit at a time - for (ii=0; ii<LL; ii++) { + for (ii = 0; ii < LL; ii++) { // determine the output symbol outsym = transOutputVec[(int)input[ii]][state]; @@ -135,16 +155,16 @@ void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, state = transNextStateVec[(int)input[ii]][state]; // Convert symbol to a binary vector - tpc_common::itob( binVec, outsym, nn ); + tpc_common::itob(binVec, outsym, nn); // Assign to output : TODO: investigate using memcpy for this? - for (jj=0;jj<nn;jj++) { - output[nn*ii+jj] = binVec[jj]; + for (jj = 0; jj < nn; jj++) { + output[nn * ii + jj] = binVec[jj]; } } // encode tail - for (ii=LL;ii<LL+KK-1;ii++) { + for (ii = LL; ii < LL + KK - 1; ii++) { // determine the output symbol outsym = transOutputVec[tail[state]][state]; @@ -152,192 +172,205 @@ void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, state = transNextStateVec[tail[state]][state]; // Convert symbol to a binary vector - tpc_common::itob( binVec, outsym, nn ); + tpc_common::itob(binVec, outsym, nn); // Assign to output : TODO: investigate using memcpy for this? - for (jj=0;jj<nn;jj++) { - output[nn*ii+jj] = binVec[jj]; + for (jj = 0; jj < nn; jj++) { + output[nn * ii + jj] = binVec[jj]; } } } -void tpc_encoder::generic_work(void *inBuffer, void *outBuffer) { - const uint8_t *in = (const uint8_t *) inBuffer; - uint8_t *out = (uint8_t *) outBuffer; +void tpc_encoder::generic_work(void* inBuffer, void* outBuffer) +{ + const uint8_t* in = (const uint8_t*)inBuffer; + uint8_t* out = (uint8_t*)outBuffer; - size_t ii, jj; // indexing var + size_t ii, jj; // indexing var - //DEBUG_PRINT_UCHAR_ARRAY(in, inputSize); + // DEBUG_PRINT_UCHAR_ARRAY(in, inputSize); // TODO: probably a better way to do this than memcpy? - memcpy(&inputWithPad[d_bval+d_qval], in, sizeof(unsigned char)*inputSize); + memcpy(&inputWithPad[d_bval + d_qval], in, sizeof(unsigned char) * inputSize); - //DEBUG_PRINT("Input with Pad -->\n"); - //DEBUG_PRINT_UCHAR_ARRAY(&inputWithPad[0], inputSizeWithPad); - //DEBUG_PRINT_F(fp, "Input with Pad -->\n"); - //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &inputWithPad[0], inputSizeWithPad); + // DEBUG_PRINT("Input with Pad -->\n"); + // DEBUG_PRINT_UCHAR_ARRAY(&inputWithPad[0], inputSizeWithPad); + // DEBUG_PRINT_F(fp, "Input with Pad -->\n"); + // DEBUG_PRINT_UCHAR_ARRAY_F(fp, &inputWithPad[0], inputSizeWithPad); // encode the row data - for(ii=0; ii<numRowsToEncode; ii++) { + for (ii = 0; ii < numRowsToEncode; ii++) { // populate rowToEncode - memcpy(&rowToEncode[0], &inputWithPad[ii*d_krow], sizeof(unsigned char)*d_krow); + memcpy( + &rowToEncode[0], &inputWithPad[ii * d_krow], sizeof(unsigned char) * d_krow); - //DEBUG_PRINT("Encoding row=[%d] -->\n",ii); - //DEBUG_PRINT_UCHAR_ARRAY(&rowToEncode[0], d_krow); - //DEBUG_PRINT_F(fp, "Encoding row=[%d] -->\n",ii); - //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &rowToEncode[0], d_krow); + // DEBUG_PRINT("Encoding row=[%d] -->\n",ii); + // DEBUG_PRINT_UCHAR_ARRAY(&rowToEncode[0], d_krow); + // DEBUG_PRINT_F(fp, "Encoding row=[%d] -->\n",ii); + // DEBUG_PRINT_UCHAR_ARRAY_F(fp, &rowToEncode[0], d_krow); // encode it - block_conv_encode( rowEncoded_block, - rowToEncode, - rowOutputs, - rowNextStates, - rowTail, - rowEncoder_K, - rowEncoder_n); - - //DEBUG_PRINT("Row Encoded Block=[%d] -->\n",ii); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncoded_block[0], tmp); - //DEBUG_PRINT_F(fp, "Row Encoded Block=[%d] -->\n",ii); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &rowEncoded_block[0], tmp); + block_conv_encode(rowEncoded_block, + rowToEncode, + rowOutputs, + rowNextStates, + rowTail, + rowEncoder_K, + rowEncoder_n); + + // DEBUG_PRINT("Row Encoded Block=[%d] -->\n",ii); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncoded_block[0], tmp); + // DEBUG_PRINT_F(fp, "Row Encoded Block=[%d] -->\n",ii); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &rowEncoded_block[0], tmp); // store only the encoded bits, b/c we read out the data in a special way - memcpy(&rowEncodedBits[ii][0], &rowEncoded_block[d_krow], sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); + memcpy(&rowEncodedBits[ii][0], + &rowEncoded_block[d_krow], + sizeof(uint8_t) * (rowEncoder_m * rowEncoder_n)); -// DEBUG_PRINT("Row Encoded Bits"); -// tmp = rowEncoder_m*rowEncoder_n; -// DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncodedBits[ii][0], tmp); + // DEBUG_PRINT("Row Encoded Bits"); + // tmp = rowEncoder_m*rowEncoder_n; + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncodedBits[ii][0], tmp); } // encode the column data size_t numDataColsToEncode = d_krow; - size_t numCheckColsToEncode = numColsToEncode-numDataColsToEncode; - for(ii=0; ii<numDataColsToEncode; ii++) { + size_t numCheckColsToEncode = numColsToEncode - numDataColsToEncode; + for (ii = 0; ii < numDataColsToEncode; ii++) { // populate colToEncode - for(jj=0; jj<d_kcol; jj++) { - colToEncode[jj] = inputWithPad[jj*d_krow+ii]; + for (jj = 0; jj < d_kcol; jj++) { + colToEncode[jj] = inputWithPad[jj * d_krow + ii]; } - //DEBUG_PRINT("Encoding col=[%d] -->\n",ii); - //DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); - //DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii); - //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); + // DEBUG_PRINT("Encoding col=[%d] -->\n",ii); + // DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); + // DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii); + // DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); // encode it - block_conv_encode( colEncoded_block, - colToEncode, - colOutputs, - colNextStates, - colTail, - colEncoder_K, - colEncoder_n); - - //DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); - //DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); + block_conv_encode(colEncoded_block, + colToEncode, + colOutputs, + colNextStates, + colTail, + colEncoder_K, + colEncoder_n); + + // DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); + // DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); // store only the encoded bits, b/c we read the data out in a special way - memcpy(&colEncodedBits[ii][0], &colEncoded_block[d_kcol], sizeof(uint8_t)*(colEncoder_m*colEncoder_n)); + memcpy(&colEncodedBits[ii][0], + &colEncoded_block[d_kcol], + sizeof(uint8_t) * (colEncoder_m * colEncoder_n)); -// DEBUG_PRINT("Col Encoded Bits"); -// tmp = colEncoder_m*colEncoder_n; -// DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); + // DEBUG_PRINT("Col Encoded Bits"); + // tmp = colEncoder_m*colEncoder_n; + // DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); } // encode checks on checks (encode the row-encoded bits) - for(ii=0; ii<numCheckColsToEncode; ii++) { + for (ii = 0; ii < numCheckColsToEncode; ii++) { // populate colToEncode - for(jj=0; jj<d_kcol; jj++) { - colToEncode[jj] = rowEncodedBits[jj][ii]; // indexing is weird b/c of the way we declared the vector :( + for (jj = 0; jj < d_kcol; jj++) { + colToEncode[jj] = rowEncodedBits[jj][ii]; // indexing is weird b/c of the way + // we declared the vector :( } - //DEBUG_PRINT("Encoding col=[%d] -->\n",ii+numDataColsToEncode); - //DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); - //DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii+numDataColsToEncode); - //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); + // DEBUG_PRINT("Encoding col=[%d] -->\n",ii+numDataColsToEncode); + // DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); + // DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii+numDataColsToEncode); + // DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); // encode it - block_conv_encode( colEncoded_block, - colToEncode, - colOutputs, - colNextStates, - colTail, - colEncoder_K, - colEncoder_n); + block_conv_encode(colEncoded_block, + colToEncode, + colOutputs, + colNextStates, + colTail, + colEncoder_K, + colEncoder_n); - //DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); + // DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); - //DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); + // DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); // store only the encoded bits, b/c we read the data out in a special way - memcpy(&colEncodedBits[ii+numDataColsToEncode][0], &colEncoded_block[d_kcol], sizeof(uint8_t)*(colEncoder_m*colEncoder_n)); + memcpy(&colEncodedBits[ii + numDataColsToEncode][0], + &colEncoded_block[d_kcol], + sizeof(uint8_t) * (colEncoder_m * colEncoder_n)); -// DEBUG_PRINT("Col Encoded Bits"); -// tmp = colEncoder_m*colEncoder_n; -// DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); + // DEBUG_PRINT("Col Encoded Bits"); + // tmp = colEncoder_m*colEncoder_n; + // DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); } unsigned char* inputDataPtr; - uint8_t *outputDataPtr = out; + uint8_t* outputDataPtr = out; int curRowInRowEncodedBits = 0; // read out the data along the rows into the "out" array // skip B zeros & do the first row - inputDataPtr = &inputWithPad[d_bval]; - if(d_bval > d_krow){ throw std::runtime_error("bval must be < krow"); } - size_t firstRowRemainingBits = d_krow-d_bval; - for(ii=0; ii<firstRowRemainingBits; ii++) { + inputDataPtr = &inputWithPad[d_bval]; + if (d_bval > d_krow) { + throw std::runtime_error("bval must be < krow"); + } + size_t firstRowRemainingBits = d_krow - d_bval; + for (ii = 0; ii < firstRowRemainingBits; ii++) { *outputDataPtr++ = (uint8_t)(*inputDataPtr++); } // copy the encoded bits - memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], - sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); + memcpy(outputDataPtr, + &rowEncodedBits[curRowInRowEncodedBits++][0], + sizeof(uint8_t) * (rowEncoder_m * rowEncoder_n)); - outputDataPtr += (rowEncoder_m*rowEncoder_n); + outputDataPtr += (rowEncoder_m * rowEncoder_n); // copy out the rest of the data - for(ii=1; ii<d_kcol; ii++) { // ii starts at 1, b/c we already did idx=0 + for (ii = 1; ii < d_kcol; ii++) { // ii starts at 1, b/c we already did idx=0 // copy systematic bits - for(jj=0; jj<d_krow; jj++) { + for (jj = 0; jj < d_krow; jj++) { *outputDataPtr++ = (uint8_t)(*inputDataPtr++); } // copy the encoded bits - memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], - sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); + memcpy(outputDataPtr, + &rowEncodedBits[curRowInRowEncodedBits++][0], + sizeof(uint8_t) * (rowEncoder_m * rowEncoder_n)); - outputDataPtr += (rowEncoder_m*rowEncoder_n); + outputDataPtr += (rowEncoder_m * rowEncoder_n); } // copy the encoded cols - for(ii=0; ii<(colEncoder_m*colEncoder_n); ii++) { + for (ii = 0; ii < (colEncoder_m * colEncoder_n); ii++) { // copy checks - for(jj=0; jj<d_krow; jj++) { + for (jj = 0; jj < d_krow; jj++) { *outputDataPtr++ = colEncodedBits[jj][ii]; } int kk = jj; // copy checks on checks - for(jj=0; jj<(rowEncoder_m*rowEncoder_n); jj++) { + for (jj = 0; jj < (rowEncoder_m * rowEncoder_n); jj++) { *outputDataPtr++ = colEncodedBits[kk++][ii]; } } - //DEBUG_PRINT("Output\n"); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(out, outputSize); - //DEBUG_PRINT_F(fp, "Output\n"); - //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, out, outputSize); + // DEBUG_PRINT("Output\n"); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(out, outputSize); + // DEBUG_PRINT_F(fp, "Output\n"); + // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, out, outputSize); } tpc_encoder::~tpc_encoder() { - if(fp) - fclose(fp); + if (fp) + fclose(fp); } -} -} +} // namespace fec +} // namespace gr |