I've implemented a simple 1/2 rate convolutional code and a viterbi decoder algorithm. I followed the most-common type of convolutional coding implementation I could find by googling: 1 input bit gets shifted into a shift register, one at a time, and an algorithm of XOR gates generates a 2-bit output.

This 2-bit output worked very nicely to map to QAM4, since 2 bits can represent 4 positions. The viterbi decoder would receive the QAM4 data and process the most-probable branch for each hidden-state, every cycle.

What if instead of a single bit streaming into the convolutional coder, I had 2 bits streaming into the coder? Would I use a different structure that could generate 4 outputs bits, and map this to QAM16? Or would I use the same structure at twice the rate and then collect 2 sets of 2 outputs? Does the viterbi decoder need to change to implement this?

I guess my goal is to get more bits modulated into a single symbol, but still be able to utilize convolutional coding/error correction. I'd like to keep the 1/2 rate as well.

  • 1
    $\begingroup$ One thing you can do is think of the conv. coder's output as just a bit stream, and use it to select symbols from any QAM constellation you want. The coder's output doesn't have to fit exactly into one symbol. $\endgroup$
    – MBaz
    Jun 11, 2019 at 22:13
  • $\begingroup$ @MBaz does (bit) interleaver improve the performance of Viterbi decoder in case of high order modulation, say QAM-256? $\endgroup$
    – AlexTP
    Jun 12, 2019 at 9:37
  • $\begingroup$ @AlexTP That's a good question. I don't know the answer, but I would say that (1) it can't hurt; and (2) in the AWGN channel it probably doesn't help, at least for moderate to large SNR, where one symbol error produces one bit error. $\endgroup$
    – MBaz
    Jun 12, 2019 at 13:23


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.