一种基于CUDA的RaptorCode编码方法、译码方法及系统与流程

文档序号:12489792阅读:来源:国知局

技术特征:

1.一种基于CUDA的Raptor Code编码方法,其特征在于,包括:

(1)将LDPC的校验矩阵H通过高斯消去及列交换转化成H0=[P|Im],由H0得到LDPC的生成矩阵由生成矩阵GLDPC以及待编码数据向量x得到LDPC目标编码数据向量令向量y’=Px,则y’的计算方式为:同时开启m个线程,线程编号为i(0≤i≤m-1)的线程将矩阵P中第i行与向量x进行乘法运算,得到向量y’中的第i个编码数据值,由所有并行运算的结果及向量x得到LDPC目标编码数据向量y,其中,Im为m阶单位矩阵,Ik-m为k-m阶单位矩阵,P为m×(k-m)的矩阵,x为(k-m)×1的向量,(k-m)为LDPC编码之前的数据长度,k为LDPC编码之后的数据长度;

(2)同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据LT Code编码的度分布函数产生一个[1,k]范围内的正整数值作为待编码数据xi的度值di,由所有并行运算的结果得到度向量d,其中,n为LT Code编码之后的数据长度,j为可能的度值,Ωj为度值取j的概率,k为LT Code编码之前的数据长度,也即为LDPC编码之后的数据长度,d为n×1的向量;

(3)同时开启n个线程,线程编号为i(0≤i≤n-1)的线程获取度向量d中的度值di,并在[0,k-1]范围内按照均匀概率分布随机选取di个互异的整数值作为LT Code的编码矩阵GLT的第i行的非零元素位置,最后由并行运算的结果得到GLT中各行中的非零元素的位置,其中,GLT为n×k的矩阵;

(4)同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据GLT中第i行非零元素的位置,得到LDPC目标编码数据向量y中对应位置的元素,由各对应位置的元素生成LT Code的目标编码数据向量z中的第i个编码数据值zi,由所有并行运算结果得到LT Code的目标编码数据向量z,其中,z为n×1的向量。

2.一种基于CUDA的Raptor Code编码系统,其特征在于,包括:LDPC并行编码模块、LT Code度分布并行生成模块、LT Code编码矩阵并行生成模块、LT Code编码数据并行生成模块:

所述LDPC并行编码模块用于将LDPC的校验矩阵H通过高斯消去及列交换转化成H0=[P|Im],由H0得到LDPC的生成矩阵由生成矩阵GLDPC以及待编码数据向量x得到LDPC目标编码数据向量令向量y’=Px,则y’的计算方式为:同时开启m个线程,线程编号为i(0≤i≤m-1)的线程将矩阵P中第i行与向量x进行乘法运算,得到向量y’中的第i个编码数据值,由所有并行运算的结果及向量x得到LDPC目标编码数据向量y,其中,Im为m阶单位矩阵,Ik-m为k-m阶单位矩阵,P为m×(k-m)的矩阵,x为(k-m)×1的向量,(k-m)为LDPC编码之前的数据长度,k为LDPC编码之后的数据长度;

所述LT Code度分布并行生成模块用于同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据LT Code编码的度分布函数产生一个[1,k]范围内的正整数值作为待编码数据xi的度值di,由所有并行运算的结果得到度向量d,其中,n为LT Code编码之后的数据长度,j为可能的度值,Ωj为度值取j的概率,k为LT Code编码之前的数据长度,也即为LDPC编码之后的数据长度,d为n×1的向量;

所述LT Code编码矩阵并行生成模块用于同时开启n个线程,线程编号为i(0≤i≤n-1)的线程获取度向量d中的度值di,并在[0,k-1]范围内按照均匀概率分布随机选取di个互异的整数值作为LT Code的编码矩阵GLT的第i行的非零元素位置,最后由并行运算的结果得到GLT中各行中的非零元素的位置,其中,GLT为n×k的矩阵;

所述LT Code编码数据并行生成模块用于同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据GLT中第i行非零元素的位置,得到LDPC目标编码数据向量y中对应位置的元素,由各对应位置的元素生成LT Code的目标编码数据向量z中的第i个编码数据值zi,由所有并行运算结果得到LT Code的目标编码数据向量z,其中,z为n×1的向量。

3.一种基于CUDA的Raptor Code译码方法,其特征在于,包括:

(1)在LT Code的Tanner图上进行LT Code的BP译码,其子步骤为:

(1-1)申请大小为n×dmax的存储空间MLT,其中,dmax为度向量d中的最大值,MLT的第i(0≤i≤n-1)行的前di个存储单元存放与Oi节点相关的信息值,即Oi节点向所有与之相连的I节点传递的信息值或者所有与Oi节点相连的I节点向Oi节点传递的信息值,在LT Code的Tanner图中,I节点对应LDPC目标编码数据向量y,O节点对应LT Code的目标编码数据向量z,Oi到Ij的连线表示GLT中的第i行第j列为非零元素,MLT中初始化值为0;

(1-2)同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据GLT中第i行中的di个非零元素的位置,将di个二元值{i,j}(0≤j≤di-1)作为索引值添加到矩阵RLT的第i行中的对应位置处,最后根据并行计算结果得到矩阵RLT,其中RLT表示I节点中的数据在MLT中的索引值,RLT为n×dmax的矩阵;

(1-3)O节点向I节点传递信息:同时开启n个线程,线程编号为i(0≤i≤n-1)的线程取出MLT第i行的前di个存储单元的信息值按照公式:得到di个更新后信息值,并将更新后的di个信息值替换MLT第i行的前di个存储单元中的原始数值,最后通过并行计算结果得到更新后的MLT,其中,为更新后的信息值,LLR(zi)为LT Code的目标编码数据向量z中zi的对数似然比;

(1-4)I节点向O节点传递信息:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLT中第j行的所有索引值,根据获取的索引值得到MLT中的与索引值对应的位置处的cj个信息值由公式得到cj个更新后的信息值并将更新后的cj个信息值替换MLT中取出信息值的位置处,最后通过并行计算结果得到更新后的MLT,其中cj为与Ij节点相连的O节点的数量,返回步骤(1-3)直到满足预设迭代次数,则执行步骤(1-5);

(1-5)获取I节点信息值:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLT中第j行的所有索引值,根据获取的索引值得到MLT中的与索引值对应的位置处的cj个信息值,将该cj个信息值进行求和得到Ij节点的信息值,由并行运算的结果得到I节点的k个所有信息值{mI0,…,mI(k-1)};

(2)在LDPC的Tanner图上进行LDPC的BP译码,其子步骤为:

(2-1)申请大小为m×dcmax的存储空间MLDPC,其中,dcmax为LDPC校验矩阵H中各行非零元素个数的最大值,MLDPC的第i(0≤i≤m-1)行的前dci个存储单元存放与ci节点相关的信息值,即ci节点向所有与之相连的v节点传递的信息值或者所有与ci节点相连的v节点向ci节点传递的信息值,在LDPC的Tanner图中,v节点对应LDPC校验矩阵H的列,C节点对应LDPC校验矩阵H的行,ci到vj的连线表示H中的第i行第j列为非零元素;

(2-2)同时开启m个线程,线程编号为i(0≤i≤m-1)的线程根据H中第i行中的dci个非零元素的位置,将dci个二元值{i,j}(0≤j≤dci-1)作为索引值添加到矩阵RLDPC的第i行中的对应位置处,最后根据并行计算结果得到矩阵RLDPC,其中RLDPC表示v节点中的数据在MLDPC中的索引值,RLDPC为m×dcmax的矩阵;

(2-3)同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,将步骤(1-5)得到的I节点中的第j个信息值mIj写入MLDPC中与各索引值对应的位置处,由并行运算的结果完成对MLDPC的初始化;

(2-4)c节点向v节点传递信息:同时开启m个线程,线程编号为i(0≤i≤m-1)的线程取出MLDPC第i行的前dci个存储单元的信息值按照公式:得到dci个更新后信息值,并将更新后的dci个信息值替换MLDPC第i行的前dci个存储单元中的原始数值,最后通过并行计算结果得到更新后的MLT,其中,为更新后的信息值;

(2-5)v节点向c节点传递信息:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,根据获取的索引值得到MLDPC中的与索引值对应的位置处的dvj个信息值由公式得到dvj个更新后的信息值并将更新后的dvj个信息值替换MLDPC中取出信息值的位置处,最后通过并行计算结果得到更新后的MLDPC,其中dvj为与vj节点相连的c节点的数量,返回步骤(2-4)直到满足预设迭代次数,则执行步骤(2-6);

(2-6)获取v节点信息值:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,根据获取的索引值得到MLDPC中的与索引值对应的位置处的dvj个信息值,将该dvj个信息值的求和值与mIj的和作为vj节点的信息值mvj,由并行运算的结果得到v节点的k个所有信息值{mv0,…,mv(k-1)};

(3)同时开启(k-m)个线程,线程编号为j(0≤j≤k-m-1)的线程按照公式:得到第j个数据由并行运算结果得到目标译码数据向量

4.一种基于CUDA的Raptor Code译码系统,其特征在于,包括:LT-BP并行译码模块、LDPC-BP并行译码模块以及译码结果并行判决模块:

所述LT-BP并行译码模块用于在LT Code的Tanner图上进行LT Code的BP译码,所述LT-BP并行译码模块包括第一内存申请模块、第一索引矩阵生成模块、第一更新模块、第二更新模块以及LT Code的BP译码子模块:

所述第一内存申请模块用于申请大小为n×dmax的存储空间MLT,其中,dmax为度向量d中的最大值,MLT的第i(0≤i≤n-1)行的前di个存储单元存放与Oi节点相关的信息值,即Oi节点向所有与之相连的I节点传递的信息值或者所有与Oi节点相连的I节点向Oi节点传递的信息值,在LT Code的Tanner图中,I节点对应LDPC目标编码数据向量y,O节点对应LT Code的目标编码数据向量z,Oi到Ij的连线表示GLT中的第i行第j列为非零元素,MLT中初始化值为0;

所述第一索引矩阵生成模块用于同时开启n个线程,线程编号为i(0≤i≤n-1)的线程根据GLT中第i行中的di个非零元素的位置,将di个二元值{i,j}(0≤j≤di-1)作为索引值添加到矩阵RLT的第i行中的对应位置处,最后根据并行计算结果得到矩阵RLT,其中RLT表示I节点中的数据在MLT中的索引值,RLT为n×dmax的矩阵;

所述第一更新模块用于O节点向I节点传递信息:同时开启n个线程,线程编号为i(0≤i≤n-1)的线程取出MLT第i行的前di个存储单元的信息值按照公式:得到di个更新后信息值,并将更新后的di个信息值替换MLT第i行的前di个存储单元中的原始数值,最后通过并行计算结果得到更新后的MLT,其中,为更新后的信息值,LLR(zi)为LT Code的目标编码数据向量z中zi的对数似然比;

所述第二更新模块用于I节点向O节点传递信息:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLT中第j行的所有索引值,根据获取的索引值得到MLT中的与索引值对应的位置处的cj个信息值由公式得到cj个更新后的信息值并将更新后的cj个信息值替换MLT中取出信息值的位置处,最后通过并行计算结果得到更新后的MLT,其中cj为与Ij节点相连的O节点的数量;

所述LT Code的BP译码子模块用于在所述第一更新模块以及所述第二更新模块执行预设迭代次数之后,获取I节点信息值:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLT中第j行的所有索引值,根据获取的索引值得到MLT中的与索引值对应的位置处的cj个信息值,将该cj个信息值进行求和得到Ij节点的信息值,由并行运算的结果得到I节点的k个所有信息值{mI0,…,mI(k-1)};

所述LDPC-BP并行译码模块用于在LDPC的Tanner图上进行LDPC的BP译码,所述LDPC-BP并行译码模块包括第二内存申请模块、第二索引矩阵生成模块、初始化模块、第三更新模块、第四更新模块以及LDPC的BP译码子模块:

所述第二内存申请模块用于申请大小为m×dcmax的存储空间MLDPC,其中,dcmax为LDPC校验矩阵H中各行非零元素个数的最大值,MLDPC的第i(0≤i≤m-1)行的前dci个存储单元存放与ci节点相关的信息值,即ci节点向所有与之相连的v节点传递的信息值或者所有与ci节点相连的v节点向ci节点传递的信息值,在LDPC的Tanner图中,v节点对应LDPC校验矩阵H的列,C节点对应LDPC校验矩阵H的行,ci到vj的连线表示H中的第i行第j列为非零元素;

所述第二索引矩阵生成模块用于同时开启m个线程,线程编号为i(0≤i≤m-1)的线程根据H中第i行中的dci个非零元素的位置,将dci个二元值{i,j}(0≤j≤dci-1)作为索引值添加到矩阵RLDPC的第i行中的对应位置处,最后根据并行计算结果得到矩阵RLDPC,其中RLDPC表示v节点中的数据在MLDPC中的索引值,RLDPC为m×dcmax的矩阵;

所述初始化模块用于同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,将步骤(1-5)得到的I节点中的第j个信息值mIj写入MLDPC中与各索引值对应的位置处,由并行运算的结果完成对MLDPC的初始化;

所述第三更新模块用于c节点向v节点传递信息:同时开启m个线程,线程编号为i(0≤i≤m-1)的线程取出MLDPC第i行的前dci个存储单元的信息值按照公式:得到dci个更新后信息值,并将更新后的dci个信息值替换MLDPC第i行的前dci个存储单元中的原始数值,最后通过并行计算结果得到更新后的MLT,其中,为更新后的信息值;

所述第四更新模块用于v节点向c节点传递信息:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,根据获取的索引值得到MLDPC中的与索引值对应的位置处的dvj个信息值由公式得到dvj个更新后的信息值并将更新后的dvj个信息值替换MLDPC中取出信息值的位置处,最后通过并行计算结果得到更新后的MLDPC,其中dvj为与vj节点相连的c节点的数量;

所述LDPC的BP译码子模块用于在所述第三更新模块以及所述第四更新模块执行预设迭代次数之后,获取v节点信息值:同时开启k个线程,线程编号为j(0≤j≤k-1)的线程获取RLDPC中第j行的所有索引值,根据获取的索引值得到MLDPC中的与索引值对应的位置处的dvj个信息值,将该dvj个信息值的求和值与mIj的和作为vj节点的信息值mvj,由并行运算的结果得到v节点的k个所有信息值{mv0,…,mv(k-1)};

所述译码结果并行判决模块用于同时开启(k-m)个线程,线程编号为j(0≤j≤k-m-1)的线程按照公式:得到第j个数据由并行运算结果得到目标译码数据向量

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1