Не могли бы вы объяснить матрицу идентификации части кодирования Рида Соломона?

Я работаю над проектом хранилища объектов, и мне нужно понять Рида Соломона алгоритм исправления ошибок, я просмотрел этот Документ в качестве стартового, а также некоторые дипломная работа.
1. content.sakai. rutgers.edu
2. theseus.fi
но я не могу понять нижнюю часть матрицы идентичности (красный прямоугольник), откуда она исходит. Как выполняется этот расчет?
введите здесь описание изображения

Кто-нибудь может объяснить это.


person Sakib Farhad    schedule 27.01.2020    source источник
comment
Я обновил свой ответ. Матрица кодирования представляет собой матрицу Вандермонда, модифицированную таким образом, что верхняя часть матрицы размером 4x4 представляет собой единичную матрицу. По сути, это систематическое кодирование с использованием оригинального представления Рида Соломона, как упоминалось в статье в Википедии. Я включил ссылку на исходный код, который генерирует матрицу кодирования, в свой ответ.   -  person rcgldr    schedule 28.01.2020
comment
Да, это код стирания, я все еще изучаю его. Спасибо за ссылку, я думаю, что я близок :)   -  person Sakib Farhad    schedule 28.01.2020
comment
Обратите внимание, что статьи Рутгерса и Тесея посвящены взгляду BCH на Рида Соломона, который отличается от исходного взгляда на Рида Соломона, используемого здесь. Помимо статьи в Википедии, я не уверен, где вы можете найти что-то еще об оригинальном представлении Рида Соломона, но репозиторий github, на который я ссылался в своем ответе, содержит исходный код, который вы можете использовать.   -  person rcgldr    schedule 28.01.2020
comment
Я еще раз обновил свой ответ, добавив ссылку на альтернативный метод, используемый некоторыми поставщиками для Raid 6, который генерирует синдромы BCH View Reed Solomon (вместо создания паритетов).   -  person rcgldr    schedule 28.01.2020
comment
Я обновил свой ответ, чтобы показать, что данные могут быть 4 x n, где n — количество байтов на сегмент, с примером, где n == 8. Использование Рида Соломона на основе традиционного представления BCH было бы проще. Если только один шард неисправен, то его можно сгенерировать путем xor'ирования других осколков. Для 20 осколков с 3 ошибочными метод backblaze включает инвертирование матрицы 17 x 17, а метод на основе BCH инвертирует матрицу 3 x 3. Я могу обновить свой ответ, если интересно.   -  person rcgldr    schedule 02.05.2020


Ответы (1)


Матрица кодирования представляет собой матрицу Вандермонда 6 x 4 с использованием точек оценки {0 1 2 3 4 5}, измененных таким образом, что верхняя часть матрицы 4 x 4 представляет собой единичную матрицу. Чтобы создать матрицу, генерируется матрица Вандермонда 6 x 4 (где matrix[r][c] = pow(r,c) ), а затем умножается на обратную верхнюю часть матрицы 4 x 4 для получения кодирования матрица. Это эквивалентно систематическому кодированию с исходным представлением Рида Соломона, как указано в статье Википедии, на которую вы ссылались выше, что отличается от представления Рида Соломона BCH, на которое ссылаются ссылки 1. и 2.. Пример систематической матрицы кодирования Википедии представляет собой транспонированную версию матрицы кодирования, используемой в вопросе.

https://en.wikipedia.org/wiki/Vandermonde_matrix

https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction#Systematic_encoding_procedure:_The_message_as_an_initial_sequence_of_values

Код для создания матрицы кодирования находится внизу этого исходного файла github:

https://github.com/Backblaze/JavaReedSolomon/blob/master/src/main/java/com/backblaze/erasure/ReedSolomon.java

Vandermonde     inverse upper   encoding
matrix          part of matrix  matrix

01 00 00 00                     01 00 00 00
01 01 01 01     01 00 00 00     00 01 00 00
01 02 04 08  x  7b 01 8e f4  =  00 00 01 00
01 03 05 0f     00 7a f4 8e     00 00 00 01
01 04 10 40     7a 7a 7a 7a     1b 1c 12 14
01 05 11 55                     1c 1b 14 12

Декодирование выполняется в два этапа. Сначала восстанавливаются все отсутствующие строки данных, затем все отсутствующие строки четности восстанавливаются с использованием уже восстановленных данных.

Для 2 отсутствующих строк данных удаляются 2 соответствующие строки матрицы кодирования, а подматрица 4 x 4 инвертируется и используется умножение 4 неотсутствующих строк данных и контроль четности для восстановления 2 отсутствующих строк данных. Если отсутствует только 1 строка данных, то выбирается вторая строка данных, как если бы она отсутствовала, чтобы сгенерировать инвертированную матрицу. Фактическая регенерация данных требует только использования соответствующих строк инвертированной матрицы для умножения матрицы.

После восстановления данных все отсутствующие строки четности восстанавливаются из уже восстановленных данных с использованием соответствующих строк матрицы кодирования.

Основываясь на показанных данных, математика основана на конечном поле GF (2 ^ 8) по модулю 0x11D. Например, кодирование с использованием последней строки матрицы кодирования с последним столбцом матрицы данных: (0x1c·0x44)+(0x1b·0x48)+(0x14·0x4c)+(0x12·0x50) = 0x25 (с использованием конечного поля математика).


Пример вопроса не дает понять, что матрица кодирования 6 x 4 может кодировать матрицу 4 x n, где 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 Reed Solomon. Для нечетного числа четностей, таких как RS(20,17) (3 четности), для кодирования требуется 2 умножения матриц и одно XOR, а для одного стирания требуется только XOR. Для стираний e>1 выполняется умножение матрицы (e-1) на n с последующим XOR. Для четного числа четностей, если XOR используется как часть кодирования, то для исправления требуется умножение матрицы e на n или матрица e x n, используемая для кодирования, позволяющая использовать одно XOR для исправления.

Другой альтернативой является Raid 6, где синдромы добавляются к матрице данных, но не образуют правильного кодового слова. Одна из строк синдрома, называемая P, является просто XOR, другая строка, называемая Q, представляет собой последовательные степени 2 в GF (2 ^ 8). Для Raid 6 с 3 четностью третья строка называется R и представляет собой последовательные степени 4 в GF (2 ^ 8). В отличие от стандартного представления BCH, если строка Q или R потеряна, ее необходимо пересчитать (в отличие от использования XOR для ее исправления). При использовании диагонального шаблона, если 1 из n дисков выходит из строя, то при замене диска необходимо регенерировать только 1/n дисков Q и R.

http://alamos.math.arizona.edu/RTG16/ECC/raid6.pdf

Обратите внимание, что в альтернативном методе этого pdf-файла используется то же конечное поле, что и в методе выше, GF(2^8) mod 0x11D, что может упростить сравнение методов.

person rcgldr    schedule 27.01.2020