LDPC码动态调度算法

      串行译码算法虽然可以利用当前更新的新信息来降低误码率,但是这类算法的消息更新顺序是固定的,在译码过程中仍然存在不能充分利用消息动态变化的特性来动态地调整消息更新顺序的问题。因此,有必要深入研究如何设计一个更加合理有效的消息更新策略。关于此方面的研究,在绪论中已看出国内外上已有不少成果的研究。动态异步更新算法在译码过程中可以很好地利用消息的动态变化特性,动态地分配资源。对于不可靠的信息在译码过程中就多分配一些计算资源,使得不可靠信息能够快速得到更新,提高其可靠度。而对于可靠度较高的信息,分配的计算资源相对较少,从而避免了计算资源的浪费,使算法快速进入收敛状态。
接下来,我们讲述一种经典的动态调度译码—NWRBP算法。该算法是基于校验节点到变量节点消息边残差的动态异步更新算法,每次优先更新具有最大校验节点到变量节点边残差的边,然后再更新相应的变量节点到校验节点的消息。

 

残差的定义:译码过程中,消息(节点消息和边消息)更新前后差的绝对值的大小,如式(1-1)所示。在NWRBP算法中,mkf(mk)分别代表更新前后的C2V边的消息值。

                                                        (1-1)

下面详细地讲述下NWRBP算法的消息更新过程,图1显示了NWRBP译码算法在一次迭代中消息更新过程的流程图。实心黑色圆圈和黑色方框分别表示已被更新过的消息,空心黑色圆圈和黑色方框分别表示未被更新过的消息。实线箭头代表消息更新过程,虚线箭头代表预计算过程。具体的更新步骤如下:

                  LDPC码动态调度算法_第1张图片

                                                              图1   NWRBP译码算法流程图

NWRBP译码算法的伪代码如 表1 所示。表中第1到第2行是NWRBP译码算法的所需消息的初始化过程。第3行设置NWRBP算法的最大迭代次数,如迭代次数大于设定的最大值,那么停止译码。第4行为预计算所有校验节点到与它们相邻的变量节点的C2V的边残差过程。第5行表示在所有C2V的边残差中选择具有最大的C2V边残差的边。第6行通过for语句来控制循环的过程。第7行到第16行是一个消息更新过程,与图1描述的流程图是相对应的。第17到19行用来判断算法是否达到译码停止条件(已达到设置的最大迭代次数或所有校验方程都满足),若满足停止条件,则跳到第20行结束译码,否则回到第5行的操作。从译码更新过程中可以知道,NWRBP译码算法在找到最大残差边后并不是只优先更新最大残差边信息,而是把与最大残差边相关联的边一起更新。如图1(a)所示,校验节点cj更新了所有与其相连的变量节点的消息,这样在一定程度上可以降低算法的贪婪性。NWRBP算法在动态调度算法中有着非常重要的作用,因为后续很多改进的算法都是基于这种思想进行优化的。

表1 NWRBP算法的伪代码

Node-Wise RBP decoding algorithm for LDPC codes

1:Initialize all Rmn=0

2:Initialize all Qnm= L(vn)

3:Initialize Itermax

4:Compute all r(mc,v)

5:Letbe the largest residual

6:for i=1 to Itermax do

7:  for every vk Î N(cj) do

8:    Generate and propagate

9:    set

10:    for every ca Î N( vk)\ cj do

11:       Generate and propagate

12:       for every vb Î N(ca)\ vk do

13:       compute

14:       end for

15:    end for

16:  end for

17:  if stopping rule is not satisfied then

18:    Go back to line 5

19:   end if

20:end for

你可能感兴趣的:(LDPC,Codes)