内容:解释和理解伽罗华域和基础的 RS 编码理论,和编码实践。
1. Cauchy or Vandermonde?
2. 写一个Reed-Solomon code引擎
3. 高性能纠删码编码
4. 有限域内的四则运算
5. 分布式系统系列教程之: Erasure-Code
1. 伽罗华域
有关 群、环、域
在之前总结过,这里也有用到的代数基础
范德蒙码和柯西码的译码过程、范德蒙系统码的生成矩阵的构造都需要矩阵求逆运算,柯西码的构造中涉及到求乘法逆元的运算,这些运算在实数域内存在无法整除的情况,因此需要将运算限定在伽罗华域内进行。
构造
本原多项式 P(x) 是 GF(2) 上的 m 次多项式,具有性质:(x2m−1+1)/P(x) 的余式为 0,并且 P(x) 不能被 GF(2) 上任意次数小于 m 大于 0 的多项式整除。
举例说明 GF(23) 构造方法,选择本原多项式 P(x)=x3+x+1 ,令 P(x)=0 的根为 α ,即 α3+α+1=0,伽罗华域加法运算为异或,所以 α3=α+1。利用本原元 α 的幂次可以生成该域下所有的元素(除 0 外),如下表:
如果 (xn+1) 能整除 P(x) 【次数为 m 】,其最小次数(正整数) n=2m−1 ,所以有 α2m−1=1=α0 ,即幂次达到 n=2m−1 重新回到 α0 即等于 1,所以扩域 GF(2w) 共有 2w 个元素(包括元素0).
2. 矩阵
Vandermonde 矩阵
实数域
m×n 的 Vandermonde 矩阵形式如下,Vij=αj−1,(常见取 x1,x2,⋯,xm 为 1,2,⋯,m)
⎣⎢⎢⎢⎢⎢⎡111⋮1α1α2α3⋮αmα12α22α32⋮αm2⋯⋯⋯⋱⋯α1n−1α2n−1α3n−1⋮αmn−1⎦⎥⎥⎥⎥⎥⎤
实数下的不同元素的 Vandermonde 矩阵 (n×n) 是一定可逆的,但它的任意 m 行 m 列(m<n)组成的子矩阵不一定是可逆的.
【参考mathoverflow】
- 对于实数下的 vandermonde 矩阵,元素为
不同正数时
任意的子方阵是可逆的(*)
- 由于 n∗n 的 Vandermonde 方阵是可逆的,若 m>n 则任意的 n∗n 的子方阵是可逆(也是范德蒙矩阵)【可逆证明提示:n 次多项式最多有 n 个根;其行列式不等于0】
【实数域下的可逆性】
互不相等的实数构成的范德蒙矩阵是可逆的,这里考虑它的任意子方阵。
【有限域下的可逆性】
实数域下可能不可逆,有限域下更可能如此。
注意:
根据【Note: Correction to the 1997 Tutorial on Reed-Solomon Coding】来构造 VRS 的生成矩阵。
Cauthy 矩阵
m×n 的 Cauthy 矩阵形式如下:
- X={x1,x2,…,xm},Y={y1,y2,…,yn},【都是 GF(2w) 元素】
- 满足 X∩Y=∅,即任意 xi=yj,xi=xj,yi=yj (都不相同)
⎣⎢⎢⎢⎢⎢⎢⎡x1+y11x2+y11x3+y11⋮xm+y11x1+y21x2+y21x3+y21⋮xm+y21x1+y31x2+y31x3+y31⋮xm+y31⋯⋯⋯⋱⋯x1+yn1x2+yn1x3+yn1⋮xm+yn1⎦⎥⎥⎥⎥⎥⎥⎤
对应的行列式的值为证明:
Dn=i=1∏nj=1∏n(ai+bj)1≤i≤j≤n∏(aj−ai)(bj−bi)
Cauchy 矩阵的任意 n 行 n 列组成的矩阵都是可逆的, 因为任意子矩阵还是 Cauchy 矩阵.
【实数域下的可逆性】
在上述条件下,Cauthy 矩阵是非奇异矩阵,可逆矩阵。
【有限域下的可逆性】
矩阵也是非奇异矩阵
矩阵编码
- 利用单位矩阵扩展 Vandermonde 后的 n×k 矩阵,可能任意 k 行的子矩阵不可逆,在有限域中也是如此。
- 通常使用 Vandermonde 矩阵,做矩阵的初等变换使得前 k×k 是单位矩阵。
- 可以直接使用单位矩阵扩展 Cauthy 矩阵,任意的子方阵仍然可逆。
Cauchy Reed-Solomon 的优化
使用 Cauthy 矩阵
可逆性更好,构造更加简单;可以在 O(n2) 完成矩阵的逆运算
投影到 GF(2)
方法:每个 GF(2w) 中的元素 e 可以表示为一个 w 维的列向量 V(e)(多项式系数或二进制表示);每个元素 e 同样可以表示为一个 w×w 的二进制矩阵 M(e),其第 i 列是 e∗2i−1 的二进制表示即 V(e∗2i−1)。例如在 GF(23) 下元素的表示为:
得到结论:
- 根据映射关系,不同元素对应的 M(e) 是不同的
- 基于标准的位运算 M(e1)∗V(e2)=V(e1e2)
- 基于标准的位运算 M(e1)∗M(e2)=M(e1e2)
根据结论,可以将 GF(2w) 的运算转化为 GF(2) 下标准的位运算(异或,按位与),降低了运算的复杂度。
(2)的理解
用 ei,j 表示元素 ei 二进制的第 j 位:
e1e2=e1(e2,020+e2,121+⋯+e2,w−12w−1)=e120∗e2,0+e121∗e2,1+⋯+e12w−1∗e2,w−1=[e120e121⋯e12w−1]⋅⎣⎢⎢⎢⎡e2,0e2,1⋮e2,w−1⎦⎥⎥⎥⎤
将对应的元素映射为 w 向量,即可:
V(e1e2)=M(e1)∗V(e2)
(3)的理解
M(e1)∗M(e2)=M(e1)⋅[V(e220)V(e221)⋯V(e22w−1)]=[V(e1e220)V(e1e221)⋯V(e1e22w−1)]=M(e1e2)
链接
工具
- 有限域的计算工具
- 快速乘法
问答
- Linear independence of Vandermonde matrix in systematic Reed-Solomon code
论文
- A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems
- Note: Correction to the 1997 Tutorial on Reed-Solomon Coding
- Optimizing Cauchy Reed-Solomon Codes for Fault-Tolerant Storage Applications
- An XOR-Based Erasure-Resilient Coding Scheme
- Tutorial: Erasure Coding for Storage Applications
欢迎任何与文章内容相关并保持尊重的评论😊 !