卷积译码之BCJR算法详细介绍
1974年,Bahl,Cocke,Jelinek和Raviv发明BCJR算法。该算法是一种定义在网格图上用来最大化纠错编码的后验概率,对于迭代的纠错译码非常重要。目前Turbo译码和LDPC均以BCJR算法为原型,进行迭代译码。
1、算法概述
1974年,Bahl,Cocke,Jelinek和Raviv发明BCJR算法。该算法是一种定义在网格图上用来最大化纠错编码的后验概率,对于迭代的纠错译码非常重要。
目前Turbo译码和LDPC均以BCJR算法为原型,进行迭代译码。
BCJR算法的计算复杂度大于维特比译码,在信息位等可能情况下更倾向于采用维特比算法。但是,迭代译码过程中,每次迭代时的信息位先验概率都发生变化,BCJR算法的优势就会凸显出来。
1.1 算法介绍
BCJR算法计算后验L值,
(1)
称为每个信息位的APP L值,且译码器输出由:
(2)
给出。在迭代译码中,APP L值可以看成是译码器输出。
首先,引入如下对数域度量:
1) 前向度量(forward metric):
称为状态s在时刻 l+1 的前向度量
(3)
2)后向度量(backward recursion):
称为状态s'在时刻 l 的后向度量
(4)
3)分支量度(branch metric):
(5)
其中,是在时刻 l (经过归一化后)接收分支 和发送分支 的平方欧式距离。但是,若 s' → s 不是有效的状态转移, 和 都是零。
经过一系列推导(推导过程略),可将(1)式写为:
(6)
其中, (7)
1.2 参数计算
首先,引入简化运算:
用max函数和计算 的查找表来代替(计算更困难的)运算
(1)前向度量计算:
(7)
(2)后向度量计算
(8)
(3)分支度量计算
(9)
最终得出,公式(10)如下所示:
使用公式(10)计算APP L值 ,对数域量度由公式(7)~ (9)给出。函数算法称为
log-MAP算法,或者对数域BCJR算法。log-MAP由于仅仅使用 函数和查找表,因此相对易于实现,且比MAP算法有更好的数值稳定性。
1.3 对数域BCJR算法步骤概述
1、采用如下公式初始化前向和后向度量 和 :
2、利用公式(7)计算
3、利用公式(8)计算
4、利用公式(9)计算
5、利用公式(10)计算 APP L值 ,
6、(可选)采用公式(2)计算硬判决
2、实例分析
假定信息位先验概率是等可能的, ,采用公式(9)计算对数域分支度量如下所示:
前向度量计算如下:
后向度量计算如下:
三个信息位的APP L值计算如下:
得到:BCJR译码器对三个信息位的判断为:
注:本例题取自《差错控制编码(第二版),林舒著》P378;
实际程序可参考:
BCJR matlab仿真算法https://download.csdn.net/download/snowman898/85022570程序解读可参考:
BCJR matlab程序算法梳理https://blog.csdn.net/snowman898/article/details/123665651
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)