Скачиваний:
178
Добавлен:
02.05.2014
Размер:
2.33 Mб
Скачать

1.4. Помехоустойчивые коды

На сегодняшний день известно много различных классов помехоустойчивых кодов, отличающихся друг от друга структу­рой, функциональным назначением, энергетической эффектив­ностью, алгоритмами кодирования и декодирования и многими другими параметрами. Рассмотрим основные подходы к клас­сификации данных кодов, представленные на рис. 1.9.

При одном подходе коды можно разбить на две группы: блоковые [19], в которых кодирование и декодирование произ­водится в пределах кодовой комбинации или блока, и древовидные [18], в которых обработка символов производит­ся непрерывно, без разделения на блоки. Кодер для блокового кода является устройством без памяти, отображающим последо­вательности из к входных символов в последовательности из п выходных символов. Термин «без памяти» указывает, что ка-

16

Помехоустойчивые коды

Блоковые

Древовидные (сверточные)

Линейные

Нелинейные

1

Систематические

Несистематические

1

Циклические

Нециклические

Двоичные

Недвоичные

Для независимых ошибок

Для пакетов ошибок

Каскадные

Некаскадные

Рис. 1.9. Классификация помехоустойчивых кодов

ждый выходной блок из п символов зависит только от соответ­ствующего входного блока из к символов и не зависит от других блоков. Основными параметрами блокового кода являются дли­на кода п, длина информационной последовательности к, ско­рость кода r=k/n и минимальное кодовое расстояние dmm. По-

17 следний параметр определяется минимальным расстоянием (расстоянием Хэмминга) между любыми двумя кодовыми сло­вами длины и.

Кодер для древовидного кода является устройством с памятью, в которое поступают наборы из к0 входных симво­лов, а на выходе появляются наборы из «о выходных символов. Каждый набор щ выходных символов зависит от текущего входного набора и от К-\ предыдущих входных наборов. Пара­метр К называется конструктивной длиной сверточного кода, а величину пА=Кщ ~ длиной кодового ограничения. Древовидные коды характеризуются также скоростью г=ко/щ и свободным расстоянием dfree, смысл которого будет пояснен далее при опи­сании сверточных кодов.

Из вышеизложенного описания видно, что в процессе рабо­ты кодер помехоустойчивого кода в соответствии с некоторыми правилами осуществляет обработку входных символов. В зави­симости от количества возможных значений q каждого из сим­волов все коды можно разделить на двоичные (при q=2) и недво­ичные (при q>2).

Еще при одном подходе коды можно разделить на линейные и нелинейные [19]. Линейные коды образуют векторное про­странство и обладают следующим важным свойством: два кодо­вых слова можно сложить, используя подходящее определение суммы, и получить третье кодовое слово. В случае обычных двоичных кодов эта операция является посимвольным сложе­нием двух кодовых слов по модулю 2. Данное свойство сущест­венно упрощает процедуры кодирования и декодирования, а также задачу вычисления параметров кода, поскольку мини­мальное расстояние между двумя кодовыми словами при этом эквивалентно минимальному расстоянию между кодовым сло­вом, состоящим целиком из нулей, и некоторым другим кодо­вым словом. Кроме того, при вычислении характеристик линей­ного кода достаточно рассмотреть, что происходит при передаче кодового слова, состоящего целиком из нулей. Линейные древо­видные коды обычно называют сверточными.

Помехоустойчивые коды также можно разбить на коды, ис­правляющие случайные или независимые ошибки, и коды, ис-

18 правляющие пакеты ошибок. На практике, в основном, приме­няются коды, исправляющие случайные ошибки, поскольку для исправления пакетов ошибок часто оказывается легче использо­вать коды для исправления независимых ошибок вместе с уст­ройствами перемежения и восстановления. Первое из них осу­ществляет перемешивание порядка символов в закодированной последовательности перед передачей в канал, а второе - восста­новление исходного порядка символов после приема. При пра­вильном проектировании данных устройств можно считать, что образующиеся в канале связи пакеты ошибок перед декоди­рованием будут разбиты на случайные ошибки.

(1.19)

Почти все схемы кодирования, применяемые на практике, основаны на линейных кодах, поэтому более подробно рассмот­рим способ их описания [1]. Блоковый код длины п с 2* словами называется линейным (п, к) кодом, если его кодовые слова обра­зуют ^-мерное подпространство Vk векторного я-мерного про­странства V„. Подпространство Vk порождается базисом из к ли­нейно независимых векторов, которые образуют строки порож­дающей матрицы (п, к) кода

' So '

" #0,0

#0.1 •

£o,n-i

G =

#1,0

8i,\

gi,n-i

Як-\.

_Sk~],o

8k-\,\

Процесс кодирования блокового кода состоит в разбиении информационной последовательности на сооб- щения U - (щ, щ,ик_х) длины к и отображении этих сооб- щений в кодовые слова С =(с0, c„„i) длины п следую- щим образом:

C^UG. (1.20)

Часто кодовые слова лучше представлять в системати­ческой форме С =(u,v), образуя отдельно информационную

часть U из к символов и проверочную часть V из т=п-к сим­волов. Порождающая матрица такого систематического кода будет иметь вид

19

G = [lkP] =

О

О £о,о 0 g\,o

Яо,1 g],\

£\,п-к-\

.(1.21)

_0 0 ... lg*_i,o -и ■■■ 8к-\,п-к-\_ В данном случае матрица G содержит единичную матрицу 1к размером кхк, формирующую информационную часть слова, и матрицу Р размером кх(п-к), определяющую проверочные символы.

С порождающей матрицей тесно связано понятие провероч­ной матрицы Я, пространство строк которой ортогонально про­странству строк порождающей матрицы, т.е.

G Нт = 0 . (1.22)

Отметим, что каждое кодовое слово линейного кода С также будет удовлетворять условию ортогональности, так как

С Нт = UGHT =0. (1.23)

Если порождающая матрица задана в форме (1.21), то для выполнения условия ортогональности проверочная матрица Н должна иметь вид

Н =

РТ1

(1.24)

Проверочная матрица обычно используется в процессе де­кодирования кода следующим образом. Пусть при передаче по каналу из-за влияния шумов Е кодовые символы С искажа­ются. В результате принятые слова имеют вид Y = С , где Y={y0,y\, -,Уп-]) - принятый вектор, а Е =(е0, е,, <?„_,) -вектор ошибок. Для обнаружения или исправления ошибок на приемной стороне сначала вычисляют синдром

S=YHT =(s0,sl,...,S„^_]), (1.25)

зависящий только от вектора ошибок, поскольку

S = Т = (с + 1)НТ =СНТ + ЕНТ = т . (1.26)

Если S - 0, то принятое слово Y принадлежит к множеству

кодовых слов, иначе слово 7 содержит ошибки, и по значениям

20 символов синдрома S определяют их местоположение. Данный принцип лежит в основе методов синдромного декодирования.

Важный подкласс линейных кодов составляют цикличе­ские коды, обладающие циклическими свойствами: если С = 0, с,, сп_х) - кодовое слово циклического кода, тогда нС'-(с]2, c„_j, с0), полученное циклическим сдвигом

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

Порождающую матрицу циклического кода можно запи­сать в виде

'go g) ••• 8n-k 0 - 0

G =

О go g\ - gn-k - 0

(1.27)

0 ... 0 g0 g, ... g„_k_

Для компактной записи циклического (и, к) кода часто ис­пользуется порождающий или образующий полином g{x) сте­пени п-к с коэффициентами из поля GF(q) (для двоичных ко­дов g,= {0,l})

g(x) = g0 + gi* + g2*2 + - + g„-**"~* ■ (1 -28)

Если в виде полинома записать информационное сообщение U(x) и кодовое слово С(х), то кодовые слова кода образуются пу­тем умножения сообщения на порождающий полином

C(x) = U{x)g{x). (1.29)

Обычно для удобства записи коэффициенты образующих полиномов объединяют в двоичное слово и представляют в восьмеричной системе счисления. Также образующие поли­номы можно записывать путем перечисления степеней с ненуле­выми коэффициентами. Например, запись g(x)=\ + х + х4 6 равносильна следующим: g=l01001 l2=123g; g=(0, 1,4, 6).

Для примера на рис. 1.10 показан кодер систематического блокового кода, соответствующий порождающей матрице вида

21

-►• i-H О

1

2

Рис. l.lO. Кодер блокового систематического кода

I О О I О I

G =

О I О I I О

(1.30)

[О О I О I 1J

Проверочная матрица данного кода в соответствии с (1.24) записывается следующим образом:

110 10 0

0 110 10

(1.31)

[1 0 1 О О 1J

Получившийся код характеризуется следующими парамет­рами: количество кодовых символов и=6, количество информа­ционных символов к=3, кодовая скорость г=1/2, минимальное кодовое расстояние dmm-3.

Далее рассмотрим способы описания сверточных кодов. Для построения кодера сверточного кода необходимо к0 регист­ров сдвига, связи между элементами которых определяются набором образующих полиномов g(V)(x), где /-0, 1,&0-1 -номер входного потока, ау=0, 1, щ-Х - номер выходного потока. Поскольку на практике чаще используются коды с един­ственным входным потоком (ко=\), индекс / обычно опускается. Еще одной характеристикой сверточного кода является его кон-

22 структивная длина К, влияющая на сложность его декодирова­ния и равная длине самого длинного регистра сдвига.

Для примера на рис. 1.11 представлен кодер несистемати­ческого сверточного кода, заданный образующими полиномами

go{x)=\ + х2 и g\(x)-1 + х + х2. Данный код характеризуется следующими параметрами: количество информационных вет­вей &<гТ, число проверочных ветвей «о=2, кодовая скорость г=1/2, длина кодового ограничения пА-Ь, конструктивная длина кодаЛ=3.

Рис. 1.11. Кодер сверточного несистематического кода

Так же как и блоковые, сверточные коды можно представить в систематической форме, частным случаем которой являются рекурсивные систематические сверточные (Recursive Systematic Convolutional - RSC) коды. Характерной особенностью кодеров данных кодов является наличие обратной связи. В качестве при­мера на рис. 1.12 представлен RSC кодер, заданный полиномом

обратной связи (feedback polynomial) g0(x)=l + x + x2 и выход­ным полиномом (feedforward polynomial) gx(x)=\ + х2.

Удобным способом представления процесса функциониро­вания кодера сверточных кодов является кодовое дерево. Пример кодового дерева для кодера с рис. 1.11 показан на рис. 1.13. Как видно из рисунка, кодовое дерево состоит из узлов, связанных между собой ребрами. При этом каждому узлу соответствует од-

23

но из 21 ~ ' 0 состояний кодера (в данном случае 4), опреде­ляемое содержимым всех, кроме самых правых, ячеек регистров сдвига кодера (десятичное представление содержимого этих яче­ек показано на рисунке в виде меток 0, 1, 2 и 3), а каждое ребро характеризуется входной и выходной последовательностью (верхнему ребру соответствует входной символ 0, нижнему- 1, а выходная последовательность представлена метками 00, 01, 10 и 11). В результате любая входная последовательность задает некоторый путь на дереве, по которому можно определить вы­ходную последовательность. Например, входной последователь­ности 11001 соответствует путь, показанный на рис. 1.13 жирной линией и задающий выходную последовательность 11 101011 11.

Недостатком данного представления сверточных кодов яв­ляется экспоненциальный рост числа ветвей с ростом длины входной последовательности. Поэтому часто кодовое дерево изображают в виде кодовой решетки, при построении которой учитывается конечное число возможных состояний кодера, что дает возможность отождествлять вершины дерева, характери­зуемые одинаковыми состояниями. Изображение кодовой ре­шетки для вышеприведенного примера и путь, соответствую­щий входной последовательности 11001, показаны на рис. 1.14.

24

00

00

00

01

f0 11

1 10

11

00

11

2 оо

01

11

10

00

10

f3 01

00

01

11

t0 11

01

00

t 1 10

11

11

10

10

Ч2 oo

10

01

01

00

00

01

11

11

11

01

t2 00

00

*1

10

11

10

01

00

00

10

11

10

00

01

10

01

-43 01

Рис. 1.13. Кодовое дерево сверточного кода

Рис. 1.14. Решетчатая диаграмма сверточного кода

Используя решетчатое представление, определим ранее встречавшееся понятие минимального свободного расстояния сверточного кода dtreL, как минимальное расстояние между двумя различными путями по кодовой решетке, начинающимися и заканчивающимися в одном состоянии. Например, из рис. 1.14 следует, что минимальное свободное расстояние рассматривае­мого кода равно 5 (общий вес пути 0—> 1 —>-2—>0, заданного вер­шинами на диаграмме).

Заметим, что далее, в случае применимости выводов, фор­мул и т.д. как к сверточным, так и блоковым кодам, вместо ми­нимального кодового расстояния dmm и свободного расстояния dfree используется общий термин кодовое расстояние d.

Теперь рассмотрим основные характеристики помехоустой­чивости линейных кодов и методы их оценки.