В теории кодирования стандартный массив (или массив Слепяна) — это массив , который перечисляет все элементы определенного векторного пространства . Стандартные массивы используются для декодирования линейных кодов ; т.е. для поиска соответствующего кодового слова для любого полученного вектора.
Стандартный массив для [ n , k ]-кода — это массив , где:
Например, [ 5 , 2 ]-код = { 0 , 01101, 10110, 11011} имеет следующий стандартный массив:
0 | 01101 | 10110 | 11011 |
10000 | 11101 | 00110 | 01011 |
01000 | 00101 | 11110 | 10011 |
00100 | 01001 | 10010 | 11111 |
00010 | 01111 | 10100 | 11001 |
00001 | 01100 | 10111 | 11010 |
11000 | 10101 | 01110 | 00011 |
10001 | 11100 | 00111 | 01010 |
Вышеприведенное является лишь одной возможностью для стандартного массива; если бы 00011 был выбран в качестве первого лидера смежного класса с весом два, был бы построен другой стандартный массив, представляющий код.
Первая строка содержит вектор 0 и кодовые слова ( сам 0 является кодовым словом). Кроме того, самый левый столбец содержит векторы минимального веса, перечисляя сначала векторы веса 1, а затем используя векторы веса 2. Также каждый возможный вектор в векторном пространстве появляется ровно один раз.
Поскольку каждый возможный вектор может появиться только один раз в стандартном массиве, необходимо соблюдать осторожность при построении. Стандартный массив можно создать следующим образом:
Сложение векторов выполняется по модулю q. Например, двоичные коды складываются по модулю 2 (что эквивалентно побитовому сложению XOR). Например, в , 11000 + 11011 = 00011.
Выбор различных лидеров смежных классов создаст немного отличающийся, но эквивалентный стандартный массив и не повлияет на результаты при декодировании.
Пусть будет двоичным [4,2]-кодом. т.е. C = {0000, 1011, 0101, 1110}. Чтобы построить стандартный массив, мы сначала перечислим кодовые слова в строке.
0000 | 1011 | 0101 | 1110 |
Затем мы выбираем вектор минимального веса (в данном случае, веса 1), который не использовался. Этот вектор становится лидером смежного класса для второй строки.
0000 | 1011 | 0101 | 1110 |
1000 |
После шага 3 мы завершаем строку, добавляя лидер смежного класса к каждому кодовому слову.
0000 | 1011 | 0101 | 1110 |
1000 | 0011 | 1101 | 0110 |
Затем мы повторяем шаги 2 и 3, пока не закончим все ряды. Мы останавливаемся, когда достигаем рядов.
0000 | 1011 | 0101 | 1110 |
1000 | 0011 | 1101 | 0110 |
0100 | 1111 | 0001 | 1010 |
0010 | 1001 | 0111 | 1100 |
В этом примере мы не могли выбрать вектор 0001 в качестве лидера смежного класса последней строки, хотя он и соответствует критерию минимального веса (1), поскольку вектор уже присутствовал в массиве. Однако мы могли выбрать его в качестве первого лидера смежного класса и построить другой стандартный массив.
Чтобы декодировать вектор с помощью стандартного массива, вычтите вектор ошибки — или лидер смежного класса — из полученного вектора. Результатом будет одно из кодовых слов в . Например, предположим, что мы используем код C = {0000, 1011, 0101, 1110} и построили соответствующий стандартный массив, как показано в примере выше. Если мы получаем вектор 0110 в качестве сообщения, мы находим этот вектор в стандартном массиве. Затем мы вычитаем лидер смежного класса вектора, а именно 1000, чтобы получить результат 1110. Мы получили кодовое слово 1110.
Декодирование через стандартный массив является формой декодирования ближайшего соседа . На практике декодирование через стандартный массив требует больших объемов памяти - код с 32 кодовыми словами требует стандартный массив с записями. Другие формы декодирования, такие как декодирование синдрома , более эффективны.
Декодирование через стандартный массив не гарантирует, что все векторы декодируются правильно. Если мы получаем вектор 1010, использование стандартного массива выше декодирует сообщение как 1110, на расстоянии кодового слова 1. Однако 1010 также находится на расстоянии 1 от кодового слова 1011. В таком случае некоторые реализации могут потребовать повторной отправки сообщения, или неоднозначный бит может быть помечен как стирание, и следующий внешний код может исправить его. Эта неоднозначность является еще одной причиной того, что иногда используются разные методы декодирования.