The BCJR algorithm is an algorithm for maximum a posteriori decoding of error correcting codes defined on trellises (principally convolutional codes). The algorithm is named after its inventors: Bahl, Cocke, Jelinek and Raviv. This algorithm is critical to modern iteratively-decoded error-correcting codes, including turbo codes and low-density parity-check codes.

Steps involved

Based on the trellis:

BCJR algorithm

Compute forward probabilities

Compute backward probabilities

Compute smoothed probabilities based on other information (i.e. noise variance for AWGN, bit crossover probability for binary symmetric channel)

BCJR algorithm

Variations

SBGT BCJR

Berrou, Glavieux and Thitimajshima simplification.

BCJR algorithm

Log-Map BCJR

Implementations

Susa framework implements BCJR algorithm for forward error correction codes and channel equalization in C++.

See also

Forward-backward algorithm

Maximum a posteriori (MAP) estimation

Hidden Markov model

References

External links

The online textbook: Information Theory, Inference, and Learning Algorithms, by David J.C. MacKay, discusses the BCJR algorithm in chapter 25. The implementation of BCJR algorithm in Susa signal processing framework

Error detection and correction