新闻中心

EEPW首页>嵌入式系统>设计应用> 一种基于FPGA的QC_LDPC码的译码器设计

一种基于FPGA的QC_LDPC码的译码器设计

作者: 时间:2014-05-13 来源:网络 收藏

文献中也给出了4环和6环的检验算法,同时可验证按照此方法得到的校验矩阵最小围长为8。

本文引用地址://m.amcfsurvey.com/article/246737.htm

2码的译码算法

置信传播(Belief Propagation,BP)算法是LDPC的标准译码算法,在其基础上又可改进得到最小和(Min-Sum)算法、归一化最小和(Nor malization Min-Sum,NMS)算法等。此类算法皆通过校检节点更新和变量节点更新两步完成一次译码迭代,因此又称为2项迭代置信传播(Two Phase Message Passing,TPMP)算法。TPMP算法因为在一次迭代过程中,全部校检节点更新完后,才对所有变量节点进行更新,所以在一次迭代过程中,所有信息只能进行一次更新,收敛速度较慢,译码延时较大。虽此后又提出了复用处理的方法,但未能从根本上提升算法的收敛性和译码性能。

2.1码的分层译码策略

分层译码策略则改变了TPMP算法的译码方式,其将校检矩阵按行或列划分成若干分层。在一次迭代过程中,先并行更新第1分层中的所有校检节点和相关的变量节点,然后逐层进行更新。因此在一次更新过程中,后更新的分层会利用已更新分层的输出信息,变量节点在此过程中得到多次更新,大幅加快了译码的收敛速度,并提高了译码性能。但为确保变量节点信息在各分层之间能够进行传递,校检矩阵一个分层中的列权重必须<1。

2.2 分层迭代译码算法

由上述子矩阵移位法构造的是规则的码,因而采用分层译码时通常就是将校验矩阵行重的一个子块行作为一个分层,以码长3 456,码率为1/2的(3,6)正规QC_LDPC码为例,基阵大小为108×216,填充矩阵块为16×16,以每个子块行作为一个分层即每个分层16行,共有108个子层。

设高斯白噪声信道的噪声方差为σ2,接收到的信号序列为y,校验矩阵H的大小为M×N。迭代过程中信道固有信息Zn,校验节点信息Lm,n,变量节点信息Zm,n,其中0≤m≤M-1,0≤n≤N-1。以BPSK调制为例,NMSA为基础,将分层迭代译码算法的译码过程列述如下

(1)初始化

基于FPGA的大围数QC_LDPC码的译码器

(2)迭代过程(第t次迭代的第k层)。

Step1分层更新。

Step2译码判决。若Zj<0,则

基于FPGA的大围数QC_LDPC码的译码器

=1,否则

基于FPGA的大围数QC_LDPC码的译码器

=0,更新译码结果

基于FPGA的大围数QC_LDPC码的译码器

。 (3)译码结构校验。完成一次迭代后,对更新的译码结果进行校验。若满足

基于FPGA的大围数QC_LDPC码的译码器

xHT=0,或迭代次数达到系统设置的最大迭代次数,则停止译码,并输出译码结果。否则,跳回步骤(2)进行新一次迭代。

3 正规QC_LDPC码的译码器

3.1 译码器的结构

对码长为3 456,码率为1/2的(3,6)正规QC_LDPC码,子矩阵大小为16×16,共有108个子块行,216个子块列,648个非零子矩阵。采用分层迭代译码算法实现译码器,译码过程中只保存Zn和Lm,n两种中间数据,变量节点信息则通过式(2)计算得出,以减小数据存储量。为便于硬件实现,选择α=0.75作为修正因子,这样只需简单的带符号位右移和加法运算便可完成数据修正。由于将每一个子块行作为一个分层,因此译码器的并行度为108,即共需108个基本运算单元。对译码器中的数据进行6 bit量化,并对计算过程中产生的溢出数据采用截断处理,这样的量化处理使译码性能约有0.1 dB的损失,但节约了硬件资源。

图1为分层译码器的整体硬件结构。

(1)数据输入模块。接收解调模块输出量化后的对数似然比数据,完成Zn的初始化。该模块采用乒乓操作,即当其中一个存储器接收数据的同时,译码器从另外一个存储器中读取数据进行译码,以此来提高译码器的吞吐量。

(2)数据存储模块。根据译码过程中所存储数据的不同,存储模块可划分为3块:1)后验概率存储模块Zmem,用于存储Zn。单个Zn的长度为6位,每个子块列对应的存储空间为6×16=96位,对应子块列数,共需216个此类模块。2)校验信息更新存储模块Lmem,用于存储,单个的长度为6位,每一行有6个非零元素,所以每行对应的存储空间为6×6=36位,而每一子块行所对应的存储空间为6×6×16=576位。对应子块行数,共需108个此类存储模块。3)译码结果存储模块,用于存储译码的结果。每一子块列对应的译码数据长度为16位,对应子块列数,共需216个此类存储空间。同样为了提高吞吐量,译码数据输出模块也采用乒乓操作,当一个存储器进行译码结果更新时,另一个存储器向外设输出存储器中的译码结果。

(3)校验节点更新模块(Parity—Check UpdateBlock,PCUB)。校验节点模块是译码器的核心处理单元,完成迭代的更新过程。共有108个PCUB模块进行并行处理,一次更新108组数据。每一组相关的6个变量节点信息串行输入PCUB中的FIFO寄存器,并逐次进行比较,寻找该组数据中的最小值与次最小值。当一组数据输入完成后,最小值与次最小值得以确定,再从FIFO寄存器中依次读出数据同最小值与次最小值比较,再更新数据。迭代译码过程主要被划分成两个阶段,变量节点信息输入FIFO阶段和变量节点信息输出FIFO阶段。这样的结构适合采用二级流水线,当一组已输入的变量节点信息从FIFO中读取时,将下一组变量节点信息输入FIFO。通过二级流水线处理,提高了近一倍的数据吞吐率。

c++相关文章:c++教程




关键词:FPGAQC_LDPC

评论


相关推荐

技术专区

关闭