具体实施方式
本发明实施例将多路数据中的每一路数据输入到交织矩阵中的一个子矩阵;对数据输入后的至少一个子矩阵进行交织变换,其中进行交织变换的子矩阵的数目小于子矩阵的总数;确定交织变换后子矩阵中数据的存储地址关系;根据确定的存储地址关系对所有子矩阵中的数据进行存储;根据参数顺序读取已存储的数据,获得交织变换后的输入的数据。数据采用并行输入的方式,且只需对一个子矩阵进行交织变换,简化了交织过程,减少了时延;只需计算一个子矩阵中的数据对应的地址,其它子矩阵均可在对该地址进行简单变化后进行存储,因此使用到的数据较小,运算较为简单,无需使用到乘法器,节省了硬件资源,简化了速率匹配过程,提高了速率匹配的效率。
本发明实施例中的码块包括188种类型,其类型是按照码块大小来分,这均是协议中的规定,如果协议发生变化,则码块数目及类型也可以随之变化。
参见图1,本发明实施例中速率匹配的装置包括拆分模块101、交织模块102、收集模块103及裁剪模块104。
拆分模块101用于将多路数据中的每一路数据输入到交织矩阵中的一个子矩阵。拆分模块101按照输入路数分块后输入的码块中的数据组成的交织矩阵按照所述分的块分为多个子矩阵。其中,可以将码块中的数据组成的R*32交织矩阵分为与输入路数相等数目的子矩阵。R*32的交织矩阵是按照目前协议中的规定给出的,如果协议发生变化,则此矩阵也可以相应变化。例如,输入的路数可以是2路、4路、8路、16路,则可以将码块中的数据分为2个、4个、8个或16个子矩阵,输入数据组成的交织矩阵可以是系统位交织矩阵、校验位0交织矩阵或校验位1交织矩阵。本发明实施例中以4路输入的系统位交织矩阵为例。拆分模块101还用于将码块拆分后在每个子矩阵中补充null。较佳的,本发明实施例中采用将一个码块中的数据平均分配到每路输入中进行传输的方式。例如,要输入类型为96的码块,经过turbo编码,加上了4个尾比特,速率匹配输入变为100,(对于速率匹配如入,所有码块都需要经过turbo编码,都会加上4个尾比特),因此以下简称码块100,其中100指的是该码块的大小,包括100个数据,该码块100是分配在4路输入中进行传输,每路传输25个数据。拆分模块101先将码块100中的数据组成的R*32交织矩阵分为与输入路数相等数目的子矩阵,再将多路输入数据中的每一路数据输入到一个子矩阵中,即每一个子矩阵为25个数据,每一个子矩阵有8列,按行输入。其中,行数R可以根据输入的码块大小计算出来,用输入码块的大小除以列数32,对计算结果向上取整,即可得到R的值,例如输入码块100,一共32列,100/32为3余4,则R为4行。拆分模块101中包含一个计数器,计数器的起始值为拆分后的一个子矩阵中需要补null的数目再减1,例如,输入码块100,则拆分后一个子矩阵为25个数据,每个子矩阵占8列,25个数据可以组成4行8列的子矩阵,但4行8列的子矩阵共需要32个元素,则该子矩阵中需要补7个null,从该子矩阵的首位开始连续补充7个null,并且,对于所有188种类型的码块,R*32的交织矩阵只可能补充4个、12个、20个或28个null,则拆分后每一块子矩阵只可能补充1个、3个、5个或7个码块,由于是平均分配,所以每一个子矩阵需要补充的null数目基本相等,不同通路之间null数目的差值最大为1。例如,如果输入路数为2路或4路,则每个子矩阵需要补充的null数目相等。输入为8路或16路,则每个子矩阵需要补充的null数目可能不相等,例如,输入为8路时,0-3路可能需要补充2个null,4-7路可能需要补充3个null。输入为16路时,0-3路可能需要补充1个null,4-15路可能需要补充2个null,不一定是每8路一致。每输入一个数据,计数器的值加1,该计数器为8+log2N位的计数器,其中,N为每个子矩阵中的列数,计数器的高8位决定输入数据所在的行,低log2N位决定输入数据所在的列。例如,输入码块100,4路输入,每个子矩阵为25个数据,需补充7个null,因矩阵的列数是从0开始计算,因此该计数器的初始值应为每个子矩阵中需要补充的null值减1,为6。计数器为8+log28=11位计数器,高8位表示行位置,低3位表示列位置。输入第一个数据时,计数器的值加1,变为7,此时该计数器的值为00000000111,则该第一个数据位于该子矩阵的第0行第7列,输入后续数据时以此类推。此计数器保证了一个子矩阵中最多有N列,每一路输入都只占用N列,例如,第一路输入时,先输入第0行,当第0行第N-1列的数据输入完毕后,继续输入第1行第0列,而不是继续输入第0行第N列,因为第一个子矩阵的列号为0~N-1。这样就保证了每一路输入的数据恰好位于一个子矩阵中,以便对其进行列变换。相当于在输入码块中的数据之前即根据输入路数划分了块,输入的码块中的数据组成一个R*32的矩阵,再根据划分好的子矩阵将多路输入的数据分别输入到子矩阵中,一路输入对应一个子矩阵。
交织模块102用于对数据输入后的多个子矩阵中的至少一个子矩阵进行交织变换,其中进行交织变换的子矩阵的数目小于子矩阵的总数。交织模块102可以对多个子矩阵中的一个子矩阵进行交织变换,也可以对多个子矩阵中的两个或两个以上的子矩阵进行交织变换,其中,进行交织变换的子矩阵的数目须小于该所述子矩阵的个数。如上所述示例,拆分模块101已将输入的码块中的数据组成的矩阵拆分成了4个子矩阵,并在需要补充null时在每个子矩阵中均补充了null,交织模块102按照交织图样对其中一个子矩阵进行列变换,例如可以对第0号子矩阵进行列变换。如上面的示例,按照(0,4,2,6,1,5,3,7)的方式进行列变换。而对于第1个、第2个及第3个子矩阵,因为其包含的数据数目相同、需要补充的null数目相同、数据及null在子矩阵中的位置相同,且采用相同的交织图样,因此其变换过程完全相同,而列变换之后可以获得其相同的存储地址,第0个子矩阵、第1个子矩阵、第2个子矩阵及第3个子矩阵均存储在收集模块103中。其中,所述的(0,4,2,6,1,5,3,7)列变换方式,只能针对4路并行输入使用,即分成4个子矩阵的码块使用。对于其它N路并行输入,分为N个块,每个块有32/N列,则其列变换方式为0~(32/N-1)的二进制的倒序表示。如4路输入时,0~7的二进制的倒序为0,4,2,6,1,5,3,7。
收集模块103用于对数据输入后的至少一个子矩阵进行交织变换,其中进行交织变换的子矩阵的数目小于子矩阵的总数。收集模块103将交织后的子矩阵以按列存储的方式进行存储。其中收集模块103中有存储设备,例如该存储设备可以是ram,将系统位子矩阵及校验位子矩阵分别存储到其对应的ram中。收集模块103中系统位对应的ram,例如可以命名为s_save,其中,第0个子矩阵可以存储在s_save1中,第1个子矩阵可以存储在s_save2中,第2个子矩阵可以存储在s_save3中,第3个子矩阵可以存储在s_save4、中,对于每个子矩阵来说,其null位不予存储,则每个子矩阵中的数据在对应ram中的存储位置都是相同的,因此,只需对第0个子矩阵进行交织之后便可根据第0个子矩阵的存储地址获得其它三个子矩阵的存储地址,而无需再对其它3个子矩阵分别进行交织。而如果将4个子矩阵分别进行交织,其交织图样相同,例如都可以是(0,4,2,6,1,5,3,7),将交织后的4个子矩阵按照顺序组合成一个R*32的交织矩阵,则其与现有技术中对R*32的交织矩阵同时进行列变换后的结果是一致的,而本发明实施例中采用的方法明显比现有技术节省了步骤。不同子矩阵对应不同的存储器,且所有子矩阵在存储器中的相对位置相同,按照所述地址对应将各子矩阵中的数据存入其所对应的存储器中;或者根据每个子矩阵各自对应的起始地址和共同对应的地址关系进行存储,其中相邻两个子矩阵对应的起始地址之间的差值不小于子矩阵的最大长度;或者存储器不为ram,而是块式存储器,每个子矩阵对应一个存储块,不同子矩阵中相同位置上的数据所对应的在存储子块中的行地址及列地址相同,将各子矩阵中的数据根据所述地址中其所对应的行地址及列地址存储到相应的存储子块,其中,对于系统位来说,每个子矩阵可以对应一个存储块;对于校验位来说,校验位0和校验位1中相同的子矩阵(子矩阵序列号相同的两个子矩阵)可以共同对应于一个存储块。对于每个子矩阵来说,其null位不予存储,则每个子矩阵中的数据在对应ram中的存储位置都是相同的。校验位包括校验位0及校验位1,它们所对应的子矩阵共同存储在p_save中,本发明实施例中校验位0及校验位1是交替存储,如果对校验位0及校验位1进行分别存储,则在裁剪模块104进行裁减输出时,需要交替进行输出。例如,本发明实施例中采用了双口ram来对校验位0及校验位1的子矩阵中的数据进行交替存储。其中,子矩阵经交织模块102交织前,数据位置为[i,j],经交织模块102按照(0,4,2,6,1,5,3,7)的交织图样进行交织后,数据位置为[i,j′],[i,j]及[i,j′]有以下关系:
j′[0,1,2]=j[2,1,0] (1)
在公式(1)中,方括号内为数据的二进制位置,即j′的二进制就表示为j的二进制的倒序,例如,原来的j为3,其二进制表示为011,则j′的二进制表示为110,即j′为6。其中,系统位的子矩阵、输入路数与ram的对应关系如图2,第0路输入对应第0个子矩阵,即图2中的块1,其对应存储位置为s_save1,第2路输入对应第1个子矩阵,即图2中的块2,其对应存储位置为s_save2,第1路输入对应第2个子矩阵,即图2中的块3,其对应存储位置为s_save3,第3路输入对应第3个子矩阵,即图2中的块4,其对应存储位置为s_save4。考虑到实际存储时不存储null,则子矩阵中的数据在ram中的存储位置为:
s_addr=j′*r_sub+i-s_null_num (2)
在公式(2)中,s_addr为子矩阵中的数据在ram中的存储地址,j′为所述数据的列坐标,i为所述数据的行坐标,r_sub为子矩阵的行数,也就是交织矩阵的行数,s_null_num为该数据[i,j′]之前的null的个数。具体的,子矩阵经过交织后,其第0行所补充的null的位置会发生变化,当交织模块102对子矩阵进行交织后,可以将交织后的子矩阵第0行中每个数据前面的null的个数存储在收集模块103中,子矩阵有8列,则存储8个null的个数。例如,该子矩阵的第0列为0,1,2;第1列为3,4,5;第2列为0,6,7;第0列的第一个数据为null,则对于第一列上的数据来说,即1,2来说,其null的个数为1,对第一个null的个数记为1;第1列上没有null,但它前面(0列)有1个null,所以第2个null的个数也记为1;对于第2列,有1个null,加上前面的null,共有2个,所以第3个null的个数记为2。对于这8个null的个数,可以将其存储在寄存器中,也可以以其它方式存储。收集模块103进行地址计算时,根据所要计算的数据所在的行列数到寄存器中进行查询,如果所要计算的数据位于第n列,则到寄存器中根据该数据所对应的列查询该数据前面的null数目。比特收集时按列读出,且null原来就位于子矩阵第0行前面,经过交织后,还位于第0行,按列读出时,读某个数据时,需要查找的是当前数据所在的列及该列前的null的个数。所以不管是第几行数据,都需要查询。由以上分析可知,交织后的数据的列数j可以用二进制表示,并且只有3位,因此,公式(2)中的j′*r_sub可以用两个加法器来完成,从而节省了乘法器资源。例如,交织后的j′为5,其二进制表示为101,行数r_sub设为x,j′*r_sub可以表示为(1,0,1)*x,按照二进制位的权来计算,(1,0,1)*x=x*20*1+x*21*0+x*22*1=x+x*4,x*4可以通过将x左移两位来实现,此操作可以在加法器中完成,如果是x*2,则可以通过将x左移一位来实现,如此,最多使用两个加法器即可完成j′*r_sub的计算,而无需使用乘法器。
裁剪模块104用于根据参数顺序读取已存储的数据,获得交织变换后的所有输入的数据。裁剪模块104按照给定的参数从收集模块103的ram中读出一定的比特数据。由协议可知,输出数据的起始位置为:
其中,
表示向上取整。k0为输出数据的起始地址,rv
idx为冗余版本号,只有0,1,2,3四种取值,N
cb为一个指定参数,由协议高层配置,例如在上行链路中,N
cb为3*R*32,其中R为矩阵的行数。当输入码块大小固定后,输出起始位置就只有四种情况,且通过公式(3)可以计算出输出的第一个数据位于哪个子矩阵的第几列上,接着便可计算出起始比特的位置。裁剪模块104计算出输出起始位置后,可以从该起始位置开始从ram中读取数据,读取完当前ram中的数据之后,按照子矩阵的编号顺序或者ram的编号顺序继续依次从其它ram中读取数据,读取的范围由参数N
cb确定,N
cb表示码块的软缓冲器的大小,即比特输出数据的范围。读取数据的个数为E,其中,E表示(turbo)编码块的速率匹配输出序列长度。如果在N
cb确定的范围内读取的数据个数不够E个,则继续循环读取,直到输出的数据比特数达到E个为止。
参见图3,所述装置还包括修正模块105。
修正模块105用于计算校验位0及校验位1的地址。如果输入交织矩阵是校验位交织矩阵,对于校验位0,其交织图样与系统位交织矩阵的交织图样一样,因此其拆分过程、交织过程等均与系统位交织矩阵一致。其子矩阵、输入路数与ram的对应关系如图4A,第0路输入对应第0个子矩阵,即图4A中的块1,块1即第一个存储块,其对应存储位置为p_save1,第2路输入对应第1个子矩阵,即图4A中的块2,其对应存储位置为p_save2,第1路输入对应第2个子矩阵,即图4A中的块3,其对应存储位置为p_save3,第3路输入对应第3个子矩阵,即图4A中的块4,其对应存储位置为p_save4。本发明实施例中这种对应关系以4路输入使为例。这种对应关系是由按照协议32列交织时,其列变换是按照0~31(5比特)的逆序进行列变换得出的,在4路输入时,0~31(5比特)的倒序的低二位决定了分块,为(0,2,1,3),即块序列号,本发明实施例中将该块序列号均加1,用块(1,3,2,4)来表示;而高3位恰为列变换(0,4,2,6,1,5,3,7)。也可以这样说,可以将4路输入进行编号0~3,则输入路数与0~3的倒序的块存在固定的对应关系。具体的,只有在4路并行输入的时候,块按照(0,2,1,3)排列,此排列关系是按照低2比特的倒序得到的,对于其他并行路数的情况下,排列关系不一定也是按照倒序得到。但在并行路数确定及null个数确定的情况下,可以按照32列交织方式得到块的排列方式。在确定这种排列关系时,假如是一个包含了较大数据量的码块,不必对此包含大数据量的码块的列变换,只需对一个和该码块需补充的null个数一样的包含数据量较小的码块做列变换即可。其地址计算公式如下:
p0_addr=2*s_addr (4)
因为校验位0及校验位1交替存储,因此公式(4)中需要乘以2。对于校验位1,按照协议中的规定,需先将R*32的交织矩阵元素向前移动一个位置,将第0行第0列中挤出去的null放到交织矩阵的最后,之后再进行分块及交织。此时,因输入的路数与子矩阵的对应关系发生了变化,及最后一个子矩阵,即第3个子矩阵中的部分交织结果发生了变化,导致对校验位1进行分块交织的结果与系统位及校验位0不同。但是,校验位1中第0个子矩阵、第1个子矩阵及第2个子矩阵的交织图样与系统位一样,该3个子矩阵的交织结果也与系统位一致,只有第3个子矩阵交织后的结果与系统位不一致,而第3个子矩阵的交织图样也只是与系统位的子矩阵错了一个null的位置,影响不大。因为移位后所有数据都向前移一个,相当于第0路输入的第1个数据占据了前1列的null的位置,而第1路输入的第1个数据占据了第0路第1个数据的位置,这样依次下来可以看做原本第0路输入所占的列现在都被第1路占了,而第1路数据原本所占的列都被第2路占了,而第2路数据原本所占的列都被第3路占了;第3路数据所占的列现在都被第0路所占了。然后经过列交织变换,则第1,2,3路数据所在的子矩阵的图样与系统位一致,而第0路输入由于向前移了一位,造成该子矩阵部分图样与系统位子矩阵图样不一致。不一致的地方在与在第0行的某列上(在4路输入示例中,只可能位于子矩阵的0,1,2,3列上,这个由null的个数决定),校验位1的子矩阵该列上的第一行有数据,而对于除该子矩阵外的所有子矩阵该位置上为null。对于这个子矩阵的存储地址,需要进行独立修正。该第3个子矩阵只有部分交织结果与系统位不一致。对于块1、块2、块3。校验位1的存储位置为:
p1_addr=2*s_addr+1 (5)
其中,校验位1的子矩阵、输入路数与ram的对应关系如图4B,第1路输入对应第0个子矩阵,即图4B中的块1,其对应存储位置为p_save1,第3路输入对应第1个子矩阵,即图4B中的块2,其对应存储位置为p_save2,第2路输入对应第2个子矩阵,即图4B中的块3,其对应存储位置为p_save3,第0路输入对应第3个子矩阵,即图4B中的块4,其对应存储位置为p_save4。校验位1交织矩阵中的元素先向前移了一位,导致了输入的第1路数据占据了第0路所在的列,输入的第2路数据占据了第1路所在的列,输入的第3路数据占据了第2路所在的列,输入的第0路数据占据了第3路所在的列。这样,相当于校验位1的输入路数1,2,3,0与系统位或者校验位0的输入路数0,1,2,3相对应。,即可以看做校验位1不需要移位,而是按照1,2,3,0的路数的次序进行的输入,这样,它的对应关系可以就看做是与系统位或者校验位0一致的,所以,校验位1的第1,2,3,0路输入与系统位的第0,1,2,3路输入共同对应子矩阵0、2、1、3(块1、3、2、4),然后将块按照顺序排列可得到与协议中32列交织方式一致的图样。在交织前的矩阵中,校验位1的输入路数1、2、3、0与系统位或者校验位0的输入路数0、1、2、3相对应(校验位1的1、2、3、0路的输入数据与系统位或者校验位0的0、1、2、3路数据在交织前矩阵中的列位置一致)。且都是按照相同的交织方式进行列变换,所以交织结果也不存在区别。区别仅在于校验位1的输入路数与子矩阵的对应关系发生了变化,经过交织后,系统位与校验位0的第0、1、2、3路输入对应于子矩阵0、2、1、3(或者块1、3、2、4),此时,而校验位1是第1、2、3、0路输入对应于子矩阵0、2、1、3(或者块1、3、2、4)。在交织完毕后存储校验位1的第3个子矩阵时,需判断交织后的校验位1的第3个子矩阵中从哪个位置开始与交织后的系统位的子矩阵或校验位0的子矩阵不一致,这个发生不一致的位置肯定在第3个子矩阵的第0行。因为每个子矩阵中补充null的数目只有四种情况,即补充1个、3个、5个或7个null,因此发生不一致的情况也只有四种,因此只需对公式(4)及公式(5)做相应变化即可计算校验位1的子矩阵中的数据所对应的地址,对公式(3)及公式(4)的变化过程如下:如果是交织后的校验位1的第3个子矩阵中从第0行第n列开始与系统位的子矩阵或校验位0的子矩阵不一致,则如果j′<n,则校验位1的第3个子矩阵中的数据所对应的地址按照公式(5)来计算,如果j′≥n,则校验位1的第3个子矩阵中的数据所对应的地址按照公式(5)+1来计算,即此时公式(5)变为:
p1_addr=2*s_addr+1+1 (5)′
因校验位0的交织矩阵与校验位1的交织矩阵在收集模块103中的ram中交替存储,因此当校验位1发生变化时也会影响到校验位0的存储。如果是交织后的校验位1的第3个子矩阵中从第0行第n列开始与系统位的子矩阵或校验位0的子矩阵不一致,则如果j′<n,校验位0的第3个子矩阵中的数据所对应的地址按照公式(4)来计算,如果j′≥n,则校验位0的第3个子矩阵中的数据所对应的地址按照公式(5)来计算。而校验位1的第0、1、2个子矩阵中的数据,其地址所对应的计算公式为公式(5),校验位0的第0、1、2个子矩阵中的数据,其地址所对应的计算公式为公式(4),并不随j′与n的比较结果而改变。如果对校验位0及校验位1分别开辟存储空间来进行存储,则校验位1因移位所带来的地址计算方法的变化就不会影响到校验位0,而只需对校验位1的地址计算方式进行相应改变。则校验位0的地址与系统位的地址相同,而无需在公式(4)中乘2,校验位1的地址对应的公式(5)也变为:
p_addr=j′*r_sub+i-s_null_num,(6)
但是,此处的s_null_num与系统位矩阵中的s_null_num不一样,这是由于系统位矩阵交织前向前移了位造成的。
修正公式中还有一个关于特殊图样的计算,即由于校验位1先向前移出一位补在矩阵的最后造成部分图样不一致的子矩阵,即校验位1的第3个子矩阵的地址需要修正。计算公式如下:
对于校验位0,排在开始与系统位的子矩阵或校验位0的子矩阵发生不一致的数据位之前的列的数据地址=2*系统位矩阵中数据的存储地址;排在图样不一致后及当前列的数据地址=2*系统位矩阵中数据的存储地址+1;
对于校验位1,排在开始与系统位的子矩阵或校验位0的子矩阵发生不一致的数据位之前的列的数据地址=2*系统位矩阵中数据的存储地址+1;开始与系统位的子矩阵或校验位0的子矩阵发生不一致的数据位的数据地址及排在开始与系统位的子矩阵或校验位0的子矩阵发生不一致的数据位之后的列的数据地址=2*系统位矩阵中数据的存储地址+2;
对于开始与系统位的子矩阵或校验位0的子矩阵发生不一致的数据位中的数据,其存储地址需要根据并行路数,码块大小进行特殊计算。
例如,4路并行输入时:
在上式中,null_num_4指4路并行时,每个子矩阵补null的个数。并行输入路数不同时,公式(7)也会发生变化。
下面通过实现流程来介绍速率匹配的方法。
参见图5,本发明实施例中速率匹配的主要方法流程如下:
步骤501:将多路数据中的每一路数据输入到交织矩阵中的一个子矩阵。
步骤502:对数据输入后的至少一个子矩阵进行交织变换,其中进行交织变换的子矩阵的数目小于子矩阵的总数。
步骤503:确定交织变换后子矩阵中数据的存储地址关系。
步骤504:根据确定的地址关系对所有子矩阵中的数据进行存储。
步骤505:根据参数顺序读取已存储的数据,获得交织变换后的输入的数据。
参见图6,本发明实施例中速率匹配的详细方法流程如下:
步骤601:将输入的码块中的数据组成R*32的交织矩阵。32列是目前协议中的规定,如果协议发生变化,此矩阵也可以进行相应改变。
步骤602:将R*32的交织矩阵分为4个子矩阵。其中,是按照输入路数来分,本发明实施例是以输入4路为例。
步骤603:根据每个子矩阵缺少的元素值对每个子矩阵补充null值。其中,是从每个子矩阵的第0行第0列开始补充null值。
步骤604:对第0个子矩阵按照交织图样进行列变换。本发明实施例是以对第0个子矩阵进行列变换为例,也可以对其它任意一个子矩阵进行列变换。列变换方式可以为(0,4,2,6,1,5,3,7)。
步骤605:根据列变换后的子矩阵计算其对应的地址。
步骤606:根据计算出的地址将各子矩阵进行存储。其中,可以存储在收集模块103中的ram中。
步骤607:计算需要读取的数据的起始地址。可根据公式(3)进行计算。
步骤608:根据该起始地址从ram中读取一定数目的比特数据。如此就完成了速率匹配的过程。
对于校验位1来说,其交织后的结果与系统位与校验位0不完全一致。参见图7,本发明实施例中针对校验位1的速率匹配的详细处理流程如下:
步骤701:将输入的码块中的数据组成R*32的交织矩阵。
步骤702:将R*32的交织矩阵分为4个子矩阵。其中,输入第0路对应于第3个子矩阵,输入第1路对应第0个子矩阵,输入第2路对应地2个子矩阵,输入第3路对应第1个子矩阵。本发明实施例中以4路输入为例。
步骤703:根据每个子矩阵缺少的元素值对每个子矩阵补充null值。
移出的是第0行第0列的null,将该null放入该交织矩阵的第R行第31列中。
步骤704:对第0个子矩阵按照交织图样进行列变换。本发明实施例是以对第0个子矩阵进行列变换为例,也可以对第1个子矩阵或第2个子矩阵进行列变换。列变换方式可以为(0,4,2,6,1,5,3,7)。
步骤705:将第3个子矩阵中的元素左移一位,移出的null补入该第3个矩阵的最后一个位置中。
步骤706:对第3个子矩阵按照交织图样进行列变换。列变换方式可以为(0、4、2、6、1、5、3、7)。
步骤707:校验位1的第0、1、2个子矩阵所对应的地址的计算公式为:p1_addr=2*s_addr+1,校验位0的第0、1、2个子矩阵所对应的地址的计算公式为p0_addr=2*s_addr。因校验位0的矩阵与校验位1的矩阵在收集模块103的ram中交替存储,因此当校验位1发生变化时也会影响到校验位0的存储。
对于校验位0的第0、1、2个子矩阵输入的地址的计算过程,及校验位1的第0、1、2个子矩阵输入的地址的计算过程,不会随第3个子矩阵发生变化的位置所对应的列与n的比较结果而改变。需要进行相应改变的只有校验位0的第3个子矩阵与校验位1的第3个子矩阵的计算过程。
步骤708:将第3个子矩阵与其它任一个子矩阵进行对比。用以确定第3个子矩阵发生变化的列位置。
步骤709:判断第3个子矩阵发生变化的位置所对应的列是否小于n。当判断结果为是时,继续步骤710,否则继续步骤711。其中,因本发明实施例是以4路输入为例,所以本步骤中的n值可以为2。
步骤710:校验位1的第3个子矩阵所对应的地址的计算公式为:p1_addr=2*s_addr+1,校验位0的第3个子矩阵所对应的地址的计算公式为:p1_addr=2*s_addr。执行步骤712。
步骤711:校验位1的第3个子矩阵所对应的地址的计算公式为:p1_addr=2*s_addr+1+1,校验位0的第3个子矩阵所对应的地址的计算公式为:p0_addr=2*s_addr+1。
步骤712:根据该子矩阵中补充的null数目计算校验1的第3个子矩阵中图样发生不一致的元素的地址。其中,如果第3个子矩阵中null数目为1,则其地址为0;如果第3个子矩阵中null数目为3,则其地址为4*r_sub-2;如果第3个子矩阵中null数目为5,则其地址为2*r_sub-2;如果第3个子矩阵中null数目为7,则其地址为6*r_sub-6。
步骤713:根据计算出的地址将各子矩阵进行存储。其中,可以存储在收集模块103中的ram中。
步骤714:根据比特输出数据的范围计算输出数据的起始地址。即根据公式(3)计算输出数据的起始地址。
步骤715:根据该起始地址从ram中读取一定数目的比特数据。
本发明实施例将多路数据中的每一路数据输入到交织矩阵中的一个子矩阵;对数据输入后的至少一个子矩阵进行交织变换,其中进行交织变换的子矩阵的数目小于子矩阵的总数;确定交织变换后子矩阵中数据的存储地址关系;根据确定的存储地址关系对所有子矩阵中的数据进行存储;根据参数顺序读取已存储的数据,获得交织变换后的所有输入的数据。数据采用并行输入的方式,且只需对一个子矩阵进行交织变换,简化了交织过程,减少了时延;只需计算一个子矩阵中的数据对应的地址,其它子矩阵均可在对该地址进行简单变化后进行存储,因此使用到的数据较小,运算较为简单,无需使用到乘法器,解决了比特存储冲突,节省了硬件资源,简化了速率匹配过程,提高了速率匹配的效率。本发明实施例可以每需要传输一个码块便对该码块进行速率匹配,无需对整帧数据一起进行速率匹配,节省了缓存空间及简化了操作流程,并且降低了系统延迟。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。