Линейные блочные коды. Формализация процедуры проверок на четность.

Линейные блочные коды позволяют выполнять операции кодирования/декодирования не обращаясь к кодовой таблице, а используя лишь некий набор свойств, присущий всем комбинациям в кодовой таблице.(это снижает трудоемкость процесса). Любой линейный блочный код обозначается как (n,k)-код, где: k - количество информационных символов; n – длинна информационных + проверочных. для корректирующего кода n>k, и разность r=n-k есть число проверочных символов. Значения этих символов вычисляется по информационным символам с использованием ряда линейных операций.

для самого простого кода r=1 - код называется кодом с проверкой на чётность (n, n-1). Проверочный символ получается путем суммирования элементов входной комбинации Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , по mod2. При декодировании достаточно провести проверку на чётность

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru . (3.9)

Если проверка прошла ( Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru 0), то это означает, что такая комбинация могла быть передана. Если же проверка не прошла ( Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru 1), то в принятой комбинации, несомненно, есть ошибки.

Кодовое расстояние для кода с проверкой на чётность равно двум, поэтому он обнаруживает любую однократную ошибку. Так же способен обнаружить любую ошибку нечётной кратности, но исправлять ошибки он не может.

Операции (3.8) и (3.9) – чрезвычайно простые. Для реализации каждой из них достаточно иметь один счётный триггер. Тогда сразу возникает идея для повышения корректирующей способности кода использовать не одну, а несколько проверок на чётность. При этом очевидно, что в каждой проверке участвуют не все n символов, а лишь их часть. А в разных проверках должны участвовать разные группы символов.

В качестве примера рассмотрим код (5,2). Зададим его в систематической форме, то есть первые k символов выходной комбинации должны повторять входные информационные символы, а на оставшихся r=n-k=3 позициях размещаются проверочные символы, которые предстоит вычислить при кодировании, то есть

s=(a,b), (3.10)

где a – вектор-строка информационных символов, b – вектор-строка проверочных символов. В частности, рассмотренный выше простой код с проверкой на чётность тоже является систематическим.

Итак, для кода (5,2) из Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru всевозможных пятиразрядных комбинаций в кодовую таблицу включим лишь такие комбинации, которые удовлетворяют всем трём заданным проверкам на чётность (количество проверок на чётность всегда равно r). Результаты проведения этих r проверок для конкретной комбинации представим в виде вектора-строки Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru который имеет медицинское название “синдром”, то есть, сочетание признаков, характеризующих определённое состояние. Допустим, для нашего кода мы выбрали следующую систему проверок



Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , (3.11)

то есть, в первой проверке участвуют символы, стоящие на первой и третьей позициях, и т.д. В кодовую таблицу (типа табл. 3.1) включим лишь те комбинации, для которых вектор c=0.

Оказывается, что их всего 4, как и следовало ожидать (3.7).

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru По приведённой таблице (табл. 3.2) легко найти, что Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , то есть заданная нами система проверок на чётность (3.11) действительно однозначно определяет систематический корректирующий код, способный не только обнаружить любые однократные и двукратные ошибки, но даже исправлять все однократные ошибки.

Систему проверок (3.11) можно более наглядно представить в виде рис.3.1.

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru Первый этап декодирования – обнаружение ошибок – фактически сводится к проведению r проверок на чётность (3.11) в принятой кодовой комбинации. Считается, что ошибок нет, если c=0.

Если c≠0, второй этап – исправление ошибок – также можно провести, пользуясь схемой рис.3.1 и рассматривая различные варианты. Например, если принята комбинация y=11110, то находим c=011 и делаем вывод о наличии ошибок в принятой комбинации. Исходя из возможностей данного кода ( Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru ), делаем предположение, что произошла однократная ошибка (гарантированно исправлять ошибки более высоких кратностей этот код все равно не может (3.6)). Рассматривая разные варианты расположения этой одиночной ошибки, видим, что наблюдаемый результат c=011 мог быть получен лишь в случае, когда эта ошибка расположена во втором символе, следовательно, х=10110 и a=10.

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru Чтобы не перебирать различные варианты каждый раз при декодировании очередной кодовой комбинации, полезно заранее заготовить таблицу, в которой перечислить все возможные векторы исправляемых ошибок (однократных в нашем примере) и соответствующие им значения вектора-синдрома (табл. 3.3). Если бы код был способен исправлять ещё и все двукратные ошибки, в эту таблицу следовало бы включить дополнительно Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru векторов таких ошибок, в частности 11000, 10100 и т.д.

Из табл. 3.3 видно, что анализируемый код (5,2) действительно способен исправить любую однократную ошибку, поскольку все значения c различны, а каждому c соответствует единственный вектор ошибки e. Легко убедиться, что для двукратных ошибок такого однозначного соответствия уже не будет.

Чтобы завершить обсуждение тех вычислений, которые нужно проводить при кодировании и декодировании линейных блочных кодов, полезно продолжить их формализацию, в частности, ввести для них более компактную форму записи.

Вместо схемы рис. 3.1 удобно использовать проверочную матрицу H, содержащую r строк и n столбцов и состоящую из 0 и 1. Каждая строка соответствует одной проверке на четность, причем положение единиц в этой строке указывает на позиции символов кодовой комбинации, участвующих в данной проверке. Для рассмотренного кода (5,2) такая матрица имеет вид

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru     (3.12)

Если линейный блочный код к тому же является систематическим, матрицу H можно условно разделить на два блока H=(Q,Ir), причем левый блок имеет размеры (r Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru k), а правый блок - это единичная матрица (r Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru r). Для нашего примера

Q= Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru     (3.13)

Операция вычисления синдрома (3.11) имеет следующий вид

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.14)

где Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru - транспонированная матрица H.

Кодер систематического кода заполняет первые k позиций информационными символами, поступившими на его вход. На оставшиеся r позиций он ставит проверочные символы, при этом вычисляет их значения так, чтобы для n-разрядной выходной комбинации оказалось c=0. Для рассмотренного примера Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , а из соотношений (3.11) находим три проверочных символа, завершая кодирование:

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru . (3.15)

Первый этап декодирования принятой n-разрядной комбинации y – это обнаружение ошибок, и он также определяется соотношением (3.14)

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.16)

Напомним, что в соответствии с (3.2) вектор ошибок e позволяет выразить принятую комбинацию y через переданную s, то есть y=s+e. Подставим эту сумму в (3.16) и напомним, что для любой передаваемой комбинации Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru . В итоге получим

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , (3.17)

то есть, синдром, вычисленный по принятой комбинации, не зависит от того, какая комбинация из кодовой таблицы была передана, а определяется лишь вектором ошибок. Именно по этой причине при обсуждении операций декодирования у нас не возникло потребности обращаться к кодовой таблице, а ограничились лишь анализом предполагаемого характера возникающих ошибок. Нетрудно догадаться, что и табл. 3.3. была составлена с использованием формулы (3.17), то есть Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru

Не нужно строить код так, чтобы результат какой-либо проверки на чётность следовал из остальных проверок – это пустая трата ресурсов. Кроме того, любой из n символов комбинации должен участвовать хотя бы в одной проверке. При выполнении этих условий любой матрице H соответствует единственная матрица G размера Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , называемая производящей (генераторной) матрицей данного кода. Обе матрицы связаны уравнением

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.18)

где 0 – нулевая матрица размера (k´r).

Если задана матрица H, то, решив уравнение (3.18), можно найти матрицу G. Процедура решения оказывается простой, если код является систематическим. Тогда и матрицу G условно можно разбить на два блока Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru , где Ik - единичная матрица Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru . Используя блочные представления обеих матриц, имеем

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru   (3.19)

то есть построенная таким образом матрица G удовлетворяет уравнению (3.18). В частности, для (5,2)-кода (3.11) матрица G имеет вид

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru   (3.20)

Из сказанного ясно, что матрица G, как и матрица H, полностью определяет код. Поэтому другая интерпретация тех же процессов кодирования и декодирования может быть основана на матрице G.

Кодирование линейным блочным кодом можно проводить по формуле

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.21)

Используя определение (3.18), видим, что синдром для полученной таким образом кодовой комбинации всегда равен нулю

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.22)

то есть эта комбинация входит в кодовую таблицу.

Возможность декодирования (вычисления синдрома) принятой комбинации с использованием матрицы G становится вполне очевидной, если код является систематическим (3.10). Из принятой комбинации Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru берут вектор-строку информационных символов ап и по ней заново проводят кодирование, например, по формуле (3.21), получая новое значение вектора-строки проверочных символов Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.23)

По определению (3.16), вектор-синдром для принятой комбинации sп равен

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru   (3.24)

то есть для вычисления синдрома достаточно сложить два вектора проверочных символов: принятый и вновь вычисленный.

В заключение сделаем несколько замечаний.

1) Любой линейный блочный код обладает следующим свойством: если из кодовой таблицы взять две (или более) комбинаций и сложить их (разумеется, по модулю 2), то получим комбинацию, принадлежащую той же таблице.

2) Операцию умножения вектора-строки на матрицу удобно провести следующим образом: элементы этого вектора записываем против строк матрицы, а затем суммируем те строки, против которых оказались единицы.

3) По определению (3.4) кодовое расстояние нужно находить по кодовой таблице. Для линейных блочных кодов существует менее трудоёмкий способ: к матрице G нужно дописать строку, состоящую из нулей, и тем же способом (3.4) определить минимальное расстояние для полученной таблицы.

4) Одновременная одинаковая перестановка столбцов матриц G и H даёт новый код, эквивалентный исходному, поскольку это приводит к аналогичной перестановке соответствующих символов во всех кодовых комбинациях. Тот же результат будет, если один из двух столбцов заменить их суммой. Многократное повторение подобных операций можно применить, например, для приведения кода к систематической форме.

5) Применяются два способа реализации кодера и декодера: программный (при использовании компьютера) и аппаратный. При аппаратной реализации кодирования для любого линейного блочного кода можно применить такой универсальный (следовательно, не самый экономный) способ: входную k - разрядную последовательность информационных символов последовательно, символ за символом, ввести в k – разрядный входной регистр сдвига, чтобы иметь возможность проводить одновременно операции со всеми символами; при помощи набора сумматоров по модулю 2 вычислить раздельно все n символов кодовой комбинации по формуле (3.21) с учётом примечания 2 (для систематического кода можно ограничиться вычислением лишь проверочных символов по формулам типа (3.15)); при помощи n-входового мультиплексора вывести последовательно все n символов в нужном порядке (разумеется, и для вывода символов можно применить n-разрядный регистр сдвига, предварительно записав в него n вычисленных символов кодовой комбинации).

Универсальный способ декодирования предполагает следующие действия: n принимаемых символов последовательно вводятся в n-разрядный регистр сдвига; при помощи набора сумматоров по модулю 2 вычисляют все r элементов синдрома по формулам типа (3.11) (можно подсчитать потребное количество сумматоров даже с учётом дублирования некоторых операций); при помощи логического устройства (назовём его анализатором синдрома), пользуясь таблицей (e–c), по вычисленному значению c находят e, то есть номера ошибочных символов; при помощи k-входового мультиплексора принятые информационные символы последовательно подают на вход сумматора по модулю 2, а на второй вход сумматора в том же порядке с анализатора синдрома подают найденные элементы вектора ошибок, в итоге в этом сумматоре ошибки последовательно исправляются в процессе вывода информационных символов.

6) Избыточность (в техническом смысле) для линейного блочного кода равна

Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru (3.25)

Увеличить кодовое расстояние (и корректирующую способность) кода при заданном n удаётся лишь ценой увеличения избыточности, поэтому основной девиз помехоустойчивого кодирования – минимальное значение r при заданных n и Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru .

7) Код, укороченный по сравнению с исходным систематическим кодом, получают следующим образом: для передачи сообщения используют лишь последние m позиций k-разрядного вектора a, а первые k-m позиций заполняют нулями, затем кодируют обычным образом. По линии связи передаётся укороченная комбинация, а в пункте приёма перед кодированием записывают нули на недостающие позиции. При таком укорочении Линейные блочные коды. Формализация процедуры проверок на четность. - student2.ru и r не изменяются, но избыточность возрастает за счёт уменьшения n, поэтому этот способ следует применять лишь в случае крайней необходимости.

Наши рекомендации