2. 北京遥感设备研究所,北京 100854
2. Beijing Institute of Remote Sensing Equipment, Beijing 100854, China
低密度奇偶校验(low density parity check, LDPC)码是一种校验矩阵具有稀疏奇偶特性的线性分组码,由Gallager[1]首次提出,经常用于通信系统和储存系统的纠错,在满足一定的假设条件下,LDPC码的性能非常接近香农容量极限[2]。
随机构造的LDPC码虽然具有优良的性能,但由于其没有确定性结构,编译码复杂度较大,不利于硬件实现。Fossorier[3]提出的准循环低密度奇偶校验(QC-LDPC)码在译码性能与译码复杂度方面有良好的折中。译码方面,最小和算法由于NR和LTE译码模块之间具有可重用性、硬件实现复杂度低等优点成为了现代SoC设计用于LDPC译码中使用最多的译码算法。传统的译码结构横向更新与纵向更新是完全分开完成的,纵向更新需等待横向更新完成后才可以开始,这很大程度上限制了吞吐率的提高。本文设计了一种层间流水线结构的译码器,并以FPGA作为实现平台,以WIMAX标准[4](2304,1152)QC-LDPC码为例,设计仿真了基于最小和算法[4]的QC-LDPC码译码器,并提高了吞吐率。
1 QC-LDPC码的校验矩阵QC-LDPC码的校验矩阵[5]是由一组循环子矩阵构成,子矩阵具有如下特点:
1)每一个子矩阵都是一个n×n大小的方阵;
2)循环子矩阵的任意一行(列)都是由上一行(列)向右(下)移动一位得到的,特别的,循环子矩阵的第一行(列)由循环子矩阵的最后一行(列)向右(下)移动一位得到。
QC-LDPC码的校验矩阵可定义为
${H} = \left[ {\begin{array}{*{20}{c}} {{{A}_{0,0}}}&{{{A}_{0,1}}}& \cdots &{{{A}_{0,N - 1}}}\\ {{{A}_{1,0}}}&{{{A}_{1,1}}}& \cdots &{{{A}_{1,N - 1}}}\\ \vdots & \vdots &{}& \vdots \\ {{{A}_{M - 1,0}}}&{{{A}_{M - 1,1}}}& \cdots &{{{A}_{M - 1,N - 1}}} \end{array}} \right]$ | (1) |
式中:M,N为正整数,Aij是n×n大小的子矩阵,由全零矩阵或单位循环移位矩阵组成。根据式(1)可知,QC-LDPC码的校验矩阵由M×N个n×n大小单位循环方阵组成。WIMAX标准(2304,1152)QC-LDPC码的基矩阵如图1所示。
![]() |
Download:
|
图 1 WIMAX标准(2304,1152)QC-LDPC码的基矩阵 |
分层最小和译码算法[6]是分层算法与最小和算法的结合。最小和算法是BP译码算法的简化版本,对校验节点传递给变量节点的对数似然比概率信息进行近似运算,该算法不需要信道估计,将复杂的双曲正切运算转化为比较(取最小)运算和加法运算,与BP译码算法相比大大减少了计算量,降低了硬件实现难度。分层算法则是将校验矩阵H以行为基准分为若干层,每层列重最大为1。首先基于第一层进行校验信息的更新;其次将更新后的校验信息代入到变量节点中进行变量信息的更新,当第一层信息更新完成后,即将更新后的信息传递给下一层,继续进行下一层的校验信息和变量信息的更新,直至所有分层都完成信息的更新;最后对得到的后验概率信息进行硬判决并进行校验,如符合判决条件则停止译码,不符合则重新开始直至符合判决条件。在非分层算法中,信息是双向传递的,变量节点需要等待校验节点完全更新后才能开始更新,反之亦然。而在分层算法中的变量信息是用后验概率信息与校验信息来表示的,因此无需储存变量信息;横向更新使用的信息都是上一行或上一次迭代纵向更新的信息。分层译码算法与非分层算法相比,减少了单次迭代所需时间,信息迭代过程中分层译码算法简化了储存器与数据交换网络,降低译码复杂度和链路延时。
具体分层最小和译码算法如下:
1)初始化
利用初始信道信息解调后得到的对数似然比序列对后验概率信息进行初始化:
$L(Q)_{i,0}^1 = {y_i},L(r_{i,j}^0) = 0$ |
式中:
2)分层更新
①根据上一层得到的后验概率信息和校验节点信息更新变量节点信息:
$L\left( {q_{i,j,m}^n} \right) = L\left( {Q_{i,m - 1}^n} \right) - L\left( {r_{i,j,m}^{n - 1}} \right)$ |
式中:n为当前迭代次数;m为当前层数。
②根据更新后的变量节点信息更新当前层的校验节点信息:
$L\left( {r_{i,j,m}^n} \right) = \left( {\prod\limits_{i' \in N(j)\backslash i} {{\rm{sgn}}} \left( {L\left( {q_{i,j,m}^n} \right)} \right)} \right) \times \left( \mathop {\min }\limits_{i' \in N(j)\backslash i} L\left( {q_{i,j,m}^n} \right) \times \alpha \right)$ |
式中α为归一化因子,是一个小于1的常数。
③根据更新后的变量节点信息与校验节点信息更新后验概率信息,作为下一层的后验概率信息:
$L\left( {Q_{i,m - 1}^{^{n + 1}}} \right) = - L\left( {r_{i,j,m}^n} \right) + L\left( {q_{i,j,m}^n} \right)$ |
式中m=m+1,重复步骤①~③,直至最后一层。
3)译码判决
对L(
将矩阵H与序列Zi相乘得到校验结果,若校验结果为0或者达到最大迭代次数,停止迭代;若校验结果不为0且未达到最大迭代次数,重复步骤2)、3)。
3 QC-LDPC码译码器的FPGA设计本文选择WIMAX标准(2304,1152)QC-LDPC码来设计层间流水线结构译码器。根据QC-LDPC码的校验矩阵特性可知,该结构十分适合使用水平分层译码算法进行译码,将WIMAX标准(2304,1152)QC-LDPC码的校验矩阵分为12层,每次迭代信息从顶层到底层垂直传递。本文所设计的译码器采用分层最小和算法,既拥有分层算法的高速收敛特性,又具有最小和算法的低复杂度特性。该译码器结构框图如图2所示。
![]() |
Download:
|
图 2 层间流水线结构译码器结构框图 |
本文设计的译码器主要包括初始信道信息接收模块、后验概率信息储存模块、节点信息更新模块、校验信息储存模块、控制模块以及判决模块。其主要特点有:
1)优化译码策略,设计流水线结构,通过修正校验矩阵克服了数据冲突的问题,使层间可以并行,有效提高译码器工作效率与吞吐率。
2)优化校验节点更新过程中取最小值与次小值的结构,使其在更短的时间内完成比较功能。
3.1 译码策略常用的分层译码策略有2种:1)以层数为并行度的策略,每次迭代所需时间与子矩阵大小n有关;2)以子矩阵大小n为并行度的策略,每次迭代所需时间与层数S有关。对于WIMAX标准(2304,1152)QC-LDPC码来说,分层数最小为12层,子矩阵大小n为96,因此采用以子矩阵大小n为并行度的策略实现的译码器会获得更高的吞吐率。传统的分层译码算法的时序如图3所示。
![]() |
Download:
|
图 3 传统分层最小和算法时序示意 |
图3中,Tc表示一层校验节点信息读写计算所占用的时间,Tv表示一层变量节点信息读写计算所占用的时间,S表示所分层数。于是一次迭代所需时间Titer=(Tc+Tv)×S。从图3可以看出,传统的分层译码算法层与层之间是串行进行的,校验节点处理过程和变量节点处理过程是分开的。传统的分层译码算法采用层间串行策略是因为WIMAX标准(2304,1152)QC-LDPC码的校验矩阵上下层间都有共用的校验节点,而迭代过程中每次传递的后验概率信息必须是已完成的更新值,否则校验节点会同时处理来自同一变量节点的多个数据,数据冲突导致译码性能急剧下降。为了实现层间并行,需要对校验矩阵进行修正,使上下2层不共用校验节点。根据这一修正条件,本文将WIMAX标准(2304,1152)QC-LDPC码的校验矩阵修正为如图4所示。
![]() |
Download:
|
图 4 修正后(2304,1152)QC-LDPC码的基矩阵 |
从图4中可以看出,修正后矩阵上下两层不再有共用的校验节点。为了得知修正对WIMAX标准(2304,11452)QC-LDPC码的影响,对原始的QC-LDPC码和修正后的QC-LDPC码进行仿真,并将结果进行比较。仿真条件译码算法采用分层最小和译码算法,最大迭代次数设定为10次,量化方案采用浮点数量化,得到原始的QC-LDPC码和修正后的QC-LDPC码性能如图5所示。图5中比较结果显示,修正后的QC-LDPC码译码性能比原始QC-LDPC码译码性能略有下降,但几乎可以忽略,采用修正后的QC-LDPC码校验矩阵进行译码可以使层与层间进行交替计算,提高了吞吐量。
![]() |
Download:
|
图 5 原始译码性能与修正后译码性能比较 |
本文采用层间流水线策略进行译码,时序图如图6所示。
图6中,Tc表示一层校验节点信息读写计算占用的时间,Tv表示一层变量节点信息读写计算占用的时间,S表示所分层数。由于修正后的QC-LDPC码的校验矩阵上下两层不共用校验节点,使得校验节点和变量节点可以并行更新信息,于是一次迭代所需时间Titer=(Tc+Tv)×(S/2+1)。与传统分层译码相比节约了每次迭代的时间,提升了吞吐率。
![]() |
Download:
|
图 6 层间流水线策略分层最小和算法时序示意 |
校验节点信息处理模块是节点信息处理模块中的核心处理单元,它主要完成对从校验节点传输过来的信息的处理。在校验节点更新的过程中,校验节点反馈给变量节点的信息的最小值是不包括该变量节点传递给校验节点的信息的,因此需要比较与校验节点相连的变量节点所含信息的最小值与次小值。比较模块是校验节点信息处理模块中最核心的部分,对于WIMAX标准(2304,1152)QC-LDPC码来说,与校验节点相连的变量节点为6或7个。文献[7]中使用的是最通用的串行比较器,将输入信息的前2个值进行比较并将比较结果按最小值(min)和次小值(smin)的顺序储存到寄存器中,并将剩下的信息按顺序与储存的最小值与次小值进行比较,并更新最小值与次小值直至最后一个信息。对于七输入的比较器来说,该方法共需要进行11次比较,并需要6个时钟完成比较计算。文献[8]对串行比较器进行改进,使用如图7所示的结构。
![]() |
Download:
|
图 7 文献[8]中比较模块结构 |
文献[8]的比较结构将输入信息两两分为一组进行比较,再将比较后的最小值与次小值输入到下一级比较器中进行比较,完成7个初始信息的比较只需要3个时钟,该方法也需要进行11次比较。文献[9]使用了一种交叉比较结构,如图8所示。
![]() |
Download:
|
图 8 文献[9]中比较模块结构 |
文献[9]中的比较器同样需要进行11次比较,流水线长度为3个时钟周期。
本文使用一种树状比较结构,其结构如图9所示。
![]() |
Download:
|
图 9 本文比较结构 |
图9中,将7个输入信息分为4个信息和3个信息共2组,分别求最小值和次小值,再将2组最小值和次小值进行比较得出结果,该结构同样需要进行11次比较,流水线长度为2个时钟周期,在不增加计算量的情况下缩短了比较计算所消耗的时间。在硬件资源充裕的情况下可改为组合逻辑电路,在一个时钟周期下完成七输入求最小值与次小值的计算。
4 实验结果及分析系统在AWGN信道下测试,调制方式为QPSK调制,采用WIMAX标准(2304,1152)QC-LDPC码,译码算法为分层最小和译码算法,最大迭代次数设置为10次,对基于最小和算法的QC-LDPC译码器的FPGA平台进行Modelsim仿真,流程如图10所示。
![]() |
Download:
|
图 10 LDPC译码器系统流程 |
测试流程如下:由Matlab软件模拟高斯白噪声信道环境产生不同信噪比下的噪声加入到初始信息中,传递给FPGA的译码器进行译码,译码结束后将结果输出到Matlab软件中测得译码器性能,再与理论性能比较,比较结果如图11所示。
![]() |
Download:
|
图 11 LDPC译码器实际性能与理论性能比较 |
通过仿真发现,实际系统与理论相比由于数据量化精度和数据截位等原因会有大约0.1 dB的性能损失,基本不影响译码器的整体性能,很好地完成了译码的功能。译码器吞吐率公式为
$T = \frac{{{{f}} {{N}}}}{{{{t}} {{i}}}}$ | (6) |
式中:f为时钟频率;N为码长;t为单次迭代所消耗的时钟周期数;i为最大迭代次数。当时钟频率为200 MHz、最大迭代次数为10时,吞吐量可达1 Gb/s。将本文设计的译码器与其他文献设计的译码器进行对比,其性能如表1所示。
![]() |
表 1 FPGA实现的译码器性能比较 |
从表1可以看出,与文献[10]、[11]、[12]提出的译码器相比,本文提出的译码器吞吐量最大。
5 结论QC-LDPC码由于其校验矩阵的准循环特性使得其硬件实现具有比较低的复杂度,如何提升吞吐率则成为重点。本文针对现有的译码器,从以下2个方面提出如下改进:
1) 从译码策略角度,针对分层最小和译码由于层间串行限制吞吐率的问题,本文设计了一种层间流水线结构译码器,很好地解决了层间串行的问题,同时提高了吞吐量。
2) 从比较模块结构角度,优化校验节点更新过程中取最小值与次小值的结构,使其在更短的时间内完成比较功能,提高吞吐量。
改进后的译码器大幅提升了吞吐量,但仍有不足,这种改进方法仅适用于基于基矩阵扩展而来的QC-LDPC码。随着硬件的发展,基于最小和算法的QC-LDPC译码器在对吞吐率要求高的情况下,会有很好的应用前景。
[1] |
GALLAGER R G. Low-density parity-check codes[M]. Cambridge: MIT Press, 1963: 70-81.
(![]() |
[2] |
CHUNG S Y, FORNEY G D, RICHARDSON T J, et al. On the design of low-density parity-check codes within 0.0045 dB of the Shannon limit[J]. IEEE communications letters, 2001, 5(2): 58-60. DOI:10.1109/4234.905935 (![]() |
[3] |
FOSSORIER M P C. Quasicyclic low-density parity-check codes from circulant permutation matrices[J]. IEEE transactions on information theory, 2004, 50(8): 1788-1793. DOI:10.1109/TIT.2004.831841 (![]() |
[4] |
郎为民, 刘波. WiMAX技术原理与应用[M]. 北京: 机械工业出版社, 2008.
(![]() |
[5] |
贺鹤云. LDPC码基础与应用[M]. 北京: 人民邮电出版社, 2009.
(![]() |
[6] |
MANSOUR M M, SHANBHAG N R. High-throughput LDPC decoders[J]. IEEE transactions on very large scale integration (VLSI) systems, 2003, 11(6): 976-996. DOI:10.1109/TVLSI.2003.817545 (![]() |
[7] |
周娣. 多码率多码长LDPC码的译码算法研究与实现[D]. 重庆: 重庆大学, 2018.
(![]() |
[8] |
曹明星. 卫星通信中LDPC码高速编译码器实现技术研究[D]. 西安: 西安电子科技大学, 2018.
(![]() |
[9] |
张函隽. 基于WiMax802.16e的LDPC码解码器的设计与优化[D]. 上海: 上海交通大学, 2008.
(![]() |
[10] |
ÇAĞLAN A, BALCISOY E, KIRKAYA E, et al. FPGA implementation of layered low density parity check error correction codes[C]//Proceedings of the 2017 25th Signal Processing and Communications Applications Conference. Antalya, Turkey: IEEE, 2017.
(![]() |
[11] |
邱丽鹏. 分层全并行QC-LDPC码译码器的研究与实现[D]. 泉州: 华侨大学, 2017.
(![]() |
[12] |
徐斌, 贺玉成. 高吞吐量QC-LDPC码分层译码设计[J]. 计算机工程, 2019, 45(7): 121-125, 133. (![]() |