CN108365849B - 基于simd指令集的多码率多码长ldpc码解码方法 - Google Patents

基于simd指令集的多码率多码长ldpc码解码方法 Download PDF

Info

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
Application number
CN201810021203.7A
Other languages
English (en)
Other versions
CN108365849A (zh
Inventor
姜明
皮秀伟
赵春明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Southeast University
Original Assignee
Southeast University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Southeast University filed Critical Southeast University
Priority to CN201810021203.7A priority Critical patent/CN108365849B/zh
Publication of CN108365849A publication Critical patent/CN108365849A/zh
Application granted granted Critical
Publication of CN108365849B publication Critical patent/CN108365849B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1108Hard 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码解码方法
技术领域
本发明属于信道编码技术领域,具体涉及一种解码方法,更为具体的说,是涉及一种基于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;
初始化各个校验节点传递给相邻变量节点的信息
Figure GDA0001660377090000031
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;
S109:更新
Figure GDA0001660377090000032
对于该行所有的变量节点vn∈B(m),B(m)为校验节点cm包含的变量节点的集合,分别从p_indice_nodr和p_msg_lr读取En
Figure GDA0001660377090000033
根据公式
Figure GDA0001660377090000034
更新
Figure GDA0001660377090000041
Lnm为变量节点vn传递给校验节点cm的信息,并做P比特限幅,将p_indice_nodr和p_msg_lr自增,指向下一个位置;
S110:更新
Figure GDA0001660377090000042
和En
对于该行的所有变量节点vn∈B(m),根据更新的
Figure GDA0001660377090000043
采用归一化最小和方式,更新
Figure GDA0001660377090000044
和En
Figure GDA0001660377090000045
Figure GDA0001660377090000046
其中,α为修正因子,sign(x)表示对x取符号位,
Figure GDA0001660377090000047
对En做P比特限幅写入p_indice_nodw,对
Figure GDA0001660377090000048
做Q比特限幅写入p_msg_lr,然后将p_indice_nodw和p_msg_lr自增;
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]
并且给出硬判决输出:
Figure GDA0001660377090000049
其中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取符号位,
Figure GDA0001660377090000061
串行送入解码器的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)所示:
Figure GDA0001660377090000062
将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)所示:
Figure GDA0001660377090000071
每一个-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;初始化各个校验节点传递给相邻变量节点的信息
Figure GDA0001660377090000072
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;
S109:更新
Figure GDA0001660377090000073
对于该行所有的变量节点vn∈B(m),分别从p_indice_nodr和p_msg_lr读取En
Figure GDA0001660377090000074
根据公式
Figure GDA0001660377090000081
更新
Figure GDA0001660377090000082
并做P比特限幅,将p_indice_nodr和p_msg_lr自增,指向下一个位置;
S110:更新
Figure GDA0001660377090000083
和En
对于该行的所有变量节点vn∈B(m),根据更新的
Figure GDA0001660377090000084
采用归一化最小和方式,更新
Figure GDA0001660377090000085
和En
Figure GDA0001660377090000086
α为修正因子,
Figure GDA0001660377090000087
对En做P比特限幅写入p_indice_nodw,对
Figure GDA0001660377090000088
做Q比特限幅写入p_msg_lr,然后将p_indice_nodw和p_msg_lr自增;
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],并且给出硬判决输出,
Figure GDA0001660377090000089
其中(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;
初始化各个校验节点传递给相邻变量节点的信息
Figure FDA0002888136200000011
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;
S109:更新
Figure FDA0002888136200000021
对于m行所有的变量节点vn∈B(m),B(m)为校验节点cm包含的变量节点的集合,分别从p_indice_nodr和p_msg_lr读取En
Figure FDA0002888136200000022
根据公式
Figure FDA0002888136200000023
更新
Figure FDA0002888136200000024
Lnm为变量节点vn传递给校验节点cm的信息,并做P比特限幅,将p_indice_nodr和p_msg_lr自增,指向下一个位置;
S110:更新
Figure FDA0002888136200000025
和En
对于m行的所有变量节点vn∈B(m),根据更新的
Figure FDA0002888136200000026
采用归一化最小和方式,更新
Figure FDA0002888136200000027
和En
Figure FDA0002888136200000028
Figure FDA0002888136200000029
其中,α为修正因子,sign(x)表示对x取符号位,
Figure FDA00028881362000000210
对En做P比特限幅写入p_indice_nodw,对
Figure FDA00028881362000000211
做Q比特限幅写入p_msg_lr,然后将p_indice_nodw和p_msg_lr自增;
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]
并且给出硬判决输出:
Figure FDA0002888136200000031
其中1≤t≤T,1≤j≤N。
2.根据权利要求1所述的基于SIMD指令集的多码率多码长LDPC码解码方法,其特征在于:P≥Q。
3.根据权利要求2所述的基于SIMD指令集的多码率多码长LDPC码解码方法,其特征在于,Q取6,P取8。
CN201810021203.7A 2018-01-10 2018-01-10 基于simd指令集的多码率多码长ldpc码解码方法 Active CN108365849B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (9)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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