L' algorithme de Bahl-Cocke-Jelinek-Raviv (BCJR) est un algorithme de décodage par maximum a posteriori des codes correcteurs d'erreurs définis sur des treillis (principalement des codes convolutifs ). Il porte le nom de ses inventeurs : Bahl, Cocke, Jelinek et Raviv. Cet algorithme est essentiel pour les codes correcteurs d'erreurs modernes à décodage itératif, notamment les turbocodes et les codes de contrôle de parité à faible densité .
treillis :- Calculer les probabilités futures
- Calculer les probabilités rétrogrades
- Calculer les probabilités lissées en fonction d'autres informations (par exemple, un AWGN , un canal binaire symétrique ).
Variations
SBGT BCJR
Simplification de Berrou, Glavieux et Thitimajshima.
Log–MAP BCJR
L'algorithme Log-MAP est une implémentation dans le domaine logarithmique du décodeur BCJR (MAP). En utilisant les log-vraisemblances, il évite les dépassements de capacité négatifs et transforme les multiplications de probabilités en additions. Dans le domaine logarithmique, les récursions avant-arrière utilisent l'identité du logarithme jacobien (« max-étoile ») , ce qui donne les mêmes rapports de log-vraisemblance a posteriori (LLR) que l'algorithme MAP/BCJR original lorsqu'il est appliqué aux métriques de branche.
En pratique, le petit terme de correction est implémenté via une table de consultation courte ou une approximation linéaire par morceaux ; travailler dans le domaine logarithmique simplifie également la normalisation des métriques d’état avant/arrière. Les décodeurs Log-MAP qui produisent des LLR extrinsèques sont largement utilisés comme composants d’entrée/sortie souples dans les décodeurs itératifs (turbo).
Une variante courante de complexité réduite est **Max-Log-MAP**, qui approxime le logarithme jacobien en omettant le terme de correction (c.-à-d. en utilisant ). Cela réduit la complexité au prix d'une légère perte de performance par rapport à Log-MAP/MAP ; l'écart peut être réduit avec des corrections constantes/linéaires ou en normalisant l'information extrinsèque (« Max-Log-MAP normalisé/normalisé »), récupérant généralement quelques dixièmes de dB selon le code et le rapport signal/bruit.
BCJR fenêtré
Une version modifiée traite le treillis par segments afin de réduire la complexité de calcul et les besoins en mémoire. Cette approche est particulièrement utile pour les séquences très longues où le stockage complet du treillis devient impraticable. La version par fenêtrage conserve des performances quasi optimales tout en réduisant considérablement la latence et l'utilisation des ressources matérielles dans les implémentations.
Mises en œuvre
- Le framework Susa implémente l'algorithme BCJR pour les codes de correction d'erreurs directes et l'égalisation de canal en C++.