bvec encode(Convolutional_Code& nsc, int constraint_length, const bvec& encoder_input, int blockSize, bool verbose) { if (verbose) {cout << "input : " << encoder_input << endl;} int codedLen = 2 * (blockSize + (constraint_length - 1)); int nBlocks = encoder_input.length() / blockSize; ivec window(blockSize); for (int j = 0; j < blockSize; j++) { window[j] = j; } bvec nsc_coded_bits(codedLen); bvec tr_coded_bits; for (int j = 0; j < nBlocks; j++) { nsc.encode_tail(encoder_input(window), nsc_coded_bits); window = window + blockSize; tr_coded_bits = concat(tr_coded_bits, nsc_coded_bits); } // Deal with residual sources if remainder exsists if (nBlocks*blockSize != encoder_input.length()) { bvec residual_bits = encoder_input.get(nBlocks*blockSize, encoder_input.length()-1); nsc.encode_tail(residual_bits, nsc_coded_bits); tr_coded_bits = concat(tr_coded_bits, nsc_coded_bits); } if (verbose) {cout << "encoder output: " << tr_coded_bits << endl;} return tr_coded_bits; }