void Rec_Syst_Conv_Code::encode_tail(const bvec &input, bvec &tail, bmat &parity_bits) { int i, j, length = input.size(), target_state; parity_bits.set_size(length+m, n-1, false); tail.set_size(m, false); encoder_state = 0; for (i=0; i<length; i++) { for (j=0; j<(n-1); j++) { parity_bits(i,j) = output_parity(encoder_state,2*j+int(input(i))); } encoder_state = state_trans(encoder_state,int(input(i))); } // add tail of m=K-1 zeros for (i=0; i<m; i++) { target_state = (encoder_state<<1) & ((1<<m)-1); if (state_trans(encoder_state,0)==target_state) { tail(i) = bin(0); } else { tail(i) = bin(1); } for (j=0; j<(n-1); j++) { parity_bits(length+i,j) = output_parity(encoder_state,2*j+int(tail(i))); } encoder_state = target_state; } terminated = true; }
void Rec_Syst_Conv_Code::encode(const bvec &input, bmat &parity_bits) { int i, j, length = input.size(); parity_bits.set_size(length, n-1, false); encoder_state = 0; for (i=0; i<length; i++) { for (j=0; j<(n-1); j++) { parity_bits(i,j) = output_parity(encoder_state,2*j+int(input(i))); } encoder_state = state_trans(encoder_state,int(input(i))); } terminated = false; }