В теории кодирования блочные коды представляют собой большое и важное семейство коды исправления ошибок, которые кодируют данные в блоках. Существует огромное количество примеров блочных кодов, многие из которых имеют широкий спектр практических применений. Абстрактное определение блочных кодов концептуально полезно, потому что оно позволяет теоретикам кодирования, математикам и компьютерным специалистам изучать ограничения всех блочных кодов унифицированным способом. Такие ограничения часто принимают форму границ, которые связывают различные параметры блочного кода друг с другом, такие как его скорость и его способность обнаруживать и исправлять ошибки.
Примеры блочных кодов: коды Рида – Соломона, коды Хэмминга, коды Адамара, коды расширителей, коды Голея и коды Рида – Маллера. Эти примеры также принадлежат к классу линейных кодов, и поэтому они называются линейными блочными кодами . В частности, эти коды известны как алгебраические блочные коды или циклические блочные коды, потому что они могут быть сгенерированы с использованием логических полиномов.
Алгебраические блочные коды обычно жестко декодируются с использованием алгебраических декодеров.
Термин блочный код может также относиться к любому коду с исправлением ошибок, который действует на блок битов входных данных для создания битов выходных данных . Следовательно, блочный кодер - это устройство без памяти. В соответствии с этим определением коды, такие как турбокоды, сверточные коды с завершением и другие итеративно декодируемые коды (турбоподобные коды), также будут считаться блочными кодами. Сверточный кодер без завершения может быть примером неблочного (без кадра) кода, который имеет память и вместо этого классифицируется как древовидный код.
В этой статье рассматриваются «алгебраические блочные коды».
Коды с исправлением ошибок используются для надежной передачи цифровых данных по ненадежным каналам связи с учетом шума канала. Когда отправитель хочет передать, возможно, очень длинный поток данных с использованием блочного кода, отправитель разбивает поток на части некоторого фиксированного размера. Каждая такая часть называется сообщением, и процедура, заданная блочным кодом, кодирует каждое сообщение индивидуально в кодовое слово, также называемое блоком в контексте блочных кодов. Затем отправитель передает все блоки получателю, который, в свою очередь, может использовать некоторый механизм декодирования для (надеюсь) восстановления исходных сообщений из возможно поврежденных полученных блоков. Производительность и успех всей передачи зависит от параметров канала и блочного кода.
Формально, блочный код - это инъективное отображение
Здесь - конечное и непустое множество и и - целые числа. Значение и значение этих трех параметров и других параметров, связанных с кодом, описаны ниже.
Кодируемый поток данных моделируется как строка над некоторым алфавитом. Размер алфавита часто записывается как . Если , то блочный код называется двоичным блочным кодом. Во многих приложениях полезно рассматривать как простую степень и определять с конечным полем .
Сообщения являются элементами из , то есть строки длиной . Следовательно, число называется длиной сообщения или размером блочного кода.
Длина блока блочного кода - это количество символов в Блок. Следовательно, элементы из представляют собой строки длины и соответствуют блокам, которые могут быть получены получателем. Поэтому их еще называют принятыми словами. Если для некоторого сообщения , то называется кодовым словом .
rate блочного кода определяется как отношение длины сообщения к длине блока:
Большая скорость означает, что количество фактического сообщения на переданный блок велико. В этом смысле скорость измеряет скорость передачи, а величина измеряет накладные расходы, возникающие из-за кодирования с помощью блочного кода. Это простой теоретический факт, что скорость не может превышать , поскольку данные, как правило, не могут быть сжаты без потерь. Формально это следует из того факта, что код является инъективным отображением.
расстояние или минимальное расстояние d блочного кода - это минимальное количество позиций, в которых любые два отдельных кодовых слова отличаются, а относительное расстояние - это дробь . Формально для полученных слов , пусть обозначают расстояние Хэмминга между и , то есть количество позиций, в которых и различаются. Тогда минимальное расстояние кода определяется как
Поскольку любой код должен быть инъективным, любые два кодовых слова не совпадают по крайней мере в одной позиции, поэтому расстояние любого кода составляет не менее . Кроме того, расстояние равно минимальному весу для линейных блочных кодов, потому что:
Чем больше расстояние, тем больше ошибок исправляется и обнаруживается. Например, если мы рассматриваем только ошибки, которые могут изменить символы отправленного кодового слова, но никогда не стираем и не добавляем их, то количество ошибок - это количество позиций, в которых отправленное кодовое слово и полученное слово отличаются. Код с расстоянием d позволяет приемнику обнаруживать до ошибок передачи после изменения позиции кодового слова никогда не могут случайно дать другое кодовое слово. Кроме того, если возникает не более ошибок передачи, приемник может однозначно декодировать полученное слово в кодовое слово. Это связано с тем, что каждое полученное слово имеет не более одного кодового слова на расстоянии . Если возникает больше чем ошибок передачи, приемник не может однозначно декодировать полученное слово в целом, так как может быть несколько возможных кодовые слова. Один из способов для приемника справиться с этой ситуацией состоит в использовании декодирования списка, при котором декодер выводит список всех кодовых слов в определенном радиусе.
Обозначение описывает блочный код над алфавитом размером с длиной блока , длина сообщения и расстояние . Если блочный код является линейным блочным кодом, тогда квадратные скобки в обозначении являются используется для представления этого факта. Для двоичных кодов с индекс иногда опускается. Для разделяемых кодов максимального расстояния расстояние всегда равно , но иногда точное расстояние равно не известно, нетривиально доказать или заявить, или не нужно. В таких случаях компонент может отсутствовать.
Иногда, особенно для неблочных кодов, используется запись используется для кодов, содержащих кодовые слова длины . Для блочных кодов с сообщениями длины по алфавиту размера это число будет .
Как упоминалось выше, существует огромное количество кодов с исправлением ошибок, которые на самом деле являются блочными кодами. Первым исправляющим ошибки кодом был код Хэмминга (7,4), разработанный Ричардом У. Хэммингом в 1950 году. Этот код преобразует сообщение, состоящее из 4 бит, в кодовое слово 7 бит, добавив 3 бита четности. Следовательно, этот код является блочным кодом. Оказывается, это также линейный код и расстояние 3. В сокращенной записи выше это означает, что код Хэмминга (7,4) - это код.
Коды Рида – Соломона представляют собой семейство кодов с и является степенью простого числа. Коды ранга - это семейство кодов с . коды Адамара представляют собой семейство коды с и .
Кодовое слово можно рассматривать как точку в -размерном пространстве , а код является подмножеством . Код имеет расстояние означает, что , в шаре Хэмминга нет другого кодового слова с центром в с радиусом , который определяется как набор слов размерности , которых расстояние от до не превышает . Точно так же с (минимальным) расстоянием имеет следующие свойства:
называется семейством кодов, где - это код с монотонным увеличением .
Скорость семейства кодов C определяется как
Относительное расстояние семейства кодов C определяется как
Чтобы изучить отношенияh ip между и , набор известны нижняя и верхняя границы блочных кодов.
Граница синглтона - это сумма скорости и относительное расстояние блочного кода не может быть намного больше 1:
В другом слов, каждый блочный код удовлетворяет неравенству . коды Рида – Соломона являются нетривиальными примерами кодов, которые удовлетворяют singleton, связанный с равенством.
Для , . Другими словами, .
Для общего случая следующие границы Плоткина верны для любого с расстоянием d:
Для любого q- код с расстоянием ,
, где , - q-ичная функция энтропии.
Определить .. Пусть - максимальное количество кодовых слов в шаре Хэмминга радиуса e для любого кода. расстояния d.
Тогда у нас есть граница Джонсона: , если
Блочные коды привязаны к задаче упаковки сфер , которому на протяжении многих лет уделялось некоторое внимание. В двух измерениях это легко визуализировать. Возьмите связку монет на столе и сдвиньте их вместе. В результате получился шестиугольник, похожий на пчелиное гнездо. Но блочные коды полагаются на большее количество измерений, которые трудно визуализировать. Мощный код Голея, используемый для связи в дальнем космосе, использует 24 измерения. При использовании в качестве двоичного кода (что обычно бывает) размеры относятся к длине кодового слова, как определено выше.
Теория кодирования использует модель N-мерной сферы. Например, сколько пенни можно упаковать в круг на столе или в трех измерениях, сколько шариков можно упаковать в глобус. Другие соображения относятся к выбору кода. Например, упаковка шестиугольника в прямоугольную коробку оставляет пустые места по углам. По мере увеличения размеров процент пустого пространства становится меньше. Но при определенных размерах упаковка использует все пространство, и эти коды являются так называемыми совершенными кодами. Таких кодов очень мало.
Другое свойство - это количество соседей, которое может иметь одно кодовое слово. Опять же, рассмотрим в качестве примера гроши. Сначала мы упаковываем пенни в прямоугольную сетку. У каждого пенни будет 4 ближайших соседа (и 4 на дальних углах). В шестиугольнике у каждого пенни будет 6 ближайших соседей. Соответственно, в трех и четырех измерениях максимальную упаковку дают 12-гранный и 24-элементный с 12 и 24 соседями соответственно. Когда мы увеличиваем размеры, количество ближайших соседей увеличивается очень быстро. В общем, значение задается числами поцелуев.
. В результате увеличивается количество способов, которыми шум заставляет приемник выбирать соседа (следовательно, ошибка). Это фундаментальное ограничение блочных кодов, да и вообще всех кодов. Может быть труднее вызвать ошибку для одного соседа, но количество соседей может быть достаточно большим, поэтому общая вероятность ошибки действительно снижается.