Reed-Solomon纠错码(RS码)

Reed-Solomon利用范特蒙矩阵或者柯西矩阵的特性来实现纠错码的功能。

Reed-Solomon编码:

把输入数据视为向量D=(D1,D2,…,Dn),编码后数据视为向量(D1,D2,…Dn,C1,C2,…,Cm),RS编码可以看做为如下图的矩阵运算。编码矩阵B必须具有任意子矩阵可逆的特性。

rs纠错 python RS纠错码推导_算法


Reed-Solomon解码:

RS最多能容忍m个数据块被删除,m包括实际数据和冗余数据。数据恢复的过程如下:

(1)假设D1,D4,C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。

rs纠错 python RS纠错码推导_rs纠错 python_02


根据上图所示RS编码运算等式,可以得到如下B’以及等式。

rs纠错 python RS纠错码推导_数据_03


(2)由于B’是可逆的,记B’的逆矩阵为(B’ ^ -1),则B’*(B’^-1)=I单位矩阵。两边左乘B’逆矩阵。

rs纠错 python RS纠错码推导_算法_04


(3)得到如下原始数据D的计算公式

rs纠错 python RS纠错码推导_rs纠错 python_05

有限域:

假设每一个向量元素由8bit组成,那么矩阵相乘后的结果必然要超过8bit的范围,为了解决这个问题,提出有限域的概念。
1.域
一组元素的集合,以及在集合上的四则运算,构成一个域。其中加法和乘法必须满足交换、结合和分配的规律。加法和乘法具有封闭性,即加法和乘法结果仍然是域中的元素。
域中必须有加法单位元和乘法单位元,且每一个元素都有对应的加法逆元和乘法逆元。但不要求域中的0有乘法逆元。
2.有限域
有限域又称为伽罗华域,其仅含有限多个元素的域。GF(2^ w)表示含有2^ w个元素的有限域,那么在计算机中常用的有限域是GF(2^8)
3.单位元
Identity Element,也叫幺元,通常使用e来表示单位元,单位元和其他元素结合时,并不会改变那些元素。
对于二元运算 * ,若a * e=a,e称为右单位元;若e * a=a,e称为左单位元,若a * e=e*a =a,则称e为单位元。
4.逆元
对于二元运算 *,若a * b=e,则a称为b的左逆元素,b称为a的右逆元素。若a * b=b * a=e,则称a为b的逆元,b为a的逆元。
5.本原多项式
域中不可约多项式是不能够进行因子分解的多项式,本原多项式是一种特殊的不可约多项式,当一个域上的本原多项式确定了,这个域上的运算也就确定了。

**RS-Code是纠删码的一种,**Erasure Code(EC),即纠删码,是一种前向错误纠正技术。主要应用在网络传输中避免包的丢失,存储系统利用它来提高存储的可靠性。相比多副本复制而言,纠删码能够以更小的数据冗余度获得更高数据可靠性,但编码方式较复杂,需要大量计算。纠删码只能容忍数据丢失,无法容忍数据篡改。

EC是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

目前,纠删码技术在分布式存储系统中应用主要有三类,阵列纠删码(Array Code:RAID5\RAID6)、RS、LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。