RS编码和纠错算法
2013-11-25 19:18
477 查看
13.2 RS编码和纠错算法 13.2.1. GF(2m)域 RS(Reed-Solomon)码在伽罗华域(Galois Field,GF)中运算的,因此在介绍RS码之前先简要介绍一下伽罗华域。 CD-ROM中的数据、地址、校验码等都可以看成是属于GF(2m) = GF(28)中的元素或称符号。GF(28)表示域中有256个元素,除0,1之外的254个元素由本原多项式P(x)生成。本原多项式的特性是得到的余式等于0。CD-ROM用来构造GF(28)域的是 (13-1) 而GF(28)域中的本原元素为 α = (0 0 0 0 0 0 1 0) 下面以一个较简单例子说明域的构造。 [例13.1] 构造GF(23)域的本原多项式假定为 α定义为 = 0的根,即 α3+α+1 = 0 和 α3 = α+1 GF(23)中的元素可计算如下:
表13-01 GF(23)域中与二进制代码对照表,
加法例:α0+α3 = 001+011 = 010 = α1 减法例:与加法相同 乘法例:α5·α4 = α(5+4)mod7 = α2 除法例:α5/α3 = α2 α3/α5 = α-2 = α(-2+7) = α5 取对数:log(α5) = 5 这些运算的结果仍然在GF(23)域中。 13.2.2 RS的编码算法 RS的编码就是计算信息码符多项式除以校验码生成多项式之后的余数。 在介绍之前需要说明一些符号。在GF(2m)域中,符号(n,k)RS的含义如下:
对一个信息码符多项式,RS校验码生成多项式的一般形式为 (13-2) 式中,m0是偏移量,通常取K0 = 0或K0 = 1,而(n-k)≥2t (t为要校正的错误符号数)。 下面用两个例子来说明RS码的编码原理。 [例13.2] 设在GF(23)域中的元素对应表如表13-01所示。假设(6,4)RS码中的4个信息符号为m3、m2、m1和m0,信息码符多项式为 (13-3) 并假设RS校验码的2个符号为Q1和Q0,的剩余多项式为 这个多项式的阶次比的阶次少一阶。 如果K0 = 1,t = 1,由式(13-2)导出的RS校验码生成多项式就为 = (13-4) 根据多项式的运算,由式(13-3)和式(13-4)可以得到 m3x5+m2x4+m1x3+m0x2+Q1x+Q0 = (x-α)(x-α2)Q(x) 当用x = α和x = α2代入上式时,得到下面的方程组, 经过整理可以得到用矩阵表示的(6,4)RS码的校验方程: 求解方程组就可得到校验符号: 在读出时的校正子可按下式计算: [例13.3] 在例13.2中,如果K0 = 0,t = 1,由式(13-2)导出的RS校验码生成多项式就为 = (13-5) 根据多项式的运算,由(13-3)和(13-5)可以得到下面的方程组: 方程中的αi也可看成符号的位置,此处i = 0,1,…,5。 求解方程组可以得到RS校验码的2个符号为Q1和Q0, (13-6) 假定mi为下列值:
Q1 = α6 = 101 Q0 = α4 = 110 13.2.3 RS码的纠错算法 RS码的错误纠正过程分三步: (1)计算校正子(syndrome),(2)计算错误位置,(3)计算错误值。现以例13.3为例介绍RS码的纠错算法。 校正子使用下面的方程组来计算: 为简单起见,假定存入光盘的信息符号m3、m2、m1、m0和由此产生的检验符号Q1、Q0均为0,读出的符号为m3′、m2′、m1′、m0′、Q1′和Q0′。 如果计算得到的s0和s1不全为0,则说明有差错,但不知道有多少个错,也不知道错在什么位置和错误值。如果只有一个错误,则问题比较简单。假设错误的位置为αx,错误值为mx,那么可通过求解下面的方程组: 得知错误的位置和错误值。 如果计算得到s0 = α2和s1 = α5,可求得αx = α3和mx = α2,说明m1出了错,它的错误值是α2。校正后的m1 = m1′+mx ,本例中m1=0。 如果计算得到s0 = 0,而s1≠0,那基本可断定至少有两个错误,当然出现两个以上的错误不一定都是s0 = 0和s1≠0。如果出现两个错误,而又能设法找到出错的位置,那么这两个错误也可以纠正。如已知两个错误和的位置和,那么求解方程组: 就可知道这两个错误值。 CD-ROM中的错误校正编码CIRC和里德-索洛蒙乘积码(Reed Solomon Product-like Code,RSPC)就是采用上述方法导出的。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
转自http://wenku.baidu.com/view/8cd8c8cf89eb172ded63b7ff.html |
相关文章推荐
- RJ-45接口信号定义
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- 浅析STL中的常用算法
- JavaScript 组件之旅(二)编码实现和算法
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 1 2 3 4 5 6 7 8 9 = 110的java实现
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 【代码】Pythonの代码片段
- STL中算法
- 数据结构&算法学习
- 算法的时间复杂度
- 算法导论:选择排序的原理与实现
- PHP实现四种常用的排序算法
- 图解插入排序算法
- 一些常见算法的JavaScript实现
- 平方根sqrt()函数的底层算法效率
- 二叉搜索树的一些相关算法介绍
- 欧几里德算法(辗转相处法)练手