首页> 中国专利> 一种应用于卫星通信的通用软件译码数据分配方法

一种应用于卫星通信的通用软件译码数据分配方法

摘要

一种应用于卫星通信的通用软件译码数据分配方法,包括步骤为:对地面接收设备解调后的数据进行LDPC码的初始化、水平运算和垂直运算,得到对LDPC码译码处理后的数据。本发明效率高,达到通用化的目的,以满足目前航天领域大任务量的需要。

著录项

  • 公开/公告号CN102523070A

    专利类型发明专利

  • 公开/公告日2012-06-27

    原文格式PDF

  • 申请/专利权人 航天恒星科技有限公司;

    申请/专利号CN201110372013.8

  • 发明设计人 王健;张拯宁;郑晓天;

    申请日2011-11-22

  • 分类号H04L1/00;

  • 代理机构中国航天科技专利中心;

  • 代理人安丽

  • 地址 100086 北京市海淀区知春路82号院

  • 入库时间 2023-12-18 05:47:17

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-10-08

    授权

    授权

  • 2012-09-05

    实质审查的生效 IPC(主分类):H04L1/00 申请日:20111122

    实质审查的生效

  • 2012-06-27

    公开

    公开

说明书

技术领域

本发明涉及一种应用于卫星通信的通用软件译码数据分配方法,属于卫 星通信技术领域。

背景技术

随着目前空间探测活动的日益频繁,近地和深空探测产生数据量的突飞 猛进,人们急需要一种能够跨越遥远宇宙空间,进行高速、准确数据传输的 编译码技术。因为传输距离遥远,信道环境复杂,加之很多工程具有大数据 量实时传输的要求,因此对这种编译码技术提出了高增益的要求。

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所示。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号