CN104617959B - 一种基于通用处理器的ldpc编译码方法 - Google Patents
一种基于通用处理器的ldpc编译码方法 Download PDFInfo
- Publication number
- CN104617959B CN104617959B CN201510026526.1A CN201510026526A CN104617959B CN 104617959 B CN104617959 B CN 104617959B CN 201510026526 A CN201510026526 A CN 201510026526A CN 104617959 B CN104617959 B CN 104617959B
- Authority
- CN
- China
- Prior art keywords
- matrix
- vector
- row
- value
- check
- 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
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种LDPC编码方法,确定向量p1和p2,并得到编码结果向量;确定向量p1和p2时任一矩阵与任一向量的相乘处理包括:将任一矩阵的每一行作为一个线程,进行该矩阵相应行与任一向量的相乘,并将所有行的相乘结果构成结果向量;任一矩阵的每一行与任一向量的相乘操作包括:确定矩阵第i行的每个元素j对应的向量起始位置,将任一向量中从该起始位置起Z‑Ai,j长度的数据通过单指令多数据流的方式进行左移位,并将起始位置开始的前Ai,j长度的数据移至左移位后的数据之后,得到元素j对应的向量移位结果;再将每个元素的向量移位结果相加。通过上述方法,利用多线程和SIMD的处理,能够在通用处理器中提高编码速度。
Description
技术领域
本申请涉及LDPC编译码技术,特别涉及一种基于通用处理器的LDPC编译码方法。
背景技术
LDPC码,是一种码长较大的线性分组码。其校验矩阵也较大,并且校验矩阵中的非零元素很少,即“1”的个数很少,故称低密度。
在实现IEEE 802.11n无线局域网传输协议的过程中,需使用到LDPC编译码技术,依协议要求,其中LDPC PPDU(Presentation Protocol Data Unit,表示层协议数据单元)的生成过程如下,参见图1:
(1)计算缩短比特位
(1a)计算可用比特数Navbits,公式为:
Npld=length×8+16,
其中,如果有STBC(Space-time block code)预编码,则标志位mSTBC为2,否则为1;NCBPS表示每个符号的编码比特数;length表示PSDU(presentation Service DataUnit)的字节数,即为信息比特位的字节数;Npld表示PSDU和SERVICE FIELD的总的比特数;R表示编码码率。
(1b)计算LDPC码字个数NCW和码长LLDPC
当Navbits≤648时,码字个数NCW为1,且如果Navbits≥Npld+912×(1-R)时,码长LLDPC为1296,否则码长LLDPC为648;当648<Navbits≤1296时,码字个数NCW为1,且如果Navbits≥Npld+1464×(1-R)时,码长LLDPC为1944,否则码长LLDPC为1296;当1296<Navbits≤1944时,码字个数NCW为1,此时码长LLDPC为1944;当1944<Navbits≤2592时,码字个数NCW为2,且如果Navbits≥Npld+2916×(1-R)时,码长LLDPC为1944,否则码长LLDPC为1296;当Navbits>2592时,码字个数NCW为此时码长LLDPC为1944;
(1c)计算缩短比特位个数Nshrt,缩短比特位在LDPC编码前填充到信息比特位之后:
Nshrt=max(0,(NCW×LLDPC×R)-Npld)
当Nshrt=0时,不进行补0操作。当Nshrt>0时,缩短比特位在所有NCW个码字上平均分布,即每个码字分配到的缩短比特位个数为若是NshrtmodNCW≠0,,其中mod为取余,即Nshrt对NCW取余,则第一个码字比其他码字多一个缩短比特位。
(2)进行LDPC编码,得到检验比特位。
(3)丢弃缩短比特位
(4)计算打孔比特位个数并丢弃打孔比特位,根据下式计算LDPC编码后打孔比特位个数Npunc:
Npunc=max(0,(NCW×LLDPC)-Navbits-Nshrt)
如果或者(Npunc>0.3×NCW×LLDPC×(1-R)),增大Navbits然后根据下式重新计算Npunc:
N'avbits=Navbits+NCBPS×mSTBC,Npunc=max(0,(NCW×LLDPC)-N'avbits-Nshrt)
打孔比特位在所有NCW个码字上平均分布,即每个码字分配到的打孔比特位个数为若是NpuncmodNCW≠0,其中mod为取余,即Npunc对NCW取余,则第一个码字比其他码字多一个打孔比特位。
(5)计算重复比特位,根据下式计算重复比特位个数Nrep:
Nrep=max(0,N'avbits-NCW×LLDPC×(1-R)-Npld)
重复比特位在所有NCW个码字上平均分布,即每个码字分配到的重复比特位个数为若是NrepmodNCW≠0,,其中mod为取余,即Nrep对NCW取余,则第一个码字比其他码字多一个重复比特位。重复比特位从信息比特位的第一个比特开始顺序选取,直到满足长度要求,重复比特位是从去掉的缩短比特位后的码字中复制的。选出的重复比特位顺序连接在校验比特位之后。当需要打孔时,检验比特位不需要重复,反之亦然。
在LDPC PPDU生成过程中,LDPC编码方法最为重要,经过LDPC编码后输出的码字向量记为c=(S,p1,p2),其中S为信息向量,p1和p2为码字校验向量,但因LDPC码的校验矩阵H较大,编码过程中的运算将十分繁琐。观察协议中给出的校验矩阵可以看出,不同码率R下的矩阵其行重均为24,其列重均为24×(1-R),根据校验矩阵H的特性,将其进行如下分块分成矩阵A、矩阵B、矩阵D、矩阵E、矩阵T以及矩阵F六个子矩阵,其中矩阵B、矩阵D、矩阵E以及矩阵T的结构较为特殊,B=(1--…0-…)T,D=(1),E=(-…-0),矩阵A和矩阵F的结构无规律性,参见协议802.11n。另外,由于校验矩阵H规模较大,因此,在表示校验矩阵时,通过一个元素表示实际校验矩阵中的一个子矩阵,具体地,在校验矩阵H和分块矩阵A、B、D、E、T、F的表示方法中,“—”表示该子矩阵为零矩阵,“0”表示该子矩阵为单位矩阵,“常数C”表示该子矩阵为单位矩阵C次循环右移位后的结果矩阵。其中子矩阵的维数为Z*Z,Z可以预先根据码长确定。通过上述方式,可以大大减少校验矩阵和各个分块矩阵的表示大小。
在已知校验矩阵H和信息向量S的前提下,确定码字向量c的具体方式为:根据校验方程HcT=0T可得分解方程经过优化后可得到求出p1和p2后,即可求出码字向量c=(S,p1,p2)。
参照上述LDPC编码过程的编码器的组成参见图2,其中含有4种功能模块:编码矩阵生成器、矩阵乘法器、矩阵加法器以及LDPC码字合成器。
该编码器中共有6个编码矩阵生成器,其输入是一个矩阵,分别是矩阵A、矩阵B、矩阵D、矩阵E、矩阵T以及矩阵F六个子矩阵,其输出是一个矩阵,是经过编码矩阵生成器处理后的矩阵,其功能是将输入的矩阵通过压缩存储的方式,即仅存矩阵非零元素,将输入矩阵进行变换,得到输出矩阵。
该编码器中共有6个乘法器,其有两个输入端一个输出端,两个输入端分别是信息向量S、矩阵A、通过编码矩阵生成器处理后的矩阵、通过其他乘法器的结果矩阵或者通过加法器后的结果矩阵中的两个,其输出是一个矩阵,是两个输入端进行乘法运算后的结果向量,其功能是将两个输入端进行矩阵乘法运算并输出结果矩阵。
该编码器共有2个矩阵加法器,其输入是两个矩阵,均为编码器中矩阵乘法器输出后矩阵,其输出是一个矩阵,是两个输入矩阵进行矩阵加法后的结果,其功能是将两个输入矩阵进行矩阵加法并输出结果矩阵。
该编码器中有1个LDPC码字合成器,其输入是三个向量,是信息向量S、码字校验向量p1和码字校验向量p2,其输出是一个向量,是码字向量c,其功能是将信息向量S、码字校验向量p1和码字校验向量p2三个向量合成码字向量c=(S,p1,p2)并码字向量c。
上述即为现有的LDPC编码方法和相应的编码器构成。在接收端,还需要对接收的LDPC码字进行译码,得到重建的信息向量。已有的LDPC译码技术,其主要步骤如下:
(1)将M个校验点分成Mb层,每层包括T个校验节点。接下来,一层接一层的顺序执行译码过程。在第一层处理过程中计算校验节点和变量节点的信息,第一层译码过程结束之后,第二层使用从第一层得到的变量节点的信息进行初始化,并以此类推;
(2)初始化:用LLRs(log-likelihood ratios,即的信息对变量节点的值进行初始化,并将所有的校验节点信息置为0,译码算法的迭代次数为I,迭代过程按行进行,其中最小和算法中的n∈Nm表示校验矩阵原型Hb中[Hb]m,n≠'-'的列;
(3)求最小值:变量节点向量qn的循环右移位(移位次数S(m,n)=[Hb]m,n)减去校验节点信息将结果存在向量tn中,根据OMS(offset min-sum,即的值重用特性,只需要计算向量中元素的最小值和次小值;
(4)选择最小值:对n∈Nm,计算更新qn和的值。
为实现上述译码方法,现有译码器参见图3,由4个部分组成,分别为初始化译码器单元、最小值和次小值选择单元、数据截短单元和循环移位单元。
该译码器中的初始化译码器单元,其输入是一个LDPC检验矩阵,其输出是一个经过初始化译码单元处理后的检验矩阵,其功能是根据译码器输入要求将检验矩阵进行存储转换并输出处理后的检验矩阵。
该译码器中的最小值和次小值选择单元,其输入是两个矩阵,其中一个是经过初始化译码器单元处理后的检验矩阵,另一个是LDPC码字矩阵c,即经过无线信道传输后的LDPC码字矩阵c,其输出是一个经过最小值和次小值选择单元处理后的矩阵,其功能是计算出变量节点循环右移位与校验节点之间的差值的最小值与次小值并输出结果矩阵提供给数据截短单元和循环移位单元。
该译码器的数据截短单元,其输入是一个由最小值和次小值选择单元处理后输出的矩阵,其输出是一个经过数据截短单元处理后的矩阵,其功能是为防止校验节点信息的溢出,对其进行数据截短处理,并将输出结果矩阵提供给循环移位单元。
该译码器的循环移位单元,其输入是两个矩阵,其中一个由数据截短单元处理后输出的矩阵,另一个是由最小值和次小值选择单元处理后输出的矩阵,其输出是一个经过循环移位单元处理后的矩阵,其功能是通过将最小值矩阵与校验节点矩阵进行按位模二加算出变量节点矩阵,并输出变量节点矩阵。
如上所述,目前LDPC码的编译码理论较为成熟,但因为LDPC码是一种码长较大的线性分组码,校验矩阵也较大,算法复杂度十分高,传统的LDPC编译码方式不能很好的满足IEEE 802.11n***的吞吐率要求,很大程度影响到了***的性能。现有高速无线局域网***中LDPC码的实现大多基于FPGA(Field-Programmable Gate Array,现场可编程门阵列)芯片与DSP(Digital Signal Processor,数字信号处理)芯片。通过以往方法虽然可以满足现代高速无线局域网协议中处理和时延的要求,但是FPGA编程和专业DSP都比较复杂,缺少丰富的编程环境和调试工具,适用性一般。
发明内容
本申请给出一种基于通用处理器的LDPC编译码方法,能够在通用处理器上高效地实现LDPC编译码。
为实现上述目的,本申请采用如下的技术方案:
一种基于通用处理器的LDPC编码方法,包括:通过信号采集或接收获取待编码的信号向量S,确定校验矩阵H及其分块矩阵A、B、D、E、F和T,并进行保存;根据确定向量p1和p2,并得到LDPC的编码结果向量c=(S,p1,p2);其中,所述确定向量p1和p2时进行的任一矩阵与任一向量的相乘处理包括:
将所述任一矩阵的每一行作为一个线程,进行该矩阵的相应行与所述任一向量的相乘操作,并将所有行的相乘结果组合在一起构成结果向量;
其中,所述任一矩阵的每一行与所述任一向量的相乘操作包括:确定矩阵当前第i行的每个元素j对应的向量起始位置=所述任一向量的起始位置+Ai,j+(j-1)*Z,将所述任一向量中从所述起始位置起Z-Ai,j长度的数据通过单指令多数据流SIMD的方式进行左移位,并将所述起始位置开始的前Ai,j长度的数据移至左移位后的数据之后,得到所述元素j对应的向量移位结果;再将每个元素对应的向量移位结果相加,作为所述每一行与所述任一向量的相乘结果;
所述SIMD的方式中,将从所述起始位置起Z-Ai,j长度的数据以长度W为单位划分成段,对段数据并行进行左移位操作,再将剩余的(Z-Ai,j)modW长度的数据进行左移位操作;
Z为所述校验矩阵中的一个元素代表的子矩阵大小。
较佳地,当所述任一矩阵为T-1时,所述T-1的每一行与相应向量的相乘操作时,仅进行T-1取值为0的元素与相应向量的相乘,得到该取值为0元素对应的向量移位结果,将其余元素对应的向量移位结果设置为零向量;再将每个元素对应的向量移位结果相加,作为所述每一行与所述任一向量的相乘结果。
较佳地,对W段数据同时进行左移位操作后取前Z个数据为有效数据。
较佳地,所述将每个元素对应的向量移位结果相加包括:将每个元素对应的向量移位结果以长度W为单位划分成段,通过SIMD对段数据并行进行相加操作,再将剩余的(Z-Ai,j)modW长度的数据进行相加操作。
较佳地,所述矩阵A、B、D、E、F和T-1通过线性查找表进行保存。
一种基于通用处理器的LDPC译码方法,包括:接收已编码的LDPC码字信号c,确定校验矩阵H;通过多次迭代计算变量节点向量q作为译码结果,每次迭代时,根据当前的变量节点向量q和校验节点向量r计算临时变量向量为并根据所述临时变量向量t更新校验节点向量r,再根据校验节点向量r和临时变量向量t更新变量节点向量q为初次迭代时,将码字信号c作为变量节点向量q,将校验节点向量r设为0;其中,
每次迭代计算临时变量向量t、校验节点向量r和变量节点向量q时,以校验矩阵的每一行作为一个线程进行运算和更新,得到与每行相对应的向量t、q和r中索引号从到的子向量;其中,i为校验矩阵的行索引,对应所述校验矩阵的第i行计算临时变量向量t、校验节点向量r和变量节点向量q对应的子向量时,根据校验矩阵该行的每个非“-”元素Hi,j对应计算向量t、q和r中与元素Hi,j对应的索引号从到的子向量,再依次进行连接得到与每行相应的子向量,i=1时,令
计算与Hi,j对应的临时变量向量t子向量的方式为:确定Hi,j对应的向量起始位置Z*(n-1)+Hi,n,将第i行对应的向量q子向量中所述起始位置起长度为或6的数据通过SIMD的方式拷贝到与Hi,j对应的临时变量向量t子向量的开头;在Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)modW≠0时,确定矩阵MLdpcAssemble1中与校验矩阵元素Hi,j对应行中各个元素的取值并将与元素Hi,j对应的当前向量q的子向量中索引号为的各个元素依次拷贝到与Hi,j对应的临时变量向量t子向量的当前位置上;再确定每个元素Hi,j对应的第二向量起始位置MLdpcOffset2,将所述第二向量起始位置起长度为的数据通过SIMD的方式拷贝到与Hi,j对应的临时变量向量t子向量的当前位置上;取与Hi,j对应的临时变量向量t子向量中的前Z位并取绝对值作为与Hi,j对应的临时变量向量t的有效子向量;
当Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)modW≠0时,当Hi,n=0或Hi,n='-'或(Z-Hi,n)modW=0时,(MLdpcOffset2)i,j=Z*(n-1); K为通用处理器一次可处理数据量大小,k为SIMD处理的基础单位大小;码长LLDPC=648时,LdpcRemain=11;当码长LLDPC=1296时,LdpcRemain=6;当码长LLDPC=1944时,LdpcRemain=1;j为第i行中的每个非“-”元素在该行所有非“-”元素中的索引,n为第i行第j个非“-”元素在校验矩阵中的列索引。
较佳地,计算与校验矩阵的每行对应的校验节点向量r子向量的方式为:
将与校验矩阵每行对应的临时变量向量t子向量写成VLdpcRowLength(v)行和列的矩阵Tv,其中,所述矩阵Tv的每一行为所述临时变量向量t子向量中与元素Hi,j对应的子向量,列数不够时进行补位;
对所述矩阵Tv进行最值分配,得到最值变量向量m子向量矩阵Mv;
根据所述矩阵Tv计算中间变量向量s子向量矩阵Sv;
根据所述矩阵Mv和所述矩阵Sv中索引值相同的元素,确定一中间矩阵Rv'中相应索引值的元素取值;其中,若矩阵Sv中的任一元素小于0,则取该任一元素的补数并与该任一元素相加,将相加结果作为矩阵Rv'中与所述任一元素索引值相同的元素的取值;若矩阵Sv中的任一元素等于0,则将该任一元素与0相加,将相加结果作为矩阵Rv中与所述任一元素索引值相同的元素的取值;若矩阵Sv中的任一元素>0,则在矩阵Mv中取与所述任一元素索引值相同的元素与所述任一元素相加,将相加结果作为矩阵Rv中与所述任一元素索引值相同的元素的取值;所述比较和相加的操作通过SIMD的方式进行;
通过SIMD方式将所述矩阵Rv'与矩阵Tv中索引值相同的元素相减,将结果作为校验节点向量r子向量矩阵Rv中相同索引值的元素取值;将所述矩阵Rv中每行的前Z个元素按照行优先的方式依次读出组成校验节点向量r子向量。
较佳地,所述进行最值分配包括:
通过SIMD的方式确定所述矩阵Tv中每一列的最小值和次小值以及最小值对应的行索引;将得到的最小值和次小值进行修正,均减去预设的修正值β,当修正后的最小值和次小值小于0时,将其设置为0,否则保持不变;
根据所述矩阵Tv中每一列的当前最小值、次小值和最小值对应的行索引,构造最值变量向量m子向量矩阵Mv中相同索引的列,其中,在Mv的任一列中,将与当前最小值对应相同行索引的元素设置为确定出的最小值,将其余元素设置为次小值。
较佳地,所述通过SIMD的方式确定每一列的最小值和次小值以及相应的行索引的方式包括:
将所述矩阵Tv的每一行元素分成个子块,每个子块包括W个基本单位;在比较所述矩阵Tv中任意两行的元素时,通过SIMD的方式一次性比较W个基本单位。
较佳地,所述计算中间变量向量s子向量矩阵Sv包括:
对于矩阵Tv中的每一列,将该列所有元素进行异或操作,再将结果与第i'行的元素异或后与0x7f进行或操作,将或操作结果作为中间向量矩阵Sv中相同索引列的第i'行元素;其中,将所述矩阵Tv的每一行元素分成个子块,每个子块包括W个基本单位,在进行异或/或操作时,通过SIMD的方式一次性执行W个基本单位的异或/或操作。
较佳地,计算与Hi,j对应的变量节点向量q子向量包括:
确定Hi,j对应的向量起始位置Z*(n-1)+Hi,n,通过SIMD方式将Hi,j对应的临时变量向量t子向量与Hi,j对应的校验节点向量r子向量相加,将结果向量中所述起始位置起长度为或5的数据通过SIMD的方式拷贝到与Hi,j对应的变量节点向量q子向量的开头;在Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)modW≠0时,确定矩阵MLdpcAssemble1中与校验矩阵元素Hi,j对应行中各个元素的取值并将与元素Hi,j对应的当前向量q的子向量中索引号为的各个元素依次拷贝到与Hi,j对应的变量节点向量q子向量的当前位置上;
确定每个元素Hi,j对应的第二向量起始位置MLdpcOffset2,将所述第二向量起始位置起长度为0或的数据通过SIMD的方式拷贝到与Hi,j对应的变量节点向量q子向量的当前位置上;
根据LdpcRemain指示的补位个数,按照MLdpcAssemble1中与校验矩阵元素Hi,j对应行中元素的取值进行补位。
较佳地,预先计算并保存每个元素Hi,j对应的向量起始位置Z*(n-1)+Hi,n和第二向量起始位置MLdpcOffset2、矩阵MLdpcAssemble1、校验矩阵中每行非“-”元素的个数构成的向量VLdpcRowLength、MLdpcAssemble1、LdpcRemain。
由上述技术方案可见,本申请中的LDPC编译码方法,能够通过SIMD指令、多线程和预先存储等方式提高编译码速度。
附图说明
图1为LDPC PPDU的生成过程示意图;
图2为LDPC编码过程的编码器组成示意图;
图3为现有LDPC译码器示意图;
图4为本申请中编码方法的总体流程图;
图5为本申请LDPC编码处理中计算码字校验向量p1的运算示意图;
图6为本申请LDPC编码处理中计算码字校验向量p2的运算示意图;
图7为优化乘法器1的结构示意图;
图8为优化乘法器2的结构示意图;
图9为优化加法器的结构示意图;
图10为矩阵A中的一个元素与向量S的转置相乘处理的示意图;
图11为本申请LDPC编码方法中步骤5的处理示意图;
图12为本申请LDPC译码方法中步骤5的处理示意图;
图13为本申请LDPC译码方法的具体流程使用图;
图14为本申请LDPC译码方法中针对一个子块进行的最值分配处理的流程示意图;
图15为LDPC译码方法中一次最值分配运算的结构示意图;
图16为LDPC译码方法中针对一个子块计算中间变量向量的流程示意图;
图17为LDPC译码方法中一次中间向量计算的结构示意图。
具体实施方式
为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。
本申请给出适用于通用处理器中实现的LDPC编码方法和译码方法。下面详细描述本申请中的编码方法和译码方法。
按照IEEE 802.11n协议中的LDPC PPDU生成方法,将编码后码字向量记为c=(S,p1,p2),其中S为信息向量,p1和p2为码字校验向量,将校验矩阵H简化六个部分分成矩阵A、矩阵B、矩阵D、矩阵E、矩阵F以及矩阵T六个子矩阵。在进行译码前,需外界输入码长LLDPC、编码码率R以及信息向量S。本申请根据通用处理器(GPP)芯片架构的特性对LDPC编码方法进行如下优化:
1、采用SIMD(Single Instruction Multiple Data,单指令多数据流)的运算方法对编码方法进行优化,其本质原理是在CPU的一个时钟周期内对多个数据进行处理以获得并行处理的效果,而不像是普通的使用方式——每一个时钟周期只进行一次数据处理操作。其中将涉及所使用通用处理器一次可处理数据量大小,假设该大小为K比特,SIMD处理的基础单位大小为k,则一次运算可处理数据量
2、采用线性查找表的方法优化校验矩阵的信息存储,将校验矩阵H拆分成六个部分分成矩阵A、矩阵B、矩阵D、矩阵E、矩阵F以及矩阵T六个子矩阵,并以这六个子矩阵生成六个线性查找表,降低计算复杂度。
3、采用多线程的方法,以校验矩阵H的行数为线程数,即以处理校验矩阵H中的一行数据为一线程,在同一时间执行多个线程的处理操作,进而提升***的整体处理性能。
图4为本申请中编码方法的总流程图,其中,该编码方法基于的算法原理与目前LDPC编码方法相同,区别在于在通用处理器中对于编码方法的具体实现。具体流程如下:
1、根据802.11n协议,不同码长LLDPC以及不同编码码率R对应着不同的校验矩阵H。首先,根据码长LLDPC以及编码码率R,提取出相对应的校验矩阵H,并对以下各个参数进行初始化:
1.1生成矩阵A、矩阵B、矩阵D、矩阵E、矩阵F以及矩阵T-1六个子矩阵,其中()-1为矩阵的逆,并将其依次存于线性查找表中,用偏移量的方法标记所需数据的具***置,用内存换取计算复杂度,提高LDPC码编码方法的数据处理速度。
1.2生成所选校验矩阵H中每个元素所代表子矩阵的大小为Z。当码长LLDPC=648时,Z=27;当码长LLDPC=1296时,Z=54;当码长LLDPC=1944时,Z=81。
2、根据GPP芯片特性,采用多线程的方法对编码方法进行优化,以校验矩阵H的行数为线程数,其中校验矩阵H中的一行数据为一线程处理步骤3到步骤4,在同一时间执行多个线程的处理操作,即同一时间进行多个步骤3到步骤4的处理,进而提升***的整体处理性能。以下的步骤3和步骤4,均为单一线程处理的具体流程。
3、计算码字校验向量p1,其中的乘法运算以及加法运算均采用SIMD的运算方法进行优化,其运算示意图参见图5,具体流程如下:
3.1矩阵A与向量S的转置相乘,结果为向量,向量长度与矩阵A的行数相等。
3.2矩阵T-1与步骤3.1所得结果向量的转置相乘,结果为向量,向量长度与矩阵T-1的行数相等。
3.3矩阵E与步骤3.2所得结果向量的转置相乘,结果为向量,向量长度与矩阵E的行数相等。
3.4矩阵F与向量S的转置相乘,结果为向量,向量长度与矩阵F的行数相等。
3.5步骤3.3所得结果向量与步骤3.4所得结果向量相加,结果即为码字校验向量p1。
4、计算码字校验向量p2,其中的乘法运算以及加法运算均采用SIMD的运算方法进行优化,其运算示意图参见图6,具体流程如下:
4.1矩阵B与向量p1的转置相乘,结果为向量,向量长度与矩阵B的行数相等。
4.2步骤3.1所得结果向量与步骤4.1所得结果向量相加,结果为向量。
4.3矩阵T-1与步骤4.2所得结果向量的转置相乘,结果即为码字校验向量p2。
5、组装LDPC码字向量c:
将所得向量按照S、p1、p2的顺序存储,即得LDPC码字向量c=(S,p1,p2)。
在上述本申请的编码方法中涉及到两种优化乘法器以及一种优化加法器,分别成为优化乘法器1、优化乘法器2以及优化加法器。根据GPP芯片架构特性,优化乘法器1、优化乘法器2以及优化加法器中涉及到并行操作的部分可用SIMD的运算方法进行优化。下面一一进行介绍。
优化乘法器1有两个输入端一个输出端,优化乘法器1示意图参见图7,在优化编码方法的步骤3.1、步骤3.3、步骤3.4以及步骤4.1中所涉及到的矩阵与向量相乘运算均使用到优化乘法器1。以步骤3.1为例,优化乘法器1的输入端为矩阵A与向量S的转置,其具体实现流程如下:
1、判断是否达到矩阵A的最大行数,若达到,则已完成该操作;若没有达到,则进行步骤2。
2、将矩阵A中第一个元素所代表的Z*Z的子矩阵与向量S的转置相乘。因为该子矩阵是一个Z*Z的单位矩阵经过A1,1(A1,1表示矩阵A第一行第一列的元素)次循环左移位后的结果,所以该子矩阵与向量S的转置相乘相当于对向量S进行A1,1次循环移位操作。该操作可进行SIMD优化,参见图10,具体操作流程如下:
2.1计算出部分2数据长度=(Z-A1,1)modW(其为Z-A1,1对W取模),以及所需数据起始值位置=信息向量s起始位置+A1,1。
2.2将所需数据起始值位置起长度的数据拷贝作为中间数据的起始位置数据;
2.3对剩余的(Z-A1,1)modW个数据进行移位拷贝,并将图10中的“其余部分”以及“补位”拷贝入输出中。为了适应SIMD运算,输入向量长度为Z,输出向量大小将为但在输出向量中,只有其中的前Z个元素为有效数据,并将结果数据存于结果向量寄存器中。
3、判断是否达到矩阵A的最大列数,若达到,则返回步骤1;若没有达到,则进行步骤4。
4、进行将矩阵A中第下一个元素所代表的Z*Z的子矩阵与向量S的转置相乘,具体步骤同步骤2.1、2.2、2.3,但转置相乘结果不需要存入结果向量寄存器中,并执行步骤5。
5、将步骤4计算结果与结果向量寄存器中元素相加,两个二进制数相加相当于两个数进行异或操作,此时可进行SIMD优化,即一次运算可得到W个结果,参见图11,其中(a1,a2,…,aW)表示步骤4计算结果,(b1,b2,…,bW)表示结果向量寄存器中元素,矩形框表示异或运算器,(y1,y2,…,yW)表示运算后的结果,即并存于结果向量寄存器中,返回步骤3。
优化乘法器2有两个输入端一个输出端,优化乘法器2示意图参见图8,在优化编码方法的步骤3.2以及步骤4.3中所涉及到的矩阵与向量相乘运算均使用到优化乘法器2。优化乘法器2是优化乘法器1的特殊情况,优化乘法器2其中一个输入端为矩阵T-1,不同校验矩阵H下,矩阵矩阵T-1只有下三角中的元素为有效值。以步骤3.2为例,优化乘法器2的输入端为矩阵T- 1与步骤3.1所得结果向量的转置,其具体实现流程如下:
1、判断是否达到矩阵A的最大行数,若达到,则已完成该操作;若没有达到,则进行步骤2。
2、有可以看出,矩阵T-1上三角元素均为0,
元素“0”所代表的Z*Z的子矩阵与图4中步骤3.1所得结果向量的转置相乘后结果仍为后者,所以对矩阵T-1每行中的元素“0”与图4中步骤3.1所得结果向量的转置相乘,并按照优化乘法器1中的步骤5,将所得结果相加,返回步骤1。
优化加法器有两个输入端一个输出端,两个输入端均为向量,优化加法器示意图参见图12,在优化编码方法的步骤3.5以及步骤4.2中所涉及到的向量与向量相加运算均使用到优化加法器。以步骤3.5为例,优化加法器的输入端为步骤3.3所得结果向量与步骤3.4所得结果向量,因为输入端均为二进制数,两个二进制数相加等于两个二进制数做异或操作,此时可进行SIMD优化,即一次运算可得到W个结果,参见图11,其中(a1,a2,…,aW)表示步骤3.3所得结果向量,(b1,b2,…,bW)表示步骤3.4所得结果向量,矩形框表示异或运算器,(y1,y2,…,yW)表示运算后的结果,即
上述即为本申请中LDPC编码方法的具体流程。本申请对现有译码器的译码方法进行了优化,优化译码方法具体流程图参见图13。在进行译码前,外界需输入码长LLDPC、编码码率R、编码后码字向量c、最大迭代次数I以及修正偏移量β。根据GPP芯片架构的特性对LDPC译码方法进行如下优化:
1、采用SIMD的运算方法对编码方法进行优化,其本质原理是在CPU的一个时钟周期内对多个数据进行处理以获得并行处理的效果,而不像是普通的使用方式——每一个时钟周期只进行一次数据处理操作。其中将涉及所使用通用处理器一次可处理数据量大小,假设该大小为K比特,SIMD处理的基础单位大小为k,则一次运算可处理数据量
2、优化译码方法中的部分流程采用多线程的方法,以校验矩阵H的行数为线程数,即以处理校验矩阵H中的一行数据为一线程,在同一时间执行多个线程的处理操作,进而提升***的整体处理性能。
以下介绍本申请中译码方法的具体流程,其中,译码方法的大体框架与目前译码方法相同,具体包括:接收已编码的LDPC码字信号c,确定校验矩阵H;通过多次迭代计算变量节点向量q作为译码结果,每次迭代时,根据当前的变量节点向量q和校验节点向量r计算临时变量向量为并根据临时变量向量t更新校验节点向量r,再根据校验节点向量r和临时变量向量t更新变量节点向量q为本申请提供的译码方法与现有技术的区别在于,在通用处理器中的具体实现不同。具体操作步骤如下:
1、根据802.11n协议,不同码长LLDPC以及不同编码码率R对应着不同的校验矩阵H。首先,根据码长LLDPC以及编码码率R,提取出相对应的校验矩阵H,将各个参数进行初始化,并将其依次存于线性查找表中,用偏移量的方法标记所需数据的具***置,用内存换取计算复杂度,提高LDPC码译码方法的数据处理速度:
1.1Z,即所选校验矩阵H中每个元素所代表子矩阵的大小,为变量。当码长LLDPC=648时,Z=27;当码长LLDPC=1296时,Z=54;当码长LLDPC=1944时,Z=81。
1.2LdpcRowNum,即所选校验矩阵H的行数,为变量。当码率时,LdpcRowNum=12;当码率时,LdpcRowNum=8;当码率时,LdpcRowNum=6;当码率时,LdpcRowNum=4。
1.3VLdpcRowLength,即所选校验矩阵H中每行非“—”元素的个数,是长度为1*LdpcRowNum的向量。
1.4LdpcBufferNum,即存储所选校验矩阵H每个子矩阵数据所需寄存器个数,为变量。其运算公式为
1.5LdpcRemain,即步骤9所需变量之一,为变量。当码长LLDPC=648时,LdpcRemain=11;当码长LLDPC=1296时,LdpcRemain=6;当码长LLDPC=1944时,LdpcRemain=1。
1.6LdpcRoundNum,即步骤9所需变量之一,为变量。当码长LLDPC=648时,LdpcRoundNum=27;当码长LLDPC=1296时,LdpcRoundNum=22;当码长LLDPC=1944时,LdpcRoundNum=17。
1.7VLdpcRowBuffer,即存储所选校验矩阵H每行非“—”数据所需寄存器个数,是长度为1*LdpcRowNum的向量。其运算公式为VLdpcRowBuffer(v)=VLdpcRowLength(v)*LdpcBufferNum(其中VLdpcRowBuffer(v)表示向量LdpcRowBuffer的第v个元素,v对应着选校验矩阵H的行号,如下同理)。
1.8MLdpcOffset1,即根据所选校验矩阵H计算出的循环偏移量之一,用于步骤4与步骤9,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵(其中max(VLdpcRowLength(v))表示取向量VLdpcRowLength中元素的最大值,如下同理)。其运算公式为(MLdpcOffset1)i,j=Z*(n-1)+Hi,n,其中n表示所选校验矩阵H中的列数,并且j与n的对应关系为所选校验矩阵H第i行第j个非“—”元素所在该校验矩阵H的位置是第i行第n列,如下同理。
1.9MLdpcRound1,即根据所选校验矩阵H计算出的循环次数之一,用于步骤4,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为当Hi,n≠0且Hi,n≠'-'时,当Hi,n=0且Hi,n≠'-'时,(MLdpcRound1)i,j=6。
1.10MLdpcAssemble1,即根据所选校验矩阵H计算出的补足偏移量标志位之一,用于步骤4,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为当Hi,n=0且Hi,n≠'-'时,(MLdpcAssemble1)i,j=0;当Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)modW=0时,(MLdpcAssemble1)i,j=0;当Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)modW≠0时,(MLdpcAssemble1)i,j=1。
1.11MLdpcAssembleTable1,即根据所选校验矩阵H计算出循环补足偏移量,用于步骤4和步骤9,为(的矩阵(其中为计算向量LdpcRowLength中所有元素的和),
1.12MLdpcOffset2,即根据所选校验矩阵H计算出的循环偏移量之一,用于步骤4与步骤9,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为当(MLdpcAssemble1)i,j=0时,(MLdpcOffset2)i,j=Z*(n-1)+[W-Z+Hi,n+(MLdpcRound1)i,j*W];当(MLdpcAssemble1)i,j=1时,(MLdpcOffset2)i,j=Z*(n-1)。
1.13MLdpcRound2,即根据所选校验矩阵H计算出的循环次数之一,用于步骤4,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为
1.14MLdpcRound3,即根据所选校验矩阵H计算出的循环次数之一,用于步骤9,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为当Hi,n≠0且Hi,n≠'-'时,当Hi,n=0且Hi,n≠'-'时,(MLdpcRound3)i,j=5。
1.15MLdpcAssemble2,即根据所选校验矩阵H计算出的补足偏移量标志位之一,用于步骤9,同MLdpcAssemble1。
1.16MLdpcRound4,即根据所选校验矩阵H计算出的循环次数之一,用于步骤9,为LdpcRowNum*max(VLdpcRowLength(v))的矩阵。其运算公式为当i=0时,(MLdpcRound4)i,j=0;当i≠0,
2、判断是否达到最大迭代次数I。若没有达到最大迭代次数I,则进行步骤3;若达到最大迭代次数I,则译码结束。
3、根据GPP芯片特性,采用多线程的方法对译码方法进行优化,以校验矩阵H的行数为线程数,其中校验矩阵H中的一行数据为一线程处理步骤4到步骤9,在同一时间执行多个线程的处理操作,即同一时间进行多个步骤4到步骤9的处理,进而提升***的整体处理性能。以下的步骤4到步骤9,均为单一线程处理的具体流程。
4、计算临时变量向量t,其是长度为的向量。其中,该临时变量向量中包括与校验矩阵每一行对应的子向量,其索引号为到该子向量又包括与每个非“-”元素Hi,j对应的子向量。(这里,只有校验矩阵中的非“-”元素Hi,j有相应的子向量,校验矩阵中的“-”元素在临时变量向量、校验节点向量r和变量节点向量q中都没有相应的子向量。)具体地,与Hi,j对应的子向量t'的计算公式为即临时变量向量t子向量t'的值为变量节点向量q中与元素Hi,j对应的子向量q'根据校验矩阵H第i行第j列元素值循环移位后与校验节点向量r中与元素Hi,j对应的子向量r'的差值。若此时为第一次迭代运算,变量节点向量q为LDPC编码后的码字向量c,校验节点向量r为初始状态,此时临时变量向量t子向量t'的计算公式为即临时变量向量t子向量t'为变量节点向量q子向量q'根据校验矩阵H第i行第j列元素值循环移位后结果。为了适应SIMD运算,输入变量节点向量q子向量q'与校验节点向量r子向量r'长度为Z,输出临时变量向量t子向量t'大小将为但在输出子向量中,只有其中的前Z个元素为有效数据。临时变量向量t的运算以所选校验矩阵H每行非“-”元素个数进行循环,例如所选校验矩阵H第i行第j个非“-”元素将计算得出临时变量向量t的第到位的元素。其具体计算步骤如下:
4.1根据MLdpcOffset1矩阵中找出所选校验矩阵H第i行第j个非“-”元素对应的循环偏移量,在变量节点向量q中找出所需数据的起始值位置,所需数据的起始值位置=变量节点向量q子向量q'的起始值位置+对应的循环偏移量。
4.2根据MLdpcRound1矩阵找出所选校验矩阵H第i行第j个非“-”元素对应的循环次数,将所需数据的起始值位置后(MLdpcRound1)i,j*W个数据拷贝到临时变量向量t子向量t'的当前位置上,这里的当前位置是指子向量中尚未拷贝数据的起始位置。
4.3根据MLdpcAssemble1矩阵,判断是否需要进行补位操作。若(MLdpcAssemble1)i,j=1,则根据MLdpcAssembleTable1矩阵中所指示的偏移量进行补位操作;若(MLdpcAssemble1)i,j=0,则不需要补位操作。具体的补位操作包括:确定矩阵MLdpcAssemble1中与校验矩阵元素Hi,j对应行中各个元素的取值并将与元素Hi,j对应的当前向量q的子向量中索引号为的各个元素依次拷贝到与Hi,j对应的临时变量向量t子向量的当前位置上;其中,
4.4根据MLdpcOffset2矩阵中找出所选校验矩阵H第i行第j个非“-”元素对应的循环偏移量,在变量节点向量q中找出所需数据的起始值位置,所需数据的起始值位置=变量节点向量q子向量q'的起始值位置+对应的循环偏移量。
4.5根据MLdpcRound2矩阵找出所选校验矩阵H第i行第j个非“-”元素对应的循环次数,将所需数据的起始值位置后(MLdpcRound2)i,j*W个数据拷贝到临时变量向量t子向量t'的当前位置上。
4.6若此时非第一次迭代运算,则需进行临时变量向量t子向量t'=临时变量向量t子向量t'-校验节点向量r子向量r'运算,将临时变量向量t子向量t'以及校验节点向量r子向量r'所有元素分成以W个元素为一组,此时可进行SIMD优化,即一次运算可得到W个临时变量向量t中的元素,参见图11,其中(a1,a2,…,aW)表示一组临时变量向量t中的元素,(b1,b2,…,bW)表示一组校验节点向量r中的元素,矩形框表示减法运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1-b1,a2-b2,…,aW-bW);若此时为第一次迭代运算,则进行步骤5。
5、计算临时变量向量t子向量t'中所有元素的绝对值,并记为取模后临时变量向量|t|。将临时变量向量t子向量t'分成以W个元素为一组,此时可进行SIMD优化,即一次运算可得到W个临时变量向量t子向量t'中的元素,参见图12,其中(c1,c2,…,cW)表示一组临时变量向量t子向量t'中的元素,矩形框表示取模运算器,(y1,y2,…,yW)表示取模后临时变量向量|t|,即(y1,y2,…,yW)=(|c1|,|c2|,…,|cW|)。将其作为更新后的临时变量向量t子向量t'。
6、最值分配运算,并将结果存于最值变量向量m矩阵M中。该过程以所选校验矩阵H行数进行循环,即每次对临时变量向量t中的VLdpcRowLength(v)*W*LdpcBufferNum个元素进行操作,得到长度为VLdpcRowLength(v)*W*LdpcBufferNum的结果存于最值变量向量m中。一次最值分配运算示意图参见图15,将与校验矩阵每行对应的临时变量向量t子向量t'写成VLdpcRowLength(v)行和列的矩阵Tv,其中,矩阵Tv的每一行为临时变量向量t子向量t'中与元素Hi,j对应的子向量,列数不够时进行补位;最值分配运算即计算矩阵Tv中每列元素的最小值以及次小值,进行分配,并将结果存于最值变量向量m子向量矩阵Mv。矩阵Tv每行有LdpcBufferNum个子块,每个子块中有W个基本单位;对比各个行中基本单位的大小,得出其中的最小值以及次小值,并记录该最小值的所在行数的行号,即索引值;根据索引值将最值变量向量m进行填充,若索引值与最值变量向量m的行号不同,则在最值变量向量m填入找出的最小值,若索引值与最值变量向量m的行号相同,则在最值变量向量m填入找出的次小值。以找出一个子块的最小值次小值为例,其流程图参见图14,具体步骤如下:
6.1比较矩阵Tv的第一行与第二行的第一个子块中对应基本单位的大小,将较小值的行号存入索引值中,并将较小值记录为最小值,较大值记录为次小值,此时可进行SIMD优化,进行两次运算,一次取最大值,得出两者间的较大值,一次去最小值,得出两者间的较小值,参见图11,其中(a1,a2,…,aW)表示第一行第一个子块的元素,(b1,b2,…,bW)表示第二行第一个子块的元素,矩形框表示取最大值运算器或者取最小值运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(max(a1,b1),max(a2,b2),…,max(aW,bW))或者(y1,y2,…,yW)=(min(a1,b1),min(a2,b2),…,min(aW,bW))。
6.2判断是否已达到最大循环次数VLdpcRowLength(v),若没有达到,则进行步骤6.3;若达到,则进行步骤6.6。
6.3将矩阵Tv的下一行第一子块与先前记录的最小值进行取最大值操作,该操作可进行SIMD优化,同步骤6.1。
6.4将步骤6.3得到的结果与当前记录的次小值进行取最小值操作,该操作可进行SIMD优化,同步骤6.1,并将结果记为次小值。
6.5将步骤6.3得到的结果与当前记录的最小值进行取最小值操作,该操作可进行SIMD优化,同步骤6.1,并将结果记为最小值,同时将该最小值的行号记录为索引值,返回步骤6.2。
6.6将当前记录的最小值和次小值均减去修正值β,该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示先前记录的最小值或者次小值,(b1,b2,…,bW)表示修正值β也可表示为(β,β,…,β),矩形框表示减法运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1-β,a2-β,…,aW-β),并将结果记录为最小值或次小值。
6.7对当前记录的最小值和次小值进行修正,当前记录的最小值或次小值小于零时,将该值置为零,否则不做操作,该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示当前记录的最小值或者次小值,(b1,b2,…,bW)表示零值也可表示为(0,0,…,0),矩形框表示修正运算器,(y1,y2,…,yW)表示运算后的结果,即并将结果记录为最小值或次小值。
6.8根据索引值将最值变量向量m进行填充,若索引值与最值变量向量m子向量矩阵Mv的行号不同,则在矩阵Mv的相同位置填入当前记录的最小值,若索引值与最值变量向量m子向量矩阵Mv的行号相同,则在最值变量向量m子向量矩阵Mv的相同位置填入当前记录的次小值。将矩阵Mv中的元素按照行优先的顺序读出构成最值变量向量m子向量。
7、计算中间变量向量s。该过程以所选校验矩阵H行数进行循环,即每次对临时变量向量t中的VLdpcRowLength(v)*W*LdpcBufferNum个元素进行操作,得到长度为VLdpcRowLength(v)*W*LdpcBufferNum的结果存于中间变量向量s中。一次中间变量向量s运算示意图参见图17,将临时变量向量t分成VLdpcRowLength(v)行,每行有LdpcBufferNum个子块,每个子块中有W个基本单位。以计算一个子块的中间变量向量s为例,其流程图参见图16,具体操作流程如下:
7.1将临时变量向量t的第一行第一子块与第二行第一子块进行异或操作,该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示第一行第一子块,(b1,b2,…,bW)表示第二行第一子块,矩形框表示异或运算器,(y1,y2,…,yW)表示运算后的结果,即
7.2判断是否已达到最大循环次数VLdpcRowLength(v),若没有达到,则进行步骤7.3;若达到,则进行步骤7.4,并且从第一行开始执行。
7.3将临时变量向量t的下一行第一子块与步骤7.1的结果进行异或操作,该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示下一行第一子块,(b1,b2,…,bW)表示步骤7.1的结果,矩形框表示异或运算器,(y1,y2,…,yW)表示运算后的结果,即返回步骤7.2。
7.4判断是否已达到最大循环次数VLdpcRowLength(v),若没有达到,则进行步骤7.5;若达到,则进行步骤8。
7.5将临时变量向量t的当前行第一子块与步骤7.3的结果进行异或操作,该操作可进行SIMD优化。
7.6将步骤7.5的结果与进行或操作,该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示步骤7.5的结果,(b1,b2,…,bW)表示矩形框表示或运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1|b1,a2|b2,…,aW|bW),并将结果存入中间变量向量s的第一子块中,返回步骤7.4。
8、计算校验节点向量r,其是长度为的向量。其中,该校验节点向量中包括与校验矩阵每一行对应的子向量,其索引号为到该子向量又包括与每个非“-”元素Hi,j对应的子向量。计算校验节点向量r的过程以所选校验矩阵H行数进行循环,即每次对临时变量向量t中的VLdpcRowLength(v)*W*LdpcBufferNum个元素进行操作,得到长度为VLdpcRowLength(v)*W*LdpcBufferNum的结果存于校验节点向量r中。在计算校验矩阵每行对应的子向量进行计算时,以每个非“-”元素Hi,j对应的子向量为单位进行,计算得到索引为到的向量中的元素。下面以计算一个与非“-”元素Hi,j对应的校验节点向量r子向量r'为例,其具体操作流程如下:
8.1判断是否已达到最大循环次数VLdpcRowLength(v),若没有达到,则进行步骤8.2;若达到,则进行步骤9。
8.2将最值变量向量m与Hi,j对应的子向量与中间变量向量s与Hi,j对应的子向量进行对比操作,若中间变量向量s小于零,则结果为对最值变量向量m的值求的补数,若中间变量向量s等于零,则结果为零,若中间变量向量s大于零,则结果为对最值变量向量m的值。该操作可进行SIMD优化,参见图12,其中(a1,a2,…,aW)表示最值变量向量m,(b1,b2,…,bW)表示中间变量向量s,矩形框表示对比运算器,(y1,y2,…,yW)表示运算后的结果,即
8.3将步骤8.2的结果与中间变量向量s相加。该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示步骤8.2的结果,(b1,b2,…,bW)表示中间变量向量s,矩形框表示加法运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1+b1,a2+b2,…,aW+bW)。
8.4将步骤8.3的结果与临时变量向量t子向量t'相减。该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示步骤8.3的结果,(b1,b2,…,bW)表示临时变量向量t,矩形框表示加法运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1-b1,a2-b2,…,aW-bW),并将结果存于校验节点向量r,返回步骤8.1。
9、计算变量节点向量q,其是长度为的向量。其中,该变量节点向量中包括与校验矩阵每一行对应的子向量,其索引号为到该子向量又包括与每个非“-”元素Hi,j对应的子向量q'。变量节点向量q子向量q'的计算公式为即变量节点向量q子向量q'的值为临时变量向量t子向量t'值与校验节点向量r子向量r'值的和,并根据校验矩阵H第i行第j列元素值循环移位后的结果。为了适应SIMD运算,输入临时变量向量t子向量t'与校验节点向量r子向量r'长度为Z,输出变量节点向量q子向量q'大小将为但在输出子向量中,只有其中的前Z个元素为有效数据。变量节点向量q的运算以所选校验矩阵H每行非“-”元素个数进行循环,例如所选校验矩阵H第i行第j个非“-”元素将计算得出变量节点向量q的第到位的元素。其具体计算步骤如下:
9.1根据MLdpcOffset1矩阵中找出所选校验矩阵H第i行第j个非“-”元素对应的循环偏移量,在变量节点向量q中找出所需起始位置,所需起始位置=变量节点向量q子向量q'的起始值位置+对应的循环偏移量。
9.2将临时变量向量t子向量t'与校验节点向量r子向量r'相加。该操作可进行SIMD优化,参见图11,其中(a1,a2,…,aW)表示临时变量向量t,(b1,b2,…,bW)表示校验节点向量r,矩形框表示加法运算器,(y1,y2,…,yW)表示运算后的结果,即(y1,y2,…,yW)=(a1+b1,a2+b2,…,aW+bW)。
9.3根据MLdpcRound3矩阵找出所选校验矩阵H第i行第j个非“-”元素对应的循环次数,将步骤9.2结果数据的起始值位置后(MLdpcRound1)i,j*W个数据拷贝到步骤9.1中找出的所需起始位置。
9.4根据MLdpcAssemble2矩阵,判断是否需要进行补位操作。若(MLdpcAssemble2)i,j=1,则根据MLdpcAssembleTable1矩阵中所指示的偏移量进行补位操作;若(MLdpcAssemble2)i,j=0,则不需要补位操作。
9.5根据MLdpcOffset2矩阵中找出所选校验矩阵H第i行第j个非“-”元素对应的循环偏移量,在变量节点向量q中找出所需起始位置,所需起始位置=变量节点向量q的起始值位置+对应的循环偏移量。
9.6根据MLdpcRound4矩阵找出所选校验矩阵H第i行第j个非“-”元素对应的循环次数,将步骤9.2结果数据的起始值位置后(MLdpcRound4)i,j*W个数据拷贝到步骤9.5中找出的所需起始位置。
9.7根据LdpcRemain所指示的所需补位个数,再根据MLdpcAssembleTable1矩阵中所指示的偏移量对变量节点向量q剩余元素进行补充操作,返回步骤2。
上述即为本申请中的LDPC编码和译码方法。
LDPC码的编译码理论较为成熟,但因为LDPC码是一种码长n较大的线性分组码,校验矩阵H也较大,算法复杂度十分高,传统的LDPC编译码方式不能很好的满足IEEE 802.11n***的吞吐率要求,很大程度影响到了***的性能。现有高速无线局域网***中LDPC码的实现大多基于FPGA芯片与DSP芯片。通过以往方法虽然可以满足现代高速无线局域网协议中处理和时延的要求,但是FPGA编程和专业DSP都比较复杂,缺少丰富的编程环境和调试工具,适用性一般。而基于GPP芯片,开发人员可以使用普通计算机在熟悉的结构和环境下使用丰富的工具进行开发,如C/C++环境。本专利的创新点就是在GPP芯片上对高速无线局域网***中的LDPC码在使用原有编译码器的情况下,根据GPP芯片的特性对编译码方法进行优化。由于IEEE802.11n的LDPC码是非正则LDPC码,其校验矩阵原型每行的非负值个数不一定相同,所以,相比以往LDPC码编译码实现方法,GPP芯片的灵活性会有很大优势。另外,考虑到CPU(Central Processing Unit,中央处理器)的高速发展,GPP芯片的数据处理能力也会不断提升。
首先,采用SIMD指令实现数据的并行处理。SIMD指令集,在本专利中所采用的Intel CPU上也可以称为SSE(Streaming SIMD Extensions,指令集)指令集,其本质原理是在CPU的一个时钟周期内对多个数据进行处理以获得并行处理的效果,而不像是普通的使用方式——每一个时钟周期只进行一次数据处理操作。对于Nehalem架构的CPU,其处理位宽为128比特,对于Sandy Bridge架构的CPU,其处理位宽为256比特,即对于8比特定点数而言,前者在一个指令周期内可以对16个数据进行处理,后者在一个指令周期内可以对32个数据进行处理,从理论上而言,并行度分别为16倍并行和32倍并行。然而通过实际的程序仿真结果可以知道,在实际的***运行过程中往往无法达到理想的并行倍数,一方面是因为程序并非完全由数据操作流程组成,同时还包括了大量的判断语句,而这些判断语句无法进行并行操作。另一方面,如果采用128比特位宽的SIMD指令,针对IEEE 802.11n标准的校验矩阵,每个子矩阵大小并不是16的倍数,因此每个子矩阵大小最后一组数据处理时并行度是小于16的。
其次,通过采用查找表的方法,即对多个可知参数进行初始化,并用偏移量的方法标记所需数据的具***置,用内存换取计算复杂度,提高LDPC码编译码方法的数据处理速度。在LDPC码编码器中,可以提前计算不同码率和码长条件下的编码所需的块矩阵,并将其存储在LUTs(Look-Up-Table,查找表)中,只要在程序开始运行时将表读入即可,无需重复计算。
最后,采用了多线程的方法,在同一时间执行多于一个线程,进而提升***的整体处理性能。在LDPC优化编译码方法中,对其中以校验矩阵一行数据为单位的操作,用多线程的方法进行优化,线程数为校验矩阵的行数。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (12)
1.一种基于通用处理器的LDPC编码方法,包括:通过信号采集或接收获取待编码的信号向量S,确定校验矩阵H及其分块矩阵A、B、D、E、F和T,并进行保存;根据确定向量p1和p2,并得到LDPC的编码结果向量c=(S,p1,p2);其特征在于,所述确定向量p1和p2时进行的任一矩阵与任一向量的相乘处理包括:
将所述任一矩阵的每一行作为一个线程,进行该矩阵的相应行与所述任一向量的相乘操作,并将所有行的相乘结果组合在一起构成结果向量;
其中,所述任一矩阵的每一行与所述任一向量的相乘操作包括:确定矩阵当前第i行的每个元素j对应的向量起始位置=所述任一向量的起始位置+Ai,j+(j-1)*Z,将所述任一向量中从所述起始位置起Z-Ai,j长度的数据通过单指令多数据流SIMD的方式进行左移位,并将所述起始位置开始的前Ai,j长度的数据移至左移位后的数据之后,得到所述元素j对应的向量移位结果;再将每个元素对应的向量移位结果相加,作为所述每一行与所述任一向量的相乘结果;
所述SIMD的方式中,将从所述起始位置起Z-Ai,j长度的数据以长度W为单位划分成段,对段数据并行进行左移位操作,再将剩余的(Z-Ai,j)mod W长度的数据进行左移位操作;
Z为所述校验矩阵中的一个元素代表的子矩阵大小。
2.根据权利要求1所述的方法,其特征在于,当所述任一矩阵为T-1时,所述T-1的每一行与相应向量的相乘操作时,仅进行T-1取值为0的元素与相应向量的相乘,得到该取值为0元素对应的向量移位结果,将其余元素对应的向量移位结果设置为零向量;再将每个元素对应的向量移位结果相加,作为所述每一行与所述任一向量的相乘结果。
3.根据权利要求1或2所述的方法,其特征在于,对W段数据同时进行左移位操作后取前Z个数据为有效数据。
4.根据权利要求1或2所述的方法,其特征在于,所述将每个元素对应的向量移位结果相加包括:将每个元素对应的向量移位结果以长度W为单位划分成段,通过SIMD对段数据并行进行相加操作,再将剩余的(Z-Ai,j)mod W长度的数据进行相加操作。
5.根据权利要求1或2所述的方法,其特征在于,所述矩阵A、B、D、E、F和T-1通过线性查找表进行保存。
6.一种基于通用处理器的LDPC译码方法,包括:接收已编码的LDPC码字信号c,确定校验矩阵H;通过多次迭代计算变量节点向量q作为译码结果,每次迭代时,根据当前的变量节点向量q和校验节点向量r计算临时变量向量为并根据所述临时变量向量t更新校验节点向量r,再根据校验节点向量r和临时变量向量t更新变量节点向量q为初次迭代时,将码字信号c作为变量节点向量q,将校验节点向量r设为0;其特征在于,
每次迭代计算临时变量向量t、校验节点向量r和变量节点向量q时,以校验矩阵的每一行作为一个线程进行运算和更新,得到与每行相对应的向量t、q和r中索引号从的子向量;其中,i为校验矩阵的行索引,对应所述校验矩阵的第i行计算临时变量向量t、校验节点向量r和变量节点向量q对应的子向量时,根据校验矩阵该行的每个非“-”元素Hi,j对应计算向量t、q和r中与元素Hi,j对应的索引号从的子向量,再依次进行连接得到与每行相应的子向量,i=1时,令VLdpcRowLength(v)为所述校验矩阵中每行非“-”元素的个数;
计算与Hi,j对应的临时变量向量t子向量的方式为:确定Hi,j对应的向量起始位置Z*(n-1)+Hi,n,将第i行对应的向量q子向量中所述起始位置起长度为或6的数据通过SIMD的方式拷贝到与Hi,j对应的临时变量向量t子向量的开头;在Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)mod W≠0时,确定矩阵MLdpcAssemble1中与校验矩阵元素Hi,j对应行中各个元素的取值并将与元素Hi,j对应的当前向量q的子向量中索引号为的各个元素依次拷贝到与Hi,j对应的临时变量向量t子向量的当前位置上;再确定每个元素Hi,j对应的第二向量起始位置MLdpcOffset2,将所述第二向量起始位置起长度为的数据通过SIMD的方式拷贝到与Hi,j对应的临时变量向量t子向量的当前位置上;取与Hi,j对应的临时变量向量t子向量中的前Z位并取绝对值作为与Hi,j对应的临时变量向量t的有效子向量;其中,MLdpcAssemble1为根据所述校验矩阵计算出的补足偏移量标志位之一,MLdpcOffset2为根据所述校验矩阵计算出的循环偏移量之一;
当Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)mod W≠0时,当Hi,n=0或Hi,n='-'或(Z-Hi,n)mod W=0时,(MLdpcOffset2)i,j=Z*(n-1); K为通用处理器一次可处理数据量大小,k为SIMD处理的基础单位大小;码长LLDPC=648时,LdpcRemain=11;当码长LLDPC=1296时,LdpcRemain=6;当码长LLDPC=1944时,LdpcRemain=1;j为第i行中的每个非“-”元素在该行所有非“-”元素中的索引,n为第i行第j个非“-”元素在校验矩阵中的列索引。
7.根据权利要求6所述的方法,其特征在于,计算与校验矩阵的每行对应的校验节点向量r子向量的方式为:
将与校验矩阵每行对应的临时变量向量t子向量写成VLdpcRowLength(v)行和列的矩阵Tv,其中,所述矩阵Tv的每一行为所述临时变量向量t子向量中与元素Hi,j对应的子向量,列数不够时进行补位;
对所述矩阵Tv进行最值分配,得到最值变量向量m子向量矩阵Mv;
根据所述矩阵Tv计算中间变量向量s子向量矩阵Sv;
根据所述矩阵Mv和所述矩阵Sv中索引值相同的元素,确定一中间矩阵Rv'中相应索引值的元素取值;其中,若矩阵Sv中的任一元素小于0,则取该任一元素的补数并与该任一元素相加,将相加结果作为矩阵Rv'中与所述任一元素索引值相同的元素的取值;若矩阵Sv中的任一元素等于0,则将该任一元素与0相加,将相加结果作为矩阵Rv中与所述任一元素索引值相同的元素的取值;若矩阵Sv中的任一元素>0,则在矩阵Mv中取与所述任一元素索引值相同的元素与所述任一元素相加,将相加结果作为矩阵Rv中与所述任一元素索引值相同的元素的取值;矩阵Sv中的任一元素与0比较的操作和所述相加的操作通过SIMD的方式进行;
通过SIMD方式将所述矩阵Rv'与矩阵Tv中索引值相同的元素相减,将结果作为校验节点向量r子向量矩阵Rv中相同索引值的元素取值;将所述矩阵Rv中每行的前Z个元素按照行优先的方式依次读出组成校验节点向量r子向量。
8.根据权利要求7所述的方法,其特征在于,所述进行最值分配包括:
通过SIMD的方式确定所述矩阵Tv中每一列的最小值和次小值以及最小值对应的行索引;将得到的最小值和次小值进行修正,均减去预设的修正值β,当修正后的最小值和次小值小于0时,将其设置为0,否则保持不变;
根据所述矩阵Tv中每一列的当前最小值、次小值和最小值对应的行索引,构造最值变量向量m子向量矩阵Mv中相同索引的列,其中,在Mv的任一列中,将与当前最小值对应相同行索引的元素设置为确定出的最小值,将其余元素设置为次小值。
9.根据权利要求8所述的方法,其特征在于,所述通过SIMD的方式确定每一列的最小值和次小值以及相应的行索引的方式包括:
将所述矩阵Tv的每一行元素分成个子块,每个子块包括W个基本单位;在比较所述矩阵Tv中任意两行的元素时,通过SIMD的方式一次性比较W个基本单位。
10.根据权利要求7所述的方法,其特征在于,所述计算中间变量向量s子向量矩阵Sv包括:
对于矩阵Tv中的每一列,将该列所有元素进行异或操作,再将结果与第i'行的元素异或后与0x7f进行或操作,将或操作结果作为中间向量矩阵Sv中相同索引列的第i'行元素;其中,将所述矩阵Tv的每一行元素分成个子块,每个子块包括W个基本单位,在进行异或/或操作时,通过SIMD的方式一次性执行W个基本单位的异或/或操作,第i'行表示当前行。
11.根据权利要求6所述的方法,其特征在于,计算与Hi,j对应的变量节点向量q子向量包括:
确定Hi,j对应的向量起始位置Z*(n-1)+Hi,n,通过SIMD方式将Hi,j对应的临时变量向量t子向量与Hi,j对应的校验节点向量r子向量相加,将结果向量中所述起始位置起长度为或5的数据通过SIMD的方式拷贝到与Hi,j对应的变量节点向量q子向量的开头;在Hi,n≠0、Hi,n≠'-'且(Z-Hi,n)mod W≠0时,确定矩阵MLdpcAssemble1中与校验矩阵元素Hi,j对应行中各个元素的取值并将与元素Hi,j对应的当前向量q的子向量中索引号为的各个元素依次拷贝到与Hi,j对应的变量节点向量q子向量的当前位置上;
确定每个元素Hi,j对应的第二向量起始位置MLdpcOffset2,将所述第二向量起始位置起长度为0或的数据通过SIMD的方式拷贝到与Hi,j对应的变量节点向量q子向量的当前位置上;
根据LdpcRemain指示的补位个数,按照MLdpcAssemble1中与校验矩阵元素Hi,j对应行中元素的取值进行补位。
12.根据权利要求6到11中任一所述的方法,其特征在于,预先计算并保存每个元素Hi,j对应的向量起始位置Z*(n-1)+Hi,n和第二向量起始位置MLdpcOffset2、矩阵MLdpcAssemble1、校验矩阵中每行非“-”元素的个数构成的向量VLdpcRowLength、MLdpcAssemble1、LdpcRemain。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510026526.1A CN104617959B (zh) | 2015-01-20 | 2015-01-20 | 一种基于通用处理器的ldpc编译码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510026526.1A CN104617959B (zh) | 2015-01-20 | 2015-01-20 | 一种基于通用处理器的ldpc编译码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104617959A CN104617959A (zh) | 2015-05-13 |
CN104617959B true CN104617959B (zh) | 2017-09-05 |
Family
ID=53152273
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510026526.1A Active CN104617959B (zh) | 2015-01-20 | 2015-01-20 | 一种基于通用处理器的ldpc编译码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104617959B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104967455B (zh) * | 2015-07-09 | 2018-02-23 | 北京邮电大学 | 空间耦合低密度奇偶校验码的递归编码方法 |
CN106921395B (zh) * | 2015-12-28 | 2021-09-28 | 北京忆芯科技有限公司 | Ldpc编码方法及其装置 |
CN105897278B (zh) * | 2016-03-30 | 2019-08-30 | 深圳忆联信息***有限公司 | 信息处理方法及存储设备 |
US10338919B2 (en) | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
DE102018110607A1 (de) | 2017-05-08 | 2018-11-08 | Nvidia Corporation | Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen |
CN108365849B (zh) * | 2018-01-10 | 2021-03-09 | 东南大学 | 基于simd指令集的多码率多码长ldpc码解码方法 |
CN114667698B (zh) * | 2019-12-25 | 2024-04-12 | 华为技术有限公司 | 一种校验和计算方法及电路 |
CN115529108A (zh) * | 2021-06-25 | 2022-12-27 | 华为技术有限公司 | 数据传输方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480848B2 (en) * | 2006-02-10 | 2009-01-20 | The Directv Group, Inc. | Methods and apparatus to select tornado error correction parameters |
CN102932003A (zh) * | 2012-09-07 | 2013-02-13 | 上海交通大学 | 基于gpu架构的qc-ldpc码的加速译码方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8914706B2 (en) * | 2011-12-30 | 2014-12-16 | Streamscale, Inc. | Using parity data for concurrent data authentication, correction, compression, and encryption |
-
2015
- 2015-01-20 CN CN201510026526.1A patent/CN104617959B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480848B2 (en) * | 2006-02-10 | 2009-01-20 | The Directv Group, Inc. | Methods and apparatus to select tornado error correction parameters |
CN102932003A (zh) * | 2012-09-07 | 2013-02-13 | 上海交通大学 | 基于gpu架构的qc-ldpc码的加速译码方法 |
Non-Patent Citations (3)
Title |
---|
EQUIPE:Parallel Equivalence Checking with GP-GPUs;Debapriya Chatterjee and Valeria Bertacco;《Computer Design(ICCD),2010 IEEE International Conference on》;20101130;全文 * |
SERIAL LDPC DECODING ON A SIMD DSP USING HORIZONTAL SCHEDULING;Marco Gomes et al.;《14th European Signal Processing Conference (EUSIPCO 2006),Florence,Italy》;20060908;全文 * |
基于SIMD结构的多标准LDPC译码器的VLSI实现;黄双渠 等;《计算机研究与发展》;20101231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104617959A (zh) | 2015-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104617959B (zh) | 一种基于通用处理器的ldpc编译码方法 | |
CN101192833B (zh) | 一种低密度校验码ldpc并行编码的装置及方法 | |
JP3347335B2 (ja) | インタリービング方法、インタリービング装置、及びインタリーブパターン作成プログラムを記録した記録媒体 | |
CN105049061B (zh) | 基于超前计算的高维基极化码译码器和极化码译码方法 | |
CN109379086A (zh) | 低复杂度的码率兼容的5g ldpc编码方法和编码器 | |
JP4559505B2 (ja) | ランダム系列の反復周期の拡張 | |
CN107229967A (zh) | 一种基于fpga实现稀疏化gru神经网络的硬件加速器及方法 | |
CN111563599B (zh) | 一种量子线路的分解方法、装置、存储介质及电子装置 | |
CN107704916A (zh) | 一种基于fpga实现rnn神经网络的硬件加速器及方法 | |
CN101273532B (zh) | 解码装置及接收装置 | |
CN107786211B (zh) | 一种ira-qc-ldpc码的代数结构获取方法、编码方法和编码器 | |
CN101796488A (zh) | 奇偶校验矩阵的产生 | |
CN104038232B (zh) | 基于二次异或运算的测试数据压缩与解压缩方法 | |
CN103067025B (zh) | 基于块行循环的cmmb中ldpc编码器和编码方法 | |
CN101043284B (zh) | 一种宽带码分多址***中turbo编码器内的交织器 | |
CN109889205A (zh) | 编码方法及***、解码方法及***、编解码方法及*** | |
CN105099467B (zh) | Qc-ldpc码的编码方法及编码装置 | |
Collins | The subtleties and intricacies of building a constraint length 15 convolutional decoder | |
CN110612738A (zh) | 广义极化码 | |
CN103391104A (zh) | 低密度奇偶校验码ldpc编码处理方法及装置 | |
CN101350626A (zh) | 一种Turbo码编码装置及方法 | |
CN109412606A (zh) | 基于生成矩阵的qc_ldpc码编码方法及编码器 | |
CN111786744B (zh) | 一种基于avx-512指令集的5g极化码自适应高效译码方法 | |
CN113472358A (zh) | 一种基于准循环生成矩阵的高速并行编码器 | |
CN103929271B (zh) | 一种lte***速率匹配的并行实现方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |