本发明涉及信道纠错码领域,更具体的说涉及一种适用于循环码的译码方法,其可应用(47,24,11)平方剩余码。
背景技术:
作为可靠性传输的重要保证,自1948年香农于“通信的数学原理”这一开创性的论文中提出信道编码定理以来,信道纠错码一直都受到学者们的广泛关注。循环码是最重要的纠错码之一,包括Golay码、Hamming码、Bose Chaudhuri Hocquenghem(BCH)码、平方剩余码等。(47,24,11)平方剩余码是其中一个重要的码型,但由于受限于复杂的译码算法,该码型一直未能在实际应用中应用。本发明基于循环码的伽罗华域特性,提出一种低复杂度的(47,24,11)平方剩余码译码算法。
技术实现要素:
本发明的主要目的在于提供一种纠错能力为5的(47,24,11)平方剩余码译码算法,其可应用于(47,24,11)平方剩余码译码上,可以有效降低(47,24,11)平方剩余码在产品中的复杂度。
为了达成上述目的,本发明提供的方法是
一种低复杂度的(47,24,11)平方剩余码译码方法,其特征在于:令生成多项式为g=(11110111011011100011000),1≤i≤46;0≤j≤46;接收码字为r=(r0,r1,…,r46),译码的步骤包括,
步骤1:计算校正子s=rp+r23g(23)+r24g(24)+…+r46g(46),其中rp=(r0,r1,…,r22)和rm=(r23,r24,…,r46)。
步骤2:如果校正子的重量,即校正子s中1的数量,w(s)≤5,则错误模式为e=(s|01×(n-k));此时,纠正后的接收码字为c′=r+e,译码成功。
步骤3:如果w(s)>5,意味着至少有1个错误发生在rm;此时依次将rm中 的一个比特ri取反,并重新计算校正子s+=g(i)。如果w(s)≤4,则错误模式为e=(s|01×(n-k))+1i;此时,纠正后的接收码字为c′=r+e,译码成功。
步骤4:如果w(s)>4,表示至少有两个错误发生在rm;此时依次将rm中的两个比特ri和rj取反,并重新计算校正子s=s+g(i)+g(j)。如果w(s)≤3,则错误模式为e=(s|01×(n-k))+1i+1j;此时,纠正后的接收码字为c′=r+e,译码成功。
一种低复杂度的(47,24,11)平方剩余码译码方法,其特征在于:如果w(s)>3,则意味着最多两个错误发生在rp;此时将接收码字左移或右移23比特,获取一个移位后接收码字,对于移位后接收码字存在两种情况:1)最多两个错误发生在rm;2)三个错误发生在rm,其中一个发生在r23;此时译码步骤包括,
步骤1:计算移位后接收码字校正子s=rp+r23g(23)+r24g(24)+…+r46g(46),其中rp=(r0,r1,…,r22)和rm=(r23,r24,…,r46)。
步骤2:如果校正子的重量,即校正子s中1的数量,w(s)≤5,则错误模式为e=(s|01×(n-k));此时,纠正后的接收码字为c′=r+e;如果接收码字左(右)移23比特,则纠正后的接收码字右(左)移23比特,译码成功。
步骤3:如果w(s)>5,意味着至少有1个错误发生在rm;此时依次将rm中的一个比特ri取反,并重新计算校正子s+=g(i)。如果w(s)≤4,则错误模式为e=(s|01×(n-k))+1i;此时,纠正后的接收码字为c′=r+e;如果接收码字左(右)移23比特,则纠正后的接收码字右(左)移23比特,译码成功。
步骤4:如果w(s)>4,表示至少有两个错误发生在rm;此时依次将rm中的两个比特ri和rj取反,并重新计算校正子s=s+g(i)+g(j)。如果w(s)≤3,则错误模式为e=(s|01×(n-k))+1i+1j;此时,纠正后的接收码字为c′=r+e;如果接收码字左(右)移23比特,则纠正后的接收码字右(左)移23比特,译码成功。
步骤5:如果w(s)>3,此时依次将rm中的三个比特r23、ri和rj取反,并 重新计算校正子s=s+g(23)+g(i)+g(j)。如果w(s)≤2,则错误模式为e=(s|01×(n-k))+123+1i+1j;此时,纠正后的接收码字为c′=r+e;如果接收码字左(右)移23比特,则纠正后的接收码字右(左)移23比特,译码成功。
一种低复杂度的(47,24,11)平方剩余码译码方法,其特征在于:g(i)的计算步骤为,
步骤1:g(i-1)>>1为将g(i-1)右移1比特;
步骤2:表示g(i-1)的第22比特;如果为1,则g(i)=(g(i-1)>>1)+g;如果为0,则g(i)=(g(i-1)>>1)。
附图说明
附图1为低复杂度的(47,24,11)平方剩余码译码流程图。
具体实施方法
上述功能实现的技术方案结合附图进行进一步的描述如下:
根据图1所示的低复杂度的(47,24,11)平方剩余码译码流程图,其特征在于:
步骤1:令生成多项式为g=(11110111011011100011000),1≤i≤46;g(i-1)>>1为将g(i-1)右移1比特;表示g(i-1)的第22比特;如果为1,则g(i)=(g(i-1)>>1)+g;如果为0,则g(i)=(g(i-1)>>1);0≤j≤46;接收码字为r=(r0,r1,…,r46),iter=0。
步骤2:计算校正子s=rp+r23g(23)+r24g(24)+…+r46g(46),其中rp=(r0,r1,…,r22)表示信息部分,rm=(r23,r24,…,r46)表示校验部分;
步骤3:如果校正子的重量,即校正子s中1的数量,w(s)≤5,则错误模式为e=(s|01×(n-k));此时,进入步骤8。
步骤4:如果w(s)>5,意味着至少有1个错误发生在rm;此时依次将rm中 的一个比特ri取反,并重新计算校正子s+=g(i)。如果w(s)≤4,则错误模式为e=(s|01×(n-k))+1i;此时,进入步骤8。
步骤5:如果w(s)>4,表示至少有两个错误发生在rm;此时依次将rm中的两个比特ri和rj取反,并重新计算校正子s=s+g(i)+g(j)。如果w(s)≤3,则错误模式为e=(s|01×(n-k))+1i+1j;此时,进入步骤8。
步骤6:如果w(s)>3且iter=1,此时依次将rm中的三个比特r23、ri和rj取反,并重新计算校正子s=s+g(23)+g(i)+g(j)。如果w(s)≤2,则错误模式为e=(s|01×(n-k))+123+1i+1j;此时,进入步骤8。
步骤7:如果w(s)>3且iter=0,则意味着最多两个错误发生在rp;此时将接收码字左移或右移23比特,获取一个移位后接收码字,对于移位后接收码字存在两种情况:1)最多两个错误发生在rm;2)三个错误发生在rm,其中一个发生在r23;此时,进入步骤2。
步骤8:纠正后的接收码字为c′=r+e;如果iter=1,表示接收码字左(右)移23比特,则将纠正后的接收码字右(左)移23比特,译码成功。
使用实例:
实例1:
令发送码字为,c=(00110100000100101001110011110101111001000000000);
令接收码字为,r=(11110100000100101001111101110101111001000000000);
令错误模式为,e=(11000000000000000000001110000000000000000000000);
我们发现总共发生5个错误,其中2个在信息部分,3个在校验部分,具体的译码步骤如下述:
1.计算校正子:
s=(01001100110110010010101)。因为w(s)=11>5,进入步骤4。
2.因为所有的w(s)>4,进入步骤5。
3.当i=23,j=24,则s=(11000000000000000000001)。因为w(s)=3≤3,则e=(11000000000000000000001110000000000000000000000),进入步骤8。
4.因为iter=0,此时译码后的接收码字为:
c′=r+e=(00110100000100101001110011110101111001000000000)。译码成功。
实例2:
令发送码字为,
c=(00101000111010110110111011110000110010000000000)。
令接收码字为,
r=(11101000111010110110111101110000110010000000001)
令错误模式为,
e=(11000000000000000000000110000000000000000000001)
我们发现总共发生5个错误,其中3个在信息部分,2个在校验部分,具体的译码步骤如下述:
1.计算校正子:
s=(10100010000001010100101)。因为w(s)=8>5,进入步骤4。
2.因为所有的w(s)>4,进入步骤5。
3.因为所有的w(s)>3,进入步骤7。
4.因为w(s)>3且iter=0,意味着最多2个错误发生在rp;根据循环码的定义,将接收码字循环移位23个比特,获取新的接收码字,
r=(10111000011001000000000111101000111010110110111)。设置iter=1,进入步骤2。
5.计算新接收码字的校正子:
s=(01110001000000101010010)。因为w(s)=8>5,进入步骤4。
6.因为所有的w(s)>4,进入步骤5。
7.因为所有的w(s)>3,进入步骤6。
8.当i=24,j=25,thens=(11000000000000000000000)。因为w(s)=2≤2,then e=(11000000000000000000000111000000000000000000000),进入步骤8。
9.有c′=r+e=(01111000011001000000000000101000111010110110111)。因为iter=1,向右循环移位c′23比特,获取c′=(00101000111010110110111011110000110010000000000),此时译码成功。
本领域普通技术人员可以理解,实现上述实施例中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。