The Bahl-Cocke-Jelinek-Raviv (BCJR) algorithm is an algorithm for maximum a posteriori decoding of error correcting codes defined on trellises (principally convolutional codes). The algorithm was introduced in 1974 by Lalit R. Bahl, John Cocke, Frederick Jelinek and Josef Raviv, whose surnames give it its name. It applies to both linear block codes and convolutional codes.[1]

BCJR-based decoders provide soft outputs, which express the relative probabilities of possible symbol values. They are used as component decoders in iterative turbo decoding.[2]

Algorithm

The algorithm combines a forward pass and a backward pass through the trellis. Let denote the encoder state at time , and the received sequence. Its metrics are

For continuous observations, the corresponding probability densities are used. The branch metric incorporates the channel observation and the prior probability of the transition.

The forward and backward recursions are

Initialisation reflects the available information about the encoder's initial and final states. The posterior probability of a transition is proportional to

Summing over transitions associated with a particular input symbol and normalising gives that symbol's posterior probability.[3]

Steps involved

Based on the trellis:

Variations

SBGT

The simplified Berrou-Glavieux-Thitimajshima (SBGT) algorithm retains the structure of the BGT formulation while removing redundant divisions from its forward and backward recursions.[3]

Log-MAP and Max-Log-MAP

The Log-MAP algorithm performs the BCJR calculations in the logarithmic domain. This replaces probability multiplications with additions and reduces numerical difficulties associated with very small probabilities. When evaluated exactly, Log-MAP is equivalent to the probability-domain MAP algorithm. Max-Log-MAP simplifies the calculations further by approximating a logarithm of a sum of exponentials with the largest exponent; this approximation can reduce decoding accuracy.[2]

The distinction is expressed by the identity

Log-MAP retains the correction term , whereas Max-Log-MAP omits it.[4]

Windowed BCJR

A modified version that processes the trellis in segments to reduce computational complexity and memory requirements. This approach is particularly useful for very long sequences where full trellis storage becomes impractical. The windowed version maintains near-optimal performance while significantly lowering latency and hardware resource utilization in implementations.[5]

Implementations

See also

References

  1. ^ Bahl, L. R.; Cocke, J.; Jelinek, F.; Raviv, J. (March 1974). "Optimal decoding of linear codes for minimizing symbol error rate". IEEE Transactions on Information Theory. 20 (2): 284–287. doi:10.1109/TIT.1974.1055186.
  2. ^ a b Robertson, Patrick; Hoeher, Peter; Villebrun, Emmanuelle (1997). "Optimal and sub-optimal maximum a posteriori algorithms suitable for turbo decoding". European Transactions on Telecommunications. 8 (2): 119–125. doi:10.1002/ett.4460080202.
  3. ^ a b Wang, Sichun; Patenaude, François (2006). "A Systematic Approach to Modified BCJR MAP Algorithms for Convolutional Codes". EURASIP Journal on Applied Signal Processing. 2006: 1–15. doi:10.1155/ASP/2006/95360.
  4. ^ Robertson, P.; Villebrun, E.; Hoeher, P. (1995). "A comparison of optimal and sub-optimal MAP decoding algorithms operating in the log domain" (PDF). Proceedings of the IEEE International Conference on Communications. pp. 1009–1013.
  5. ^ Viterbi, A.J. (1998). "An intuitive justification and a simplified implementation of the MAP decoder for convolutional codes". IEEE Journal on Selected Areas in Communications. 16 (2): 260–264. Bibcode:1998IJSAC..16..260V. doi:10.1109/49.661114. ISSN 0733-8716.