CN108365849B - 基于simd指令集的多码率多码长ldpc码解码方法 - Google Patents
基于simd指令集的多码率多码长ldpc码解码方法 Download PDFInfo
- Publication number
- CN108365849B CN108365849B CN201810021203.7A CN201810021203A CN108365849B CN 108365849 B CN108365849 B CN 108365849B CN 201810021203 A CN201810021203 A CN 201810021203A CN 108365849 B CN108365849 B CN 108365849B
- Authority
- CN
- China
- Prior art keywords
- code
- matrix
- row
- index
- check node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
- H03M13/1108—Hard decision decoding, e.g. bit flipping, modified or weighted bit flipping
Landscapes
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Error Detection And Correction (AREA)
Abstract
本发明提供了基于SIMD指令集的多码率多码长LDPC码解码方法,结合准循环结构的LDPC码基矩阵特点,通过外部配置文档实现对校验矩阵信息在线统计,采用定点分层译码方案,解码器为不同行重分别构造了一个特定校验节点计算单元,根据不同行重选择校验节点计算单元,校验节点计算单元内部采用循环展开方式。本发明实现了校验矩阵信息的在线统计,降低了多码率码长的LDPC码译码器的存储量;与现有算法相比消除了对矩阵统计信息的依赖,降低了译码器实现复杂度;与现有算法相比不存在速度损失,同时可以对在线计算的模块进行修正,具有通用性。
Description
技术领域
本发明属于信道编码技术领域,具体涉及一种解码方法,更为具体的说,是涉及一种基于SIMD指令集的多码率多码长LDPC码解码方法。
背景技术
LDPC码即低密度奇偶校验(Low-Density Parity-Check,LDPC)码,它是由RobertG.Gallager博士于1963年首次提出的一类具有稀疏校验矩阵的线性分组码并在1995被D.J.C.Mackay和R.W.Neal重新提出。LDPC码具有逼近Shannon限的良好性能,而且译码复杂度较低、结构灵活、低延时,可实现高速并行译码,近二十年来一直是信道编码领域的研究热点。目前LDPC码已广泛应用于无线通信(WiFi,WiMAX)、深空通信、光纤通信、卫星数字视频和音频广播等领域。现在LDPC码已经成为5G信道编码中数据信道的编码方案,eMMB场景已经确定使用LDPC码的编码方案。
3GPP为LDPC码定义了两大类基矩阵,分别为BG1和BG2,其中BG1和BG2中各包括8个不同的基矩阵(参考文献2:3GPPTS 38.212,“Multiplexingandchannel coding,”v.1.0.0,Sep.2017;http://www.3gpp.org.)。BG_1中的基矩阵HBG_1的参数为Mb=46,Nb=68。BG2中的基矩阵的参数为Mb=42,Nb=52。BG1和BG2中各个基矩阵分别支持一组给定的扩展因子Zc。标准规定,编码后的码字前2Zc个信息比特打孔不传输,详细速率匹配方案参考文献2。
图1给出了集合BG1中的LDPC码的矩阵结构示意图,整个矩阵结构由两部分组成,可以看做是核心矩阵和多个单奇偶校验码的级联。其中,核心矩阵是一个高码率矩阵,矩阵的右侧包含了一种双对角形式,并且第(Nb-Mb)列有“a-b-a”的形式,刚好可以满足编码算法的要求。核心矩阵与单奇偶校验码级联使得LDPC码支持码率低于核心矩阵的码字,并且构成了支持递增冗余混合重传(Incremental Redundancy Hybrid-Automatic-Repeat-request,IR-HARQ)结构。BG2中的LDPC码除核心矩阵部分“a-b-a”的取值和“a-b-a”对应的行与BG1略有不同以外,其余均与图1所示的矩阵结构相似。
随着主要依靠时钟频率来提升处理器性能的方案达到了一个瓶颈,近些年来,作为继续提升处理器性能的并行处理技术受到了关注,主要包括单操作多数据流(SingleInstruction MultipleData,SIMD)技术,单操作多线程(Single InstructionMultipleThreads,SIMT)技术,单程序多数据流(Single ProgramMultiple Data,SPMD)技术等,这些技术已经被集成于当前的CPU和GPU。
纯软件实现的LDPC码译码器近些年来受到了广大研究人员的关注,然而近些年的研究主要集中于洪泛方式的LDPC译码和GPU实现方式,这不是最有效的LDPC码译码器实现方式。最新的研究(参考文献1:Gal B L,Jego C.High-Throughput Multi-Core LDPCDecoders Based on x86Processor[J].IEEE Transactions on Parallel&DistributedSystems,2016,27(5):1373-1386.)提出了一种基于X86架构的LDPC码的高速解码器,然而该方法需要离线统计校验矩阵的相关信息,实现复杂度高,将其应用于面向5G的一类支持多码率多码长的LDPC码比较困难。
目前已经提出的LDPC码解码算法中,分层译码算法具有收敛速度快,占用内存少的特点受到了广泛关注,虽然分层译码算法的并行度不高,但是适用于X86架构处理器的软件实现;目前的已有研究表明,送入LDPC码解码器的对数似然比采用6比特量化,解码器采用8比特处理方式的定点译码和浮点译码相比,性能损失可以忽略不计。
发明内容
为解决上述问题,本发明公开了基于SIMD指令集的多码率多码长LDPC码解码方法,能够克服已有方法的LDPC码软件实现需要离线统计校验矩阵信息的缺陷。本发明结合准循环结构的LDPC码基矩阵特点,通过外部配置文档实现对校验矩阵信息在线统计,采用定点分层译码方案,解码器为不同行重分别构造了一个特定校验节点计算单元,根据不同行重选择校验节点计算单元,校验节点计算单元内部采用循环展开方式,既降低了复杂度,同时提高了吞吐率。
本发明特点在于根据分块结构的LDPC码的基矩阵和扩展因子Zc,在线统计校验矩阵信息;解码器采用分层归一化最小和方式,为每一类行重构造相应的校验节点计算单元,校验节点计算单元内部采用循环展开方式。
为了达到上述目的,本发明提供如下技术方案:
基于SIMD指令集的多码率多码长LDPC码解码方法,包括如下步骤:
S101:统计校验矩阵信息
首先读取分块结构LDPC码的参数Mb、Nb和Zc以及基矩阵Hb,Mb为基矩阵的行数,Nb为基矩阵的列数,Zc为扩展因子;
将Hb按照行重dc从大到小重新排序,结合Zc统计扩展后的H中行重和对应行重的数目,并将其存储到数组degs和degsComputation中,统计不同行重的数目NoDegs以及H中1的数目NoOnes,H表示LDPC码的校验矩阵,H的行、列数分别为M、N,M=Mb*Zc,N=Nb*Zc;
根据Zc对Hb中非负元素hij进行取模,hij'=mod(hij,Zc),并用Zc*Zc的单位循环移位阵替换对应的非负元素,移位参数取hij',使用Zc*Zc的全零矩阵替换-1元素,得到校验矩阵H;
创建以SIMD数据类型为基本类型的长度为N的数组var_nodes,存储变量节点的对数似然比En;
使用一个指针数组p_vn_adr存储排序后H阵中每行中1对应的var_nodes的地址;
创建一个大小为NoOnes的数组var_mesg,存储信息Lmn,Lmn为校验节点cm传递给变量节点vn的信息;
S102:迭代初始化
根据SIMD数据类型的特点,对输入的对数似然比[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]重新排序,[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]是串行送入解码器,经过Q比特量化采用P比特存储;将T个码字第j位的对数似然比依次排列成如[E1,j,E2,j,…,ET,j]所示格式,1≤j≤N,构成P*T比特的数据,存储到数组var_nodes中第j个位置,位宽为P*T比特;
初始化迭代次数k=0;
规定最大迭代次数为K;
S103:迭代次数更新,k=k+1;
S104:循环初始化
初始化行度数索引j=0;
初始化分别用于顺序读取和写入En地址的指针数组,p_indice_nodr=p_vn_adr,p_indice_nodw=p_vn_adr;初始化分别用于读取和写入Lmn的指针p_msg_lr=var_mesg,p_msg_lw=var_mesg;
S105:行度数索引更新,j=j+1;
S106:选取校验节点计算单元
调用switch(degs[j]),进入对应的校验节点计算单元;
S107:校验节点单元初始化
初始化行迭代次数m=0;设定对应行重的行的数目degsComputation[j];
S108:行索引更新,m=m+1;
S111:若m=degsComputatiom[j],则进入步骤S112;否则进入步骤S108;
S112:若j=NoDegs;则进入步骤S113;否则进入步骤S105;
S113:若k=K,则进入步骤S114;否则进入步骤S103;
S114:终止迭代译码,将迭代更新后的数组var_nodes中的对数似然比经过重新排序输出:
[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]
并且给出硬判决输出:
其中1≤t≤T,1≤j≤N。
进一步的,P≥Q。
进一步的,Q取6,P取8。
与现有技术相比,本发明具有如下优点和有益效果:
1.实现了校验矩阵信息的在线统计,相比于现有算法需要离线统计校验矩阵的信息,降低了多码率码长的LDPC码译码器的存储量。
2.在解码器中根据不同的行重分别构造了一个特定的校验节点计算单元,根据进入解码器的行重,选择不同的校验节点计算单元,与现有算法相比,消除了对矩阵统计信息的依赖,降低了译码器的实现复杂度;对校验矩阵按照行重重新排序,使得行重相同的校验节点计算只需要一次比较便可以选择相应的计算单元,减少了解码器中根据度数选择不同计算单元的比较次数,提高了解码效率。
3.与现有算法相比,本算法不存在速度损失,同时可以对在线计算的模块进行修正,支持任意结构的LDPC码,具有通用性。
附图说明
图1为5G中BG1对应的LDPC码矩阵结构示意图。
图2为本发明提供的基于SIMD指令集的多码率多码长LDPC码解码方法流程图。
图3为5G标准中制定的LDPC码BG1的一个基矩阵分块示意图。
图4为在不同码率下,本发明方法在给定码率R分别为1/3,1/2,2/3,11/12时,支持Zc∈{2,4,8,16,32,64,128,256}的全部码字的存储量和参考文献1的存储量的对比曲线以及在Zc=256时各个码率的吞吐率对比曲线。
具体实施方式
以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
本发明针对已有算法需要离线统计校验矩阵信息的缺点,结合准循环结构的LDPC码的基矩阵特性,提出了一种适用于多码率多码长的LDPC码的解码方法。根据配置文件,在线统计LDPC码校验矩阵信息。为了提高译码吞吐率和内存使用效率,采用定点分层译码方式,本发明消除了对离线统计结果的依赖特性,预先根据行重构造多个校验节点计算单元,解码过程中根据不同的dc选取相应的校验节点计算单元,同时根据dc对基矩阵进行重新排序,并统计了不同的行重对应的扩展后的H行的数目,减少了解码器中根据度数选择不同计算单元的比较次数,提高了解码效率;根据SIMD指令集自身的特性,使用并行度为T的SIMD指令集并行处理T个码字,实现了对SIMD指令集的100%利用,有效提高了解码吞吐率。
具体来说,本发明提供的基于SIMD指令集的多码率多码长LDPC码解码方法是针对一个Mb*Nb的基矩阵Hb表示的分块结构LDPC码,各参数定义如下:Mb为基矩阵的行数,Nb为基矩阵的列数,矩阵中每个元素用hij来表示,hij的取值为≥-1的整数;基矩阵每行中非负元素的个数dc代表行重即校验节点的度数;Hb支持多个扩展因子Zc,每个非负元素首先对Zc取模,然后根据取模后的数值映射成一个Zc*Zc的单位阵循环移位阵,-1对应全零阵;LDPC码的整体可以定义为一个M*N的校验矩阵H,M=Mb*Zc,N=Nb*Zc;vn代表第n(1≤n≤N)个变量节点,cm代表第m(1≤m≤M)个校验节点;B(m)为校验节点cm包含的变量节点的集合,B(m)\n为除变量节点vn的B(m)集合;En为变量节点vn的对数似然比信息,Lnm、Lmn分别为变量节点vn传递给校验节点cm的信息和校验节点cm传递给变量节点vn的信息;sign(x)表示对x取符号位,
串行送入解码器的T(采用8比特处理方式,SSE模式下T取16,AVX模式下T取32)个经过Q比特量化采用P(P≥Q,Q一般取6,P一般取8)比特存储的对数似然比数据为[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N],其中Et,j,1≤t≤T,1≤j≤N表示第t个码字的第j位的对数似然比。
本发明方法如图2所示,包括如下步骤:
S101:统计校验矩阵信息
首先读取参数Mb、Nb和Zc以及基矩阵Hb,假设给定的参数为Mb=4,Nb=8,Zc=8,基矩阵Hb如式(1)所示:
将Hb按照行重dc从大到小重新排序,结合Zc统计扩展后的H中行重和对应行重的数目,并将其存储到数组degs和degsComputation中,统计不同行重的数目NoDegs以及H中1的数目NoOnes,对Hb重新排序的目的是为了使行重相同的校验行只需要调用一次switch语句便可以进入相应的校验节点处理单元,减少比较的次数,提高了解码效率;根据给定的Zc和基矩阵,我们可以计算得到degs={5,3},degsComputation={120,24},NoDegs=2,NoOnes=144;根据Zc对Hb中非负元素hij进行取模,hij'=mod(hij,Zc),并用Zc*Zc的单位循环移位阵替换对应的非负元素,移位参数取hij',使用Zc*Zc的全零矩阵替换-1元素,得到校验矩阵H,给定的Zc=8,此时排序取模后的矩阵和式(1)相同,将式(1)中每个非负元素用一个8*8的单位循环移位阵替换,循环右移的参数取对应位置的参数,以Hb第一行第一列的元素为例,使用一个8*8的单位阵循环右移4位后进行替换,如下式(2)所示:
每一个-1元素用一个8*8的全零矩阵替换;创建以SIMD数据类型为基本类型的长度为N的数组var_nodes,存储变量节点的对数似然比En;使用一个指针数组p_vn_adr存储排序后H阵中每行中1对应的var_nodes的地址,引入p_vn_adr的目的是为了解码过程中可以直接通过p_vn_adr实现对En的读取,提高了内存读取效率;创建一个大小为NoOnes的数组var_mesg,存储校验节点向变量节点传输的信息Lmn;
S102:迭代初始化
根据SIMD数据类型的特点,对输入的对数似然比[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]重新排序,将T个码字第j位的对数似然比依次排列成如[E1,j,E2,j,…,ET,j](1≤j≤N)所示格式,构成P*T比特的数据,存储到数组var_nodes中第j个位置(位宽为P*T比特);初始化迭代次数k=0;规定最大迭代次数为K;初始化各个校验节点传递给相邻变量节点的信息
S103:迭代次数更新,k=k+1;
S104:循环初始化
初始化行度数索引j=0;初始化分别用于顺序读取和写入En地址的指针数组,p_indice_nodr=p_vn_adr,p_indice_nodw=p_vn_adr;初始化分别用于读取和写入Lmn的指针p_msg_lr=var_mesg,p_msg_lw=var_mesg;
S105:行度数索引更新,j=j+1;
S106:选取校验节点计算单元
调用switch(degs[j]),根据degs[j]进行比较,选择相应的计算单元,进入对应的校验节点计算单元。
S107:校验节点单元初始化
初始化行迭代次数m=0;设定对应行重的行的数目degsComputation[j];
S108:行索引更新,m=m+1;
S111:若m=degsComputation[j],则进入步骤S112;否则进入步骤S108;
S112:若j=NoDegs;则进入步骤S113;否则进入步骤S105;
S113:若k=K,则进入步骤S114;否则进入步骤S103;
S114:终止迭代译码,将迭代更新后的数组var_nodes中的对数似然比经过重新排序输出[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N],并且给出硬判决输出,其中(1≤t≤T,1≤j≤N)。
以下基于本发明步骤实施一案例,以进一步说明本发明优越性。
图3为5G标准中制定的LDPC码BG1的一个基矩阵分块示意图,Mb=46,Nb=68。其中C矩阵为4行42列,每个元素的值都为-1,对应全零阵;D矩阵为42行42列,除对角元素为0,对应单位阵,其它元素均为-1;矩阵A和矩阵B为23行26列,具体元素值见表1表2,矩阵的扩展因子可以取Zc∈{2,4,8,16,32,64,128,256},编码后码字的前2Zc列打孔不传输。
表1:R1_BG1_1LDPC码分块式校验矩阵A分块(23*26)
250 | 69 | 226 | 159 | -1 | 100 | 10 | -1 | -1 | 59 | 229 | 110 | 191 | 9 | -1 | 195 | 23 | -1 | 19 | 35 | 239 | 31 | 1 | 0 | - | -1 |
2 | -1 | 239 | 117 | 124 | 71 | -1 | 222 | 104 | 173 | -1 | 220 | 102 | -1 | 109 | 132 | 142 | 155 | - | 255 | -1 | 28 | 0 | 0 | -1 | |
106 | 111 | 185 | -1 | 63 | 117 | 93 | 229 | 177 | 95 | 39 | -1 | -1 | 142 | 225 | 225 | -1 | 245 | 205 | 251 | 117 | -1 | -1 | -1 | 0 | |
121 | 89 | -1 | 84 | 20 | -1 | 150 | 131 | 243 | -1 | 136 | 86 | 246 | 219 | 211 | -1 | 240 | 76 | 24 | -1 | 144 | 12 | 1 | -1 | - | 0 |
157 | 102 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | - | -1 |
205 | 236 | -1 | 194 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 231 | -1 | -1 | -1 | 28 | -1 | - | -1 | -1 | 123 | 115 | -1 | - | -1 |
183 | -1 | -1 | -1 | -1 | -1 | 22 | -1 | -1 | -1 | 28 | 67 | -1 | 244 | -1 | -1 | -1 | 11 | 157 | -1 | 211 | -1 | -1 | -1 | - | -1 |
220 | 44 | -1 | -1 | 159 | -1 | -1 | 31 | 167 | -1 | -1 | -1 | -1 | -1 | 104 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | - | -1 |
112 | 4 | -1 | 7 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 211 | -1 | -1 | -1 | 102 | -1 | - | 164 | -1 | 109 | 241 | -1 | 9 | -1 |
103 | 182 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 109 | 21 | -1 | 142 | -1 | -1 | -1 | 14 | 6 | -1 | 216 | -1 | -1 | -1 | - | -1 |
-1 | 98 | 149 | -1 | 167 | -1 | -1 | 160 | 49 | -1 | -1 | -1 | -1 | -1 | 58 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | - | -1 |
77 | 41 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 83 | -1 | -1 | -1 | 182 | -1 | - | -1 | -1 | 78 | 252 | 22 | - | -1 |
160 | 42 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 21 | 32 | -1 | 234 | -1 | -1 | -1 | -1 | 7 | -1 | -1 | -1 | -1 | -1 | - | -1 |
177 | -1 | -1 | 248 | -1 | -1 | -1 | 151 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | - | -1 | 185 | -1 | -1 | 62 | - | -1 |
206 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 55 | -1 | -1 | 206 | 127 | 16 | - | -1 | -1 | 229 | -1 | -1 | - | -1 |
40 | 96 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 65 | -1 | -1 | 63 | -1 | -1 | -1 | -1 | 75 | -1 | -1 | -1 | -1 | -1 | - | 179 |
-1 | 64 | -1 | 49 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 49 | -1 | -1 | -1 | -1 | -1 | -1 | - | -1 | 51 | -1 | 154 | -1 | - | -1 |
7 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 164 | -1 | 59 | 1 | - | -1 | -1 | 144 | -1 | -1 | - | -1 |
-1 | 42 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 233 | 8 | -1 | -1 | -1 | -1 | 155 | 147 | -1 | -1 | -1 | -1 | - | -1 |
60 | 73 | -1 | -1 | -1 | -1 | -1 | 72 | 127 | -1 | 224 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | - | -1 |
151 | -1 | -1 | 186 | -1 | -1 | -1 | -1 | -1 | 217 | -1 | 47 | -1 | -1 | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 160 | -1 | - | -1 |
-1 | 249 | -1 | -1 | -1 | 121 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 109 | -1 | - | -1 | 131 | 171 | -1 | -1 | - | -1 |
64 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 142 | 188 | -1 | -1 | -1 | 158 | - | -1 | -1 | -1 | -1 | -1 | - | -1 |
表2:R1_BG1_1LDPC码分块式校验矩阵B分块(23*26)
- | 156 | 147 | - | -1 | -1 | -1 | -1 | - | -1 | 170 | -1 | - | - | -1 | -1 | -1 | -1 | 152 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
11 | -1 | -1 | 8 | 236 | -1 | -1 | -1 | - | -1 | -1 | 116 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 222 | -1 | -1 | -1 |
- | 23 | -1 | - | -1 | -1 | 136 | 116 | - | -1 | -1 | -1 | - | - | 182 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
19 | -1 | 243 | - | 215 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | -1 | 61 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
- | 25 | -1 | - | -1 | -1 | 104 | -1 | 19 | -1 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
12 | -1 | -1 | - | 165 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | 181 | -1 | 63 | -1 | -1 | -1 | -1 |
- | 86 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | 236 | -1 | -1 | -1 | 8 | -1 | -1 | -1 | -1 | -1 | -1 | 6 |
21 | -1 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | 73 | -1 | - | 12 | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | 9 | -1 |
- | 95 | -1 | - | -1 | -1 | -1 | 177 | - | -1 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 172 | -1 | -1 | 61 |
22 | -1 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 11 | - | 199 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | 121 | -1 |
- | 2 | 187 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | 41 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | 211 | -1 | -1 | -1 | -1 |
12 | -1 | -1 | - | -1 | -1 | -1 | 167 | - | -1 | -1 | -1 | - | - | -1 | 164 | -1 | 159 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
- | 161 | -1 | - | -1 | -1 | 197 | -1 | - | -1 | -1 | -1 | 20 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 103 | -1 | -1 | -1 |
3 | -1 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | 105 | 51 | -1 | -1 | 12 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
- | 198 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | 22 | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | 122 | -1 | -1 |
16 | -1 | -1 | - | -1 | -1 | -1 | -1 | - | 151 | 157 | -1 | 16 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
- | 173 | -1 | 13 | -1 | -1 | -1 | 149 | - | -1 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | 0 | -1 | -1 | -1 | -1 | -1 | -1 |
15 | -1 | -1 | - | -1 | -1 | -1 | -1 | 13 | -1 | -1 | -1 | - | - | -1 | -1 | -1 | 149 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
- | 167 | -1 | 17 | -1 | -1 | -1 | -1 | - | 139 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | 15 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
14 | -1 | -1 | - | 157 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | 137 | -1 |
- | 151 | -1 | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | - | - | -1 | -1 | 163 | -1 | 173 | -1 | -1 | -1 | -1 | -1 | -1 | 139 |
13 | -1 | -1 | - | -1 | -1 | -1 | 157 | - | 163 | -1 | -1 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | 173 | -1 | -1 | -1 |
- | 149 | -1 | - | -1 | -1 | 151 | -1 | - | -1 | 167 | -1 | - | - | -1 | -1 | -1 | -1 | - | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
图4是针对图3给定的基矩阵,选取码率分别为R=1/3,1/2,2/3,11/12时,支持Zc∈{2,4,8,16,32,64,128,256}的全部码字条件下,本发明方法与参考论文方法的存储量对比曲线以及在各码率下Zc取256时的吞吐率对比曲线。其中,最大迭代次数K=20,采用分层NMS译码,固定乘性因子α=0.75,在单核模式下采用Intel SSE指令集,选用i5-3470T处理器,主频为2.9GHz,送入解码器的对数似然比采用Q=6比特量化,解码器采用P=8比特处理,前2Zc列打孔不传输,由于上述解码过程中均需要为p_vn_adr,var_nodes和var_mesgs创建存储空间,因此不将上述变量引入比较范围。根据文献1的要求,在各个选取的码率下,需要分别离线统计8个码字的校验矩阵信息,这些信息是常驻内存的;而本发明方法则仅需要存储一个基矩阵,假设两种方法均采用4字节整数进行存储。其中本发明方法在完成对p_vn_adr的初始化后可以释放为H创建的存储空间。从图4中可以看出,参考论文方法的存储量随着码率的提高而下降,这是由于低码率码字与高码率码字相比,需要包含更多的校验矩阵信息,而本发明方法则仅需要包含对应码率的基矩阵的信息即可;另外根据文献1的方法,如果需要支持对应码率的所有码字,需要为对应码字分别编写解码器,而本发明方法则仅需要编写一个解码器,与文献1相比,本发明方法应用方便;此外,从图上可以看出,本发明方法和参考论文方法不存在性能损失。
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (3)
1.基于SIMD指令集的多码率多码长LDPC码解码方法,其特征在于,包括如下步骤:
S101:统计校验矩阵信息
首先读取分块结构LDPC码的参数Mb、Nb和Zc以及基矩阵Hb,Mb为基矩阵的行数,Nb为基矩阵的列数,Zc为扩展因子;
将Hb按照行重dc从大到小重新排序,结合Zc统计扩展后的H中行重和对应行重的数目,并将其存储到数组degs和degsComputation中,统计不同行重的数目NoDegs以及H中1的数目NoOnes,H表示LDPC码的校验矩阵,H的行、列数分别为M、N,M=Mb*Zc,N=Nb*Zc;
根据Zc对Hb中非负元素hij进行取模,hij'=mod(hij,Zc),并用Zc*Zc的单位循环移位阵替换对应的非负元素,移位参数取hij',使用Zc*Zc的全零矩阵替换-1元素,得到校验矩阵H;
创建以SIMD数据类型为基本类型的长度为N的数组var_nodes,存储变量节点的对数似然比En;
使用一个指针数组p_vn_adr存储排序后H阵中每行中1对应的var_nodes的地址;
创建一个大小为NoOnes的数组var_mesg,存储信息Lmn,Lmn为校验节点cm传递给变量节点vn的信息;
S102:迭代初始化
根据SIMD数据类型的特点,对输入的对数似然比[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]重新排序,[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]是串行送入解码器,经过Q比特量化采用P比特存储;将T个码字第j位的对数似然比依次排列成如[E1,j,E2,j,…,ET,j]所示格式,1≤j≤N,构成P*T比特的数据,存储到数组var_nodes中第j个位置,位宽为P*T比特;
初始化迭代次数k=0;
规定最大迭代次数为K;
S103:迭代次数更新,k=k+1;
S104:循环初始化
初始化行度数索引j=0;
初始化分别用于顺序读取和写入En地址的指针数组,p_indice_nodr=p_vn_adr,p_indice_nodw=p_vn_adr;初始化分别用于读取和写入Lmn的指针p_msg_lr=var_mesg,p_msg_lw=var_mesg;
S105:行度数索引更新,j=j+1;
S106:选取校验节点计算单元
调用switch(degs[j]),进入对应的校验节点计算单元;
S107:校验节点单元初始化
初始化行迭代次数m=0;设定对应行重的行的数目degsComputation[j];
S108:行索引更新,m=m+1;
S111:若m=degsComputatiom[j],则进入步骤S112;否则进入步骤S108;
S112:若j=NoDegs;则进入步骤S113;否则进入步骤S105;
S113:若k=K,则进入步骤S114;否则进入步骤S103;
S114:终止迭代译码,将迭代更新后的数组var_nodes中的对数似然比经过重新排序输出:
[E1,1,…,E1,N,E2,1,…,E2,N,…,ET,1,…,ET,N]
并且给出硬判决输出:
其中1≤t≤T,1≤j≤N。
2.根据权利要求1所述的基于SIMD指令集的多码率多码长LDPC码解码方法,其特征在于:P≥Q。
3.根据权利要求2所述的基于SIMD指令集的多码率多码长LDPC码解码方法,其特征在于,Q取6,P取8。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810021203.7A CN108365849B (zh) | 2018-01-10 | 2018-01-10 | 基于simd指令集的多码率多码长ldpc码解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810021203.7A CN108365849B (zh) | 2018-01-10 | 2018-01-10 | 基于simd指令集的多码率多码长ldpc码解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108365849A CN108365849A (zh) | 2018-08-03 |
CN108365849B true CN108365849B (zh) | 2021-03-09 |
Family
ID=63011278
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810021203.7A Active CN108365849B (zh) | 2018-01-10 | 2018-01-10 | 基于simd指令集的多码率多码长ldpc码解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108365849B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109889208A (zh) * | 2019-01-04 | 2019-06-14 | 浙江大学 | Navdat中基于归一化最小和算法的ldpc信道译码方法 |
CN110380735B (zh) * | 2019-06-24 | 2023-05-12 | 东南大学 | 一种基于单指令多数据流的软件实现qc-ldpc译码方法 |
CN112583420B (zh) * | 2019-09-30 | 2024-01-09 | 上海华为技术有限公司 | 一种数据处理方法和译码器 |
CN110730005A (zh) * | 2019-10-12 | 2020-01-24 | 湖南智领通信科技有限公司 | 一种基于矢量指令集的ldpc码快速译码方法 |
CN112328511B (zh) * | 2021-01-04 | 2021-05-04 | 统信软件技术有限公司 | 一种数据处理方法、计算设备及可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127531A (zh) * | 2006-07-25 | 2008-02-20 | 北京凌讯华业科技有限公司 | 基于ldpc码的tds-ofdm通信系统中的多码率ldpc编码 |
WO2009043918A3 (en) * | 2007-10-02 | 2009-08-27 | Interuniversitair Microelectronica Centrum Vzw | An asip architecture for decoding at least two decoding methods |
CN101692611A (zh) * | 2009-07-03 | 2010-04-07 | 复旦大学 | 一种基于simd结构的多标准ldpc译码器电路 |
CN102075196A (zh) * | 2010-12-10 | 2011-05-25 | 清华大学 | 多码率多码长qc-ldpc码构建方法及编码调制系统 |
CN102811064A (zh) * | 2012-08-01 | 2012-12-05 | 清华大学 | 一种多码率ldpc码的构造方法 |
CN103780268A (zh) * | 2014-01-23 | 2014-05-07 | 长安大学 | 一种基于优化稀疏lu分解的ldpc编码算法 |
CN104617959A (zh) * | 2015-01-20 | 2015-05-13 | 北京邮电大学 | 一种基于通用处理器的ldpc编译码方法 |
WO2017119766A1 (en) * | 2016-01-08 | 2017-07-13 | Samsung Electronics Co., Ltd. | Apparatus and method for transmitting and receiving signal in communication system supporting rate compatible low density parity check code |
US9760439B2 (en) * | 2011-12-30 | 2017-09-12 | Streamscale, Inc. | Using parity data for concurrent data authentication, correction, compression, and encryption |
-
2018
- 2018-01-10 CN CN201810021203.7A patent/CN108365849B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101127531A (zh) * | 2006-07-25 | 2008-02-20 | 北京凌讯华业科技有限公司 | 基于ldpc码的tds-ofdm通信系统中的多码率ldpc编码 |
WO2009043918A3 (en) * | 2007-10-02 | 2009-08-27 | Interuniversitair Microelectronica Centrum Vzw | An asip architecture for decoding at least two decoding methods |
CN101692611A (zh) * | 2009-07-03 | 2010-04-07 | 复旦大学 | 一种基于simd结构的多标准ldpc译码器电路 |
CN102075196A (zh) * | 2010-12-10 | 2011-05-25 | 清华大学 | 多码率多码长qc-ldpc码构建方法及编码调制系统 |
US9760439B2 (en) * | 2011-12-30 | 2017-09-12 | Streamscale, Inc. | Using parity data for concurrent data authentication, correction, compression, and encryption |
CN102811064A (zh) * | 2012-08-01 | 2012-12-05 | 清华大学 | 一种多码率ldpc码的构造方法 |
CN103780268A (zh) * | 2014-01-23 | 2014-05-07 | 长安大学 | 一种基于优化稀疏lu分解的ldpc编码算法 |
CN104617959A (zh) * | 2015-01-20 | 2015-05-13 | 北京邮电大学 | 一种基于通用处理器的ldpc编译码方法 |
WO2017119766A1 (en) * | 2016-01-08 | 2017-07-13 | Samsung Electronics Co., Ltd. | Apparatus and method for transmitting and receiving signal in communication system supporting rate compatible low density parity check code |
Non-Patent Citations (4)
Title |
---|
"Highly Flexible Design of Multi-Rate Multi-Length Quasi-Cyclic LDPC Codes";Moritz Beermann等;《2014 8th International Symposium on Turbo Codes and Iterative Information Processing (ISTC)》;20141113;37-41 * |
"High-Throughput Multi-Core LDPC Decoders Based on x86 Processor";Bertrand Le Gal等;《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》;20160531;第27卷(第5期);1373-1386 * |
"Low-Latency Software LDPC Decoders for x86 Multi-core Devices";Bertrand LE GAL等;《2017 IEEE International Workshop on Signal Processing Systems (SiPS)》;20171116;1-6 * |
"多码率、多码长LDPC译码器的设计与实现";唐凯林等;《集成电路应用》;20131206;58-60 * |
Also Published As
Publication number | Publication date |
---|---|
CN108365849A (zh) | 2018-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108365849B (zh) | 基于simd指令集的多码率多码长ldpc码解码方法 | |
US8225173B2 (en) | Multi-rate LDPC code system and method | |
CN107370489B (zh) | 结构化ldpc码的数据处理方法及装置 | |
CN110114978B (zh) | 高效可解码qc-ldpc码 | |
CN101141133B (zh) | 一种结构化低密度校验码的编码方法 | |
CN107370490B (zh) | 结构化ldpc的编码、译码方法及装置 | |
US8631299B2 (en) | Error correction encoding method and device, and communication system using the same | |
US10879929B2 (en) | LDPC decoding method | |
US20080065956A1 (en) | Method and apparatus for encoding and decoding data | |
US9825650B2 (en) | Decoder architecture for cyclically-coupled quasi-cyclic low-density parity-check codes | |
CN101604975A (zh) | 一种低功耗多模qc-ldpc码解码器及其工作方法 | |
CN111211790A (zh) | 一种面向5g终端的高吞吐率ldpc译码算法及架构 | |
CN1961517B (zh) | 编码和解码方法及装置、存储编码数据的装置 | |
CN101420279B (zh) | 用于移动多媒体广播中的高速ldpc译码器及译码方法 | |
CN111162795B (zh) | 基于校验子矩阵分割的ldpc编码硬件实现方法 | |
CN105515588B (zh) | 一种ldpc‑cc高速译码器 | |
CN105871385B (zh) | 一种ldpc卷积码构造方法 | |
EP3876424A1 (en) | Decoding method, decoding device, and decoder | |
CN116192157A (zh) | 降低qc-ldpc码生成矩阵密度的实现方法 | |
CN113055025B (zh) | 可重构的极化码与低密度奇偶校验码译码器 | |
Lopacinski et al. | Ultra high speed 802.11 n LDPC decoder with seven-stage pipeline in 28 nm CMOS | |
CN110730003B (zh) | 一种ldpc编码方法及ldpc编码器 | |
CN103001648B (zh) | 基于fpga的准循环ldpc码的简易编码装置及方法 | |
Boncalo et al. | Memory efficient implementation of self-corrected min-sum LDPC decoder | |
Hao et al. | Configurable Universal QC-LDPC Encoder Architecture Design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |