初学者LDPC码扫盲
关于LDPC码
关于LDPC码的介绍非常的多,有关的期刊和论文数不胜数,但是很多人多注重创新点的介绍,在内容上忽略了LDPC码最基本的内容。很多的论文中,对LDPC编码的内容经常是毫无多余的解释,直接放出一张Tanner图,之后就开始介绍译码,这对于初学者很不友好。
信道编码
关于LDPC码的一切要先从信道编码开始,通信行业中,对数据的传输的期望其实和生活中和他人沟通交流一样,都是希望又快又好。用通信的话说就是有效性和可靠性。但是显而易见的是,有效性和可靠性是一对矛盾,前者要求信息的传输必须精简高效,而后者则要求信息的传输必须繁杂冗余。因此,在这两个不同的方向中引申出了两个不同的领域:信源编码和信道编码。
信源编码的本质就是把长的变短,减少废话;
信道编码的本质就是把短的变长,减小错误带来的影响。
信道编码的本质就是对接收到的比特(信息比特)进行处理,从而得到一系列新的比特(校验比特)。最后将两者拼在一起就可以得到编码后的结果就是编码结果。显而易见的是,“新的比特”是根据“旧的比特”以一定的特殊关系生成的。而这一特殊关系正是编码的规则。
信
息
比
特
+
编
码
方
式
=
校
验
比
特
信息比特+编码方式=校验比特
信息比特+编码方式=校验比特
信
息
比
特
+
校
验
比
特
=
编
码
后
的
码
字
信息比特+校验比特=编码后的码字
信息比特+校验比特=编码后的码字
奇偶校验
要怎样将短的码字变长,提高正确率,减小误码率呢,最初人们想到的是在所有的信息比特的最后加上一个校验比特,而这一比特的选择由前面信息比特的0和1的个数决定,这种理解上简单,在软件和硬件中实现起来也很简单的方式就是奇偶校验码。
优点
毫无疑问,这种编码方式十分简单友好,只需要一句话就可以解释清楚,在硬件和软件的实现中本质上就是在做模二加
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
缺点
- 只能检错不能纠错
- 只能检查出奇数个错误,不能检查出偶数个错误
奇偶校验的改进
在奇偶校验码的基础上,人们在原来的基础上发现:
-
奇偶校验码的本质是对所有的输入的信息比特进行模二加,那能不能只对部分的输入码字进行模二加呢?
-
除此之外,奇偶校验码的校验比特只有一位,那能不能多加几位呢?
在此基础上,人们又对原来的奇偶检验位进行改进:
可以从图中看出,这次的“奇偶校验码”跟原来有了很大的区别,甚至都不像是奇偶校验码了,输入的信息比特一共有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日开始撰写,感谢youtube上的