里德-所罗门码
里德-所罗门码(里所码,Reed-solomon codes,簡稱RS codes)是一种前向錯誤更正的信道编码,对由校正过采样数据所产生的多项式有效。编码过程首先在多个点上对这些多项式求冗余,然后将其传输或者存储。对多项式的这种超出必要值得采样使得多项式超定(过限定)。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。
里德-所罗门码被广泛的应用于各种商业用途,最显著的是在CD、DVD和蓝光光盘上的使用;在数据传输中,它也被用于DSL和WiMAX;广播系统中DVB和ATSC也闪现着它的身影;在电脑科学里,它是第六层标准RAID的重要成员。
目录 |
概述 [编辑]
里德-所罗门码是定长码。这意味着一个固定长度输入的数据将被处理成一个固定长度的输出数据。在最常用的(255,223)里所码中,223个里德-所罗门输入符号(每个符号有8个位元)被编码成255个输出符号。
- 大多数里所错误校正编码流程是成体系的。这意味着输出的码字中有一部分包含着输入数据的原始形式。
- 符号大小为8位元的里所码迫使码长(编码长度)最长为255个符号。
- 标准的(255,223)里所码可以在每个码字中校正最多16个里所符号的错误。由于每个符号事实上是8个位元,这意味着这个码可以校正最多16个短爆发性错误。
里德-所罗门码,如同卷积码一样,是一种透明码。这代表如果信道符号在队列的某些地方被反转,解码器一样可以工作。解码结果将是原始数据的补充。但是,里所码在缩短后会失去透明性。在缩短了的码中,「丢失」的比特需要被0或者1替代,这由数据是否需要补足而决定。(如果符号这时候反转,替代的0需要变成1)。于是乎,需要在里所解码前对数据进行强制性的侦测决定(「是」或者「补足」)。
定义 [编辑]
概述 [编辑]
在里德-所罗门数据编码背后的核心可以形象化的表示为多项式.这种码依靠一个代数理论,这个代数理论说明任何k个唯一的确定点表示一个阶数至少为k-1的多项式。
发送者表明一个在有限域中的k-1阶的多项式,它表示k个数据点。这个多项式就根据它在各点的赋值被“编码”,实际传送的是这些值。在传输中,一些值会被破坏。所以,实际发送的点不止k个。只要正确地接收了足量的数值,接收方就可以推算出原始多项式,进而译出原始数据。
同样的,我们可以通过插值来修正曲线。RS码可以将一组有错误序列的信息码转换到找回画出原始曲线的多项式的系数。
数学公式 [编辑]
给定一个有限域F和多项式环F[x],令n和k满足
. 选择F中的n个确定元素,记作
. 码本C是通过计算F中每个
的阶数小于k的多项式得到的值,即
C是
码; 换句话说,是F中长为n,维为k,最小汉明距离为n-k+1的线性码。
一个RS码满足以上的形式,并遵循: 集合
是
域中所有非零元素组成的集合( 因而,
) .
注意 [编辑]
RS码在实际应用中,常常使用一个有
个元素的有限域 F 。这样,每个符号就可以表示为一个 m 比特的数值。发送方以编码块的形式发送数据点,编码块的符号数量为
个。这样,一个用于8比特符号的RS码每块有
个符号。 (在字节型计算机系统普及的今天,这个数字很实用。) 编码块中的数据符号 k 是一个设计参数,
。在一个 n = 255 的符号块中,常用
的 8 比特数据符加上 32 个 8 比特校验符来编码,用
表示,每块最多可以校正 16 个符号错误。
由有限域中的非零元素构成的集合
可以写作
,
是一个"单位的 n 次本原根"。习惯上按照这种顺序对RS码进行编码。由于
,并且对于每个多项式
,函数
是与它同次的多项式,因而RS码是循环的。
RS码与BCH码的关系 [编辑]
1968年,Berlekamp发现了一种BCH码解码算法。由于RS码可以看作是BCH码的特例,该算法也可用于解码RS码。
通过RS码的另一种定义方法[1],可以很容易的看出RS码是BCH码的一种特例。令有限域
大小为
,
为
的 [[
次原单位根]],亦即
,且对所有小于
的正整数
, 均有
。给定
,
是RS码的码字当且仅当
是多项式
的根。这样,很容易可以看出RS码是一种多项式码,也就是BCH码。生成多项式
为
的最小多项式,而码字为能够整除多项式
的多项式。
RS码的两种定义的等价性 [编辑]
RS码的两种定义方式有着非常大的区别,而它们的等价关系并不是显而易见的。在第一种定义中,码字是多项式的值,而在第二种定义中,码字是多项式的系数。另外,第一种定义要求多项式具有特定的比较小的幂次,而在第二种定义中,多项式需要有特定的根。
这两种定义的等价性可以通过有限域上的离散傅立叶变换来证明。离散傅立叶变换建立起了多项式的系数与值指间的对偶关系。这种对偶关系可以不严格的概述如下:令
和
为两个次数小于
的多项式。如果多项式
的在
(
,
是1的n次原单位根)处的值是
的系数,那么
在这些点上的取值在经过乘以一个特定的系数和重新排列以后就成为了
的系数。
严格的说,令
,
同时假定
和
为离散傅立叶变换对,那么
和
的系数和取值有如下关系:对所有的
,
并且
.
这样,我们可以得出
是满足RS码第一种定义方式的码字
- 当且仅当
的次数小于
(由于
是
的值), - 当且仅当如果
,
, - 当且仅当对所有的
,
(由于
), - 当且仅当
是RS码在第二种定义方式下的码字.
这样,两种定义方式的等价性便得到了证明。
历史 [编辑]
性质 [编辑]
RS 码是一个
码,是一种定义在有限域
上的长度为
, 信息长度为
,最短汉明距离为
的线性分组码。由于这种编码满足Singleton界,因此它是一种最大距离可分码。由于码长为
信息长度为
的码的最大哈明距离为
,所以在这种意义下RS码是一种最优的编码方法。
RS码的纠错能力由最短汉明距离决定,为
。如果预先并不知道错误的位置,RS码最多可以纠正
个错误。而在某些情况下,我们可以预知错误的位置(比如BEC信道),此时RS码最多可以纠正
个错误。如果我们可以预先知道
个错误位置,而此外还有
个未知的错误位置,那么在满足
的情况下,我们可以完全纠正这些错误。
在实际应用中,RS码经常使用大小为
的有限域。在这种情况下,每个符号都包含有
比特的信息。发送者将编码后的分组发送给接受者,每个分组通常含有
-个符号。例如,定义在
上的RS码每个分组包含有
个符号。由于计算机通常以字节为单位来处理数据,因此定义在
的RS码非常流行。设计参数
需要满足
,对于定义在
上的RS码,通常选择
。这个RS码包含有223个数据符号和32个校验符号,表示为
RS码,它最多可以纠正16个符号错误。
RS码的这种性质使得它非常适合纠正传输系统中的突发错误。这是由于不论一个符号中有多少个比特发生错误,都只发生了一个符号错误。而对于不发生突发错误的传输系统,RS码的性能通常不如普通的二元码,
参见 [编辑]
参考资料 [编辑]
- ^ Lidl, Rudolf; Pilz, Günter. Applied Abstract Algebra 2nd. Wiley. 1999. 226.
- F. J. MacWilliams and N. J. A. Sloane, The Theory of Error-Correcting Code, New York: North-Holland Publishing Company, 1977.
- Irving S. Reed and Xuemin Chen, Error-Control Coding for Data Networks", Boston: Kluwer Academic Publishers, 1999.
外部連結 [编辑]
- Schifra Open Source C++ Reed–Solomon Codec
- Henry Minsky's RSCode library, Reed–Solomon encoder/decoder
- A thesis on Algebraic soft-decoding of Reed–Solomon codes. It explains the basics as well.
- Matlab implementation of errors-and-erasures Reed-Solomon decoding
- FEC (Forward Erasure Encoding) Open Source Library (with Python bindings)
![\mathbf{C} = \left\{ \left( f(x_1), f(x_2), \dots, f(x_n) \right)| f \in F[x], \operatorname{deg}(f)<k \right\}.](http://upload.wikimedia.org/math/6/9/1/6919ec647c1d775218a318c3ea04e10e.png)
,
是
,
,
,
(由于
),