LDPC译码原理

2 篇文章 1 订阅
1 篇文章 1 订阅

1.LDPC译码的背景及内容

        LDPC译码分为硬判决译码和软判决译码。

        硬判决译码又称代数译码,主要代表是比特翻转(BF)译码算法,它的实现比较简单,但是译码性能很差。硬判决译码的基本假设是当校验方程不成立时,说明此时必定有比特位发生了错误,而所有可能发生错误的比特中不满足检验方程个数最多的比特发生错误的概率最大。在每次迭代时翻转发生错误概率最大的比特并用更新之后的码字重新进行译码。

        软判决译码是一种基于概率论的译码算法,通常需要与迭代译码进行结合,才能体现成译码性能的优势,基本算法是置信传播(BP)译码算法,它的实现比代数译码方法的复杂度高很多,但译码性能非常好。

        为了解决BP译码算法实现困难问题,在学术界牵起了优化算法的浪潮,对数域置信传播译码(LLR BP)算法、最小和(Min-Sum)译码算法、Normalized Min-Sum译码算法、Offset Min-Sum译码算法等相继涌现。

        在迭代译码的过程中,信息调度方式分为两种:泛滥式调度和分层式调度。泛滥式调度的特点在于每一次译码迭代过程中,首先计算从变量节点到校验节点的所有软信息,然后计算从校验节点到变量节点的所有软信息。分层调度的特点是在计算每层软信息时,更新此次迭代中的相关的节点信息,用于下一层的软信息计算。

        LDPC译码结构的设计方面主要分为三种:全并行译码结果、行并行译码结构、块并行译码结构。泛滥式的调度比较适合全并行结构,但是译码器的硬件复杂度始终是一个技术瓶颈。分层式的调度适合行并行和块并行结构,可以减少译码所需的迭代次数。

2.LDPC码设计

        LDPC码是一种分组码,其校验矩阵只含有很少量非零元素(稀疏矩阵)。

        码的设计是以设计一个校验矩阵开始的,然后才通过它确定一个生成矩阵进行后续编码。而LDPC的编码就是本文所要讨论的主体内容。对于LDPC码而言,校验矩阵的选取十分关键,不仅影响LDPC码的纠错性能力,也影响LDPC编译码的复杂度及硬件实现的复杂度。准循环LDPC码(Quasi-Cycle,QC-LDPC是LDPC码中重要的一类,是指一个码字以右移或左移固定位数的符号位得到的仍是一个码字。QC-LDPC码的校验矩阵是由循环子矩阵的阵列组成,相对于其他类型的LDPC码,在编码和解码的硬件实现上具有许多优点。

        置信传播(BP)译码算法置信传播算法是基于Tanner图的迭代译码算法。在迭代过程中,可靠性消息,即“消息”通过Tanner图上的边在变量节点和校验节点中来回传递,经多次迭代后趋于稳定值,然后据此进行最佳判决,BP译码算法有着非常好的译码性能。

校验矩阵:

 对应Tanner 图:

        n个码字比特顶点(称为比特节点),分别与校验矩阵的各列相对应;

        m个校验方程顶点(称为校验节点),分别与校验矩阵的各行对应。

        循环以这群顶点中的一个同时作为起点和终点,且只经过每个顶点一次。循环的长度定义为它所包含的连线的数量,而图形的围长,也可叫做图形的尺寸,定义为图中最小的循环长度。上图围长为6

2.1置信传播算法

        置信传播算法(Belief Propagation)译码算法是消息传递(Message Passing)算法在LDPC译码中的运用。消息传递算法是一个算法类,最初运用于人工智能领域,人们将其运用到LDPC码的译码算法中,提出来LDPC码的置信传播算法。置信传播算法是基于Tanner图的迭代译码算法在迭代过程中,可靠性消息,即“消息”通过Tanner图上的边在变量节点和校验节点中来回传递,经过多次迭代后区域稳定值,然后据此进行最佳判决。

        置信传播译码算法的基本流程如下:

        在迭代前,译码器接收到信道传送过来的实值序列y = (y1,y2,…,yn),所有变量节点接收到对应的接收值yi

        第一次迭代:每个变量节点给所有与之相邻的校验节点传送一个可靠消息,这个可靠消息就是信道传送过来的值;每个校验节点接收到变量节点传送过来的可靠消息之后,进行处理,然后返回一个新的可靠消息信息给与之相邻的变量节点,这样就完成第一次迭代;此时可以进行判决,如果满足校验方程,则不需要再迭代,直接输出判决结果,否则进行第二次迭代。

        第二次迭代:每个变量节点处理第一次迭代完成时校验节点传送过来的可靠消息,处理完成后新的消息发送给校验节点,同理,校验节点处理完后返回给变量节点,这样就完成了第二次迭代。完成后同样进行判决,如果满足校验方程则结束译码,否则如此反复多次迭代,每次都进行判决,直到达到设定的最大迭代次数,译码失败。在每次迭代过程中,无论是变量节点传送给校验节点的信息或者校验节点传送给变量节点的信息,都不应该包括前次迭代中接收方发送给发送方的信息,这样是为了保证发送的信息与接受节点已得到的信息相互对立。

        译码结束:

        如果H*C^{^{T}} = 0或者达到最大译码迭代次数时,译码停止。

2.2对数域置信传播算法

        置信传播算法中包含大量乘法运算,乘法运算结果稳定性比较差,波动性高,且复杂度高,运算时间较长,因而出现了对数域置信传播算法,将概率消息用对数似然比进行表示,概率域的乘法转换成对数域的加法。

        根据以上,LLR BP译码算法的迭代译码步骤如下:

        (主要是根据3-9对数域、概率域之间的转换

        以上可知,LLR BP相较于BP译码算法在保证译码性能的同时也大大减少了运算的复杂度。

2.3最小和译码算法

        最小和译码(MS,Min-Sum)算法是以LLR BP算法译码为基础,对校验节点信息更新的表达式进行的简化,其余步骤均与LLR BP译码算法一致。

        Tanh函数:

         由上图,可以知道tanh的一些特点。tanh函数是奇函数,定义域内单调增加,值域在(-1,1)之间。

        比较LLR BP译码算法和Min-Sum译码算法的校验节点信息更新过程,可以看到他们的主要区别在于LLR BP译码算法中的tanh(.)运算和加法运算在Min-Sum译码算法中被最小值和运算符号进行替换,MS译码简化了LLR BP译码算法,降低了译码算法的复杂度。 

2.4改进的最小和译码算法

        Min-Sum算法的简化方案不是精确计算而是近似方案,因而计算出的校验节点信息值和原始的实际值会存在误差,即过大估计问题。这将会导致译码过程的收敛速度减慢,译码性能也会有所损失。因此,研究人员提出了两种有效的方案:Normalized Min-Sum算法和Offset Min-Sum算法。

        (1)Normalized Min-Sum算法

算法主要思想是在MS算法计算校验节点信息更新的步骤中对计算结果乘一个修正因子进行调整,缩小两者之间的差距。

         (2) Offset Min-Sum算法

算法主要思想是在MS算法计算校验节点更新信息的步骤中对计算结果减一个修正因子进行误差补偿。

         这两种改进方案复杂度差不多,但在译码性能方面远超MS译码算法,具有比较接近LLR BP译码算法的性能。

  • 12
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: LDPC译码是一种常用的信道编码译码技术,用于纠正数字通信中的信道错误。要实现LDPC译码程序,可以使用C语言编写。 LDPC译码的过程包括初始化、迭代和输出。首先,需要根据给定的LDPC编码方案,初始化校验矩阵、生成校验节点和变量节点。这些节点可以用矩阵或数组的形式表示,并在程序开始时进行初始化。 接下来,进行迭代过程。LDPC译码通常使用消息传递算法,包括利用校验节点和变量节点之间的消息传递进行迭代。在每一轮迭代中,校验节点根据变量节点发送的消息来更新自己的消息,然后将更新的消息发送给相连的变量节点。变量节点根据更新的消息,更新自己的信号,并将更新的信号发送给相连的校验节点。这个过程一般进行多次迭代,直到满足译码的停止准则。 最后,输出译码结果。译码结果可以是译码后的二进制序列,也可以是错误信息指示。根据需要,可以在程序中输出译码结果。 在编写LDPC译码程序时,需要注意各个节点之间的数据结构的定义,以及迭代过程的实现。同时,还需要考虑算法的优化,如使用相邻节点的消息传递进行并行计算,以提高译码的效率。 总之,通过使用C语言编写LDPC译码程序,可以实现对LDPC编码的译码,纠正通信中的信道错误,提高信息传输的可靠性。 ### 回答2: LDPC(低密度奇偶校验码)是一种常用的编码和译码技术。为了实现LDPC译码程序,我们可以使用C语言进行编程。 首先,我们需要定义一个数据结构来存储LDPC码的相关信息,如校验矩阵和码字。这个数据结构可以包含以下成员:校验矩阵、码字、码字长度等。可以使用C语言中的结构体来定义这个数据结构。 在编写LDPC译码程序时,关键是实现译码算法。对于LDPC码的译码,经典的算法是迭代译码算法,如Belief Propagation(BP)算法或者Min-Sum算法。 迭代译码算法的基本思想是模仿译码过程中节点之间的相互通信,通过一系列迭代过程逐步更新每个节点上的概率。这个过程会持续进行多次迭代,直到达到最大迭代次数或收敛条件。 在实现迭代译码算法时,我们需要考虑以下几个步骤: 1. 初始化:初始化节点上的概率为默认值。 2. 消息传递:节点之间通过相互通信传递概率更新信息。 3. 更新节点:根据接收到的消息更新节点上的概率。 4. 迭代过程:重复执行消息传递和节点更新的步骤。 5. 终止条件:根据收敛条件或达到最大迭代次数判断译码结束。 在代码实现中,我们可以使用循环和条件语句来实现迭代译码算法的各个步骤。还可以使用数组和指针来存储和操作LDPC码的矩阵和概率信息。 总之,LDPC译码程序可以使用C语言来实现。通过定义数据结构和实现迭代译码算法的各个步骤,我们可以编写一个完整的LDPC译码程序。当输入LDPC码时,该程序会对码字进行译码,并输出译码结果。 ### 回答3: LDPC码(Low Density Parity Check)是一种常用的纠错编码技术,其译码程序可以使用C语言实现。 首先,LDPC译码程序需要定义LDPC码的参数,包括码长N和码率R。然后,根据码长N和码率R计算出校验矩阵H的大小和结构。 接下来,通过读取接收到的信号,得到接收到的码字。根据校验矩阵H的大小和结构,可以把接收到的码字转换成校验节点和变量节点的形式。 接着,进行迭代译码LDPC译码采用迭代算法,通常是使用和传统迭代解码算法进行迭代的算法,如Min-Sum算法。 在迭代过程中,按照校验矩阵H的结构,计算校验节点的信息传递,得到更新后的变量节点的估计。然后根据变量节点的估计,计算变量节点到校验节点的信息传递,得到更新后的校验节点的估计。 迭代过程一般进行多轮,直到达到一定的译码性能要求或者迭代次数达到最大值为止。 最后,将迭代得到的译码结果输出。 需要注意的是,LDPC译码程序的实现并不容易,需要充分理解LDPC码的原理和迭代译码算法,并进行适当的优化,以提高译码的性能和效率。 总之,使用C语言实现LDPC译码程序的关键是理解LDPC码的原理和迭代译码算法,并进行相应的编程实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值