Лабораторная работа №4
ПОСТРОЕНИЕ И РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ КОДОВ
Целью работы является усвоение методов построения и технической реализации кодирующих и декодирующих устройств циклических кодов.
1. Указания к построению кодов.
Математической основой циклических кодов является теория колец. В качестве основных операций в циклическом коде используются операции сложения по модулю два и символического умножения, в котором для сохранения степени многочлена не выше (n-1) используется искусственный прием. Если степень многочлена после умножения не выше n-1, то он и принимается за результат умножения, а если выше, то он делится на другой многочлен (xn+1) и в качестве результата умножения принимается остаток от деления.
Выбор образующего многочлена
Любой групповой (n,k) код может быть записан в виде матрицы, включающей k линейно-независимых строк по n символов. Среди всего многообразия таких кодов можно выделить коды, у которых строки образующих матриц связаны дополнительным условием цикличности.
Все строки образующей матрицы такого кода могут быть получены циклическим сдвигом одной комбинации: называемой образующей для данного кода. Коды, удовлетворяющие этому условию, получили название циклических кодов.
Сдвиг осуществляется справа налево, причем крайний левый символ каждый раз переносится в конец комбинации. Запишем, например, образующую матрицу кода, получающуюся циклическим сдвигом комбинации 001011:
| |||
При описании циклических кодов n -разрядные кодовые комбинации представляются в виде многочленов фиктивной переменной х. Показатели степени у х соответствуют номерам разрядов (начиная с нулевого), а коэффициентами при х являются цифры 0 и 1 (поскольку мы рассматриваем двоичные коды).
|
Запишем, например, в виде многочлена образующую кодовую комбинацию 001011
Действия над кодовыми комбинациями теперь сводятся к действию над многочленами.
Вышеупомянутый циклический сдвиг образующего многочлена без переноса единицы в конец кодовой комбинации соответствует простому умножению на х. Например, вторая строка матрицы есть
g0 (x)x=x4+x2+x (010110).
Циклический сдвиг строки матрицы с единицей в старшем разряде (слева) равносилен умножению соответствующего многочлена на х с одновременным вычитанием из результата многочлена хп+1
Поскольку операции вычитания и сложения по модулю два тождественны, многочлен, соответствующий любой строке матрицы, может быть записан в виде
gi(x)=g0(x)xi+С(xn+1),
где С равно 1, если степень g0(x)xi превышает n-1, и нулю, если не превышает.
Если выбрать за образующий такой многочлен g0(x), который является делителем двучлена xn+1, то все многочлены матрицы, а поэтому и все многочлены кода (разрешенные кодовые комбинации), будут делиться на g0 (x) без остатка. Ни один многочлен, соответствующий запрещенной кодовой комбинации, на образующий многочлен нацело не делится. Это свойство позволяет обнаруживать ошибки. По виду остатка можно определить и вектор ошибки, а, следовательно, и устранить ее.
Любая принятая кодовая комбинация h(x), содержащая ошибку, может быть представлена в виде суммы по модулю два неискаженной комбинации кода f(x), делящейся на g0(x) без остатка, и вектора ошибки e(x). Для однозначности декодирования каждому вектору ошибки должен соответствовать отличный от других остаток - опознаватель. Чем больше различных остатков может быть образовано при делении h(x) на g0(x), тем больше разновидностей ошибок способен исправить данный циклический код.
|
Наибольшее число остатков, равное 2m-1 (исключая нулевой), может обеспечить только неприводимый (простой) многочлен g0(x) степени m, принадлежащий показателю степени п, если m и n связаны соотношением n= 2m-1.
В литературе по кодированию доказано, что для любого т существует по крайней мере один неприводимый многочлен степени т, принадлежащий показателю степени п, если n=2m-1.
При известном числе информационных символов (к) задача, следовательно, сводится к тому, чтобы определить наименьшую степень т образующего многочлена, обеспечивающего обнаружение или исправление ошибок заданной кратности. Зная п и т по имеющимся в ряде книг таблицам многочленов, неприводимых при двоичных коэффициентах, можно выбрать и конкретный образующий многочлен.
Для исправления одиночных ошибок требуемая минимальная степень образующего многочлена (m) находится из соотношения
2т-1=2п-k-1³ C1n
Выберем, например образующий многочлен для случая к =4. Тогда п =7 и т =3.
В таблице неприводимых многочленов, принадлежащих степени п, находим два многочлена третей степени, так как х7+1=(х+1)(х3+х+1)(х3+х2+1).
Примем за образующий многочлен g(x)=x3+x2+1 (1101). Чтобы убедится, что каждому вектору ошибки соответствует отличный от других остаток, поделим каждый из этих векторов на g0(x).
|
Векторы ошибок т младших разрядов имеют вид:
Степени соответствующих им многочленов меньше степени образующего многочлена g0(x). Поэтому они сами являются остатками при нулевой целой части. Остаток, соответствующий ошибке в следующем разряде, получается при делении 1000 на 1101, т.е.
1000 1101
1101
Аналогично могут быть найдены и остальные остатки. Однако их можно получить проще, деля на g0(x) комбинацию в виде единицы с рядом нулей и выписывая все промежуточные остатки
1000000000 1101 Остатки
1101
1010 101
1101 111
1110 011
1101 110
01100 001
1101 010
001000 100
При последующем делении остатки повторяются.
Если выбрать в качестве образующего многочлена , то тоже получим требуемое число различных остатков – 7.
Если k =5 и требуется исправлять тоже одиночную ошибку, то . Откуда получаем nmin =9 и m= n – k =9–5=4. Примем . Этот образующий многочлен сохранится до k =11, так как неравенство будет выполняться при nmin =15 и m =4.