规则QC-LDPC码的构造方法及电子设备
相关申请的交叉引用
本申请基于申请号为201910744688.7、申请日为2019年8月13日的中国专利申请提出,并要求该中国专利申请的优先权,该中国专利申请的全部内容在此以引入方式并入本申请。
技术领域
本申请实施例涉及通信领域,特别涉及规则QC-LDPC码的构造方法及电子设备。
背景技术
准循环低密度奇偶校验(Quasi-Cyclic Low-Density Parity-Check,简称QC-LDPC)码是LDPC码中最具有代表性且被广泛研究及应用的一类码,它是QC码和LDPC码的结合,同时具有LDPC码优异的纠错性能和QC码的结构化特性。
在众多QC-LDPC码类中,最常见的一种类型是基于“循环置换矩阵(Circulant Permutation Matrice,CPM)”形式的QC-LDPC码,其校验矩阵H形式如图1所示,其中每个元素I(s
i,j)表示一个单位矩阵或单位矩阵的循环移位矩阵,或全零矩阵;将元素I(s
i,j)中的循环移位值s
i,j提取出来构成循环移位值矩阵H
s,由此可将大尺寸的校验矩阵H的设计转化为较小尺寸的循环移位值矩阵H
s的设计,矩阵H
s的形式如图2所示。校验矩阵中不存在全零子矩阵的QC-LDPC码又称为(J,K)规则QC-LDPC码,其中J和K分别指校验矩阵H的列重和行重,即循环移位值矩阵H
s的行数和列数。将QC-LDPC码的校验矩阵对应的Tanner图中最短环的长度定义为围长(girth),为了获得良好的译码性能,要求构造的校验矩阵的围长尽量大。
发明内容
本申请实施例的目的在于提供一种规则QC-LDPC码的构造方法及电子设备。
本申请的实施例提供了一种规则QC-LDPC码的构造方法,包括:将规则QC-LDPC码的循环移位值矩阵中第一行、第一列的各元素初始化为0;获取满足预设条件的K个数值;其中,K的值等于所述循环移位值矩阵的列数;所述预设条件包括,其中一个所述数值为0, 且任意两个所述数值之差组成的集合中不存在重复的数;将所述K个数值分别赋值给所述循环移位值矩阵中第二行的K个元素;其中,所述第二行的第一个元素被赋值为0;基于所述规则QC-LDPC码的循环置换矩阵的维数信息为各待赋值元素搜索满足所预设的述围长条件的值,以得到所述循环移位值矩阵;其中,各所述待赋值元素是指所述循环移位值矩阵中除第一行、第二行、第一列以外的各元素;基于所述循环移位值矩阵构造所述规则QC-LDPC码的校验矩阵。
本申请的实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行所述的规则QC-LDPC码的构造方法。
本申请的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述的规则QC-LDPC码的构造方法。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是基于“循环置换矩阵”的QC-LDPC码的校验矩阵表达式;
图2是基于“循环置换矩阵”的QC-LDPC码的循环移位值矩阵表达式;
图3是根据本申请第一实施例中的规则QC-LDPC码的构造方法的流程图;
图4是根据本申请第一实施例中步骤104的具体流程图;
图5是根据本申请第二实施例中的规则QC-LDPC码的构造方法的流程图;
图6是根据本申请第三实施例中的规则QC-LDPC码的构造方法的流程图;
图7是根据本申请第四实施例中的电子设备的方框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下 各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
本申请的第一实施例涉及一种规则QC-LDPC码的构造方法。具体流程如图3所示。
步骤101,将规则QC-LDPC码的循环移位值矩阵中第一行、第一列的各元素初始化为0。
步骤102,获取满足预设条件的K个数值;其中,K的值等于循环移位值矩阵的列数;预设条件包括,其中一个数值为0,且任意两个数值之差组成的集合中不存在重复的数。
步骤103,将K个数值分别赋值给循环移位值矩阵中第二行的K个元素;其中,第二行的第一个元素被赋值为0。
步骤104,基于规则QC-LDPC码的循环置换矩阵的维数信息为各待赋值元素搜索满足围长条件的值,以得到循环移位值矩阵;其中,各待赋值元素是指循环移位值矩阵中除第一行、第二行、第一列以外的各元素。
步骤105,基于循环移位值矩阵构造规则QC-LDPC码的校验矩阵。
下面对本实施例的规则QC-LDPC码方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
规则QC-LDPC码的构造即是构造出规则QC-LDPC码的校验矩阵;通常的,会基于给定的行数、列数以及围长,来确定循环移位值矩阵中各元素的值,从而根据循环移位值矩阵来构造出校验矩阵。本实施例及以下各实施例中,以字母J、K、G分别表示行数、列数、围长;即,本实施例提供一种围长G的(J,K)规则QC-LDPC码的构造方法。
其中,本实施例对预设的行数J、列数K、围长G的具体数值不作任何限制。在一个例子中,设定的围长可以是8、或10、或12;即本实施例可以用于搜索大围长的(J,K)规则QC-LDPC码。
在步骤101中,根据给定的行数J和列数K,创建出行数为J、列数为K的循环移位值矩阵H
s,并对该循环移位值矩阵H
s中各元素进行初始化。在初始化中,将循环移位值矩阵H
s中第一行、第一列的各元素全部赋值为0,其余元素可以被赋值为***默认的待赋值含义的值,例如,如果***中默认为-1表示待赋值,那么可以将该些其余元素赋值为-1。
在步骤102和步骤103中,获取满足预设条件的K个数值,这K个数值分别对应于循环移位值矩阵H
s第二行的K个元素,这K个数值需要满足预设条件,即需要满足:其中一个数值是0,且任意两个数值之差组成的集合中不存在重复的数。
例如,K=4,这K个数值分别为a1,a2,a3,a4,其中,将a1与a2之差记作b12、a1 与a3之差记作b13、a1与a4之差记作b14、a2与a3之差记作b23、a2与a4之差记作b24、a3与a4之差记作b34,那么集合{b12、b13、b14、b23、b24、b34}中不存在重复的数,即b12、b13、b14、b23、b24、b34各不相等。并且,a1,a2,a3,a4中其中一个为0;在给第二行各元素赋值时,将0赋值给第二行第一个元素,其余三个赋值给第二行的另外三个元素。
其中,可以将0排在K个数值中的第一位,或者,将K个数值按照从小到大的顺序依次排列;此时在对第二行的各元素赋值时,可以按照K个数值的排列顺序依次给第二行的各元素赋值。
在一个例子中,如图4所示,步骤104包含如下子步骤:
子步骤1041,根据维数确定多个备选值。
子步骤1042,根据多个备选值对每个待赋值元素进行围长检测,判断在维数下是否存在使得每个待赋值元素满足围长条件的备选值;若是,进入子步骤1043;若否,进入子步骤1044;
子步骤1043,得到各元素均被赋值后的循环移位值矩阵。
子步骤1044,利用步长更新维数;并重复步骤104。
本实施例中,维数信息包括维数的初始值和步长;其中,维数的初始值是大于1的整数,本实施例中,以字母P、Step分别表示维数和步长。在首次执行步骤104时,使用该维数的初始值确定多个备选值。
在子步骤1041中,根据维数P确定的多个备选值,多个备选值依次排列且分别为:1,2,……P-1;即,根据维数P可以确定一个备选值集合PM,该备选值集合中包括由小到大排列的多个备选值,可以表达为PM={1,2,3,...,p-1}。
在子步骤1042中,根据多个备选值对各待赋值元素依次进行围长检测中,可以按照各待赋值元素从左到右,从上到下的顺序对其进行围长检测;即,检测顺序为,第三行第2个元素、第三行第3个元素、……、第三行第K个元素;第四行第2个元素、第四行第3个元素、……、第四行第K个元素;……;第J行第2个元素、第J行第3个元素、……、第J行第K个元素。
其中,子步骤1042可以有如下具体实现方式。
步骤a,对每个待赋值元素进行围长检测中,从备选值集合PM中依次取出各备选值;且对于每个备选值,只有在判断出该备选值在循环移位值矩阵中不存在时,才会将该备选值赋值给该待赋值元素并进行围长检测。即,对于每个备选值,判断该备选值在该循环移位值矩阵中是否存在;若该备选值在该循环移位值矩阵中不存在,则将备选值赋值给该待赋值元素并进行围长检测;若该备选值在该循环移位值矩阵中已存在,则不会将该备选值赋值给该待赋值元素进行围长检测。
其中,该备选值在该循环移位值矩阵中是否存在,是指,该备选值是否与该循环移位值矩阵中任一元素的值相同,如果该备选值与其中一个元素的值相同,则表示该备选值在该循环移位值矩阵中已存在;如果该备选值与任何一个元素的值都不相同,则表示该备选值在该循环移位值矩阵中不存在。
如果该备选值在该循环移位值矩阵中已存在,那么使用该备选值来对该待赋值元素进行围长检测必定不能满足围长条件;因此,这个例子中,通过判断该备选值是否在该循环移位值矩阵中已存在,可以先剔除必然会导致检测失败的备选值,从而可以减少搜索次数,进一步提高搜索速度。需要说明的是,在其他例子中,子步骤1042中也可以将多个备选值依次赋予该待赋值元素并进行围长检测。
本实施例中的围长检测,是指,该待赋值元素被赋予该备选值时,判断此时校验矩阵的围长是否大于或等于预设的围长G;如果是,则表示该备选值可以使得该待赋值元素满足围长条件,即该备选值是该待赋值元素的一个可选值;如果不是(即此时校验矩阵中存在比围长G更小的环),那么表示该备选值不是该待赋值元素的可选值。其中,可以对小于G的各种长度的环都进行搜索,例如G为10,则对长度为4、6、8的各环都进行搜索,判断是否存在;这样可以确保不会出现比G小的环,即保证围长大于或等于G。
其中,多个备选值中可能存在若干个备选值可以使得该待赋值元素满足围长条件,可以从使得该待赋值元素满足围长条件的若干个备选值中任选一个赋值给待赋值元素。本实施例中,预先为该待赋值元素创建一个可选值集合Cand_S
i,j,其中,S
i,j表示该待赋值元素,2≦i≦J-1,1≦j≦K-1,i、j均为整数;将满足围长条件的备选值加入该待赋值元素对应的可选值集合Cand_S
i,j;直至各备选值对该待赋值元素的围长检测都完成。
然后,进入赋值步骤,赋值步骤包括如下子步骤b和步骤c。
步骤b,判断Cand_S
i,j是否为空集;如果Cand_S
i,j不是空集,那么从Cand_S
i,j中任选一个可选值赋值给该待赋值元素S
i,j,然后,根据上述多个备选值对待赋值元素S
i,j的下一个待赋值元素进行围长检测,直至检测完所有待赋值元素。如果所有的待赋值元素均被赋值,那么判定在该维数下存在使得每个待赋值元素满足围长条件的备选值,进入子步骤1043。
步骤c,如果Cand_S
i,j是空集,表示S
i,j的上一个元素当前的赋值影响了S
i,j可选值的选择,此时,要回到S
i,j的上一个元素;将S
i,j的上一个元素的当前值从S
i,j的上一个元素的可选值集合中剔除,将S
i,j的上一个元素重新作为待赋值元素,并重复赋值步骤,即返回步骤b。如果S
i,j是第三行第2个元素,那么S
i,j不存在上一个元素,此时判定在该维数下不存在使得每个待赋值元素满足围长条件的备选值,进入子步骤1044,将该维数加上该步长作为新的维数,以更新该维数。在维数被更新后,返回步骤104。
即,如果当前的维数下无法不存在使得每个待赋值元素满足围长条件的备选值,那么在更新维数后并重复步骤104,以在更新后的维数下搜索。只要还没有搜索到使得每个待赋值元素满足围长条件的备选值,那么步骤104就会被不断重复执行,直到被搜索到各待赋值元素的满足围长条件的值为止;从而得到各待赋值元素均被赋值后的该规则QC-LDPC码的循环移位值矩阵;同时,可以得到循环置换矩阵的维数,即在该维数下搜索到的该循环移位值矩阵。
在步骤105中,根据搜索到的循环移位值矩阵,并结合循环置换矩阵的维数,即搜索到该循环移位值矩所基于的循环置换矩阵的维数,构造出围长G的(J,K)规则QC-LDPC码的校验矩阵,即构造出围长G的(J,K)规则QC-LDPC码。
本实施例中,当获取的K个数值满足该预设条件时,且用该K个数值为第二行各元素赋值后,可以保证第一行和第二行不会产生长度为4和8的环;其中,长度为6的环只有到第三行时才可能出现,所以在给第二行各元素赋值的时候可以不用考虑长度为6的环。在对各待赋值元素的搜索中,可以避开使得校验矩阵出现长度小于围长G的环的取值(即如果围长G大于6的话,是可以避免出现长度为6的环的)。
相对于现有技术而言,本实施例中先将规则QC-LDPC码的循环移位值矩阵中第一行、第一列的各元素初始化为0;再获取满足预设条件的多个数值并将多个数值分别赋值给循环移位值矩阵中第二行的各元素,预设条件包括,其中一个数值为0,且任意两个数值之差组成的集合中不存在重复的数;这种情况下可以使得矩阵的前两行必定不会出现某些长度的环,以此来先确定第二行各元素的值。然后,对基于循环置换矩阵的维数信息搜索各待赋值元素的值,其中各待赋值元素是指循环移位值矩阵中除第一行、第二行、第一列以外的各元素。即,需要通过搜索来赋值的待赋值元素是从第三行第二个元素开始的而非从第二行开始,相对于现有技术而言,减少了需要搜索进行赋值的待赋值元素数量,从而降低了循环移位值矩阵的搜索时间,提高了规则QC-LDPC码的构造速度。尤其在高码率大围长的情况,可以极大地降低搜索时间,从而极大地提高规则QC-LDPC码的构造速度。
尤其在高码率大围长的情况,当列重固定时,随着码率的增大,校验矩阵的尺寸也会相应增大,因此需要搜索更多满足围长条件的循环移位值;而当码率固定时,随着围长的增大,需要满足的围长条件也会变得越来越苛刻,每个循环移位值的搜索会更加复杂。因此,针对高码率大围长的情况,本申请可以极大地降低搜索时间。
以下是依据本实施例的方法构造围长G的(J,K)规则QC-LDPC码的实际例子。需要说明的是,以下实际例子中的各步骤划分只是换了一种方式进行清楚描述,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,与图3、图4中的各步骤包括相同 的逻辑关系。
例子一,构造围长为8的(3,6)规则QC-LDPC码。
步骤1、根据输入参数得知J为3,K为6,围长为8,创建3*6的循环移位值矩阵H
s,并对其进行初始化后,初始化后的H
s如下所示。
步骤2、根据列数K为6,选取(31,6,1)差集中的多个数值{1,5,11,24,25,27},将这6个值减去最小值“1”,将得到的{0,4,10,23,24,26}作为循环移位值矩阵第二行的元素,此时,H
s如下所示。
需要说明的是,从(31,6,1)差集中选取的6个数值是不唯一的,只要从(31,6,1)差集中选取任意6个即可;上述仅是一个例子。
步骤3、循环置换矩阵的维数P的初始值为27,且步长Step为1。对循环移位值矩阵H
s第三行元素进行遍历搜索,具体如下。
步骤3.1、根据循环移位值矩阵H
s中的第二行元素,将已采用的值0、4、10、23、24、26的已用标记Choose_0、Choose_4、Choose_10、Choose_23、Choose_24、Choose_26均设置为true,未采用的设置为false,设定搜索位置i初始值为1,搜索返回标记Return_i为false。
步骤3.2、从第三行第二个元素S
2,i=1开始,从左到右逐个确定每个元素满足围长条件的可选值,并将这些值放入可选值集合Cand_S
2,i,直到i等于6时停止。具体工作过程包括:
步骤3.2.1、从i=1开始,首先判断搜索返回标记Return_i是否为true,如果其为false,表示可以对元素S
2,i进行可选值的搜索,跳转到步骤3.2.2;如果其为true,表示在该元素找不到满足围长条件的可选值,此时需要返回到上一个元素S
2,i-1重新赋值进行搜索,跳转到步骤3.2.4。
步骤3.2.2、维数P的初始值是27,因此根据维数确定出集合{1,2,3,...,26};将集合{1,2,3,...,26}中的值逐个赋值给j,如果j已经在矩阵H
s中出现过,即Choose_j为true,则跳过该值,直接进行下一个值的检测。如果Choose_j为false,将j赋值给S
2,i,并进行围长检测,若此时循环移位值矩阵中存在的围长长度不小于规定的围长大小8,即Judge_cycle 为true,则表示j是一个可选值,将该值放入可选值集合Cand_S
2,i中,然后进行下一个值的检测;若矩阵中出现比8更小的环,表示该值j不可选,直接进行下一个值的检测。遍历完集合{1,2,3,...,26}中的所有元素之后,进入到步骤3.2.3。
步骤3.2.3、判断当前的可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i)不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行下一个元素S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,表示上一个元素S
2,i-1现有的赋值影响了S
2,i可选值的选择,规定搜索返回标记Return_i为true,i自减1,跳转到步骤3.2.1。
步骤3.2.4、将S
2,i的已用值标志Choose_S
2,i设为false,然后判断可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i)不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,判断此时i的值是否为1:如果是,表示当前p的取值下找不到满足条件的循环移位值矩阵,将当前p的取值加上步长Step后重新赋值给p,然后跳转到步骤3.1重新开始搜索;如果不是,表明上上一个元素S
2,i-2的取值影响了S
2,i-1和S
2,i的取值,设定搜索返回标记Return_i为false,Return_(i-1)为true,i自减1,然后跳转到步骤3.2.1。
步骤3.3、当循环移位值矩阵H
s中第三行所有元素的值均确定时,表示已经搜索到合适的循环移位值矩阵,此时直接跳出遍历搜索。
步骤4、将遍历搜索得到的循环移位值矩阵H
s、当前p的取值结果输出出来,循环移位值矩阵H
s形式如下。
P的取值为27。
步骤5、根据循环移位值矩阵H
s和P的取值得到校验矩阵。
例子二,构造围长为10的(3,8)规则QC-LDPC码。
步骤1、根据输入参数得知J为3,K为8,围长为10,创建3*8的循环移位值矩阵H
s,并对其进行初始化后,初始化后的H
s如下所示。
步骤2、根据列数K为8,选取(57,8,1)差集中的多个数值{1,6,7,9,19,38,42,49},将这8个值减去最小值“1”,将得到的{0,5,6,8,18,37,41,48}作为循环移位值矩阵第二行的元素,此时,H
s如下所示。
需要说明的是,从(57,8,1)差集中选取的8个数值是不唯一的,只要从(57,8,1)差集中选取任意8个即可;上述仅是一个例子。
步骤3、循环置换矩阵的维数P的初始值为49,且步长Step为1。对循环移位值矩阵H
s第三行元素进行遍历搜索,具体如下。
步骤3.1、根据循环移位值矩阵H
s中的第二行元素,将已采用的值0、5、6、8、18、37、41、48的已用标记Choose_0、Choose_5、Choose_6、Choose_8、Choose_18、Choose_37、Choose_41、Choose_48均设置为true,未采用的设置为false,设定搜索位置i初始值为1,搜索返回标记Return_i为false。
步骤3.2、从第三行第二个元素S
2,i=1开始,从左到右逐个确定每个元素满足围长条件的可选值,并将这些值放入可选值集合Cand_S
2,i,直到i等于8时停止。具体工作过程包括:
步骤3.2.1、从i=1开始,首先判断搜索返回标记Return_i是否为true,如果其为false,表示可以对元素S
2,i进行可选值的搜索,跳转到步骤3.2.2;如果其为true,表示在该元素找不到满足围长条件的可选值,此时需要返回到上一个元素S
2,i-1重新赋值进行搜索,跳转到步骤3.2.4。
步骤3.2.2、维数P的初始值是49,因此根据维数确定出集合{1,2,3,...,48},将集合{1,2,3,...,48}中的元素逐个赋值给j,如果j已经在矩阵H
s中出现过,即Choose_j为true,则跳过该值,直接进行下一个值的检测。如果Choose_j为false,将j赋值给S
2,i,并进行围长检测,若此时循环移位值矩阵中存在的围长长度不小于规定的围长大小10,即Judge_cycle为true,则表示j是一个可选值,将该值放入可选值集合Cand_S
2,i中,然后进行下一个值的检测;若矩阵中出现比10更小的环,表示该值j不可选,直接进行下一个值的检测。遍历完集合{1,2,3,...,48}中的所有元素之后,进入到步骤3.2.3。
步骤3.2.3、判断当前的可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i) 不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行下一个元素S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,表示上一个元素S
2,i-1现有的赋值影响了S
2,i可选值的选择,规定搜索返回标记Return_i为true,i自减1,跳转到步骤3.2.1。
步骤3.2.4、将S
2,i的已用值标志Choose_S
2,i设为false,然后判断可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i)不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,判断此时i的值是否为1:如果是,表示当前p的取值下找不到满足条件的循环移位值矩阵,将当前p的取值加上步长step后重新赋值给p,然后跳转到步骤3.1重新开始搜索;如果不是,表明上上一个元素S
2,i-2的取值影响了S
2,i-1和S
2,i的取值,设定搜索返回标记Return_i为false,Return_(i-1)为true,i自减1,然后跳转到步骤3.2.1。
步骤3.3、当循环移位值矩阵H
s中第三行所有元素的值均确定时,表示已经搜索到合适的循环移位值矩阵,此时直接跳出遍历搜索。
步骤4、将遍历搜索得到的循环移位值矩阵H
s、当前p的取值结果输出出来,循环移位值矩阵H
s形式如下所述。
P的取值为299。
步骤5、根据循环移位值矩阵H
s和P的取值得到校验矩阵。
例子三,构造围长为12的(3,12)规则QC-LDPC码。
步骤1、根据输入参数得知J为3,K为12,围长为12,创建3*12的循环移位值矩阵H
s,并对其进行初始化后,初始化后的H
s如下所示。
步骤2、根据列数K为12,选取(133,12,1)差集中的多个数值{1,11,16,40,41,43,52,60,74,78,121,128},将这12个值减去最小值“1”,将得到的{0,10,15,39,40,42,51,59,73,77,120,127}作为循环移位值矩阵第二行的元素,此时,H
s如下所 示。
需要说明的是,从(133,12,1)差集中选取的12个数值是不唯一的,只要从(133,12,1)差集中选取任意12个即可;上述仅是一个例子。
步骤3、循环置换矩阵的维数P的初始值为128,且步长Step为1。对循环移位值矩阵H
s第三行元素进行遍历搜索,具体如下。
步骤3.1、根据循环移位值矩阵H
s中的第二行元素,将已采用的值0、10、15、39、40、42、51、59、73、77、120、127的已用标记Choose_0、Choose_10、Choose_15、Choose_39、Choose_40、Choose_42、Choose_51、Choose_59、Choose_73、Choose_77、Choose_120、Choose_127均设置为true,未采用的设置为false,设定搜索位置i初始值为1,搜索返回标记Return_i为false。
步骤3.2、从第三行第二个元素S
2,i=1开始,从左到右逐个确定每个元素满足围长条件的可选值,并将这些值放入可选值集合Cand_S
2,i,直到i等于12时停止。具体工作过程包括:
步骤3.2.1、从i=1开始,首先判断搜索返回标记Return_i是否为true,如果其为false,表示可以对元素S
2,i进行可选值的搜索,跳转到步骤3.2.2;如果其为true,表示在该元素找不到满足围长条件的可选值,此时需要返回到上一个元素S
2,i-1重新赋值进行搜索,跳转到步骤3.2.4。
步骤3.2.2、维数P的初始值是128,因此根据维数确定出集合{1,2,3,...,127},将集合{1,2,3,...,127}中的元素逐个赋值给j,如果j已经在矩阵H
s中出现过,即Choose_j为true,则跳过该值,直接进行下一个值的检测。如果Choose_j为false,将j赋值给S
2,i,并进行围长检测,若此时循环移位值矩阵中存在的围长长度不小于规定的围长大小12,即Judge_cycle为true,则表示j是一个可选值,将该值放入可选值集合Cand_S
2,i中,然后进行下一个值的检测;若矩阵中出现比12更小的环,表示该值j不可选,直接进行下一个值的检测。遍历完集合{1,2,3,...,127}中的所有元素之后,进入到步骤3.2.3。
步骤3.2.3、判断当前的可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i)不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行下一个位置S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,表示上一个元素S
2,i-1现有的赋值影响了S
2,i可选值的选择,规定搜索返回标记Return_i为true,i自减1,跳转到步骤3.2.1。
步骤3.2.4、将S
2,i的已用值标志Choose_S
2,i设为false,然后判断可选值集合Cand_S
2,i是否为空集,如果不是,即size(Cand_S
2,i)不等于0,则从集合Cand_S
2,i中随机选取一个数赋值给S
2,i,将已用值标志Choose_S
2,i设为true,i自加1,然后跳转到步骤3.2.1进行S
2,i+1的可选值搜索。如果Cand_S
2,i为空集,即size(Cand_S
2,i)=0,判断此时i的值是否为1:如果是,表示当前p的取值下找不到满足条件的循环移位值矩阵,将当前p的取值加上步长step后重新赋值给p,然后跳转到步骤3.1重新开始搜索;如果不是,表明上上一个元素S
2,i-2的取值影响了S
2,i-1和S
2,i的取值,设定搜索返回标记Return_i为false,Return_(i-1)为true,i自减1,然后跳转到步骤3.2.1。
步骤3.3、当矩阵H
s中第三行所有元素的值均确定时,表示已经搜索到合适的循环移位值矩阵,此时直接跳出遍历搜索。
步骤4、将遍历搜索得到的循环移位值矩阵H
s、当前p的取值结果输出出来,矩阵H
s形式如下所述。
P的取值为5220。
步骤5、根据循环移位值矩阵H
s和P的取值得到校验矩阵。
本申请的第二实施例涉及一种规则QC-LDPC码的构造方法。第二实施例与第一实施例大致相同,主要区别之处在于:在本申请第二实施例中,提供了快速找到满足条件的数值的一种具体方法。
如图5所示为第二实施例中的规则QC-LDPC码的构造方法的流程图;
步骤201,将规则QC-LDPC码的循环移位值矩阵中第一行、第一列的各元素初始化为0。步骤201与步骤101大致相同,此处不再赘述。
步骤202,获取满足预设条件的K个数值;其中,K的值等于循环移位值矩阵的列数;预设条件包括,其中一个数值为0,且任意两个数值之差组成的集合中不存在重复的数。
步骤202包括如下子步骤。
子步骤2021,根据列数确定差集,并从差集中选择K个差集元素。
具体的,列数为K,故得到(v,k,λ)差集,其中,根据列数K得到的差集中包含多个元素,v是这个差集中的最大元素。本实施例中,令k=K,λ=1。其中,k=K,表示从该根据列数K得到的差集中任取K个差集元素;λ=1,表示取出的K个差集元素中任意两个差集元素之差只出现一次;即,K个差集元素满足以下条件:任意两个差集元素之差组成的集合中 不存在重复的数。例如,列数K为8,选取(57,8,1)差分集中的元素{1,6,7,9,19,38,42,49},这里的v=57。
子步骤2022,确定K个差集元素中的最小值,并将K个差集元素分别减去最小值以得到K个数值。
具体的,为了保证第二行第一个元素为0,故要将K个差集元素分别减去K个差集元素中的最小值,从而得到K个数值,且其中一个数值为0。其中,K个数值是由K个差集元素减去同一个值得到的,因此满足条件:任意两个数值之差组成的集合中不存在重复的数。
一般的,从差集中取出K个差集元素时可以取出连续排列的K个差集元素;此时,取出的K个差集元素是按照从小到大的顺序依次排列的;因此,K个数值也是按照从小到大的顺序依次排列且第一个数值为0;此时在对第二行的各元素赋值时,可以按照K个数值的排列顺序依次给第二行的各元素赋值。
步骤203,将K个数值分别赋值给循环移位值矩阵中第二行的K个元素;其中,第二行的第一个元素被赋值为0。步骤203与步骤103大致相同,此处不再赘述。
步骤204,基于规则QC-LDPC码的循环置换矩阵的维数信息为各待赋值元素搜索满足围长条件的值,以得到循环移位值矩阵;其中,各待赋值元素是指循环移位值矩阵中除第一行、第二行、第一列以外的各元素。步骤204与步骤104大致相同,此处不再赘述。
步骤205,基于循环移位值矩阵构造规则QC-LDPC码的校验矩阵。步骤205与步骤105大致相同,此处不再赘述。
本实施例中,基于差值来得到满足预设条件的K个数值,可以快速找到满足条件的K个数值。本申请的第三实施例涉及一种规则QC-LDPC码的构造方法。第三实施例与第二实施例的不同之处在于,在本申请第三实施例中,提供了快速找到满足条件的数值的另一种具体方法。
如图6所示为第三实施例中的规则QC-LDPC码的构造方法的流程图;
步骤301,将规则QC-LDPC码的循环移位值矩阵中第一行、第一列的各元素初始化为0。步骤301与步骤101大致相同,此处不再赘述。
步骤302,获取满足预设条件的K个数值;其中,K的值等于循环移位值矩阵的列数;预设条件包括,其中一个数值为0,且任意两个数值之差组成的集合中不存在重复的数。
步骤302包括如下子步骤。
子步骤3021,从卢卡斯数列中选择连续排列的K个数列元素。
其中,卢卡斯数列是一个已知数列,从卢卡斯数列中选择连续排列的K个数列元素;由于卢卡斯数列本身的特性,连续排列的K个数列元素满足如下条件:任意两个数列之差组成 的集合中不存在重复的数。
子步骤3022,确定K个数列元素中的最小值,并将K个数列元素分别减去最小值以得到K个数值。
具体的,为了保证第二行第一个元素为0,故要将K个数列元素分别减去K个数列元素中的最小值,从而得到K个数值,且其中一个数值为0。其中,K个数值是由K个数列元素减去同一个值得到的,因此满足条件:任意两个数值之差组成的集合中不存在重复的数。
从卢卡斯数列中取出的连续排列的K个数列元素,是按照从小到大的顺序依次排列的;因此,K个数值也是按照从小到大的顺序依次排列且第一个数值为0;此时在对第二行的各元素赋值时,可以按照K个数值的排列顺序依次给第二行的各元素赋值。
步骤303,将K个数值分别赋值给循环移位值矩阵中第二行的K个元素;其中,第二行的第一个元素被赋值为0。步骤303与步骤103大致相同,此处不再赘述。
步骤304,基于规则QC-LDPC码的循环置换矩阵的维数信息为各待赋值元素搜索满足围长条件的值,以得到循环移位值矩阵;其中,各待赋值元素是指循环移位值矩阵中除第一行、第二行、第一列以外的各元素。步骤304与步骤104大致相同,此处不再赘述。
步骤305,基于循环移位值矩阵构造规则QC-LDPC码的校验矩阵。步骤305与步骤105大致相同,此处不再赘述。
本实施例中,基于卢卡斯数列来得到满足预设条件的K个数值,可以快速找到满足条件的K个数值。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。本申请第四实施例涉及一种电子设备,如图7所示,包括:
至少一个处理器701;以及,
与所述至少一个处理器701通信连接的存储器702;其中,
所述存储器702存储有可被所述至少一个处理器701执行的指令,所述指令被所述至少一个处理器701执行,以使所述至少一个处理器701能够执行上述任一实施例所述的规则QC-LDPC码的构造方法。
其中,存储器702和处理器701采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器701和存储器702的各种电路连接在一起。总线还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域 所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器701处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器701。
处理器701负责管理总线和通常的处理,还可以提供各种功能,包括定时,***接口,电压调节、电源管理以及其他控制功能。而存储器702可以被用于存储处理器701在执行操作时所使用的数据。本申请第五实施例涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施例是实现本申请的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。