MATLAB: Is it possible to implement soft Viterbi decoding with puncturing in the Communications Blockset 3.0.1 (R14SP1) or the Communications Toolbox 3.0.1 (R14SP1)

communications blocksetdecodingpuncturingsoftviterbi

My concern is that with hard decision decoding, I can assign a 0 to a punctured bit position, using +/- 1 for the non-punctured hard bits. For soft decisions, I do not know how to optimally assign values to the punctured bits. For example, with 3-bit soft decision decoding, it seems suboptimal/wrong to assign a “3” or “4” (least confident 1 or 0) for the punctured bit.

Best Answer

This enhancement has been incorporated in Release 14 Service Pack 2 (R14SP2). For previous product releases, please read below for any possible workarounds:
The ability to do soft decision decoding with optimal puncturing is not available in the Communications Blockset or the Communications Toolbox.
There are two ways to workaround this issue:
1. Do soft decision decoding with optimal puncturing if the Viterbi Decoder supports erasures. If you could specify the '3' or '4' alternatively for the punctured bit (thereby reducing the odds), there should be no performance hit. Again, currently, with the Communications Blockset, the Insert Zero block does not allow you to specify the value (it only inserts 0), but you could do this insertion via some pre-processing.
2. Map the unipolar quantized values to bipolar quantized values, insert zeros, and use the "unquantized" option of the Viterbi decoder. You will see the effect of quantization because you have done the quantization externally and the decoder is using the quantized values.
There are two files that demonstrate the above techniques:
1. From the file exchange at MATLAB Central, there is a Simulink model that tries to implement the first option above with current blocks:
The above file also contains performance curves comparing the BER as the number of bits is increased.
2. The attached file below demonstrates how to use the Communications Toolbox 3.0.1 (R14SP1) to accomplish this task using both of the above options, and then compares the results of using both methods.