Читайте также: |
|
Таблица 6.3. Предел возможностей коррекции для кода (127,106)
|
Нормальная матрица дает возможность взглянуть на возможные компромиссы между исправлением и обнаружением ошибок. Рассмотрим пример кода (и, к) и факторы, определяющие выбор конкретных значений (л, к).
1. Для получения нетривиального соотношения между исправлением и обнаружением ошибок желательно, чтобы код имел возможности коррекции ошибок, по крайней мере, с? = 2. Согласно уравнению (6.44), минимальное расстояние при этом равно = 2t + 1 = 5.
2. Чтобы кодовая система была нетривиальной, желательно, чтобы количество бит данных было не менее к = 2. Следовательно, число кодовых слов 2* = 4. Далее будем считать наш код следующим: (п, 2).
3. Нас интересует минимальное значение п, которое позволит исправлять все одно- и двухбитовые ошибки. В этом примере каждый из 2" н-кортежсй в матрице будет табулирован. Минимальное значение п нас интересует потому, что при каждом увеличении п на единицу число /г-кортежей в нормальной матрице удваивается. Это условие, разумеется, диктуется только соображениями удобства использования таблицы. Для реальных прикладных кодов минимальное значение п выбирается по разным причинам — эффективность использования полосы пропускания и простота системы. Если при выборе п используется предел Хэмминга, то п следует выбрать равным
7. В то же время размерность полученного кода (7,2) не соответствует указанным выше требованиям г = 2 и dnm = 5. Чтобы увидеть это, следует ввести другую верхнюю границу возможностей кода в коррекции г-битовых ошибок (или dmn). Эта граница, называемая предел Плоткина [7], определяется следующим образом:
dmn<n\2k ' • (6.54)
2 -1
В общем случае, линейный код (л, к) должен удовлетворять всем перечисленным выше условиям, включая возможности коррекции ошибок (или минимальное расстояние). Для высокоскоростных кодов из удовлетворения предела Хэмминга следует удовлетворение предела Плоткина; это справедливо, например, для рассмотренного ранее кода (127,106). Для кодов с низкими скоростями передачи существует обходной путь удовлетворения названных требований [7]. Поскольку в нашем примере речь идет именно о таких кодах, важно оценить их возможности в коррекции ошибок с помощью предела Плоткина. Поскольку dnm = 5, из уравнения (6.53) получаем, что л должно быть равно 8; следовательно, для удовлетворения всех требований, поставленных в этом примере, минимальная размерность кода равна (8,2). Можно ли практически использовать подобный код (8, 2)? Этого делать не стоит, поскольку это потребует слишком большой полосы пропускания; лучше выбрать более эффективный код. Данный код мы используем здесь только с методической целью, единственным его преимуществом являются удобные размеры его нормальной матрицы.
6.6.3. Разработка кода (8, 2)
Ответ на вопрос, как выбираются кодовые слова из пространства 2s 8-кортежей, неоднозначен, хотя определенные возможности выбора все же существуют. Ниже перечислены некоторые моменты, которые могут указать наилучшее решение.
1. Количество кодовых слов 2* = 22 = 4.
2. Среди кодовых слов должен быть нулевой вектор.
3. Следует учесть свойство замкнутости — сумма двух любых кодовых слов в пространстве должна давать кодовое слово из этого же пространства.
4. Каждое кодовое слово содержит 8 двоичных разрядов.
5. Поскольку dam = 5, весовой коэффициент каждого кодового слова (за исключением нулевого) также должен быть не менее 5 (в силу свойства замкнутости). Весовой коэффициент вектора определяется как число ненулевых компонентов этого вектора.
6. Предположим, что код является систематическим; значит, 2 крайних правых бита каждого кодового слова являются соответствующими битами сообщения.
Далее предлагается вариант набора кодовых слов, удовлетворяющих всем перечисленным выше требованиям.
Сообщения Кодовые слова
0 00000000
01 11110001
10 00111110
И 11001111
Создание набора кодовых слов может выполняться совершенно произвольно; нужно только неуклонно следовать свойствам весовых коэффициентов и придерживаться систематической формы кода. Выбор первых нескольких кодовых слов обычно очень прост. Далее процесс, как правило, усложняется и возможность выбора все больше ограничивается за счет свойства замкнутости.
6.6.4. Соотношение между обнаружением и исправлением ошибок
Для кодовой системы (8, 2), выбранной в предыдущем разделе, матрицу генератора (кхп) = (2 х 8) можно записать в следующем виде:
'О 0 1 1 1 1 1 01
G =
1 1 1 1 0 0 0 1
Декодирование начинается с расчета синдрома, что можно представлять как изучение “симптомов” ошибки. Для кода (л, к) (и - ^-битовый синдром S является произведением принятого n-битового вектора г и транспонированной проверочной матрицы Н размерностью (п - к) х п. Проверочная матрица Н построена таким образом, что строки матрицы G ортогональны строкам матрицы Н, т.е. GHr = 0. В нашем примере кода (8,2) S — это 6-битовый вектор, а Н — матрица размером 6x8, где
Синдром для каждой модели ошибки можно рассчитать, исходя из уравнения (6.37), а именно
/= 1,.... 2я-*,
где S, — один из 2"~* = 64 синдромов, ае, - один из 64 образующих элементов классов смежности (моделей ошибки) в нормальной матрице. На рис. 6.15, помимо самой нормальной матрицы, показаны все 64 синдрома для кода (8, 2). Набор синдромов рассчитывался с помощью уравнения (6.37); позиции произвольной строки (смежный класс) нормальной матрицы имеют один и тот же синдром. Исправление искаженного кодового слова осуществляется путем расчета его синдрома и локализации моделей ошибки, соответствующей этому синдрому. В заключение модель ошибки прибавляется (по модулю 2) к поврежденному кодовому слову, что и дает правильное кодовое слово. Из уравнения (6.49), повторно приведенного ниже, видно, что между возможностями обнаружения и исправления ошибок существует некий компромисс, ограничиваемый расстоянием.
dnm> СХ + Р+ 1
Здесь а представляет количество исправляемых битовых ошибок, а (3 — количество обнаруживаемых битовых ошибок, причем (3 > ос. В коде (8, 2) возможны следующие компромиссы между этими двумя величинами:
Обнаружение ((3) Исправление (ос)
~2 2
3 1
4 О
Из данной таблицы видно, что код (8, 2) можно использовать только для исправления ошибок; это означает, что код вначале обнаруживает |3 = 2 ошибки, после чего они исправляются. Если пожертвовать возможностью исправления и использовать код для исправления только однобитовых ошибок, то возможность обнаружения ошибки возрастает до (3 = 3 ошибок. И наконец, если целиком отказаться от исправления ошибок, то декодер сможет обнаруживать ошибки с (3 = 4. В случае, если ошибки только обнаруживаются, реализация декодера будет очень простой: производится вычисление синдрома и обнаруживается ошибка при появлении любого ненулевого синдрома.
Для исправления однобитовых ошибок декодер может реализовываться с логическими элементами [4], подобными приведенным на рис. 6.12, где принятый вектор кода г поступал в схему в двух точках. В верхней части рисунка принятые символы поступают на логический элемент исключающего ИЛИ, который и определяет синдром. Для любого принятого вектора синдром рассчитывается согласно уравнению (6.35).
S, = г,Нг 1=1,...,2"-*
1. | |||||
2. | |||||
3. | |||||
5. | |||||
6. | |||||
7. | |||||
8. | |||||
9. | |||||
10. | |||||
13. | |||||
14. | |||||
15. | |||||
16. | |||||
17. | |||||
18. | |||||
19. | |||||
20. | |||||
21. | |||||
22. | |||||
23. | |||||
24. | |||||
25. | |||||
26. | |||||
27. | |||||
28. | |||||
29. | |||||
30. | |||||
31. | |||||
001100. | 32. | ||||
33. | |||||
34. | |||||
35. | |||||
36. | |||||
37. | |||||
38. | |||||
39. | |||||
40. | |||||
41. | |||||
42. | |||||
43. | |||||
44. | |||||
45. | |||||
46. | |||||
47. | |||||
48. | |||||
49. | |||||
50. | |||||
51. | |||||
52. | |||||
53. | |||||
54. | |||||
55. | |||||
56. | |||||
101001 ' | 57. | ||||
100111 * | 58. | ||||
59. | |||||
60. | |||||
61. | |||||
62. | |||||
63. | |||||
64. |
С помощью значений Н7 для кода (8, 2), необходимо так соединить элементы схемы (подобно тому, как это было сделано на рис. 6.12), чтобы вычислялось следующее:
Каждая из цифр Sj (j= 1,..., 6), определяющая синдром S, (/= 1,..., 64), связана с входным принятым вектором кода следующим образом:
Для реализации схемы декодера для кода (8, 2), подобной представленной на рис. 6.12, необходимо, чтобы восемь принятых разрядов соединялись с шестью сумматорами по модулю 2 (см. выше), выдающими цифры синдрома. Соответственно, потребуются и другие модификации схемы, приведенной на рисунке.
. Если декодер реализован так, чтобы исправлять только однобитовые ошибки (т.е. а= 1 и Р = 3), это эквивалентно ограничению матрицы на рис. 6.15 девятью первыми классами смежности, а исправление ошибок происходит, только когда один из восьми синдромов соответствует появлению однобитовой ошибки. Затем схема декодирования (подобная изображенной на рис. 6.12) преобразует синдром в соответствующую модель ошибки. Далее модель ошибки прибавляется по модулю 2 к “потенциально” искаженному принятому вектору, т.е. происходит исправление ошибки. Для проверки ситуаций, когда синдром не равен нулю, а схемы коррекции нет, нужно вводить дополнительные логические элементы (например, для однобитовых ошибок, соответствующих синдромам 10-64).
Если декодер реализован так, чтобы исправлять одно- и двухбитовые ошибки (а это означает, что обнаруживается, а затем исправляется р = 2 ошибки), это эквивалентно ограничению матрицы (рис. 6.15) 37 классом смежности. Хотя код (8,2) может исправлять некоторые модели трехбитовых ошибок, соответствующие образующим элементам классов смежности под номерами 38—64, декодер чаще всего реализуется как декодер с ограниченным расстоянием', это означает, что он исправляет все искаженные символы, содержащие ошибку только в t или меньшем числе бит. Нереализованные возможности используются для некоторого улучшения процесса обнаружения ошибок. Как и ранее, реализация декодера подобна схеме, изображенной на рис. 6.12.
6.6.5. Взгляд на код сквозь нормальную матрицу
В контексте рис. 6.15 код (8,2) удовлетворяет пределу Хэмминга. Иными словами, из нормальной матрицы можно видеть, что код (8,2) способен исправлять все модели одно- и двухбитовых ошибок. Рассмотрим следующее: пусть передача происходит по
каналу, который всегда вносит ошибки в виде пакета 3-битовых ошибок, и, следовательно, нет необходимости в исправлении одно- или двухбитовых ошибок. Можно ли настроить образующие элементы классов смежности так, чтобы они соответствовали только трехбитовым ошибкам? Нетрудно определить, что в последовательности из 8
бит существует |
возможностей произвести трехбитовую ошибку. Если единст-
венным нашим желанием является коррекция только этих 56 моделей трехбитовых ошибок, то кажется, что в нормальной матрице достаточно места (достаточное количество классов смежности), поскольку всего в ней имеется 64 строки. Будет ли это работать? Однозначно, нет. Для любого кода главным параметром, определяющим способности кода к коррекции ошибок, является dmm. Для кода (8, 2) dnm = 5, а это означает, что возможно исправление только 2-битовых ошибок.
Как нормальная матрица может помочь разобраться, почему эта схема не будет работать? Чтобы осуществить исправление ^-битовых ошибок для группы ^-битовых моделей ошибки, полная группа векторов с весовым коэффициентом х должна быть классом смежности, т.е. они должны находиться только в крайнем левом столбце. На рис. 6.15 можно видеть, что все векторы с весовым коэффициентом 1 и 2 находятся в крайнем левом столбце нормальной матрицы и нигде более. Если мы даже и втиснем все векторы с весовым коэффициентом 3 в строку со второго номера по 57-й, увидим, что некоторые из этих векторов снова появятся в матрице где-нибудь еще (что нарушит основное свойство нормальной матрицы). На рис. 6.15 затененные блоки обозначают те 56 векторов, которые имеют весовой коэффициент 3. Взгляните на образующие элементы классов смежности, представляющие 3-битовые модели ошибки, в строках 38, 41—43, 46-49 и 52 нормальной матрицы. Потом посмотрите на позиции в тех же строках в крайнем правом столбце, где затененные блоки показывают другие векторы с весовым коэффициентом 3. Видите некоторую неопределенность, существующую для каждой строки, о которых говорилось выше, и понятно ли теперь, почему нельзя исправить все 3-битовые модели ошибки с помощью кода (8,2)? Допустим, декодер принял вектор с весовым коэффициентом 3 — 11001000, размещенный в строке 38 в крайнем правом столбце. Это искаженное кодовое слово могло появиться, во-первых, при передаче кодового слова 11001111, искаженного 3-битовой модели ошибки 00000111, а во-вторых, при передаче кодового слова 00000000, искаженного 3-битовой моделью ошибки 1 1001000.
6.7. Циклические коды
Важным подклассом линейных блочных кодов являются двоичные циклические коды (cyclic codes). Код легко реализуется на регистре сдвига с обратной связью; на подобных регистрах сдвига с обратной связью вычисляется синдром; алгебраическая структура циклического кода естественным образом позволяет эффективно реализовать методы декодирования. Итак, линейный код (п, к) называется циклическим, если он обладает следующим свойством. Если л-кортеж U= (и0, их, и2,..., и„~\) является кодовым словом в подпространстве S, тогда U(l)= (ы„_ь м0, иь и2,..., и„.2), полученный из U с помощью циклического сдвига, также является кодовым словом в S. Или, вообще, U(i) = (M„_„ и„_,+ 1,..., и0, и 1,..., ыя_,_i), полученный i циклическими сдвигами, является кодовым словом в S.
Компоненты кодового слова U = (и0, иь и2, ■■■, ип_() можно рассматривать-как коэффициенты полинома U(X):
U(X) = Uq + U[X + и2Х +... + ип ~ 1Хп. (6.54)
Полиномиальную функцию U(Xj можно рассматривать как “заполнитель” разрядов кодового слова U, т.е. вектор л-кортежа описывается полиномом степени п -1 или меньше. Наличие или отсутствие каких-либо членов в полиноме означает наличие 1 или 0 в соответствующем месте л-кортежа. Если,-й компонент отличен от нуля, порядок полинома равен л-1. Удобство такого полиномиального представления кодового слова станет более понятным по мере дальнейшего обсуждения алгебраических свойств циклических кодов.
6.7.1. Алгебраическая структура циклических кодов
В кодовых словах, выраженных в полиномиальной форме, циклическая природа кода проявляется следующим образом. Если U(X) является.кодовым словом, представленным полиномом порядка (л - 1), то U0)(X) — остаток от деления Х'и(А") на Х"+ 1 — также является кодовым словом.
Иными словами,
= + (6.55,а)
Хп+1 Хп+1
или, умножая обе части уравнения на Х"+ 1,
X'U(X) = q(X)(Xn + 1) + U(0(X), (6.55,6)
остаток
что в модульной арифметике можно описать следующим образом:
и(0(Х) = Х'ида по модулю (X" + 1). (6.56)
Здесь “х по модулю у” означает остаток от деления х на у. Ниже справедливость выражения (6.56) демонстрируется для случая < = 1.
l)(Xj = u0 + ulX+u2X2 +... + un-2Xn~2+un_iXn~l
XU(X)= i/qX + U\X" + u2X^ +... + un _2Xn *+ un _ iXn
К последнему выражению прибавим и вычтем ы„_! или, поскольку мы пользуемся арифметическими операциями по модулю 2, можем прибавить, дважды.
XU(X) ~ | + UqX + и^Х“ + и2Х^ Н 1-ип_2Хп 1 + ип_= U^(X) + ип^(Хп +1)
U(1>(X)
Поскольку порядок U(1)(X) равен п - 1, этот полином не делится на Xя + 1. Таким образом, используя уравнение (6.55,а), можно записать следующее:
U^X) = XV(X) по модулю (Xя + 1).
Обобщая, приходим к уравнению (6.56).
Пример 6.7. Циклический сдвиг вектора кода
Пусть U = 1 10 1 для п = 4. Выразите кодовое слово в полиномиальной форме и, используя уравнение (6.56), выполните третий циклический сдвиг кодового слова.
Решение
U(X) = 1 + X + X3 полином записан в порядке возрастания степени
X'U(X) = X3 + X4 + X6, где < = 3
Разделим ^ТДХ) на X4 + 1 и найдем остаток, используя полиномиальное деление.
X6 + X4 + X3
Xе + X2
X4 + X3 + X2
_______________ + 1
X3 + X2 + I остаток U(3)(x)
Записываем остаток в порядке возрастания степеней: 1 + X2 + X3, кодовое слово U® =10 11 представляет собой три циклических сдвига U = 1 10 1. Напомним, что для двоичных кодов операция сложения выполняется по модулю 2, так что + 1 = - 1, и, следовательно, в расчетах знаки “минус” не отражены.
6.7.2. Свойства двоичного циклического кода
С помощью полиномиального генератора можно создать циклический код, почти так же как создавались блочные коды с использованием матрицы генератора. Полиномиальный генератор g(X) для циклического кода (п, к) является единственным и имеет следующий вид:
g (X)=go + glX + g2X2+...+gyXp. (6.57)
Здесь go и gp должны быть равны 1. Каждый полином кодового слова в подпространстве имеет вид U(X) = m(X)g(X), где U(X) — полином степени п - 1 или меньше. Следовательно, полином сообщения ш(А') будет иметь следующий вид:
т(Х) =т0 + т{Х + т2Х2 +... + /и„_р_1Х"_р_(6.58)
Всего в коде (п, к) существует 2п~р полинома кодовых слов и 2к вектора кода. Поэтому на каждый вектор кода должен приходиться один полином кодового слова.
п-р = к
или
р = п — к
Отсюда следует, что g(X), как показано в уравнении (6.57), должен иметь степень п-к, и каждый полином кодового слова в коде (л, к) можно выразить следующим образом:
U(X) = (т0 + туХ + т2Х2 +... + /Яп^Х"-1) g(X). (6.59)
U будет считаться действительным кодовым словом из подпространства S тогда и только тогда, когда U(X) делится на g(X) без остатка.
Полиномиальный генератор g(X) циклического кода (л, к) является множителем Xй + 1, т.е. X" + 1 = g(X)h(X). Например,
X7 + 1 = (1 + X + X3) (1 + X + X2 + X4).
Используя g(X) = 1 + X + X3 как полиномиальный генератор степени п-к = Ъ, можно получить циклический код (л, к) = (7,4). Или же с помощью g(X) = 1 + X + X2 + X4, где л - к=4, можно получить циклический код (7,3). Итак, если g(X) является полиномом степени л - к и множителем X" +1, то g(X) однозначным образом генерирует циклический код (л, к).
6.7.3. Кодирование в систематической форме
В разделе 6.4.5 мы ввели понятие систематическая форма и рассмотрели уменьшение сложности, которое делает эту форму кодирования более привлекательной. Теперь мы хотим использовать некоторые алгебраические свойства циклического кода для развития процедуры систематического кодирования. Итак, вектор сообщения можно записать в полиномиальной форме следующим образом:
m(X) = т0 = ni\X + т2Х2 +... + mk _ jX* “ (6.60)
В систематической форме символы сообщения используются как часть кодового слова. Мы можем сдвинуть символы сообщения в к крайних правых разряда кодового слова, а затем прибавить биты четности, разместив их в крайние левые л - к разряды. Таким образом, осуществляется алгебраическая манипуляция полинома сообщения, и он оказывается сдвинутым вправо на л - к позиций. Если теперь умножить т(Х) на Х"~к, мы получим сдвинутый вправо полином сообщения:
Хп-кт(Х)=т0Хл~к + т1Хп'к+[ + -+тк-Х~[- (6.61)
Если далее разделить уравнение (6.61) на g(X), результат можно представить в следующем виде:
Xя -*m(X) = q(X)g(X) + р(Х). (6.62)
Здесь остаток р(Х) записывается следующим образом:
р(Х)= р0 +р{Х +р2Хг +... + pn-k-iX" к '•
Также можно записать следующее:
р(Х) = X" ~*т(Х) по модулю g(X). (6.63)
Прибавляя р(Х) к обеим частям уравнения (6.62) и используя сложение по модулю 2, получаем следующее:
р(Х) + X" ' *т(Х) = q(X)g(X) - U(X). (6.64)
Левая часть уравнения (6.64) является действительным полиномом кодового слова, так как это полином степени л - 1 или менее, который при делении на g(X) дает нулевой остаток. Это кодовое слово можно записать через все члены полинома:
р(Х) + X” *т(Х) —р^ + р\Х + Р2Х2 +... + Рл-к-iX” * 1 + * + WjX” *+ 1 +... + иц^Х” *. Полином кодового слова соответствует вектору кода
и = {р0, Pi,... Рп-к-1. '"О, т\' •••> тк-1) ■ (6-65)
п-к к
бит четности бит сообщения
Пример 6.8. Циклический код в систематической форме
С помощью полиномиального генератора g(X) = 1 + X + X3 получите систематическое кодовое слово из набора кодовых слов (7, 4) для вектора сообщения m = 1 0 0 1 1.
Дата добавления: 2015-10-28; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Основы теории принятая статистических решений 1051 31 страница | | | Основы теории принятая статистических решений 1051 33 страница |