Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

учебники / Лекции

.pdf
Скачиваний:
76
Добавлен:
02.05.2022
Размер:
837.45 Кб
Скачать

1 дв.ед. информации. Комбинации из двух двоичных символов (бит) называют дибитами. Дибиты этого кода 00,01,10,11 будем кодировать четверичным кодом К4 :

00 - закодируем символом 0; 01 - закодируем символом 1; 10 - закодируем символом 2; 11 - закодируем символом 3.

Каждый символ нового четверичного кода несёт уже не 1 дв.ед. информации (бит), а 2 дв.ед., т.к. при m=4 Hmax = log 4 =2 [бит/символ]. Энтропия этого кода максимальна, т.к. при равной вероятности каждого бита равновероятны и все дибиты.

Два символа двоичного кода длительностью 2Т несут, максимум, 2 бита информации (m=2; Hmax=1бит/символ; n=2; I = n * Hmax = 2бита). Один символ четверичного кода длительностью Т несет тоже 2 бита информации

(m=4; Hmax=2бит/символ ; n=1; I = n * Hmax = 2 бита). Следовательно, мы в

2 раза увеличили скорость передачи информации. При этом помехоустойчивость приёма уменьшается.

36

5. ПОМЕХОУСТОЙЧИВОЕ КОДИРОВАНИЕ ( КАНАЛЬНОЕ КОДИРОВАНИЕ ).

5.1. Основные определения.

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

Основная идея корректирующего кода состоит в том, что все возможные кодовые комбинации делятся на разрешенные и запрещенные. Передаются

только разрешенные комбинации. Ошибки превращают разрешенную кодовую комбинацию в запрещенную и обнаруживаются, либо исправляются. Отличие одной кодовой комбинации от другой характеризуется кодовым расстоянием. Кодовое расстояние d - это количество позиций, в которых одна кодовая комбинация отличается от другой.

Например:

01 d =1

01 d =2

0111011 d =4

 

00

10

1010001

В пространстве Хэмминга расстояние Хэмминга

d(xi,xj) между двумя

кодовыми комбинациями, принадлежащими коду,- это вес Хэмминга, т.е. число ненулевых символов в векторе a , равном сумме ( xi Åxj ) по модулю 2. Очевидно, что 1≤d(xi,xj) ≤ n. Расстояние Хэмминга удовлетворяют аксиомам:

d(xi,xj) ³0; d(xj,xj) =0; d(xi,xj)= d(xj,xi) ; d(xi,xj) ≤ d(xi,xk)+d(xk,xj).

Вектор ошибки е - это двоичная комбинация длиной n, у которой символ “1” находится в тех позициях, где переданная и принятая комбинации не совпадают. Кратность ошибки равна весу Хемминга вектора е.

Исправляющая способность кода зависит от минимального кодового расстояния данного кода. Минимальное кодовое расстояние:

dmin=min i j d(xi,xj).

Для обнаружения одиночных ошибок минимальное кодовое расстояние между комбинациями должно равняться dmin=2. Например, для двоичного кода с основанием кода m=2 и длиной n=3 возможный набор разрешенных комбинаций с dmin=2 имеет вид:

000 ;

110

Разрешенные

111 ; 001

Запрещенные

101 ;

011

комбинации dmin=2;

010 ; 100

комбинации;

Предположим, что была передана комбинация 000. В линии связи помеха исказила второй символ и мы приняли 010. Это запрещенная комбинация, т.е. декодер обнаружит ошибку. Выигрыш в помехоустойчивости получен за счет проигрыша в скорости передачи, т.к. четыре сообщения мы могли бы передавать с помощью четырех комбинаций примитивного кода с m=2, n=2: 00, 01, 10, 11. Т.о. проигрыш по скорости передачи равен 1,5. Иными словами, к кодовой комбинации из k информационных символов 00, 01,

43

10,11 добавляется (n-k) избыточных или корректирующих символов,

связанных по определенному алгоритму с информационными символами. Количество корректирующих символов характеризует избыточность кода R:

R=(n-k)/n;

(5.1)

Избыточность рассмотренного выше кода равна: R=(3-2)/3=0,33.

Для обнаружения ошибок кратности k следует использовать код,

имеющий dmin= k+1.

Для исправления одиночных ошибок следует использовать код с dmin=3. Например, для кода с m=2; n=3 можно использовать комбинации:

000

Разрешенные

001; 100;

Запрещенные

111

комбинации

010; 101;

комбинации

 

dmin=3 ;

011; 110;

 

Пусть передается комбинация 000. Допустим, что помеха исказила второй символ и мы приняли 010. Эта комбинация запрещенная, но она ближе к переданной комбинации 000 (d=1), чем к другой возможной 111 (d=2). Таким образом, мы декодируем комбинацию 010 как 000, т.е. исправляем ошибку. Выигрыш в помехоустойчивости достигается за счет еще большего проигрыша в скорости передачи, т.к. два сообщения мы могли бы передавать с помощью двух комбинаций примитивного кода с m=2, n=1: т.е. 0 и 1.Таким образом, к каждой информационной комбинации из одного символа мы добавили по 2 корректирующих (проверочных) символа.

Проигрыш по скорости передачи данного кода, исправляющего одиночные ошибки, по сравнению с примитивным или безызбыточным кодом равен 3. Избыточность этого кода равна: R=(3 -1)/3=0,667.

Для исправления ошибок с кратностью k следует использовать коды с минимальным кодовым расстоянием dmin=2k+1.

Проверка на четность.

Для обнаружения одиночных ошибок одним из наиболее совершенных способов кодирования является «проверка на четность»: к кодовой

комбинации из n информационных символов добавляется один проверочный такой, чтобы количество единиц в кодовой комбинации было четным. Например, к комбинации 0100110 добавляем проверочный символ 1, и передаем комбинацию 01001101. Одиночная ошибка делает число единиц в принятой кодовой комбинации нечетным ( 3 или 5), что и обнаруживается на приеме.

5.2. Линейный двоичный блочный код.

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

44

Длина каждого кодового слова равна n. Код - систематический, т.е. первые k символов являются информационными, а (n - k) являются корректирующими. Блочный код обозначается, как код (n,k). т.е. общее количество кодовых комбинаций равно N=mk. Если код – двоичный, то N=2k. Если k меньше n, АЛГОРИТМ КОДИРОВАНИЯ

Рассмотрим алгоритм кодирования для двоичного блочного кода (7,3), у которого каждое слово имеет n=7 символов, из которых k=3 – информационные и (n-k)=4 – проверочные.

Алгоритм формирования кодовых комбинаций следующий: 1.Присваиваем каждому символу кода номер : a1, а2, а3, а4, а5, а6, а7.

Первые три символа (a1, а2, а3) являются информационными. Последние четыре символа - корректирующие (проверочные): а4, а5, а6, а7.

2. Составляем порождающую матрицу G. Эта матрица должна иметь n столбцов и k строк. Левая часть матрицы – это единичная матрица размером k*k. Правая часть G – это матрица-дополнение Р размером (n-k)*k :

1 0 0 0 1 1 1 G = 0 1 0 1 0 1 1 0 0 1 1 1 0 1

единичная матрица | матрица - дополнение

Матрица-дополнение P имеет вид:

0 1 1 1 P = 1 0 1 1 1 1 0 1

3. Формируем кодовые комбинации. Для этого, сначала, записываем все возможные информационные комбинации из трех символов (всего восемь комбинаций ): 000,001,010,011,100,101, 110,111.

4. К информационным символам приписываем четыре проверочных символа, получающихся в результате умножения информационного векторастроки (a1a2a3) на матрицу-дополнение Р. Произведение есть вектор-строка

(a4a5a6a7):

(a1a2a3) * P = (а4, а5, а6, а7)

Очевидно, для заданной матрицы Р: а4 = а2 Å а3; a5 = a1 Åа3;

а6 = а1 Åа2; а7= а1 Åа2 Åа3;

Знак Å означает суммирование по модулю 2, т.е. 0 Å 0 = 0; 1 Å 0 = 1; 0 Å 1 = 1; 1 Å 1 = 0.

5. Составляем кодовую таблицу разрешенных кодовых комбинаций:

45

 

Значения символов комбинации

 

 

 

 

 

 

 

 

 

a1

a2

a3

a4

a5

a6

a7

1

0

0

0

0

0

0

0

 

 

 

 

 

 

 

 

2

0

0

1

1

1

0

1

3

0

1

0

1

0

1

1

4

0

1

1

0

1

1

0

5

1

0

0

0

1

1

1

6

1

0

1

1

0

1

0

7

1

1

0

1

1

0

0

8

1

1

1

0

0

0

1

Для полученного кода dmin = 4, т.е. наш код может исправлять все одиночные ошибки и некоторые двойные.

АЛГОРИТМ ДЕКОДИРОВАНИЯ Принятые кодовые комбинации необходимо сравнить с каждой из

разрешенных комбинаций и принять решение о переданном кодовом слове. Однако, количество операций необходимых для такого алгоритма быстро растет с ростом n. Более оптимальным способом является вычисление

синдромов.

1. Составляем проверочную матрицу H:

0 1 1 1 0 0 0 H = 1 0 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 0 0 1

транспонированная

 

матрица – дополнение

единичная матрица

Транспонированная матрица – это матрица, столбцы которой равны соответствующим строкам исходной матрицы.

2. Вычисляем синдром принятой кодовой комбинации, т.е. кодовую комбинацию, равную произведению принятого вектора-строки :

(a1, а2, а3, а4, а5, а6, а7) на транспонированную проверочную матрицу. Синдром не зависит от переданной комбинации. Он зависит только от позиции, в которой произошла ошибка.

46

0 1 1 1

(C1C2C3C4) = (a1, а2, а3, а4, а5, а6, а7) * HТ = (a1, а2, а3, а4, а5, а6, а7) * 1 0 1 1

1 1 0 1

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

C1 = а2 Å а3 Å а4 ;

C2 = а1 Å а3 Å а5;

C3 = а1 Å а2 Å а6;

C4 = а1 Å а2 Å а3 Å а7 .

где а1, а2... а7

- принятый кодовый символ, возможно искаженный

помехой.

 

3. Формируем вектор ошибки V, т.е. кодовую комбинацию, которая содержит единицу на той позиции, где произошла ошибка. Формирование синдромов и векторов ошибок можно произвести заранее, искажая последовательно символы в комбинации.

Например, приняли: 0

0 0 0 0 0 0;

(C1C2C3C4) = 0 0 0 0;

V = (0 0 0 0 0 0 0) - ошибок нет;

Пусть приняли: 0 0

0 0 0 0 1 - это запрещенная комбинация ( ошибка в

символе а7). Вычисляем синдром: (C1C2C3C4) = 0001. Вычисляем вектор ошибки: V = (0 0 0 0 0 0 1).

Составим таблицу синдромов и соответствующих векторов одиночных ошибок

Вектор

0000000

0000001

0000010

0000100

0001000

0010000

0100000

1000000

ошиб-

 

 

 

 

 

 

 

 

ки

 

 

 

 

 

 

 

 

Син-

0000

0001

0010

0100

1000

1101

1011

0111

дром

 

 

 

 

 

 

 

 

Пусть передавали некоторую комбинацию; приняли комбинацию (1110011) - это запрещенная комбинация. Её синдром: (C1C2C3C4) = 0010. Из таблицы находим вектор ошибки (0000010), т.е. ошибка произошла в шестом символе. Следовательно, исправив шестой символ (1 на 0), получим правильную комбинацию: 1110001.

В соответствии с алгоритмами кодирования и декодирования составим структурные схемы кодера и декодера кода (7,4).

47

 

Структурная схема кодера кода (7,3).

 

a1

 

 

 

 

 

 

a1

 

а2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

а

 

а3

 

 

 

 

 

 

 

 

а3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а4

 

 

 

 

 

 

 

Å

 

 

 

 

 

 

 

а5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Å

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Å

 

 

 

Рис.5.1.

 

а7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Å

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структурная схема декодера кода (7,3).

a1, а2, а3, а4, а5, а6, а7

Å

Å

Å

Å

С1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

1, а2, а3, а4, а5, а6, а7

 

Форми-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рователь

 

 

 

 

 

 

 

 

 

 

 

 

С2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вектора

 

 

 

 

 

 

 

 

 

 

 

 

 

ошибки

 

V

 

 

 

 

 

 

 

 

 

 

 

 

 

Å

 

 

 

 

 

С3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С4

Рис.5.2.

5.3. Циклические коды Характерной особенностью циклических кодов является то, что

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

Теория циклических кодов базируется на теории двоичных полиномов. Циклические коды – это одна из разновидностей полиномиальных кодов. Каждая комбинация записывается в виде двоичного полинома степени (n-1) с

коэффициентами ак = 0 или 1:

a(z) = аn-1zn-1 + аn-2zn-2 +…+ а1z + а0 (5.2)

48

Например:

a(z) = а2z2 + а1z + а0 = z2 + 1

1 0 1

Алгоритм формирования циклического кода на примере кода (7, 4).

Комбинации данного циклического кода состоят из 7 символов, из которых 4 символа информационные и 3 – проверочные.

1) Записываем возможные информационные комбинации из 4-х символов: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111.

2) Каждую комбинацию записываем в виде полинома. Например:

1 0 0 1

a(z) = z3 + 1

а3 а2 а1 а0

 

3) Выбираем из таблиц образующий полином, количество членов которого соответствует количеству проверочных символов.

В данном случае количество проверочных символов (n-k) =3. Выбираем полином: р(z) = z3 + z +1 1 1 0 1

1)Полином, соответствующей информационной комбинации умножается на p(z):

(z3 + 1) (z3 + z +1)= z6 +z4 +z +1

1010011

В результате получим 16 комбинаций циклического кода (7,4): 0000000, 0001011, 0010110 и т.д…... Код состоит из совокупности двух подмножеств по 7 комбинаций, внутри которых циклические перестановки дают остальные и двух комбинаций 0000000 и 1111111.

Минимальное кодовое расстояние равно 3, т.е. данный код исправляет все одиночные ошибки.

Алгоритм декодирования циклического кода на примере кода(7,4).

1)Принятая кодовая комбинация делится на образующий полином. Остаток от деления есть синдром, который указывает на позицию, где произошла ошибка. Т.к. синдром не зависит от передаваемой комбинации, а зависит только от позиции, в которой произошла ошибка, то синдромы можно вычислить заранее. Например, передавали комбинацию 0000000, под действием помехи она превратилась в 0100000, т.е. ошибка в 6-ом символе справа. Разделим 0100000 на р(z)=1101:

0100000 | 1101

0000 0111

1000

1101

1010

1101

1110

1101

011

49

Остаток 011 и есть синдром, указывающий, что ошибка произошла в 6-ом символе справа.

2. В соответствии с синдромом формируется вектор ошибки, т.е. кодовая комбинация, которая содержит 1 в той позиции, где произошла ошибка. Для данного примера вектор ошибки V=0100000.

Вектор ошибки суммируется по модулю 2 с принятой комбинацией: 0100000 Å 0100000 = 0000000

Ошибка исправлена.

5.4.Сверточный код (решетчатый)

Свёрточный код относится к классу непрерывных кодов. Сверточный кодер (рис.5.3) после формирования выходной комбинации, соответствующей входному информационному символу, не переходит в исходное начальное состояние, а кодирует следующий информационный символ, начиная кодирование из того состояния, в котором он оказался после передачи предыдущего символа. Следовательно, между символами выходной кодированной последовательности существуют корреляционные связи, позволяющие повысить помехоустойчивость декодирования.

Кроме этого, сверточный кодер имеет не один, а n выходов, на каждом из которых формируется из одной и той же информационной последовательности своя собственная выходная последовательность в соответствии с порождающим полиномом, соответствующим данному выходу. Для рис. 5.3 n=2 и порождающие полиномы имеют вид: p1(z)= =(1+z2); p2(z)=(1+z+z2). Сначала передаются первые импульсы с каждого из n выходов, потом вторые и т.д. Очевидно, что скорость передачи падает в n раз.

Вход

 

 

 

 

 

 

1

Выход

1

2

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

Км

 

 

 

 

 

 

 

 

Рис.5.3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сверточный код – частный случай решетчатых кодов. Решетчатая диаграмма на рис.5.4 для сверточного кода, формируемого кодером рис.5.3 -

50

это один из способов задания сверточного кода. Каждое сечение соответствует внутреннему состоянию кодера; ребро соответствует передаваемому символу (верхнее – 0; нижнее - 1) на входе. Около ребра написана комбинация из двух бит, которая появится на выходе.

Рис.5.9.

Пусть на вход кодера рис.5.3 поступила комбинация 101. Ей соответствует полином a(z)=1+ z2. На первом выходе кодера получим b1(z)=a(z)*p1(z)= =(1+z2)*(1+ z2)=1+z4. Этот полином соответствует комбинации 10001.

На втором выходе кодера получим b2(z)=a(z)*p2(z)= (1+z2)*(1+z+z2) =1+ +z+z3+z4. Это соответствует комбинации 11011.Следует учесть, что сложение коэффициентов осуществляется по модулю 2, т.е.z+z=(1Å1)z=0. Совместим эти комбинации: сначала передается первый символ с первого выхода, потом первый символ со второго выхода, потом второй символ с первого выхода, потом второй символ со второго выхода и т.д. Получим

110100……

Аналогичный результат получим с помощью решетчатой диаграммы: при передаче 1 идем по нижнему ребру и в канал связи передается 11, далее передается 0, идем по верхнему ребру и в канал передается 01, далее передается 1, а в канал идет 00 и т.д.

Структурная схема декодера сверточного кода

Вход

Вычис-

 

Вычис-

 

Блок

 

Блок

 

литель

 

литель

 

выбора

 

выбора

выход

метрик

 

метрик

 

выживших

 

наивероят-

 

ветвей

 

путей

 

путей

 

нейшего

 

 

 

 

 

 

 

пути

 

 

 

 

 

 

 

 

51

Соседние файлы в папке учебники