初学者LDPC码扫盲

关于LDPC码

关于LDPC码的介绍非常的多,有关的期刊和论文数不胜数,但是很多人多注重创新点的介绍,在内容上忽略了LDPC码最基本的内容。很多的论文中,对LDPC编码的内容经常是毫无多余的解释,直接放出一张Tanner图,之后就开始介绍译码,这对于初学者很不友好。

信道编码

关于LDPC码的一切要先从信道编码开始,通信行业中,对数据的传输的期望其实和生活中和他人沟通交流一样,都是希望又快又好。用通信的话说就是有效性和可靠性。但是显而易见的是,有效性和可靠性是一对矛盾,前者要求信息的传输必须精简高效,而后者则要求信息的传输必须繁杂冗余。因此,在这两个不同的方向中引申出了两个不同的领域:信源编码和信道编码。
信源编码的本质就是把长的变短,减少废话;
信道编码的本质就是把短的变长,减小错误带来的影响。

信源编码(有效性)
信道编码(可靠性)

信道编码的本质就是对接收到的比特(信息比特)进行处理,从而得到一系列新的比特(校验比特)。最后将两者拼在一起就可以得到编码后的结果就是编码结果。显而易见的是,“新的比特”是根据“旧的比特”以一定的特殊关系生成的。而这一特殊关系正是编码的规则。
信 息 比 特 + 编 码 方 式 = 校 验 比 特 信息比特+编码方式=校验比特 +=
信 息 比 特 + 校 验 比 特 = 编 码 后 的 码 字 信息比特+校验比特=编码后的码字 +=

奇偶校验

要怎样将短的码字变长,提高正确率,减小误码率呢,最初人们想到的是在所有的信息比特的最后加上一个校验比特,而这一比特的选择由前面信息比特的0和1的个数决定,这种理解上简单,在软件和硬件中实现起来也很简单的方式就是奇偶校验码。

在这里插入图片描述

图2 奇偶校验码

优点

毫无疑问,这种编码方式十分简单友好,只需要一句话就可以解释清楚,在硬件和软件的实现中本质上就是在做模二加
1 + 1 = 0 1+1=0 1+1=0
1 + 0 = 1 1+0=1 1+0=1
0 + 0 = 0 0+0=0 0+0=0
0 + 1 = 1 0+1=1 0+1=1

缺点

  1. 只能检错不能纠错
  2. 只能检查出奇数个错误,不能检查出偶数个错误

奇偶校验的改进

在奇偶校验码的基础上,人们在原来的基础上发现:

  1. 奇偶校验码的本质是对所有的输入的信息比特进行模二加,那能不能只对部分的输入码字进行模二加呢?

  2. 除此之外,奇偶校验码的校验比特只有一位,那能不能多加几位呢?

在此基础上,人们又对原来的奇偶检验位进行改进:

在这里插入图片描述

图2 改进的奇偶校验

可以从图中看出,这次的“奇偶校验码”跟原来有了很大的区别,甚至都不像是奇偶校验码了,输入的信息比特一共有3位,而输出的结果也有3位,输出的三位的结果分别是输入的三位其中两位的模二加。
设输入的信息比特分别为:
s 1 , s 2 , s 3 s1,s2,s3 s1,s2,s3
得到的校验比特分别为
p 1 , p 2 , p 3 p1,p2,p3 p1,p2,p3
其计算公式可以写成
s 1 + s 2 = p 1 s1 +s2=p1 s1+s2=p1
s 1 + s 3 = p 2 s1 +s3=p2 s1+s3=p2
s 2 + s 3 = p 3 s2 +s3=p3 s2+s3=p3
此时就引入了一个码率的概念,即:
码 率 = 输 入 的 码 字 个 数 / 总 码 字 的 个 数 码率 = 输入的码字个数/总码字的个数 =/
此处的码率就是0.5。

优点

可以看出,这种改进后的版本改进了原本只能检错不能纠错的特点,这一次可以纠错了。可靠性提高了
纠错的方法如下:假设在传输的过程中很不巧其中一位丢失了,就如下图所示:
在这里插入图片描述
此时只需要根据公式: s 1 + s 2 = p 1 s1 +s2=p1 s1+s2=p1就可以反求出s2的值。
这种方式不仅仅可以纠错一位,两位也是可以的,方法和纠错一位是一样的,如下图所示,两位信息位都出现了错误:
在这里插入图片描述
利用公式就可以纠错:
s 1 + s 3 = p 2 s1 +s3=p2 s1+s3=p2
s 2 + s 3 = p 3 s2 +s3=p3 s2+s3=p3
还有一种情况是信息位和校验位各自出现了一位错误:
在这里插入图片描述
此时也很好解决,只需要利用公式就可以解决:
s 1 + s 2 = p 1 s1 +s2=p1 s1+s2=p1
s 2 + s 3 = p 3 s2 +s3=p3 s2+s3=p3

缺点

这种方式的缺点其实也很明显,原来的校验比特只有1位,而现在变成了3位,这增加了系统的复杂度,也增加了冗余,系统的有效性下降了

小结

这种改进的方式其实就是LDPC码的本质。而这种 “上面是一个个圆,下面是一个个正方形” 的图,用于表现信息比特和校验比特关系的,正是LDPC码的Tanner图。上面的圆形,就是变量节点,下面的正方形,就是校验节点

这种编码方式的特点在于,只要我设计的校验位足够多,公式足够复杂

令人无法理解的是,很多的文献居然直接跳过以上这个部分,直接从Tanner图开始讲解LDPC编码,这对于初学者很不友好,
关于以上这个部分,有条件的话建议观看:
LDPC讲解视频(Youtube).

进一步的改进

对于以上改进后的编码方式,其实离LDPC码就剩一步了。因为在传输过程中不仅仅是信息比特会出现错误,而是整个编码后的结果都会出现错误,因此必须要将信息比特和校验比特放在同等的位置。相互纠错和检错。
在这里插入图片描述
用公式可以表示为:

s 1 + s 2 + p 1 = 0 s1+s2+p1=0 s1+s2+p1=0
s 1 + s 3 + p 2 = 0 s1+s3+p2 = 0 s1+s3+p2=0
s 2 + s 3 + p 3 = 0 s2+s3+p3 = 0 s2+s3+p3=0
而这三个公式又可以进一步表示为一个矩阵:
[ 1 1 0 1 0 0 1 0 1 0 1 0 0 1 1 0 0 1 ] \quad \begin{bmatrix} 1 & 1& 0&1&0&0\\ 1 & 0& 1& 0& 1& 0\\ 0 & 1& 1& 0& 0& 1\end{bmatrix} \quad 110101011100010001

这一矩阵正是校验矩阵,其中行数是校验比特的数量

开始编码

后记

本文于2020年11月17日开始撰写

  • 85
    点赞
  • 271
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
### 回答1: LDPC是一种近年来应用广泛的,具备较好的纠错性能,有着广泛的应用,包括无线通信、数字电视、存储介质等领域。LDPC编译是指将信息编码LDPC,再对接收到的LDPC进行解,恢复原始信息。C语言作为一种高效、强大、广泛应用的编程语言,被广泛应用于LDPC编译算法的实现。 在LDPC编码过程中,需要对信息进行分组和加,使得字满足LDPC的要求,即通过二元矩阵的转换生成的稀疏矩阵具有较好的Hadamard性质,在调整字的过程中,按照结构矩阵对信息进行分配,将每一组信息按照列的顺序依次编码LDPC过程一般采用迭代算法。在C语言中,可以用数组来表示LDPC的结构矩阵、校验矩阵、展开矩阵等,并且具备高效的数组操作方法,在迭代算法中,可以用循环语句实现更新操作。LDPC的解算法包括硬判决译、软判决译等多种方法,在C语言中可以通过采用逻辑操作和数组运算等方式实现。 总之,LDPC编译的实现需要结合C语言中数组、循环、逻辑操作等语言特性,基于LDPC的性质和解算法,实现有效的LDPC编解算法,应用于无线通信、存储介质等领域。 ### 回答2: LDPC是一种优秀的纠错,具有性能优越、延迟小、适用性广等优点。编译技术是实现LDPC的关键之一,编码部分通常采用矩阵乘法来计算,而译部分则使用迭代译算法。C语言是一种高效、便捷的编程语言,能够很好地实现LDPC的编译功能。下面是几种常用的LDPC编译C语言实现方法: 1. 使用C语言中的数组表示矩阵,并通过矩阵乘法实现编码操作。译部分则采用Min-Sum算法等常用的译算法。 2. 使用C语言中的链表数据结构来表示矩阵,并通过链式数据结构实现矩阵乘法和逆矩阵计算。译部分同样采用常用的迭代译算法。 3. 借助现有的LDPC库来实现编译功能,如GF(2)算法库、GNU科学计算库等。这些库中已经实现了LDPC的各种运算,可以简化编译的实现过程。 不管采用哪种方法,都需要注意效率和稳定性方面的考虑。对于大规模的LDPC,需要使用高效的算法和数据结构,避免浪费过多的时间和空间。此外,编译中的精度和控制参数等要素也需要仔细调整,保证LDPC的性能和可靠性。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值