CN111181570A - 基于fpga的编译码方法和装置 - Google Patents

基于fpga的编译码方法和装置 Download PDF

Info

Publication number
CN111181570A
CN111181570A CN201811342725.3A CN201811342725A CN111181570A CN 111181570 A CN111181570 A CN 111181570A CN 201811342725 A CN201811342725 A CN 201811342725A CN 111181570 A CN111181570 A CN 111181570A
Authority
CN
China
Prior art keywords
data
matrix
check matrix
fpga
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.)
Pending
Application number
CN201811342725.3A
Other languages
English (en)
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.)
Beijing Huanjia Communication Technology Co Ltd
Original Assignee
Beijing Huanjia Communication Technology Co Ltd
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 Beijing Huanjia Communication Technology Co Ltd filed Critical Beijing Huanjia Communication Technology Co Ltd
Priority to CN201811342725.3A priority Critical patent/CN111181570A/zh
Publication of CN111181570A publication Critical patent/CN111181570A/zh
Pending legal-status Critical Current

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/65Purpose and implementation aspects
    • H03M13/6569Implementation on processors, e.g. DSPs, or software implementations

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)

Abstract

本发明提供了一种基于FPGA的编译码方法和装置,涉及无线通信的技术领域,包括构建基本校验矩阵;获取待编码数据,通过基本校验矩阵的算法对待编码数据进行计算,得到校验序列和信息序列,拼接校验序列和信息序列,输出编码数据;获取待译码数据,将待译码数据存储于存储器中,根据存储器与基本校验矩阵的映射关系,输出校验节点和变量节点数据,降低算法复杂度,减少FPGA资源消耗,缩短延时,实现更好的性能指标。

Description

基于FPGA的编译码方法和装置
技术领域
本发明涉及无线通信技术领域,尤其是涉及一种基于FPGA的编译码方法和装置。
背景技术
当前,随着信息化的快速发展,无线通信技术得到了蓬勃的发展,被广泛应用。随着应用环境复杂度、军事化需求等方面的提高,要求无线通信设备的具备通信距离远,抗干扰性强、通信速率高等性能,而这些性能需求都需要有优秀的编译码技术进行实现。因此,优质的编译码算法被广泛关注和应用。
目前使用的编译码算法主要有Turbo码、里德-所罗门卷积码(Reed-Solomon-Convolutional code,RS-CC)和低密度奇偶校验码(Low Density Parity Check Codes,LDPC Codes),但是上述三种算法,分别对距离性能、信道质量要求较高,且具有编码效率较低,迭代次数多,延时长等缺点。
发明内容
有鉴于此,本发明的目的在于提供基于FPGA的编译码方法和装置,降低算法复杂度,提高编码效率,缩短延时,实现更好的性能指标。
第一方面,本发明实施例提供了一种基于FPGA的编译码方法,应用于FPGA平台,包括:
构建基本校验矩阵;
获取待编码数据,通过所述基本校验矩阵的算法对所述待编码数据进行计算,得到校验序列和信息序列,拼接所述校验序列和所述信息序列,输出编码数据;
获取待译码数据,将所述待译码数据存储于存储器中,根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述获取待编码数据,包括:
获取串行输入数据,将所述串行输入数据转换成并行待编码数据,其中,所述串行输入数据按照预设字节大小进行分块。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述通过所述基本校验矩阵的算法对所述待编码数据进行计算,包括:
根据所述基本校验矩阵的稀疏性,对所述基本校验矩阵的列做重排,得到近似下三角矩阵;
将矩阵乘法运算转化为循环移位;
按照前向置换法对逆矩阵的求解;
所述基本校验矩阵按列对存储其中的元素进行校验。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述将矩阵乘法运算转化为循环移位,包括,重复执行以下操作,直至所述基本校验矩阵中的子列向量都被遍历:
利用循环移位因子信息对所述子列向量进行循环移位;
将得到的多个循环移位向量进行异或运算,从而得到所述基本校验矩阵中的一个子列向量。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述按照前向置换法对逆矩阵的求解,包括:
将所述近似下三角矩阵的逆矩阵与列向量相乘的运算。
结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,所述方法还包括:
按照所述基本校验矩阵设置节点存储部分所需的存储器,用于存储中间变量,所述中间变量包括变量节点、校验节点和与所述变量节点以及所述校验节点相关联的数据。
结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述将所述待译码数据存储于存储器中,包括:
将输入的待译码数据依次存储到节点存储器的相应地址中。
结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,所述根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据,包括:
将节点信息进行初始化,迭代次数设置为0,重复执行以下步骤,直至完成所设定的最大迭代次数或开始接收新一帧数据;
根据所述存储器与所述基本校验矩阵的映射关系,读取节点信息;
所述节点信息经流水线化数据处理,计算结果回读入所述存储器,以使所述节点信息进行更新,并输出本次迭代的译码判决比特。
结合第一方面,本发明实施例提供了第一方面的第八种可能的实施方式,其中,所述构建基本校验矩阵包括:
通过循环移位因子的计算公式,构建基本校验矩阵。
第二方面,本发明实施例还提供一种基于优化最小和的编译码装置,应用于FPGA平台,包括:
矩阵构建单元,构建基本校验矩阵;
编码单元,获取待编码数据,通过所述基本校验矩阵的算法对所述待编码数据进行计算,得到校验序列和信息序列,拼接所述校验序列和所述信息序列,输出编码数据;
译码单元,获取待译码数据,将所述待译码数据存储于存储器中,根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据。
本发明实施例提供了一种基于FPGA的编译码方法和装置,包括构建基本校验矩阵;获取待编码数据,通过基本校验矩阵的算法对待编码数据进行计算,得到校验序列和信息序列,拼接校验序列和信息序列,输出编码数据;获取待译码数据,将待译码数据存储于存储器中,根据存储器与基本校验矩阵的映射关系,输出译码数据,降低算法复杂度,提高编码效率,缩短延时,实现更好的性能指标。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于FPGA的编译码方法流程图;
图2为本发明实施例提供的64*64的代表单元矩阵示意图;
图3为本发明实施例提供的近似下三角矩阵示意图;
图4为本发明实施例提供的一种基于最小和的优化译码算法流程示意图;
图5为本发明实施例提供的基本校验矩阵结构示意图;
图6为本发明实施例提供的矩阵乘法模块结构示意图;
图7为本发明实施例提供的前向置换模块的异或结构示意图;
图8为本发明实施例提供的码字合成结构图;
图9为本发明实施例提供的LDPC最小和译码与RS-CC硬判决译码算法的对比图;
图10为本发明实施例提供的LDPC不同译码算法的对比图;
图11为本发明实施例提供的编码算法实现流程图;
图12为本发明实施例提供的子方阵示意图;
图13为本发明实施例提供的子方针标号图;
图14为本发明实施例提供的迭代过程流程图;
图15为本发明实施例提供的校验更新流程图;
图16为本发明实施例提供的多级级联结构图;
图17为本发明实施例提供的变量节点更新流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前使用的编译码算法主要有Turbo码、里德-所罗门卷积码(Reed-Solomon-Convolutional code,RS-CC)和低密度奇偶校验码(Low Density Parity Check Codes,LDPC Codes),Turbo码是一早先出现的并行级联编译码方案。Turbo码性能取决于码的距离特性。距离特性变坏的情况下对于卷积码是个非常严重的问题。后来的里德-所罗门卷积码(Reed-Solomon-Convolutional code,RS-CC)是一种通过短分量码来构造纠错性能良好的编码技术。RS-CC级联码虽然大大地提高了纠错能力,但其代价是编码效率的降低。在信道质量较差时,新增的一层编译码反而可能会使误码越纠越多。因此级联码存在明显的门限效应,而低密度奇偶校验码(Low Density Parity Check Codes,LDPC Codes)码通过构建校验矩阵及采用迭代译码方案,极大的提高了信道编码的纠错能力。
在信道编译码方面,LDPC码以其优良的纠错能力和易于与多天线、高阶调制方式、多载波技术结合的特点,非常适用于远距离无线传输环境,再加之其较低复杂度译码算法和高并行度的实现架构使得其具有良好的工程实用价值,但与此同时,LDPC算法存在算法复杂,需要的迭代次数多,延时长等缺点。
当前的编译码算法一般基于两种平台,即DSP平台和FPGA(Field-ProgrammableGate Array,即现场可编码门阵列)平台,其中DSP平台虽然具有大规模数据处理能力,但是数据调度效率低,且功耗高,而FPGA平台实时性高,适用于高速处理,但是目前没有适用于高带宽低延时无线通信系统且编码性能优异的编译码纠错算法在FPGA上实现。
基于此,本发明实施例提供的一种基于FPGA的编译码方法和装置,可以降低算法复杂度,提高编码效率,缩短延时,实现更好的性能指标。为便于对本实施例进行理解,首先对本发明实施例所公开的一种基于FPGA的编译码方法进行详细介绍;
参照图1,基于FPGA的编译码方法包括以下步骤,包括:
步骤S110,构建基本校验矩阵;这里,主要通过循环移位因子的计算公式,构建基本校验矩阵;
步骤S120,获取待编码数据,通过基本校验矩阵的算法对待编码数据进行计算,得到校验序列和信息序列,拼接校验序列和信息序列,输出编码数据;
在实际应用的优选实施例中,通过获取串行输入数据,将串行输入数据转换成并行待编码数据,进而实现获取待编码数据的步骤,其中,串行输入数据按照预设字节大小进行分块;
在一些可能的实施例中,根据基本校验矩阵的稀疏性,对基本校验矩阵的列做重排,得到近似下三角矩阵;将矩阵乘法运算转化为循环移位;按照前向置换法对逆矩阵求解;基本校验矩阵按列对存储其中的元素进行校验,通过上述步骤实现根据基本校验矩阵的算法对待编码数据进行计算的目的;
其中,将矩阵乘法运算转化为循环移位的步骤包括,重复执行以下操作,直至基本校验矩阵中的子列向量都被遍历:
利用循环移位因子信息对子列向量进行循环移位;将得到的多个循环移位向量进行异或运算,从而得到基本校验矩阵中的一个子列向量。
上述实施例中,提供的按照前向置换法对逆矩阵的求解这一步骤,包括:将近似下三角矩阵的逆矩阵与列向量相乘的运算。
步骤S130,获取待译码数据,将待译码数据存储于存储器中,根据存储器与基本校验矩阵的映射关系,输出校验节点和变量节点数据。
上述方法还包括,按照基本校验矩阵设置节点存储部分所需的存储器,用于存储中间变量,中间变量包括变量节点、校验节点和与变量节点以及校验节点相关联的数据。
这里,获取待译码数据,将输入的待译码数据依次存储到节点存储器的相应地址中,将节点信息进行初始化,迭代次数设置为0,重复执行以下步骤,直至完成所设定的最大迭代次数或开始接收新一帧数据;根据存储器与基本校验矩阵的映射关系,读取节点信息;节点信息经流水线化数据处理,计算结果回读入所述存储器,实现节点信息更新,同时得到本次迭代的译码判决比特;当完成所设定的最大迭代次数或开始接收新一帧数据时,终止本帧数据的译码过程并输出译码判决比特。
需要说明的是,上述步骤标号并不对步骤实施的前后顺序进行限定;
本发明实施例提供一种复杂度更低,性能指标更好,且利于FPGA平台实现的基于FPGA的编译码方法。主要解决以下几个问题:
1)本申请设计的基于优化最小和的LDPC编译码算法,在FPGA平台实现后大大提高了系统的编码增益,相对于传统编译码方法提高近3dB,有效改善由多径信道等引起的衰落,提高了在电磁环境复杂、信道中各种噪声及干扰等复杂环境下的数据传输性能。
2)本申请解决了LDPC译码算法复杂度高的问题。通常采用的几种LDPC译码算法包括最小和译码算法、和积译码算法、规则化最小和译码算法以及偏置最小和译码算法,在这四种译码算法中,最小和的计算复杂度最低但与其他算法相比性能差很多,和积算法的性能最好但是计算复杂度最高。其他两种算法则是在两者中取折衷。本申请设计的编译码算法既降低了算法复杂度,同时提升了译码性能,使译码性能不低于和积译码算法。
3)本申请解决了LDPC编译码算法在FPGA实现占用资源多,迭代次数少的问题。由于FPGA比DSP具备更强的实时能力,且功耗低,基于优化最小和的LDPC编译码算法在设计时就考虑了计算复杂度,与此同时FPGA实现时巧妙利用流水线结构、并行处理等手段,更利于FPGA实现。FPGA占用资源比之前优化了约三分之二,而迭代次数大幅度提高,缩短了编译码延时。
本发明实施例中的编译码算法设计包括LDPC编译码算法设计和FPGA实现。
其中编译码算法设计包括:LDPC编码算法设计、LDPC译码算法设计;FPGA实现包括:编码算法的FPGA实现和译码算法的FPGA实现。
LDPC编译码算法设计包括:
a.一种基于近似下三角矩阵的LDPC编码算法。
该算法设计包括稀疏校验矩阵构造和利用校验矩阵的稀疏性完成编码过程。
步骤1:矩阵构造
基于IEEE 802.16e协议中码长为2309码字、码率为3/4A下的基本校验矩阵,通过利用循环移位因子的以下计算公式,可以得到扩展因子zf=64、码长1536bits、码率3/4的基本校验矩阵,其大小为6×24;
Figure BDA0001861887110000091
基本校验矩阵,具体如下所示:
Figure BDA0001861887110000092
上述基本校验矩阵中每一个元素代表一个64*64的矩阵,其值为-1代表全零矩阵,其余非负数代表单位矩阵循环右移的位数,以第一个元素4为例,其代表矩阵如图2所示;
步骤2:
考虑到本设计中的校验矩阵的结构,为了充分利用校验矩阵的稀疏性,通过采用近似下三角矩阵的编码方式来实现LDPC编码算法的快速迭代,并完成其功能实现。
对校验矩阵的列做重排,可以获得一个近似的下三角矩阵。如图3所示,分成六个分块的稀疏矩阵A、B、C、D、E、T,其中g是一个相当小的数。
其中每一个元素代表一个64*64的矩阵,其值为-1代表全零矩阵,其余非负数代表单位矩阵循环右移的位数。对校验矩阵的列做重排,可以获得一个近似的下三角矩阵。如图3所示,分成六个分块的稀疏矩阵A、B、C、D、E、T,其中g是一个相当小的数。
对于要发送的信息序列,作为LDPC码字的前N-M个信息位比特输出;对于其生成的校验比特,将其分成两块[p1,p2],v=[u,p1,p2],根据校验矩阵的性质H·vT=0,在矩阵D’为单位矩阵时,有以下两个关系式,并根据上述两个关系式,求出p1,p2,从而完成编码过程;
p1 T=(ET-1A+C)sT
p2 T=T-1(AuT+Bp1 T)
b.一种基于最小和的优化译码算法。
译码算法的流程图如图4所示,完成一次迭代有4个步骤:
步骤1:初始化。
先计算后验概率
Figure BDA0001861887110000101
变量节点n的信息初始化为znm=ln。构建初始矩阵,在矩阵相应位置待存储译码的数据。
步骤2:校验节点单元(CNU)。
对于每一个校验约束节点m和对应的每一个n∈N(m)计算
Figure BDA0001861887110000102
步骤3:变量节点处理(VNU)。
对于每一个变量节点n和对应的每一个m∈M(n)计算
Figure BDA0001861887110000103
Figure BDA0001861887110000104
步骤4:译码判决与校验。
当LQn≥0时,
Figure BDA0001861887110000105
否则
Figure BDA0001861887110000106
这样就生成了
Figure BDA0001861887110000107
若迭代次数小于预设的最大迭代次数,重复迭代过程。达到最大迭代次数后,验证
Figure BDA0001861887110000116
是否成立,若是,则译码正确,校验指示信息ldpc_decoder_error为0,否则,为1。
FPGA实现设计
a.接口设计
编码模块的输入信号包含待编码数据使能信号Data_InEn(1bit)、待编码数据信号Data_Input(1bit)、复位信号Rst_n(1bit)和时钟信号clk(1bit);输出信号包含编码后数据使能信号Data_OutEn(1bit)和编码后数据信号Data_Output(1536bits)。
译码模块的输入信号包含时钟信号clk(1bit)、待译码数据信号data8_in(4bits)、归一因子multi(5bits)、复位信号reset(1bit)和待译码数据使能信号wr(1bit);其中待译码的解调数据每个由4bit表示,从高位到低位依次是1bit的符号位和3bit的软值信息。其中,符号位代表的物理含义是硬判决的结果,而软值信息所代表的物理含义是该硬判决的可信度,可信度越高,其所对应的软值也越大,具体取值在0到7之间。
输出信号包含译码后数据使能信号busy(1bit)和译码后数据信号data_out(1bit)。
b.LDPC编码算法程序结构和处理流程
编码计算过程可分解为以下6个步骤:由f1=AsT、f2=CsT分别计算f1、f2;由f3=T- 1f1、f4=Ef3分别计算f3、f4;由
Figure BDA0001861887110000111
计算
Figure BDA0001861887110000112
Figure BDA0001861887110000113
计算f5;由f6=f1+f5计算f6;由
Figure BDA0001861887110000114
可以得到
Figure BDA0001861887110000115
对于码长1536、码率3/4的LDPC编码FPGA实现,采用全并行结构,将其中矩阵乘法运算转化为循环移位,针对逆矩阵的求解按照前向置换法。编码模块内部包含四个模块:串并变换模块、校验序列p1模块、校验序列p2模块、码字合成模块。以下分别进行具体介绍。
串并变换模块:编码前数据量为1152bits,因此将待编码比特流以1152bits为单位进行分块。该模块用于将输入的串行数据转变为并行数据并输出。
校验序列p1模块:该模块用于校验序列中p1的生成,涉及f1=AsT、f2=CsT、f3=T- 1f1、f4=Ef3
Figure BDA0001861887110000121
的计算,通过采用矩阵乘法模块和前向置换模块来完成其功能实现。
矩阵乘法模块:在实际中基本校验矩阵按行依次存储其中元素的信息,该信息包含循环移位因子和该元素所在基本校验矩阵中的列数两个方面。本设计中扩展因子为64,因此循环移位因子范围是0到63,在硬件存储中占用6bits;列数共24列,范围为0到23,占用5bits。将这两种信息存储进一个寄存器中,共用11bits,结构如图5所示。
基本校验矩阵中元素的存储格式:计算f1=AsT为例进行说明。矩阵A大小为320×1152,矩阵sT大小为1152×1。将前者看作由5×18个矩阵(大小为64×64的单位矩阵循环移位得到的矩阵或者零矩阵)构成,将后者看作是由18个子列向量(大小为64×1)构成,首先利用寄存器中低6位存储的循环移位因子信息对该子列向量进行循环移位,然后再将得到的多个循环移位向量进行异或运算,从而得到矩阵f1中的一个子列向量的(64×1)的结果。为得到完整的矩阵f1需进行5次上述处理,硬件架构中采用并行结构,具体如图6所示。其余矩阵与向量的相乘运算以此类推。
前向置换模块:该模块用于稀疏矩阵的逆矩阵T-1与列向量相乘的运算。在本设计中用于完成f3=T-1f1
Figure BDA0001861887110000122
以mb=6为例,异或结构图如图7所示,使用的异或门数量较多,但处理时延短。
校验序列p2模块:该模块用于校验序列中p2的生成,涉及
Figure BDA0001861887110000123
f6=f1+f5
Figure BDA0001861887110000124
的计算。
码字合成模块:该模块用于完成编码后信息位与校验位的码字合成功能,由于LDPC属于线性分组码,因此,其编码后的序列包含信息序列和校验序列,将计算得到的校验序列与原始的信息序列进行拼接即可完成码字合成。具体结构如图8所示。
在本设计中,码长为1536、码率为3/4的码字中,信息位s长度为1152bits,校验位p1长度为64bits,校验位p2长度为320bits。
C.LDPC译码算法实现的程序结构和处理流程
FPGA实现的LDPC译码算法可以划分为以下几个硬件模块:
信息存储模块:信息存储模块包含2部分。第一部分是节点存储部分,由多个相同大小的ram组成,用于存储计算的中间变量,即变量节点和校验节点的相关数据。Ram设计为简单双口ram,读数据与写数据端口宽度相同。在CNU或VNU过程中,所有ram中的数据被读出,之后写入计算结果,即完成了节点数据的更新。节点存储部分所需ram的数目和大小要依照采用的校验矩阵进行设计,每块ram与校验矩阵的一块字阵唯一对应。
存储模块的第二部分用于存储待译码原始数据,由一个双端口ram构成。其写端口宽度与待译码数据相同,读端口宽度根据校验矩阵设计,从而可以一次读出多个数据用于VNU过程的计算。
初始化模块:初始化模块直接与译码模块外部相连接,根据ram和校验矩阵的映射关系,将输入的解调数据依次存储到节点存储模块特定ram的特定地址中,实现变量节点的初始化。同时将原始数据备份到原始数据ram中,以便于运算过程中多次调用。
校验节点更新(CNU)模块:校验节点更新模块负责校验节点的更新和回写,根据节点存储ram和校验矩阵的映射关系,设计其由多个校验节点更新单元CNU组成并实现并行运算,每个CNU模块按行串行的更新校验节点信息。
在校验节点更新过程中,90个ram同时被执行读操作,读取地址起始值为0并依次递增。按照ram与校验矩阵的映射关系,每一行读出的数据被送入相应的CNU单元中,经过CNU模块更新后,需要再写入到原ram的原地址中。本实例中CNU采用多级流水线实现,CNU对ram的写地址永远比读地址滞后,不会发生读写冲突。
变量节点更新模块:变量节点更新模块负责变量节点的更新和回写。根据前述节点存储ram和校验矩阵的映射关系,设计其由多个变量节点更新单元VNU组成并实现并行运算,每个VNU模块按列串行地更新变量节点信息。
在变量节点更新过程中,90个ram同时被执行读操作,读取地址由ram对应子阵的移位值确定并依次递增。按照ram与校验矩阵的映射关系,每一列子矩阵读出的数据被送入相应的VNU单元中,与此同时,存储原始数据的ram依照地址递增的顺序被读取,一次读取出的多个数据并分别送入相应的VNU单元中,
从ram中读出的数据,经过VNU模块更新后,需要再写入到原ram的原地址中。本实例中VNU采用多级流水线实现,那么VNU对ram的写地址永远比读地址滞后,不会发生读写冲突。
译码控制模块:译码控制模块使用状态机实现,用于控制译码算法整个流程中初始化、校验节点更新、变量节点更新、译码结果输出等各个过程的切换,以完成迭代算法。译码控制模块同时控制各个流程中,对于信息存储模块内部的各个ram的读写时序。
工作流程
编码:编码算法的工作流程主要包含以下步骤:对于输入的待编码信息s,首先经过串并变换模块,输出并行数据;调用存储的A、C矩阵数据,调用矩阵乘法模块计算得f1、f2;调用前向置换模块计算得f3;调用矩阵乘法模块计算得f4;做矩阵加法得到p1;同样地,调用矩阵乘法得到f5,做矩阵加法得到f6;调用前向置换模块得到p2。进入码字合成模块,将计算得到的校验序列p1(64bits),p2(320bits)与原始的信息序列s(1152bits)进行拼接,得到1536bits的输出数据。
译码:译码算法的工作流程主要包括以下步骤:(1)当接收到新一帧待译码数据,按照ram与校验矩阵的映射关系,初始化模块将输入的解调数据存储到节点存储模块特定ram的特定地址中,实现节点信息的初始化。同时将原始数据备份到原始数据ram中,并将迭代次数更新为0。(2)译码控制模块根据各个ram和校验矩阵的映射关系,从ram中读取节点信息并送入不同的CNU单元中,并将计算结果回写到各ram中。(3)译码控制模块根据各个ram和校验矩阵的映射关系,从ram中读取节点信息并送入不同的VNU单元中,并将计算结果回写到各ram中。同时缓存此次迭代得到的译码判决信息,将迭代次数加1(4)重复(2)(3)步骤。(5)当完成所设定的最大迭代次数或开始接收新一帧数据时,终止本帧数据的译码过程并输出译码判决比特,完成本次译码过程。
本发明实施例提供了一种基于优化最小和的编译码纠错算法,并将此算法在FPGA上进行实现。使应用此算法的宽带无线通信系统编码增益提高了近3dB,系统接收灵敏度提高了近3dB,大大提高了传输距离,拓展了应用空间,满足了通信需求。
本发明以FPGA为开发实现平台,通过巧妙利用并行运算和流水线处理,LUT资源空间仅占用20000个,比目前其他实现的方案资源节省近一半,有效节省了FPGA的开销,为宽带无线通信系统的FPGA实现打下了坚实的基础。
本发明在实现上利用有限的资源调度,使LDPC译码迭代次数由7次提升到20多次,大大提高了编译码性能,且缩短了处理时间,提高实时性。
因此,本发明有效解决了算法复杂度与FPGA资源有限相矛盾的问题,在降低算法复杂度时,提高了系统编码增益,从而提高了系统接收性能指标,适用于高带宽低延时的通信系统。
如图9所示,在码长1536、3/4码率、BPSK调制以及相同的高斯白噪声条件下,仿真数据量103比特时,LDPC迭代译码与RS-CC码硬判决译码的误比特率对比如图9所示,可以看出随着横轴误比特率增加,LDPC算法的误码率快速收敛到10-4,而RS-CC码的误码率收敛很慢,最终降到10-3。仿真结果证明采用最小和译码算法的LDPC码要采用硬判决译码的RS-CC码性能优越许多。
如图10所示,将最小和算法、和积算法、规则化最小和(NMS)算法、偏置最小和(OMS)算法这4种LDPC译码算法,在1536码长、3/4码率、迭代10次、采样帧数100000、信噪比0:0.2:4、BPSK调制、加性高斯白噪声、取NMS算法参数0.75、OMS算法参数0.085的实验条件下进行仿真,得到的结果如图5所示。可以看出NMS算法与性能最好的和积算法非常接近,误码率都收敛很快。但和积算法计算复杂度非常高,有大量卷积运算和乘法运算等,相反NMS算法只用较小计算复杂度就可以达到与和积算法接近的性能。
如图11所示,对于输入的待编码信息s,首先经过串并变换模块,输出并行数据;调用存储的A、C矩阵数据,调用矩阵乘法模块计算得f1、f2;调用前向置换模块计算得f3;调用矩阵乘法模块计算得f4;做矩阵加法得到p1;同样地,调用矩阵乘法得到f5,做矩阵加法得到f6;调用前向置换模块得到p2。进入码字合成模块,将计算得到的校验序列p1(64bits),p2(320bits)与原始的信息序列s(1152bits)进行拼接,得到1536bits的输出数据。
该译码器根据校验矩阵特征,使用多个ram存储校验或变量节点信息。下面对ram与校验矩阵的映射关系做详细说明:
该LDPC译码器基于QC-LDPC码设计,它的校验矩阵是稀疏矩阵,即矩阵中存在大量的0元素,同时,校验矩阵也可看作由循环单位阵和全0矩阵构成,本说明采用的实例为384*1536的稀疏矩阵,它可看作由6*24个64*64的子方阵构成,如图12所示;
列表中每个数字代表一个64X64的子方阵,-1表示此矩阵元素全为0,0表示为单位阵,其他数字n表示该方阵由单位阵按行向右循环移位n位到。
由于校验矩阵中0元素的位置不参与译码过程,因此非全0子方阵内的元素可以使用一个64深度的ram存储,其0~63号地址分别存储子矩阵的0到63行的有效数据。
将每个非全0子方阵与一个ram进行标号以确定其对应关系,如图13所示;
初始化模块:本实例中面向的是码长为1536码字的译码设计,因此,待译码数据是将1536个数据为单位串行输入。模块初始化变量节点的过程如下:当输入使能位有效后,给输入数据逐一编号,并将前64个数据依次送给0、15、30、45号ram,4个ram的起始地址分别为60、23、17和14,将第65到第128个数据写入1、16、46、75号ram,4个ram的起始地址分别为39、2、24、22,依此类推。
同时,另外一块ram用来存储待译码原始数据,它被设计成简单双口ram,其写入位宽为4bit,与原始数据位宽相同,但读出位宽为128bit。写入时,数据地址依0、64、128…的规律递增,读取时,一次读取出的128bit数据由24个4bit数和32个无效0组成,这24个数据倍分别送入24个并行计算的VNU模块。
译码算法迭代过程的程序结构:如图14,译码迭代算法采用部分并行结构实现,校验节点更新过程使用6个CNU单元并行实现,变量节点更新过程使用24个VNU模块并行实现,每个模块均需串行处理64组输入数据。CNU和VNU单元交替运行。
在校验节点更新过程中,所有校验节点以硬件中校验节点更新模块的数量为单位进行分批并行处理,每批次处理周期等同于单个校验节点更新模块的流水线级数,每批次完成校验矩阵中一行节点数据的更新;在变量节点更新过程中,同样有使用硬件实现的变量节点更新模块对所有变量节点进行分批处理,每批次内并行处理多个变量节点。
在校验节点更新过程中,所有校验节点依照硬件中校验节点更新模块的数量分组,每组数据分批次送入校验节点更新模块,每批次完成校验矩阵中一行节点数据的更新,每批次处理周期等同于单个校验节点更新模块的流水线级数;在变量节点更新过程中,同样有多个变量节点更新模块对所有变量节点进行分组分批处理。
部分并行译码结构可以将资源占用和处理时延的2种代价平分在空间和时间两个维度上,更适用于大部分实际的通信需求和硬件平台。
校验节点更新(CNU)模块:校验节点更新模块负责校验节点的更新和回写,根据节点存储ram和校验矩阵的映射关系,设计其由6个校验节点更新单元CNU组成并实现并行运算,6个CNU模块分别记为CNUi,1<=i<=6;每个CNU模块串行地更新64行的校验节点信息。
在校验节点更新过程中,90个ram同时被执行读操作,读取地址起始值为0并依次递增。每一行读出的数据按照规则被送入相应的CNU单元中,例如,从0—14号ram中读出的数据并行送入CNU1,15-29号ram读出的数据并行送入CNU2,依此类推。从ram中读出的数据,经过CNU模块更新后,需要再写入到原ram的原地址中。本实例中CNU采用6级流水线实现,那么CNU对ram的写地址永远比读地址滞后6,不会发生读写冲突。
变量节点更新模块设计:变量节点更新模块负责变量节点的更新和回写。根据前述节点存储ram和校验矩阵的映射关系,设计其由24个变量节点更新单元VNU组成并实现并行运算,24个CNU模块分别记为VNUi,1<=i<=24;每个VNU模块串行地更新64列的变量节点信息。
在变量节点更新过程中,90个ram同时被执行读操作,读取地址由ram对应子矩阵的移位值确定并依次递增。每一列子矩阵读出的数据按照规则被送入相应的VNU单元中,例如,读取0、15、30、45号ram的起始地址分别为60、23、17和14,从中读出的数据并行送入VNU1;读取1、16、46、75号ram的起始地址分别为39、2、24、22,从中读出的数据并行送入VNU2,依此类推。与此同时,存储原始数据的ram依照地址从0到63递增的顺序被读取,一次读取出的128bit数据中,[3:0]位送入VNU1,[7:4]位送入VNU2,依次类推。
从ram中读出的数据,经过VNU模块更新后,需要再写入到原ram的原地址中。本实例中VNU采用6级流水线实现,那么VNU对ram的写地址永远比读地址滞后6,不会发生读写冲突。
校验节点更新单元(CNU):在每个校验节点的处理过程中,按照公式
Figure BDA0001861887110000191
得到更新后的校验节点信息,每个数据采用8bit来进行表示,其中符号为1bit,绝对值信息使用7bit表示。模块在接收数据后首先进行符号和绝对值信息的分离,之后将两部分数据独立进行运算,在输出之前将信息整合得到更新数据,其处理流程如图15所示。
符号部分计算,首先将所接收到的所有变量节点信息的符号位进行异或运算,然后将各变量节点的符号位分别与该所得结果进行异或运算,可得到要输出的各校验节点的符号位。
最小值部分的处理,采用计算出最小值、次小值和最小值索引的方式得到需传递给各变量节点的校验节点的最小值信息。若变量节点n恰好对应最小值索引,那么相应输出的校验节点应更新为次小值,否则更新为最小值。本实例中采用的基本校验矩阵的列数为24,因此与每个校验节点相连接的变量节点数目最多为24个。采用多级级联的方式构造5级流水线,其具体计算流程如下图所示,图16中以24个变量节点为例,以实线表示最小值的生成路径,虚线表示次小值的生成路径。
变量节点更新单元(VNU):在每个校验节点的处理过程中,按照公式
Figure BDA0001861887110000201
得到更新后的变量节点信息,每个数据
Figure BDA0001861887110000203
用8bit
Figure BDA0001861887110000204
Figure BDA0001861887110000205
表示,其中符号位为1bit,绝对值信息使用7bit表示。模块接收数据后首先进行符号和绝对值信息的分离,之后将两部分数据独立进行运算,在输出之前将信息整合得到更新数据,其处理流程如图17所示。
其中扩位补零是为了防止加法结果溢出,通过补零的方式增加输入数据的整数位;截短将绝对值超出原有位数范围的数据转化为原有位数下的极值,根据公式
Figure BDA0001861887110000202
对应位置的所有节点与原始数据和的符号位作为本次迭代的译码码字输出。
进一步的,本发明实施例还提供一种基于优化最小和的编译码装置,应用于FPGA平台,包括:矩阵构建单元,构建基本校验矩阵;编码单元,获取待编码数据,通过基本校验矩阵的算法对待编码数据进行计算,得到校验序列和信息序列,拼接校验序列和信息序列,输出编码数据;译码单元,获取待译码数据,将待译码数据存储于存储器中,根据存储器与基本校验矩阵的映射关系,输出校验节点和变量节点数据。
本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种基于FPGA的编译码方法,其特征在于,应用于FPGA平台,包括:
构建基本校验矩阵;
获取待编码数据,通过所述基本校验矩阵的算法对所述待编码数据进行计算,得到校验序列和信息序列,拼接所述校验序列和所述信息序列,输出编码数据;
获取待译码数据,将所述待译码数据存储于存储器中,根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据。
2.根据权利要求1所述的基于FPGA的编译码方法,其特征在于,所述获取待编码数据,包括:
获取串行输入数据,将所述串行输入数据转换成并行待编码数据,其中,所述串行输入数据按照预设字节大小进行分块。
3.根据权利要求1所述的基于FPGA的编译码方法,其特征在于,通过所述基本校验矩阵的算法对所述待编码数据进行计算,包括:
根据所述基本校验矩阵的稀疏性,对所述基本校验矩阵的列做重排,得到近似下三角矩阵;
将矩阵乘法运算转化为循环移位;
按照前向置换法对逆矩阵的求解;
所述基本校验矩阵按列对存储其中的元素进行校验。
4.根据权利要求3所述的基于FPGA的编译码方法,其特征在于,所述将矩阵乘法运算转化为循环移位,包括,重复执行以下操作,直至所述基本校验矩阵中的子列向量都被遍历:
利用循环移位因子信息对所述子列向量进行循环移位;
将得到的多个循环移位向量进行异或运算,从而得到所述基本校验矩阵中的一个子列向量。
5.根据权利要求3所述的基于FPGA的编译码方法,其特征在于,所述按照前向置换法对逆矩阵的求解,包括:
将所述近似下三角矩阵的逆矩阵与列向量相乘的运算。
6.根据权利要求1所述的基于FPGA的编译码方法,其特征在于,所述方法还包括:
按照所述基本校验矩阵设置节点存储部分所需的存储器,用于存储中间变量,所述中间变量包括变量节点、校验节点和与所述变量节点以及所述校验节点相关联的数据。
7.根据权利要求6所述的基于FPGA的编译码方法,其特征在于,所述将所述待译码数据存储于存储器中,包括:
将输入的待译码数据依次存储到节点存储器的相应地址中。
8.根据权利要求6所述的基于FPGA的编译码方法,其特征在于,所述根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据,包括:
将节点信息进行初始化,迭代次数设置为0,重复执行以下步骤,直至完成所设定的最大迭代次数或开始接收新一帧数据;
根据所述存储器与所述基本校验矩阵的映射关系,读取节点信息;
所述节点信息经流水线化数据处理,计算结果回读入所述存储器,以使所述节点信息进行更新,并输出本次迭代的译码判决比特。
9.根据权利要求1所述的基于FPGA的编译码方法,其特征在于,所述构建基本校验矩阵包括:
通过循环移位因子的计算公式,构建基本校验矩阵。
10.一种基于FPGA的编译码装置,其特征在于,应用于FPGA平台,包括:
矩阵构建单元,构建基本校验矩阵;
编码单元,获取待编码数据,通过所述基本校验矩阵的算法对所述待编码数据进行计算,得到校验序列和信息序列,拼接所述校验序列和所述信息序列,输出编码数据;
译码单元,获取待译码数据,将所述待译码数据存储于存储器中,根据所述存储器与所述基本校验矩阵的映射关系,输出校验节点和变量节点数据。
CN201811342725.3A 2018-11-12 2018-11-12 基于fpga的编译码方法和装置 Pending CN111181570A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811342725.3A CN111181570A (zh) 2018-11-12 2018-11-12 基于fpga的编译码方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811342725.3A CN111181570A (zh) 2018-11-12 2018-11-12 基于fpga的编译码方法和装置

Publications (1)

Publication Number Publication Date
CN111181570A true CN111181570A (zh) 2020-05-19

Family

ID=70653619

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811342725.3A Pending CN111181570A (zh) 2018-11-12 2018-11-12 基于fpga的编译码方法和装置

Country Status (1)

Country Link
CN (1) CN111181570A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114499543A (zh) * 2022-02-18 2022-05-13 强华时代(成都)科技有限公司 一种基于fpga的ldpc编码方法及编码器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172493A1 (en) * 2007-12-28 2009-07-02 Samsung Electronics Co. Ltd. Method and device for decoding low density parity check code
CN102664638A (zh) * 2012-05-31 2012-09-12 中山大学 基于分层nms算法的多码长ldpc码译码器的fpga实现方法
CN104202057A (zh) * 2014-02-12 2014-12-10 中兴通讯股份有限公司 信息处理方法及装置
US20160011934A1 (en) * 2014-07-10 2016-01-14 Phison Electronics Corp. Decoding method, memory control circuit unit and memory storage device

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172493A1 (en) * 2007-12-28 2009-07-02 Samsung Electronics Co. Ltd. Method and device for decoding low density parity check code
CN102664638A (zh) * 2012-05-31 2012-09-12 中山大学 基于分层nms算法的多码长ldpc码译码器的fpga实现方法
CN104202057A (zh) * 2014-02-12 2014-12-10 中兴通讯股份有限公司 信息处理方法及装置
US20160011934A1 (en) * 2014-07-10 2016-01-14 Phison Electronics Corp. Decoding method, memory control circuit unit and memory storage device

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘艳欢等: "高性能LDPC编码器IP核设计与验证", 《微电子学与计算机》 *
郭黎利等: "基于FPGA的IEEE 802.16e的LDPC编译码方法", 《自动化技术与应用》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114499543A (zh) * 2022-02-18 2022-05-13 强华时代(成都)科技有限公司 一种基于fpga的ldpc编码方法及编码器

Similar Documents

Publication Publication Date Title
CN109379086B (zh) 低复杂度的码率兼容的5g ldpc编码方法和编码器
CN101141133B (zh) 一种结构化低密度校验码的编码方法
CN102545913B (zh) 一种迭代译码方法及系统
Zhang et al. Joint (3, k)-regular LDPC code and decoder/encoder design
CN111162797B (zh) 一种速率兼容的5g ldpc码的编码装置及编码方法
US8185797B2 (en) Basic matrix, coder/encoder and generation method of the low density parity check codes
CN101924565B (zh) Ldpc编码器、解码器、系统及方法
CN109586732B (zh) 中短码ldpc编解码系统和方法
CN105763203B (zh) 一种基于硬可靠度信息的多元ldpc码译码方法
JP2019517209A (ja) 構造的ldpcの符号化、復号化方法および装置
CN110233628B (zh) 极化码的自适应置信传播列表译码方法
CN111211790A (zh) 一种面向5g终端的高吞吐率ldpc译码算法及架构
WO2019205313A1 (zh) 一种基于随机比特流更新的ldpc译码器
CN114448446A (zh) 水下光通信ldpc编码处理方法、装置及计算机可读存储介质
CN110730008B (zh) 一种基于深度学习的rs码置信传播译码方法
JP5333233B2 (ja) 復号装置、データ蓄積装置、データ通信システム、および復号方法
CN101588183A (zh) 一种ldpc码快速编码方法与系统
CN105871385B (zh) 一种ldpc卷积码构造方法
CN111181570A (zh) 基于fpga的编译码方法和装置
CN114598421B (zh) 一种基于空间耦合低密度生成矩阵码的编译码系统
CN116192157A (zh) 降低qc-ldpc码生成矩阵密度的实现方法
CN113300719A (zh) 一种多进制非规则重复累加码并行编码装置及方法
CN114553242B (zh) 基于半概率计算的部分并行ldpc译码器
CN108736898B (zh) 一种适用于5g系统的ldpc码编解码器复用方法
Mahdy et al. Design and implementation of parallel branches for concatenated BCH and LDPC coding on FPGA

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200519