发明名称 一种(n,k,m)系统卷积码盲识别的方法
摘要 一种(n,k,m)系统卷积码盲识别的方法,属信道编码盲识别技术领域,先通过计算机读入待识别的数据后,建立行数为180、列数为170的识别矩阵,然后按高斯消元的方法进行矩阵的行化简,对化简后的矩阵,先根据矩阵主对角线上元素0和元素1的排列规律,识别出码长、信息位长度和数据起点,然后根据得到的规律元素的位置,找到出现的规律矩阵,将规律矩阵从化简后的识别矩阵中抽取出来即为校验矩阵,再按照校验矩阵与生成矩阵的关系,抽取得到生成矩阵。本方法给出了具体的(n,k,m)系统卷积码盲识别的实现过程,有利于实现编程操作,识别速度快,且方法简单。对(n,k,m)的系统卷积码在无误码的情况下,识别率能达到100%。
申请公布号 CN103401569A 申请公布日期 2013.11.20
申请号 CN201310344023.X 申请日期 2013.08.08
申请人 山东大学 发明人 马丕明;梅文杰;杨勇
分类号 H03M13/23(2006.01)I 主分类号 H03M13/23(2006.01)I
代理机构 济南金迪知识产权代理有限公司 37219 代理人 许德山
主权项 一种(n,k,m)系统卷积码盲识别的方法,由计算机进行识别,该计算机包括待识别数据读入部分,识别运行程序和识别结果的输出部分,其中识别的过程主要是由计算机将待识别的数据读入计算机内存中,然后通过本盲识别方法进行识别,识别的结果输出到一个文本文件中,该盲识别方法的步骤如下:1)由计算机从待识别数据读入部分读入待识别的数据,按行数为180,列数为170建立识别矩阵,设识别的卷积码参数的范围:码长n范围为2到8,约束度m小于等于13,识别矩阵的列数要大于最大的数据约束长度n*(m+1)+6*n,即大于160,这里取170,且行数大于列数;建立识别矩阵的方法为:从待识别数据的起点开始读取170个数据作为第一行,从起点位置处向后1*840个数开始,读取170个数据作为第二行,从第2*840个数开始,读取170个数据作为第三行,以此类推,直到建立180行的矩阵,所以待识别的数据至少要180*840=151200;2)按高斯消元的方法进行矩阵行化简,具体的化简方法为:对矩阵中的数据从左到右按列处理,如果主对角线上的元素为1,则将主对角线元素所在的行设为标准行,将同列其他有非零元素的行替换为该行与标准行中的元素模二加后所得的结果;如果主对角线上的元素为零,则寻找该列主对角线元素下方的非零元素所在的行作为标准行,将同列其他有非零元素的行替换为该行与标准行中的数据模二加后所得的结果;如果主对角线的元素下方位置的元素全为0,则不再进行化简;3)对化简得到的生成矩阵,识别码长和起点,具体的识别方法为:a.分配三个长度为170的数组空间,包括ZeroLocation、OneLocation、DeltaZero、DeltaOneZero,并初始化为0,其中ZeroLocation用来存储矩阵主对角线上的元素0的位置,OneLocation用来存储矩阵主对角线上的元素1的位置,DeltaZero用来存储矩阵主对角线上的两个最相近元素0之间的位置间隔,DeltaOneZero用来存储矩阵主对角线上两个最相近的元素0和元素1之间的位置间隔,对于记录的位置及位置间隔,因为是矩阵主对角线上的元素,所以只记录元素所在的列数即可,行数等于列数,而两个元素之间的位置间隔是指这两个元素位置之间的列数之间的差;b.计算并存储主对角线上元素0和1的位置及其之间的位置间隔,过程如下:先找到主对角线上第一个元素0的位置存入ZeroLocation,然后从该位置开始沿主对角线方向找到下一个元素1出现的位置存入OneLocation,再从该元素1的位置开始,沿主对角线方向找到下一个元素0出现的位置存入ZeroLocation,计算所找出两个元素0之间的位置间隔并将其存入DeltaZero,计算第二个元素0和上一个元素1之间的位置间隔并将其存入 DeltaOneZero,完成一组元素位置的存储过程,下一步再从第二个元素0的位置开始,沿主对角线方向找到下一个元素1出现的位置存入OneLocation,再从该元素1的位置开始,沿主对角线方向找到下一个元素0出现的位置存入ZeroLocation,计算两个元素0之间的间隔并将其存入DeltaZero,计算后一个元素0和其上一个元素1之间的位置间隔并将其存入DeltaOneZero,完成第二组元素位置的存储过程,从第二组开始每组共存储四个位置或位置间隔,依次类推,从上组得到0元素的位置开始找到下一个元素1后再寻找下一个元素0,直到所有主对角线上的元素都遍历完成;c.如果对步骤b得到的三个数组空间即DeltaZero、OneLocation和DeltaOneZero进行搜索,元素1的位置满足如下条件:对数组DeltaZero中记录的数值,即记录的0元素的位置间隔数值,第i组元素中得到0元素之间的位置间隔与第i+1组和第i+2组元素中得到的0元素之间的位置间隔都相等,记录此间隔值;对数组OneLocation中记录的数值,即记录的元素1的位置数值,第i组得到的元素1的位置与第i+3组元素1的位置的差是上述记录的0元素之间的位置间隔值的三倍;第i+2组元素以后的元素组中元素0的位置间隔都与上述记录的0元素之间的位置间隔值相等,说明主对角线元素出现规律序列,停止搜索,记录第i组的元素1的位置;d.求码长和信息位长度,步骤c中记录的0元素之间的位置间隔值即为码长n;第i组存储的DeltaOneZero中的数值,即元素1与元素0的间隔即为信息位长度k;第i组的元素1的位置除以码长得到的商和余数,记录此余数,余数即等于码长减去要识别的数据起点的值,据此要识别的数据起点的值等于码长减去余数得出;4)由码长和数据起点识别得到校验序列,具体方法为:分配长度为170的数组空间,包括ZeroRowNum,其中ZeroRowNum用来存储0行的数目,从步骤3)的c中第i组元素记录元素1的列数开始,每n列数据分为一组作为一个子矩阵,统计上述每组子矩阵从第1行开始连续出现的全0行的数目,存入ZeroRowNum中,在统计完成后,ZeroRowNum中的数据如果从其第j个值开始,出现公差为码长的等差序列,则相应的等差序列的起始位置即为规律矩阵开始出现的位置,然后将该组n列数据即该组的子矩阵读取出来,除去矩阵从第1行开始连续出现的全0行剩余的数据即为校验序列;5)在校验序列中通过抽取方式得到k个生成矩阵的子矩阵,具体的抽取方法为:对校验序列中的每一列进行如下操作:由码长n,将校验序列的第i列数据的最后n个数据顺序排列成一行作为第1行,其前面的n个数据顺序排列成一行作为第2行,依此类推,第i列数据的最前面数据顺序排列成最后一行,最后一行数据不足n个时在其后面补0,将上述各行数据顺序排列成矩阵形式,将该矩阵的前k列数据抽取出来分别作为k个子矩阵的第i行, 最终得到k个生成矩阵的子矩阵;例如识别得到的码长n为3,k为2,且得到的校验序列共3列:分别为000100,000010,110011,对校验序列中的第1列数据,先分组得到100、000,排列成矩阵形式为 <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>则将该矩阵的前2列数据10、00分别作为最后生成的第1和第2个子矩阵的第1行;对校验序列中的第2列数据,先分组得到010、000,排列成矩阵形式为 <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>则将该矩阵的前2列数据00、10分别作为最后生成的第1和第2个子矩阵的第2行;对校验序列中的第3列数据,先分组得到011、110,排列成矩阵形式为 <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>则将该矩阵的前2列数据01、11分别作为最后生成的第1和第2个子矩阵的第3行;则得到的生成矩阵的两个子矩阵分别为: <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced>和 <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>6)得到生成矩阵及其k个子矩阵,其中码长、信息位长度和数据起点都已识别得到,完成了(n,k,m)系统卷积码的盲识别,将结果输出到一个文本文件中。
地址 250100 山东省济南市历城区山大南路27号