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 '19 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 '19 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 '19 at 13:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.