LDPC入门介绍

LDPC码入门

这篇文章是对于ldpc码入门的一篇简单的综述性文章,本文试图用最通俗的语言介绍LDPC是什么,以及各个研究方向的现状,包括编码,译码,性能分析,应用等等,对于各个方面的介绍都不会过于深入,更细节的介绍会写在后续文章中。这篇文章主要介绍了LDPC码的定义与由来,编码算法,译码算法,性能分析方法,以及实际应用这几个方面。文末会附一个思维导图供大家参考。

预备知识

LDPC全名是低密度奇偶校验码,从字面意思理解,就是一种具有低密度性质的奇偶校验码,这里的低密度指的是校验矩阵具有低密度。因此,要弄明白LDPC是什么,首先要弄明白奇偶校验码和校验矩阵以及低密度这三个概念。
1.奇偶校验码
  奇偶校验码是一种简单的判断传输数据是否出错的校验方法。常用于0-1的二元域上的数字编码,它在码字最后添加一位或者若干位,通过码字中1的个数是奇数还是偶数来判断码字在传输前后是否出错。比如100这个码字,采用奇偶校验,那么校验位就可以取1,这时候满足所有码字加起来(异或)的值s为0,即1001,如果传输后变为了1101,错误了一个信息位,那么这时候s=1,可以判断传输出错。因此如果错误的是偶数个信息位,那么算法失效。因此,进一步的,可以设置多个校验位,比如1101这个四位码字,可以分组,使信息位的第一和第二位,即11,使用校验位的第一位来检验,还是使和为0,那么校验位第一位就应该取0,同理,第二位校验位可以去检验后两位信息位,那么就该取1。因此,编码后的码字是110101。这其实就是LDPC的校验思想,即“PC”的含义,即LDPC是一种分组码,并且使用的其实就是奇偶校验。如果再加上低密度的特性,就能得到LDPC。
2.校验矩阵与校验子
  以上面的1101码字举例,其实这个校验关系可以写为矩阵的形式。记信息位为c1,c2,c3,c4,校验位为p1,p2。c=[c1,c2,c3,c4],x=[c1,c2,c3,c4,p1,p2]。即c和x分别是编译前后的码字。
  那么我们有:
  c1+c2+p1=0
  c3+c4+p2=0
  可以写为xH=s=0,其中H为:
   [ 1 1 0 0 1 0 0 0 1 1 0 1 ] \left[ \begin{matrix} 1 & 1 & 0& 0 & 1 & 0\\ 0& 0 & 1 & 1 & 0&1 \end{matrix} \right] [101001011001]
  s=(0,0)。这里的H就是校验矩阵,s就是校验子。它的思想就是原来的码字(信息位)c经过矩阵G(G由H决定)编码后,得到的码字x需要满足x
H=0。为了方便的判断这个结果是不是0,我们引入校验子s的概念,只要s全为0,那么传输就是没问题的。
3.低密度
  低密度指的就是矩阵中为1的个数很少,据网上不记得出处的说法,需要在5%以下。因此,到这里,我们就完全理解了LDPC的含义。

由来与定义

LDPC编码最初由gallager[^1]在上个世纪提出,他指出,奇偶校验码译码很麻烦,因此他决定提出低密度的奇偶校验码并为其设计了译码算法,即BP译码算法,即为奇偶校验码增加低密度这一性质的约束。同时,他给出了他认为的低密度的定义:
1.校验矩阵是稀疏的
2.列重起码为3
3.行重大于列重
在如今,还会尽量要求校验矩阵不存在四元环。
因此,到这里我们可以得到LDPC的定义,即LDPC是一种线性分组的奇偶校验码,它将信息位分组校验,并且使用的是奇偶校验,同时,满足校验矩阵是稀疏的这一特性。

LDPC怎样分类

常见的LDPC分类有两种方式,第一种是根据校验矩阵的元素是二元域还是多元域来划分,比如多元域上的校验矩阵H:
[ 3 1 0 0 1 0 0 0 1 2 0 1 ] \left[ \begin{matrix} 3 & 1 & 0& 0 & 1 & 0\\ 0& 0 & 1 & 2 & 0&1 \end{matrix} \right] [301001021001]
即意为:
3c1+c2+p1=0
c3+2
c4+p2=0
第二种分类方式是根据规则还是非规则来划分,规则LDPC是指每行的行重(每行为1的个数)和每列的列重(同理)是相同的。比如我们的例子就是一个规则LDPC。因此一般记为(n,j,k),比如我们的矩阵就是(6,2,3),即校验矩阵列数是n,列重是j,行重是k。如果是非规则LDPC,一般记为(m,n),即校验矩阵是mxn的。

LDPC怎样表示

常见的主要有三种,一种是二分图,一种是校验矩阵,一种是度分布函数。二分图是指将校验位和信息位分开,然后根据校验矩阵画出他们之间的依赖关系,比如示例的矩阵:
[ 1 1 0 0 1 0 0 0 1 1 0 1 ] \left[ \begin{matrix} 1 & 1 & 0& 0 & 1 & 0\\ 0& 0 & 1 & 1 & 0&1 \end{matrix} \right] [101001011001]
二分图就为(随手画的不要嫌弃):
在这里插入图片描述
校验矩阵不用多说。最后的度分布函数是指用两个多项式函数分别刻画变量(信息)节点和校验节点的度数分布:
在这里插入图片描述
上面的lmn和pmn是最大度数。前面的系数是度数为i的节点占所有节点的比例。比如度数为3的变量节点占所有节点的0,5,那么就有了一项:0.5*x^2,依次类推,所以所有系数之和为1。那么如果是规则ldpc,度数分布函数将只有一项。

最后提一下LDPC里的环,之前已经提过,LDPC现在的约束里要求尽量不要有四元环。这是因为LDPC不可能有三元环,乃至不可能有奇数环,因为通过二分图我们看出,同为信息位或同为校验位的两个节点间是没有线的,因此如果要成环,只能是信息位->校验位->信息位…最后一定是偶数环。所以最小也是四元环。比如:
在这里插入图片描述
可以看到,有一个c1->p1->c2->p2->c1的四元环。
事实上,短环非常影响LDPC的性能,因为造成了信息浪费,做了多余的检验。对于最小环长(围长),我们称它为girth。

编码

LDPC编码主要解决的是如何构造校验矩阵的问题。因为生成矩阵可以被校验矩阵唯一确定,因此只需要构造出校验矩阵就可以解决LDPC的编码问题了。目前,编码方式主要有代数编码,随机编码这两种,以及结合多个编码器的集成编码方式。

代数编码

代数编码的特点是编出来的校验矩阵往往是规则的。考虑规则LDPC需要满足的要求,其实主要就是列重一致,行重一致,然后尽量稀疏,这样就可以类比点线的关系,或者集合中取元素这一操作等等,从而实现构造。下面简单提一下几种代数编码的思路。
1.欧式有限几何LDPC(EG-LDPC)
有限几何本质上就是考虑有限域上的几何关系,比如二元域0-1,实际上就是一种有限域,所有元素只能取两个值,再比如模8的余数,只有8个值,也可以组成一个有限域。那么每个元素可以当成一个点,与这个点满足一定规则的一系列点可以当成一条线,因为元素是有限个的,所以每条线的点个数也是一定的,并且线的个数是有限的。那么以行为每条线,列为每个点,就可以得到第一类欧式有限几何LDPC码,因为满足过每个点的线是一样多的,每个线的点数是一样多的,所以行重和列重是一致的。同理,以每个点为行,每条线为列,就可以得到第二类欧式有限几何LPDC码。
2.射影有限几何LDPC(PG-LDPC)
和EG-LDPC基本一致,PG-LDPC也是利用了点和线的关系来构造H,但区别是,使用的不是本来的有限域,而是它的射影空间,因此少了一维。
3.均衡不完全区块组设计(BIBD-LDPC)
这种方式和之前的有区别,它是类比的在集合里取元素这一操作。一共取出若干个子集。每一行是取的一个子集,列为超集里的元素,取到记为1。因此为了保证行重相等,每次取出的元素是一样多的,为了保证列重相等,每个元素总共被取出的次数是一样多的。为了消除短环,还需要保证超集的任一个二元组在取出的子集中出现次数不能大于一个限定值。
4.光正交LDPC(OOC-LDPC)
本质是用光正交码去构造LDPC校验矩阵,这里就不多赘述了。
5.广义LDPC
本质是用一堆没有四元环(任意两行内积小于1)的矩阵去替代基矩阵的1,剩余的0用全0矩阵代替

随机编码

LDPC在码长够大时,随机编码的性能非常好,甚至可以毕竟香农限。因此随机编码往往编出的是非规则码字。
1.Gallager的编码方式
gallager的编码方式很简单,首先是按照行分为列重个子矩阵,每个子矩阵列重都为1,第一个子矩阵是有确定的构造方式的,即下降式排开,后面的子矩阵在第一个子矩阵的基础上随机置换得到。
如:
在这里插入图片描述
因为列重为3,所以按行分为了3个子矩阵,每个子矩阵列重为1,第一个子矩阵是四个1下降式排开,后面两个子矩阵则是在第一个子矩阵基础上置换得到。
2.Mackey的构造方式
有多种方式,本质上是分块然后部分矩阵确定,部分矩阵随机编码,通过不断试错或者高斯消去使得矩阵满足一定要求
3.半随机编码
信息位矩阵随机构造,校验位矩阵为一个双对角线矩阵(主,次对角线)
4.π旋转编码
本质上是一个方阵旋转多次,多个角度得到一系列方阵,然后将这些方阵排列组合,得到信息位矩阵

集成编码方式

分为并行级联LDPC(PC-LDPC)和串行级联LDPC(MSC-LDPC),前者是多个校验矩阵并行,后者是多个交织器依次编码,这里不多赘述

译码

传输结束后,如果出错,即校验子s不等于0,怎样纠错,得到最初的码字,就是译码过程要考虑的问题。如果校验的方程和节点数不多,那可以采用解方程的思路来解决,如果很多,那么从概率角度来考虑,可能就是更好的选择。
译码分为软判决和硬判决两种。硬判决只输出判决结果,而软判决还会传出概率等更多信息。
下面简单介绍几种译码方法。具体的推导,代码等等将在以后发布(写不完了=。=)
1.比特翻转法
比特翻转法
2.加权比特翻转法
在这里插入图片描述

3.BP算法(sum-product算法)
在这里插入图片描述

4.最小和算法(min-sum)

在这里插入图片描述

性能分析方法

1.密度进化理论
2.EXIT图
3.高斯估计

一些重点子集

1.qc-ldpc
2.多元域上的LDPC

应用与实现

1.LDPC在各种信道,环境上的应用研究
2.LDPC的fpga实现

总结

以上就是LDPC的简单介绍,都是我自己的理解,可能有纰漏错误之处,没有校正,希望大家不吝赐教。如果想进一步了解,可以关注我后续的文章。
最后附上思维导图供大家参考。
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值