CN102523070A - 一种应用于卫星通信的通用软件译码数据分配方法 - Google Patents
一种应用于卫星通信的通用软件译码数据分配方法 Download PDFInfo
- Publication number
- CN102523070A CN102523070A CN2011103720138A CN201110372013A CN102523070A CN 102523070 A CN102523070 A CN 102523070A CN 2011103720138 A CN2011103720138 A CN 2011103720138A CN 201110372013 A CN201110372013 A CN 201110372013A CN 102523070 A CN102523070 A CN 102523070A
- Authority
- CN
- China
- Prior art keywords
- data
- row
- pos
- group
- check matrix
- 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.)
- Granted
Links
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
- Error Detection And Correction (AREA)
Abstract
一种应用于卫星通信的通用软件译码数据分配方法,包括步骤为:对地面接收设备解调后的数据进行LDPC码的初始化、水平运算和垂直运算,得到对LDPC码译码处理后的数据。本发明效率高,达到通用化的目的,以满足目前航天领域大任务量的需要。
Description
技术领域
本发明涉及一种应用于卫星通信的通用软件译码数据分配方法,属于卫星通信技术领域。
背景技术
随着目前空间探测活动的日益频繁,近地和深空探测产生数据量的突飞猛进,人们急需要一种能够跨越遥远宇宙空间,进行高速、准确数据传输的编译码技术。因为传输距离遥远,信道环境复杂,加之很多工程具有大数据量实时传输的要求,因此对这种编译码技术提出了高增益的要求。
LDPC码是一种具有接近香农极限性能的好码,用于近地通信和深空探测的LDPC码标准已于2009年被NASA采用,LDPC码的误码平台低于Turbo码,相同增益的情况下,近地通信LDPC码的码率远远高于RS+卷积的编码方式。而且自从上世纪90年代中期林舒教授提出基于有限几何理论构造的QC-LDPC一类码型同样可以保证具有类似随机生成码型的误码性能以来,各种QC类的规则LDPC码被人们创造出来,用以替代给译码过程造成极大不便的随机码,LDPC码得以真正的应用于工程实现,这也为LDPC码的通用程序编写提供了理论保证。
目前国内外对LDPC技术研究虽然不少,但是针对LDPC码的通用编程技术研究较少,而且LDPC码译码过程中的交织网络极其复杂。通常LDPC码的H矩阵一旦变换,整个程序都需要重新编写,效率低下,不能满足目前航天领域大任务量的需要。
发明内容
本发明的技术解决问题:克服现有技术的不足,提供一种应用于卫星通信的通用高效软件译码数据分配方法,效率高,达到通用化的目的,以满足目前航天领域大任务量的需要。
本发明的技术解决方案:一种应用于卫星通信的通用软件译码数据分配方法,其特点在于:对地面接收设备解调后的数据进行LDPC码的初始化、水平运算和垂直运算,得到对LDPC码处理后的数据,其中:
所述初始化过程是按照LDPC码中校验矩阵H行的顺序把“1”的列位置上的输入数据数据直接存储到一个足够长的一维数组Num_Pos中,实现为:设每个LDPC码中校验矩阵H的循环子矩阵中“1”的组数为K,则一维数组Num_Pos的前K个数据是校验矩阵H的第一个循环子矩阵中的第一行中“1”对应位置上的数据,一维数组Num_Pos中接下来的K个数据是校验矩阵H的第二个循环子矩阵中的第一行中“1”对应位置上的数据,以此类推,在校验矩阵H的每个子矩阵中,每组“1”从初始的列位置开始向右存储,每当有一组“1”达到该子矩阵最右侧列,该组“1”下一行的数据一定出现在该循环子矩阵的最左侧,下一行的数据存储需要首先存储这组“1”的数据,然后再将接下来的剩余数据按照原来的顺序进行存储,即对存储“1”的先后顺序进行了循环右移处理,以此类推;
所述水平运算是对校验矩阵H中所有“1”位置上的数据按行重分组,对每组数据进行比较绝对值大小,找出最小值和次小值,计算每一位的符号属性,重新排列H矩阵每一行的数据;
所述垂直运算过程是在确定校验矩阵H中某个循环子矩阵中某个数据所在的行数的基础上,确定所述数据在一维数组Num_Pos中的K个数据的范围内中的具体位置,实现为:每个循环子矩阵中每组“1”的初始行号由初始的列号计算得出,从行的角度看,起始时刻每个循环子矩阵中每组“1”的初始位置在该循环子矩阵中该行的K个数据中的第一位,随着每组“1”向右下角的移动,每当循环子矩阵中某组“1”的行号达到同循环子矩阵中另外一组“1”的初始行号的时候,该组“1”所在K个数据中的位置加1,最终该组“1”的行号结束于它的初始行号上方一行。
本发明与现有技术相比具有如下优点:本发明基于航天领域工程实践常用的LDPC码,针对任务量大,任务急迫的现状,提供一种能够满足未来航天通信信道编码领域课题的通用高效LDPC码软件译码方法,具体优点如下:
(1)本发明所给出的数据分配方案具有通用性
LDPC码的特征由它的校验矩阵H体现,不同的LDPC码具有不同的校验矩阵H,传统的LDPC码软件编写方案,在校验矩阵H改变之后,所有的软件硬件程序代码都需要重新编写,具有硬件编写指导意义的软件LDPC译码程序通常都有数千行,重新编写这样的程序,工作量是巨大的,也是浪费时间的,而且除了非常特殊的环境下,工程应用上的LDPC码通常也很少要求将LDCP码的性能发挥到极致,因此本发明对一大类常用的LDPC码进行译码的时候,软件程序只需要输入必要的一些参数就可以直接将LDPC码的对硬件编写有指导意义的软件译码程序完成。
(2)本发明所给出的数据分配方案具有高效性
传统的通用软件译码方案是通过求余运算和乘法运算来确定具体的数据的位置的,而乘法和除法是计算机所不擅长的运算,因此计算时间较长,而本发明通过用比较和循环移位代替乘除法来确定数据位置的方法避开了不利于计算机处理的大量乘除运算,经过对CCSDS标准近地8176,7/8和深空通信1536,2/3的软件验证,本发明数据分配方案在相同计算机平台上能够将译码速度提高4~5倍。
(3)本发明所给出的数据分配方案能够直接指导硬件的通用化实现
采用本发明方法实现的数据分配软件代码,程序中没有除法运算、开方运算等不利于硬件完成的运算,把上述运算以加法运算、减法运算、乘法运算、比较运算和循环移位运算替代,更利于计算机的硬件实现,在经过量化的工作之后,更加便于指导FPGA硬件的编写,使得译码工作更具有高效率,从而提高了航天通信处理能力。
综上,本发明为更进一步实现通用LDPC译码器件奠定了坚实的基础。它可以被移植到符合要求的任何设备或平台上,可以很方便的进行修改与升级,并且大大降低维护费用;本发明已经应用于航天通信领域众多型号中,并且取得了很好的效果。
附图说明
图1为本发明中的H矩阵中循环子矩阵移位结构图;
图2为本发明的数据水平排放示意图;
图3为本发明的具体算法流程图。
具体实施方式
本发明对地面接收设备解调后的数据进行LDPC码的初始化、水平运算和垂直运算,得到利用LDPC码译码处理后的数据。下面结合附图对本发明的数据分配过程进行详细说明。
首先说明译码需要的已知条件:
a)校验矩阵H中每个循环子矩阵的大小(存入sub_N中,通常所有循环子矩阵的大小都是相同的)
b)校验矩阵H中的每个循环子矩阵中有几组“1”(例子中是3组,设为A,B,C,)
c)校验矩阵H中的每个循环子矩阵中每组“1”开始的列号(存入ver_pos_A、ver_pos_B和ver_pos_C中)
然后,按照每组“1”初始的列号,计算出相应的初始行的行号(存入hor_pos_A、hor_pos_B和hor_pos_C中),计算公式为
hor_pos_A=sub_N-ver_pos_A;
hor_pos_B=sub_N-ver_pos_B;
hor_pos_C=sub_N-ver_pos_C;
将已知条件实现的过程如下:
设定以下变量:
K:校验矩阵H中每个循环子矩阵中“1”的组数
ini_ver_Pos:足够大的一维数组,用来存放校验矩阵H中每个循环子矩阵每组“1”初始的列位置,按行存放。
ini_hor_Pos:足够大的一维数组,用来存放校验矩阵H中每个循环子矩阵每组“1”初始的行位置,按列存放。
two_dem_ver_Pos:二维数组,将ini_ver_Pos中的数分行存放其中
two_dem_ver_end_Pos:二维数组,将two_dem_ver_Pos中的每个数对应的本循环子矩阵的终止列号存放其中
two_dem_hor_Pos:二维数组,将ini_hor_Pos中的数分列存放其中
two_dem_hor_Pos_copy:二维数组,存放的数据与two_dem_hor_Pos完全相同
two_dem_hor_Pos_add:二维数组,格式与two_dem_hor_Pos相同,用来存放附加值。
two_dem_hor_end_Pos:二维数组,将two_dem_hor_Pos中的每个数对应的本循环子矩阵的终止行号存放其中
Sub_Matrix_hor_Num:校验矩阵H中循环子矩阵的行数
Sub_Matrix_ver_Num:校验矩阵H中循环子矩阵的列数
Num_Pos:一维数组,存储“1”位置上的输入数据
abs_Num_Pos:一维数组,存储Num_Pos中的所有数据的绝对值。
sign_Num_Pos:Num_Pos中所有数据的符号。
ver_temp:足够大的一维数组,用来暂存垂直运算的结果。
sub_N:校验矩阵H中每个循环子矩阵的大小
ver_pos_A、ver_pos_B、ver_pos_C:每组“1”开始的列号
hor_pos_A、hor_pos_B、hor_pos_C:每组“1”开始的行号
hor_weight:行重
ver_weight:列重
hor_sub_num:校验矩阵H中每行子矩阵个数
ver_sub_num:校验矩阵H中每列子矩阵个数
quan:一维数组,长度为2
设定已知条件完毕之后,下面分析在初始化、水平运算和垂直运算时,如何按照一定的顺序将数据进行存储。
1.初始化过程
进行初始化时,要将校验矩阵H中“1”位置上的数据按照行的顺序存储在一维数组Num_Pos中,如图2所示,图2中有两组“1”,初始列号分别为0、2,相应的Num_Pos中的值初始化为a、f。不失一般性,以一个循环子矩阵中有3组“1”为例,说明初始化时,如何确定数据的具体位置。
如图1、3所示,图中的虚线实线所在位置即为“1”所在的位置,A、B和C三组“1”从“初始列号”开始向右侧进行编排,由于C线在最右端,因此在经过sub_N-1-ver_pos_C行的运算之后,C线首先要从最左边重新开始循环。下面进行的数据初始化顺序从A、B和C,变为C、A和B,以此类推,最终将数据全部存储在一维数组Num_Pos当中。
总而言之,每当排在最右侧的线碰撞到循环子矩阵的右侧壁时便发生“反弹”,横向存储数据的顺序进行一次循环移位,将最右侧线的数据移到最左边,其他的数据顺序不变。
将初始化过程实现的过程如下:
在ini_ver_Pos中输入所有校验矩阵H的循环子矩阵中每组“1”的初始列位置的值。
建立二维数组two_dem_ver_Pos,其中一个维度用Sub_Matrix_hor_Num来确定,按行分组存放ini_ver_Pos中的值。
建立二维数组two_dem_ver_end_Pos,与two_dem_ver_Pos对应,存放two_dem_ver_Pos中所有值对应的校验矩阵H中循环子矩阵的终止列号。
对二维数组two_dem_ver_Pos中的Sub_Matrix_hor_Num做循环,用这样的方法填充Num_Pos中的数据。
同时对two_dem_ver_Pos中的每一组初始列号递增加1,达到two_dem_ver_end_Pos中的对应值之后减sub_N,与此同时,对于达到two_dem_ver_end_Pos的two_dem_ver_Pos中的数据与前面的K-1位做循环移位。
如此循环,直到把所有的“1”位置全部初始化完毕。
2.水平运算过程
水平运算是对校验矩阵H中所有“1”位置上的数据按行重分组,对每组数据进行比较绝对值大小,找出最小值和次小值,计算每一位的符号属性,重新排列H矩阵每一行的数据。
将水平运算实现的过程如下:
对Num_Pos、abs_Num_Pos和sign_Num_Pos中的数据按照hor_weight分组,并且进行水平运算,运算的结果存储回Num_Pos中。
2、垂直运算过程
用校验矩阵H的每个循环子矩阵中hor_pos_A,hor_pos_B,hor_pos_C的值及其每条线横向的先后顺序确定出每个循环子矩阵中相应元素在Num_Pos中的位置。
确定每条线横向的先后顺序方法如下。
首先确定三条水平直线,三条水平直线位于初始行号hor_pos_A,hor_pos_B,hor_pos_C的初始位置上,记这三条直线为hor_A,hor_B,hor_C,如图1所示。A,B,C三条线从“初始行号”位置开始向右侧进行编排,A,B,C中的每条线,每当穿越hor_A,hor_B,hor_C中的任意一条水平直线时,A,B,C的横向计数便加1,因为每穿越一次除它本身之外的线时,在它左边就多一条线。
先以C线为例进行说明。C线从hor_pos_C点开始,每向右侧移动一次,行号加1。当C线的行号达到第一个除hor_C以外的水平直线hor_B的时候,该数据在Num_Pos上的存储位置加1,达到hor_A的时候,Num_Pos上的存储位置再加1。设行重为hor_weight,在该循环子矩阵左侧有i个循环子矩阵,在当前C线上“1”之上有j行,则在C线到达hor_B之前,C线上的值在Num_Pos上的存储位置为Num_Pos[j×hor_weight+i×K];在C线到达hor_B之后,到达hor_A之前,C线上的值在Num_Pos上的存储位置为Num_Pos[j×hor_weight+i×K+1];在C线到达hor_A之后,C线上的值在Num_Pos上的存储位置为Num_Pos[j×hor_weight+i×K+2],以此类推。
将垂直运算过程实现的过程如下:
按列将校验矩阵H中每列循环子矩阵的初始行号输入至ini_hor_Pos中。
建立二维数组two_dem_hor_Pos,其中一个维度用Sub_Matrix_ver_Num来确定,按行分组存放ini_hor_Pos中的值。
建立二维数组two_dem_hor_Pos_copy,完全复制数组two_dem_hor_Pos的信息。
建立二维数组two_dem_hor_end_Pos,并输入初始值。
建立二维数组two_dem_hor_Pos_add,并且初始值置零。
建立一维数组ver_temp。
用two_dem_hor_Pos中的值求出每一列“1”对应的在Num_Pos中的值,并把每一列对应的值放入ver_temp中进行处理,处理的结果按原路径返回到Num_Pos中,同时two_dem_hor_Pos中的值加1,如果递加过程中数值超过了two_dem_hor_end_Pos的对应数值,则该数值减去sub_N,共循环sub_N次。
处理过程中,当two_dem_hor_Pos中的值达到two_dem_hor_Pos_copy中对应位置的值得时候,two_dem hor_Pos_add的值加1。
其中,计算每列数据在Num_Pos中的位置的计算公式是:
Num_Pos=hor_weight×two_dem_hor_Pos
+K×Sub_Matrix_ver_Num
+two_dem_hor_Pos_add
至此,初始化,水平运算和垂直运算过程中的数据分配方法已经阐述完毕,用这种方法实现的软件编写流程图如图3所示。
Claims (1)
1.一种应用于卫星通信的通用软件译码数据分配方法,其特征在于包括步骤为:对地面接收设备解调后的数据进行LDPC码的初始化、水平运算和垂直运算,得到对LDPC码译码处理后的数据;其中:
所述初始化过程是按照LDPC码中校验矩阵H行的顺序把“1”的位置上的输入数据直接存储到一个足够长的一维数组Num_Pos中,实现为:设每个LDPC码中校验矩阵H的循环子矩阵中“1”的组数为K,则一维数组Num_Pos的前K个数据是校验矩阵H的第一个循环子矩阵中的第一行中“1”对应位置上的数据,一维数组Num_Pos中接下来的K个数据是校验矩阵H的第二个循环子矩阵中的第一行中“1”对应位置上的数据,以此类推,在校验矩阵H的每个子矩阵中,每组“1”从初始的列位置开始向右存储,每当有一组“1”达到该子矩阵最右侧列,该组“1”下一行的数据一定出现在该循环子矩阵的最左侧,下一行的数据存储需要首先存储这组“1”的数据,然后再将接下来的剩余数据按照原来的顺序进行存储,即对存储“1”的先后顺序进行了循环右移处理,以此类推;
所述水平运算是对校验矩阵H中所有“1”位置上的数据按行重分组,对每组数据进行比较绝对值大小,找出最小值和次小值,计算每一位的符号属性,更新H矩阵每一行的数据;
所述垂直运算过程是在确定校验矩阵H中某个循环子矩阵中某个数据所在的行数的基础上,确定所述数据在一维数组Num_Pos中的K个数据的范围内中的具体位置,实现为:每个循环子矩阵中每组“1”的初始行号由初始的列号计算得出,从行的角度看,起始时刻每个循环子矩阵中每组“1”的初始位置在该循环子矩阵中该行的K个数据中的第一位,随着每组“1”向右下角的移动,每当循环子矩阵中某组“1”的行号达到同循环子矩阵中另外一组“1”的初始行号的时候,该组“1”所在K个数据中的位置加1,最终该组“1”的行号结束于它的初始行号上方一行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110372013.8A CN102523070B (zh) | 2011-11-22 | 2011-11-22 | 一种应用于卫星通信的通用软件译码数据分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110372013.8A CN102523070B (zh) | 2011-11-22 | 2011-11-22 | 一种应用于卫星通信的通用软件译码数据分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102523070A true CN102523070A (zh) | 2012-06-27 |
CN102523070B CN102523070B (zh) | 2014-10-08 |
Family
ID=46293879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110372013.8A Active CN102523070B (zh) | 2011-11-22 | 2011-11-22 | 一种应用于卫星通信的通用软件译码数据分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102523070B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103873199A (zh) * | 2014-03-20 | 2014-06-18 | 中国资源卫星应用中心 | 一种高效容错的数据采集方法 |
CN104124980A (zh) * | 2014-07-16 | 2014-10-29 | 上海交通大学 | 适合连续变量量子密钥分发的高速秘密协商方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110593A (zh) * | 2007-06-01 | 2008-01-23 | 清华大学 | Qc-ldpc译码器水平运算单元快速流水线级联结构 |
CN101217284A (zh) * | 2008-01-11 | 2008-07-09 | 北京大学 | 一种ldpc级联码的编码方法、译码方法及其译码器 |
CN101594152A (zh) * | 2009-07-03 | 2009-12-02 | 清华大学 | 实现水平运算和垂直运算同时运行的ldpc码译码方法 |
CN101826878A (zh) * | 2010-04-26 | 2010-09-08 | 杨磊 | Qc-ldpc码构建方法 |
CN102075197A (zh) * | 2010-12-29 | 2011-05-25 | 北京遥测技术研究所 | 一种ldpc译码方法 |
-
2011
- 2011-11-22 CN CN201110372013.8A patent/CN102523070B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110593A (zh) * | 2007-06-01 | 2008-01-23 | 清华大学 | Qc-ldpc译码器水平运算单元快速流水线级联结构 |
CN101217284A (zh) * | 2008-01-11 | 2008-07-09 | 北京大学 | 一种ldpc级联码的编码方法、译码方法及其译码器 |
CN101594152A (zh) * | 2009-07-03 | 2009-12-02 | 清华大学 | 实现水平运算和垂直运算同时运行的ldpc码译码方法 |
CN101826878A (zh) * | 2010-04-26 | 2010-09-08 | 杨磊 | Qc-ldpc码构建方法 |
CN102075197A (zh) * | 2010-12-29 | 2011-05-25 | 北京遥测技术研究所 | 一种ldpc译码方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103873199A (zh) * | 2014-03-20 | 2014-06-18 | 中国资源卫星应用中心 | 一种高效容错的数据采集方法 |
CN103873199B (zh) * | 2014-03-20 | 2017-04-05 | 中国资源卫星应用中心 | 一种高效容错的数据采集方法 |
CN104124980A (zh) * | 2014-07-16 | 2014-10-29 | 上海交通大学 | 适合连续变量量子密钥分发的高速秘密协商方法 |
CN104124980B (zh) * | 2014-07-16 | 2018-04-20 | 上海交通大学 | 适合连续变量量子密钥分发的高速秘密协商方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102523070B (zh) | 2014-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ye et al. | Communication-computation efficient gradient coding | |
Wild et al. | Global convergence of radial basis function trust-region algorithms for derivative-free optimization | |
CN107852176A (zh) | Ldpc码编码器和译码器 | |
CN103984527A (zh) | 优化稀疏矩阵向量乘提升不可压缩管流模拟效率的方法 | |
CN102356554B (zh) | Turbo码数据交织处理方法和用于交织Turbo码数据的交织器 | |
CN103345580A (zh) | 基于格子Boltzmann方法的并行CFD方法 | |
CN105322973A (zh) | 一种rs码编码器及编码方法 | |
CN102523070B (zh) | 一种应用于卫星通信的通用软件译码数据分配方法 | |
CN102075197A (zh) | 一种ldpc译码方法 | |
CN103023515A (zh) | 基于块列循环的cmmb中ldpc编码器和编码方法 | |
CN111507430B (zh) | 基于矩阵乘法的特征编码方法、装置、设备及介质 | |
CN103259544A (zh) | 共享存储机制的dtmb中准循环ldpc串行编码器 | |
CN107612555A (zh) | 一种基于二分法的改进稀疏度自适应匹配追踪算法 | |
CN109635940B (zh) | 一种基于卷积神经网络的图像处理方法及图像处理装置 | |
CN102200962A (zh) | 一种基于迭代空间条块的并行有限差分模版方法 | |
CN104897176A (zh) | 一种多核并行摄影测量区域网平差方法 | |
CN104484404A (zh) | 一种改善分布式文件系统中地理栅格数据文件处理方法 | |
CN103236856A (zh) | 基于循环左移的dtmb中准循环ldpc串行编码器 | |
CN105045565A (zh) | 适合分布式并行计算的PBiCOR方法 | |
Di et al. | On accurately resolving detonation dynamics by adaptive finite volume method on unstructured grids | |
CN108595871B (zh) | 基于均值差分演化的液压支架优化设计方法 | |
CN110990188A (zh) | 一种基于Hadamard矩阵的部分重复码的构造方法 | |
Yang et al. | Locality of some optimal ternary linear codes | |
Shkhanukov-Lafishev | Locally one-dimensional scheme for a loaded heat equation with Robin boundary conditions | |
CN105846873B (zh) | 基于超前迭代的三角脉动阵列结构qr分解装置及分解方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |