LDPC码编码与译码实现
摘要
作为线性分组码的一种,LDPC码在1962年由Gallager提出。其纠错能力被证明可以接近香农极限。由于设备性能限制,在当时LDPC码并未广泛普及。随着近年集成电路技术与嵌入式计算技术的发展,LDPC码的广泛应用逐渐有了较强的可行性。本文将基于LDPC码的基本原理,介绍LDPC码编码原理与实现,基于LLR函数的LDPC码译码(Sum-Product Algorithem)实现,并尝试利用matlab配合2PSK调制方法实现了一个简单的仿真模型,以及基于蒙特卡洛分析的性能仿真
LDPC编码理论
LDPC码属于线性分组码,其编码方式与普通的线性分组码编码方式没有区别。这里主要介绍H矩阵的构造方法。
H矩阵须满足一个基本原则,即“每行的行重一致,每列列重一致,且每两列相同位置均为1的个数不超过1,以及行重与列重和H矩阵中的列数和行数相比需小得多。”
在Gallager初始的研究中,校验矩阵的构建往往遵从随机原则。随着时代的发展,学者们更倾向于利用现代代数的理论来描述构建H矩阵。结合诸如凸优化等优化方法,LDPC码可以无限接近香农极限。
H矩阵构造
考虑一个具有一般性的LDPC码校验矩阵构造,出于实用角度出发,我们选择CCSDS document (version 1,published in 2006)中的方法构造校验矩阵,该方法构造的校验矩阵可以适用不同的编码效率,具有较强的通用性。
以码率为1/2的H矩阵构造为例,首先需确定参数M,根据M可构建出M*M大小的子矩阵,子矩阵往往由零矩阵0M,单位矩阵IM和置换矩阵ΠM构成。对于置换矩阵ΠM,其构造遵循下述公式:
其中θk和ϕk的值可以由一个单独的表确定
则1/2码率的校验矩阵可以通过下述矩阵表示
根据上述理论,可以得到如下代码
在获得校验矩阵后,通过列变换不难得到系统形式的校验矩阵,以及系统形式的生成矩阵。最后根据线性分组码的一般方法,便可以完成LDPC码的编码。
LDPC码解码
对于LDPC码解码,其软解码开销往往高于硬解码,但是却具有远超硬解码的纠错与译码性能。下面考虑一个AWGN信道下,LDPC码基于Sum-Product Algorithem的解码过程
我们不妨假设AWGN的方差是σ2,令发送信号为U,接收信号为Y,
对于信道传输后x=0和x=1的概率,我们可以得到LLR函数。
由AWGN信道数学性质可以得到:
上述公式表述了发送端发送比特为0/1的后验概率。由于概率域上的连乘操作会消耗大量算力,故转化为对数域,将乘法运算转化为加法运算。
利用Tanner图我们可以比较便利的表示一个线性分组码
考虑任意校验节点cj,与其连接的变量节点vi的值确定,且除vi外其他变量节点为0或者1的概率已知的条件下,我们可以得到第j个校验方程满足的概率。上述公式我们得到了任意比特经过AWGN信道传输后的后验概率,结合上述公式我们不难得到第j个校验方程满足的概率,即校验节点传递给变量的外信息为:
对每个变量节点进行遍历,计算变量节点传递给校验节点的外信息,并将概率值相乘,便得到了任意变量节点经过信道传输后的后验概率。
若0的概率大,判决为1。否则判决为0
考虑到对于大多数硬件实现乘法计算开销较大,我们选择将概率域转化到对数域。这样连乘操作便转化为了计算开销更小的连加操作。
在上述理论的基础下,我们便得到了基于Sum-Product算法的一般性LDPC码译码方法。利用matlab有以下具体实现:
仿真模型构建
本文基于matlab以及PSK调制方式构建了一套仿真模型。利用蒙特卡洛模拟的思想随机生成一系列的初始码元,并对其进行LDPC编码。对初始信息码元利用2PSK调制,在不同给定SNR下通过AWGN信道传输,在接受端进行2PSK解调后利用和积算法译码,得到还原后的码元。最后将还原后的码元与原始信息码元按位与或,便可以得到不同SNR下LDPC码的误码率表。流程图如下图所示:
仿真结果