Math 你能解释一下里德所罗门编码部件的身份矩阵吗?

Math 你能解释一下里德所罗门编码部件的身份矩阵吗?,math,theory,reed-solomon,Math,Theory,Reed Solomon,我正在从事一个对象存储项目,需要了解纠错算法, 我已经完成了这篇文章,作为一个开端,也是一些论文。 1. 2. 但我似乎无法理解身份矩阵红框的下半部分,它是从哪里来的。如何计算? 谁能解释一下吗 编码矩阵是一个6x4范德蒙矩阵,使用修改的求值点{0123445},使矩阵的上4x4部分为单位矩阵。为了创建矩阵,生成6 x 4 Vandermonde矩阵,其中矩阵[r][c]=powr,c,然后与矩阵上部4 x 4部分的逆相乘以生成编码矩阵。这相当于您在上面链接的维基百科文章中提到的Reed So

我正在从事一个对象存储项目,需要了解纠错算法, 我已经完成了这篇文章,作为一个开端,也是一些论文。 1. 2. 但我似乎无法理解身份矩阵红框的下半部分,它是从哪里来的。如何计算?


谁能解释一下吗

编码矩阵是一个6x4范德蒙矩阵,使用修改的求值点{0123445},使矩阵的上4x4部分为单位矩阵。为了创建矩阵,生成6 x 4 Vandermonde矩阵,其中矩阵[r][c]=powr,c,然后与矩阵上部4 x 4部分的逆相乘以生成编码矩阵。这相当于您在上面链接的维基百科文章中提到的Reed Solomon的原始视图的系统编码,它不同于Reed Solomon的BCH视图,后者链接1。二,。提到维基百科的示例系统编码矩阵是问题中使用的编码矩阵的转置版本

生成编码矩阵的代码位于此github源文件的底部附近:

解码分两步执行。首先,恢复丢失的数据行,然后使用现在恢复的数据重新生成丢失的奇偶校验行

对于2行缺失的数据,删除编码矩阵的2行对应行,4 x 4子矩阵倒置,并使用4行未缺失的数据和奇偶校验相乘来恢复2行缺失的数据。如果只有一行数据缺失,则选择第二行数据,就像它缺失一样,以生成反向矩阵。数据的实际重新生成只需要将反转矩阵的对应行用于矩阵乘法

数据恢复后,将使用编码矩阵的相应行从现在恢复的数据中重新生成任何缺少的奇偶校验行

根据所示数据,数学基于有限域GF2^8模0x11D。例如,使用有限域数学,使用编码矩阵的最后一行和数据矩阵的最后一列进行编码是0x1c·0x44+0x1b·0x48+0x14·0x4c+0x12·0x50=0x25

问题示例没有明确说明6x4编码矩阵可以编码4xn矩阵,其中n是每行的字节数。示例,其中n==8:

encode           data                        encoded data

01 00 00 00                                  31 32 33 34 35 36 37 38
00 01 00 00      31 32 33 34 35 36 37 38     41 42 43 44 45 46 47 48
00 00 01 00  x   41 42 43 44 45 46 47 48  =  49 4a 4b 4c 4d 4e 4f 50
00 00 00 01      49 4a 4b 4c 4d 4e 4f 50     51 52 53 54 55 56 57 58
1b 1c 12 14      51 52 53 54 55 56 57 58     e8 eb ea ed ec ef ee dc
1c 1b 14 12                                  f5 f6 f7 f0 f1 f2 f3 a1

assume rows 0 and 4 are erasures and deleted from the matrices:

00 01 00 00                                  41 42 43 44 45 46 47 48
00 00 01 00                                  49 4a 4b 4c 4d 4e 4f 50
00 00 00 01                                  51 52 53 54 55 56 57 58
1c 1b 14 12                                  f5 f6 f7 f0 f1 f2 f3 a1

invert encode sub-matrix:

inverse         encode          identity

46 68 8f a0     00 01 00 00     01 00 00 00
01 00 00 00  x  00 00 01 00  =  00 01 00 00
00 01 00 00     00 00 00 01     00 00 01 00
00 00 01 00     1c 1b 14 12     00 00 00 01

reconstruct data using sub-matrices:

inverse         encoded data                restored data

46 68 8f a0     41 42 43 44 45 46 47 48     31 32 33 34 35 36 37 38
01 00 00 00  x  49 4a 4b 4c 4d 4e 4f 50  =  41 42 43 44 45 46 47 48
00 01 00 00     51 52 53 54 55 56 57 58     49 4a 4b 4c 4d 4e 4f 50
00 00 01 00     f5 f6 f7 f0 f1 f2 f3 a1     51 52 53 54 55 56 57 58

The actual process only uses the rows of the matrices that correspond
to the erased rows that need to be reconstructed.
First data is reconstructed:

sub-inverse     encoded data                reconstructed data

                41 42 43 44 45 46 47 48
46 68 8f a0  x  49 4a 4b 4c 4d 4e 4f 50  =  31 32 33 34 35 36 37 38
                51 52 53 54 55 56 57 58
                f5 f6 f7 f0 f1 f2 f3 a1

Once data is reconstructed, reconstruct parity

sub-encode      data                        reconstruted parity

                31 32 33 34 35 36 37 38
1b 1c 12 14  x  41 42 43 44 45 46 47 48  =  e8 eb ea ed ec ef ee dc
                49 4a 4b 4c 4d 4e 4f 50
                51 52 53 54 55 56 57 58
这种方法的一种替代方法是使用BCH view Reed Solomon。对于奇数个偶数,例如RS20,17 3偶数,编码需要2个矩阵乘法和一个异或,而对于单个擦除,只需要异或。对于e>1的擦除,执行e-1乘以n的矩阵乘法,然后执行异或运算。对于偶数个偶数,如果XOR用作编码的一部分,则需要使用e×n矩阵乘法进行校正,或使用e×n矩阵进行编码,允许使用一个XOR进行校正

另一个备选方案是Raid 6,其中将综合征附加到数据矩阵,但不形成适当的码字。其中一行称为P,只是XOR,另一行称为Q,是GF2^8中2的连续幂。对于3奇偶校验Raid 6,第三行称为R,是GF2^8中4的连续幂。与标准BCH视图不同,如果Q或R行丢失,则必须重新计算它,而不是使用XOR来更正它。通过使用对角线模式,如果n个磁盘中有1个出现故障,则更换磁盘时只需重新生成1/n个Q和R


请注意,此pdf文件的替代方法使用与上述方法相同的有限域,即GF2^8 mod 0x11D,这可能使比较方法更容易。

我更新了我的答案。编码矩阵是经过修改的Vandermonde矩阵,因此矩阵的上部4 x 4部分是单位矩阵。这本质上是使用Reed Solomon在维基百科文章中提到的原始视图进行的系统编码。我在回答中包含了一个指向生成编码矩阵的源代码的链接。是的,这是一个擦除代码,我还在研究它。感谢您的参考,我想我很接近了:请注意,罗格斯大学和特修斯大学的文章是关于BCH view Reed Solomon的,这与这里使用的原始视图Reed Solomon不同。除了Wikipedia的文章,我不确定您在哪里可以找到关于Reed Solomon原始视图的更多信息,但我在回答中链接到的github存储库包含您可以使用的源代码。我再次更新了我的回答,并链接到一些供应商用于Raid 6的替代方法,它生成BCH视图Reed-Solomon综合征,而不是生成平价。我更新了答案,显示数据可以是4 x n,其中n是每个碎片的字节数,示例中n==8。使用传统的基于BCH视图的Reed-Solomon会更简单。如果只有一个碎片是坏的,那么它可以通过对其他碎片进行异或生成。对于错误为3的20个碎片,bac kblaze方法涉及17 x 17矩阵的求逆,而基于BCH的方法求逆3 x 3矩阵。如果有兴趣,我可以更新我的答案。
encode           data                        encoded data

01 00 00 00                                  31 32 33 34 35 36 37 38
00 01 00 00      31 32 33 34 35 36 37 38     41 42 43 44 45 46 47 48
00 00 01 00  x   41 42 43 44 45 46 47 48  =  49 4a 4b 4c 4d 4e 4f 50
00 00 00 01      49 4a 4b 4c 4d 4e 4f 50     51 52 53 54 55 56 57 58
1b 1c 12 14      51 52 53 54 55 56 57 58     e8 eb ea ed ec ef ee dc
1c 1b 14 12                                  f5 f6 f7 f0 f1 f2 f3 a1

assume rows 0 and 4 are erasures and deleted from the matrices:

00 01 00 00                                  41 42 43 44 45 46 47 48
00 00 01 00                                  49 4a 4b 4c 4d 4e 4f 50
00 00 00 01                                  51 52 53 54 55 56 57 58
1c 1b 14 12                                  f5 f6 f7 f0 f1 f2 f3 a1

invert encode sub-matrix:

inverse         encode          identity

46 68 8f a0     00 01 00 00     01 00 00 00
01 00 00 00  x  00 00 01 00  =  00 01 00 00
00 01 00 00     00 00 00 01     00 00 01 00
00 00 01 00     1c 1b 14 12     00 00 00 01

reconstruct data using sub-matrices:

inverse         encoded data                restored data

46 68 8f a0     41 42 43 44 45 46 47 48     31 32 33 34 35 36 37 38
01 00 00 00  x  49 4a 4b 4c 4d 4e 4f 50  =  41 42 43 44 45 46 47 48
00 01 00 00     51 52 53 54 55 56 57 58     49 4a 4b 4c 4d 4e 4f 50
00 00 01 00     f5 f6 f7 f0 f1 f2 f3 a1     51 52 53 54 55 56 57 58

The actual process only uses the rows of the matrices that correspond
to the erased rows that need to be reconstructed.
First data is reconstructed:

sub-inverse     encoded data                reconstructed data

                41 42 43 44 45 46 47 48
46 68 8f a0  x  49 4a 4b 4c 4d 4e 4f 50  =  31 32 33 34 35 36 37 38
                51 52 53 54 55 56 57 58
                f5 f6 f7 f0 f1 f2 f3 a1

Once data is reconstructed, reconstruct parity

sub-encode      data                        reconstruted parity

                31 32 33 34 35 36 37 38
1b 1c 12 14  x  41 42 43 44 45 46 47 48  =  e8 eb ea ed ec ef ee dc
                49 4a 4b 4c 4d 4e 4f 50
                51 52 53 54 55 56 57 58