Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сети радиодоступа. Ч.1. Учебное пособие
.pdf
71
Вход
(k бит)
T
n-k-1
T
n-k-2
T
1
T
0
Выход
(n бит)
A
B
Ключ 1
Ключ 2
A
B
A
n-k-1
A
n-k-2
A
2
A
1
Рисунок 4.6 – Общая архитектура формирования кода CRC для
реализации полинома-делителя
4.2 Коды с исправлением ошибок
Выше мы рассмотрели коды, обнаруживающие ошибки, которые широко
используются в протоколах управления каналами передачи данных. Под
использованием кодов обнаружения ошибок подразумевается повторная
передача ошибочно принятых блоков данных.
В беспроводных каналах уровень ошибок достаточно высок, поэтому в
нем потребуется значительное число повторных передач, что значительно
снизит пропускную способность канала. Кроме того, при большой задержке
сигнала в канале (особенно в спутниковой связи), значительно превышающей
время передачи одного кадра, ошибка в одном кадре приводит к
необходимости повторной передачи большого числа кадров. В этих ситуациях
было бы лучше, если бы приемник мог исправлять ошибки в принятом
сигнале, используя информацию, содержащуюся в самом сигнале (рисунок
4.7).
С помощью кодера FEC (forward error correction – прямое исправление
ошибок) передатчик преобразует каждый k-битовый блок данных в n-битовый
блок (n > k), именуемый кодовым словом, который затем передается (в
беспроводной связи для передачи используется созданный модулятором
аналоговый сигнал). При распространении сигнал подвергается воздействию
шума, помех и замираний, что может привести к появлению ошибочных

72
битов. Приемник демодулирует полученный сигнал, преобразовывая его в
строку битов, подобную переданной, но, возможно, с ошибками.
Данные
k бит
Кодер
FEC
Кодовое слово
n бит
Кодовое слово
n бит
Данные
k бит
Декодер
FEC
Отправитель
Получатель
Нет ошибок, или нет
исправимых ошибок
Обнаруживаемые, но
неисправляемые
ошибки
Указание на
ошибку
Рисунок 4.7 – Пояснение принципа прямого исправления ошибок
Полученный блок данных обрабатывается декодером FEC, в результате
возможны такие ситуации:
1. При отсутствии ошибочных битов вход декодера FEC идентичен
исходному кодовому слову, так что на выход декодера поступает исходный
блок данных.
2. Декодер может обнаружить и исправить определенные
последовательности ошибок. Поэтому даже если вход декодера отличается
от исходного кодового слова, из него можно получить исходные данные.
3. Некоторые последовательности ошибок могут быть обнаружены
декодером, но не могут быть исправлены. В этом случае декодер сообщает о
наличии неисправимой ошибки.
4. Наличие некоторых (обычно довольно редких)
последовательностей ошибок не может быть обнаружено декодером. В
результате декодер преобразовывает от входной n-битовый блок в k-битовую
последовательность, которая отличается от переданной, но которую кодер
считает правильной.
Декодер FEC исправление ошибок осуществляет путем добавления
избыточных данных к передаваемому сообщению.

73
Кодирование с коррекцией ошибок можно рассматривать как
инструмент, реализующий различные компромиссы системы. На рисунке 4.8
приведен сравнительный вид двух кривых, описывающих зависимость
достоверности передачи от отношения Eb/N0. Одна кривая соответствует
обычной схеме модуляции без кодирования, а вторая представляет такую же
модуляцию, но уже с использованием кодирования.
Из рисунка 4.8 следует, что для частоты возникновения ошибок 10-6
использование кодирования позволяет снизить отношение Eb/N0 на 5 дБ. Это
улучшение называется эффективностью кодирования. Эффективность
кодирования – это снижение необходимого отношения Eb/N0 для системы с
кодированием по сравнению с системой без кодирования (при одном и том же
виде модуляции) для достижения заданной частоты ошибок.
На рисунке 4.8 кривые для кодированного и некодированного сигналов
пересекаются (как правило, при низких значениях Eb/N
0
). Смысл этого
пересечения (порога) в том, что у всех систем кодирования имеется
ограниченная способность к коррекции ошибок. Если в блоке имеется
больше ошибок, чем способен исправить код, система будет работать плохо.
A
F
B
D
C
E
Некодированная
Кодированная
·
·
·
·
·
·
10
-2
10
-4
10
-6
Eb/N0 (дБ)
P
B
8 9 14
Рисунок 4.8 – Сравнение достоверности передачи при использовании
схемы с кодированием и без кодирования

74
Представим себе, что значение Eb/N
0
снижается непрерывно. Что мы
увидим на выходе демодулятора? Демодулятор будет допускать все больше и
больше ошибок. Следовательно, такое постепенное уменьшение Eb/N0 должно,
в конце концов, создать пороговую ситуацию, когда декодер будет
переполнен ошибками. При достижении этого порога снижение
производительности можно объяснить поглощением энергии избыточными
битами, которые не дают никакого выигрыша. Необходимо отметить, что
существует класс мощных кодов, называемых турбокодами (turbo code),
низкоплотностными кодами, которые позволяют повысить надежность
передачи при низких значениях Eb/N
0
. У таких кодов точка пересечения
графиков находится значительно ниже, чем у других кодов.
Отметим, что довольно часто коды с коррекцией ошибок используются
по схеме, изображенной на рисунке 4.2 для кодов обнаружения ошибок. Т.е.
в алгоритме FEC к входному k-битовому блоку данных добавляется (n-k)
контрольных битов; в результате размер передаваемого блока составляет п
бит; все биты исходного k-битового блока содержатся в полученном п-
битовом блоке. Для некоторых схем прямого исправления ошибок
(например, сверточных кодов) входная k-битовая последовательность так
преобразовывается в п-битовое кодовое слово, что исходные k бит не
фигурируют явно в кодовом слове.
Сначала определим термины, которые будут использоваться при
рассмотрении блочных кодов. Расстоянием Хэмминга (Hamming distance)
d(v1, v2) между двумя п-битовыми двоичными последовательностями v1 и v2
называют число несовпадающих разрядов v1 и v2. Haпример, если
v
1
= 011011, v
2
= 110001,
то
d(v1, v2) = 3.
Приведенные выше примеры иллюстрируют важные свойства блочных
кодов с коррекцией ошибок. Блочный код (п, k) преобразует k бит данных в
п-битовые кодовые слова. В большинстве случаев каждое корректное кодовое
слово – это исходные k бит данных плюс (n-k) контрольных битов. Таким
образом, структура блочного кода эквивалентна структуре функции вида vс =
f (vd), где vd – вектор, состоящий из k бит данных; vс – вектор, состоящий из п
бит кодового слова.
В блочном коде (п, k) имеется 2k приемлемых кодовых слов из 2n
возможных. Отношение числа избыточных битов к числу битов данных (п -
k)/k принято называть избыточностью кода (code redundancy); отношение

75
количества битов данных к полному числу битов R = (k/п) называют
степенью кодирования, или скоростью кода (code rate). Скорость кодирования
это мера того, какая дополнительная полоса потребуется после
кодирования, если скорость передачи данных мы хотим сохранить такой же,
какая была до кодирования. Например, при степени кодирования R = 1/2 для
сохранения скорости передачи данных системе потребуется полоса, в два
раза большая, чем та, которая необходима для передачи некодированного
сигнала. Для рассмотренного выше примера степень кодирования равна 2/5,
следовательно, для сохранения скорости передачи потребуется увеличить
ширину полосы в 2,5 раза. Т.е. если скорость передачи сигнала на входе
кодера равна 1 Мбит/с, то для сохранения прежних параметров скорость
выходного сигнала должна быть равна 2,5 Мбит/с.
Для кода, состоящего из кодовых слов w1, w2,…, ws, где s = 2n,
минимальное расстояние кода d
min
определяется следующим образом
min
min[ ( , ].
ij
ij
d d w w
=
(4.3)
Можно показать, что если для кода выполняется неравенство d
min
> 2t + 1
(t – некоторое положительное целое число), то с помощью данного кода
можно исправить все символы, содержащие до t ошибочных битов,
включительно. Если d
min
> 2t , то можно исправить все символы, содержащие
до (t - 1) ошибочных битов. Кроме того, будут обнаружены все символы с t
ошибочными битами, исправить которые в общем случае нельзя. Верно и
обратное утверждение: каждый код, позволяющий исправлять до t
ошибочных битов, должен удовлетворять условию
min
2 1.dt+
(4.4)
Для каждого кода, позволяющего исправлять до (t-1) ошибочных битов
и обнаруживать все символы с t ошибками, должно выполняться условие d
min
2t.
Связь между d
min
и t можно записать другим способом, выразив
максимальное количество битовых ошибок в кодовом слове,
гарантированно исправляемых кодом в таком виде
min
1
,
2
dt−
=
(4.5)

76
где
x
– наибольшее целое число, не превышающее х (например,
6,3 6=
). Более того, если нас интересует только обнаружение ошибок, но
не их исправление, количество обнаруживаемых ошибок t удовлетворяет
следующему равенству:
min
1.td=−
(4.6)
Простая верхняя граница для минимального расстояния по Хэммингу
min
d
двоичного или недвоичного линейного блочного кода (n, k) согласно [3]
min
1.d n k − +
(4.7)
Удобно нормировать выражение (4.6) через длину блока п. Это даёт
min
1
(1 ) ,
c
d
R
nn
− +
(4.8)
где
c
k
Rn=
– скорость кода. Для больших п слагаемым
1
n
можно
пренебречь. Если код имеет наибольшее возможное расстояние, т.е.
min
1d n k= − +
его называют разделимым кодом с максимальным расстоянием.
Исключая случаи тривиального кода (п, 1) для передачи двоичных сообщений
с повторением, не существует двоичных разделимых кодов с максимальным
расстоянием. Фактически верхняя граница в (1.8) для двоичных кодов весьма
неточная. С другой стороны, существуют недвоичные коды с
min
1d n k= − +
.
Например, коды Рида-Соломона, которые представляют подкласс БЧХ кодов,
являются разделимыми кодами с максимальным расстоянием.
Задаваясь линейным двоичным кодом (п, k) с минимальным расстоянием
min
d
, мы можем синтезировать линейный двоичный код (n + 1, k) путём
добавления одного дополнительного проверочного символа к каждому
кодовому слову Проверочный символ обычно выбирается так, чтобы быть
проверочным символом по всем символам кодового слова. Таким образом,
добавляемый проверочный символ равен 0, если исходное кодовое слово имеет
чётное число единиц, и равен 1, если кодовое слово имеет нечетное число
единиц. Следовательно, если минимальное расстояние кода
min
d
нечётно,
добавляемый проверочный символ увеличит минимальное расстояние на 1. Код
(п +1, k) называется расширенным кодом.

77
Систематический (п, k) код может быть также укорочен размещением в
начале информационного блока нулевых символов. Это значит, что линейный
код (п, k), состоящий из k информационных символов и (n-k) проверочных,
может быть укорочен до линейного кода (n – l, k-l), если установить
первые l информационных символов (во всех кодовых комбинациях) нулями.
Эти l символов не передаются по каналу, а (п – k) проверочных символа
рассчитываются обычным образом, как в исходном коде.
Укороченный код (n – l, k-l) состоит из
2
kl−
кодовых слов. Минимальное
расстояние этих
2
kl−
кодовых слов по крайней мере не меньше, чем минимальное
расстояние исходного (п, k) кода.
Большинство используемых на практике блочных кодов с коррекцией
ошибок относятся к категории циклических. Для циклических кодов
справедливо следующее: если n-битовая последовательность
0 1 1
( , ,..., )
n
c c c
−
является кодовым словом, то последовательность
1 0 1 2
( , , ,..., )
nn
c c c c
−−
полученная с
помощью циклического сдвига n-битовой последовательности с на одну позицию
вправо, также используется в качестве кодового слова. Данный класс кодов
можно легко кодировать и декодировать с использованием линейных регистров
сдвига с обратной связью (Linear Feedback Shift Register — LFSR). Примерами
циклических кодов являются коды Боуза-Чоудхури-Хоквенгема (БЧХ) и коды
Рида-Соломона.
Реализация циклического кодера как регистра LFSR подобна реализации,
приведенной на рисунке 1.1 для кодов обнаружения ошибок. Основное отличие
состоит в том, что вход кода CRC имеет произвольную длину и в результате
получается контрольный код CRC фиксированной длины, тогда как
циклический код с коррекцией ошибок генерирует контрольный код (n - k бит)
на основе входной последовательности фиксированной длины (k бит). На
рисунках 4.8 и 4.9 представлены реализации в виде LFSR кодера и декодера
циклического блочного кода.
Вх
T
n-k-1
T
n-k-2
T
1
T
0
A
n-k-1
A
n-k-2
A
1
A
0
X
0
X
1
X
2
X
n-k-1
X
n-k
1
2
П
1
Вых
1
2
П
2
Рисунок 4.8 – Структурная схема кодера циклического кода

78
Как и при проверке четности с избыточностью, конкретный
циклический код можно представить полиномиальным делителем,
именуемым порождающим многочленом (или генераторным полиномом).
Для кода (п, k) порождающий многочлен можно записать в таком виде
1
1
( ) 1,
nk
n k i
i
i
P X X A X
−−
−
=
= + +
(4.9)
где каждый из коэффициентов А
i
, может принимать значения 0 или 1,
что соответствует двоичному разряду в делителе. Например, для Р = 11001
порождающий многочлен имеет вид
43
( ) 1P X X X= + +
.
Порождающий полином циклического кода (n, k) является
множителем при разложении полинома
1
n
X +
. Например, для кода с
длиной кода n = 7 полином
7
1X +
можно разложить на следующие
сомножители
7 3 2 3
1 ( 1)( 1)( 1).X X X X X X+ = + + + + +
(4.10)
Чтобы синтезировать циклический код (7, 4), можно использовать
один из двух порождающих полиномов
32
3
( ) 1
или
( ) 1.
P X X X
P X X X
= + +
= + +
(4.11)
Аналогично представлению порождающего полинома
последовательность битов данных можно представить полиномом D(Х), а
контрольный код – полиномом R(Х) (см. обсуждение циклической
проверки четности с избыточностью). Напомним, что контрольный код
определяется следующим образом
( ) ( )
()
( ) ( )
nk
X D X R X
QX
P X P X
−
=+
(4.12)
Т.е. блок данных D(Х) сдвигается влево на (n – k) бит и делится на P(X).
В результате получим частное Q(X) и остаток R(Х) длиной (n – k) бит.

79
Для проведения этой операции ключи П
1
и П2 (рисунок 4.8) находятся в
положении 1 и на вход схемы деления поступают информационные символы
D(Х), одновременно эти же символы поступают и на выход. После k тактов
работы кодера в его регистре образуется остаток от деления R(Х). На (k+1)
такте ключи П
1
и П2 переключаются в положение 2 и символы остатка один за
другим поступают на выход кодера.
Передаваемый на модулятор блок битов T(X) – это конкатенация D(Х) и
R(Х)
( ) ( ) ( ).
nk
T X X D X R X
−
=+
(4.13)
После прохождения канала передачи этот блок поступает на декодер
циклического кода (рисунок 4.9).
Для декодера входом являются полученные п бит T(X), которые
содержат k бит данных D(X) за которыми следуют (п – k) контрольных
битов R(X). Ключ П1 находится в положении 1 на время прохождения всех n
бит входного блока T(X). При отсутствии ошибок после первых k тактов
регистр сдвига порождающего многочлена будет содержать
последовательность контрольных битов, идентичную переданной R(X).
После прохождения оставшихся (п – k) входных бит регистр сдвига
порождающего многочлена будет содержать код-синдром. После
прохождения всех n бит входного блока T(X) переключатель П1 переводится
в положение 2.
Для декодирования циклического кода используется следующая
процедура:
1. С помощью полученных битов вычисляется код-синдром.
Вычисления проводятся аналогично тому, как кодер обрабатывает биты
данных для получения контрольного кода;
2. Если все биты синдрома равны нулю – ошибки отсутствуют;
3. Если синдром отличен от нуля, производится дополнительная
обработка для исправления ошибки.

80
Вход
n бит
T
1
T
2
T
3
T
n
T
k
i
1
i
2
i
3
i
k
Выход k бит
2
1
П
1
T
n-k-1
T
n-k-2
T
1
T
0
A
n-k-1
A
n-k-2
A
1
A
0
Корректирующая логика
e
1
e
2
e
k
s
1
s
2
s
n-k-1
s
n-k
e
3
РС
Рисунок 4.9 – Структурная схема декодера циклического кода
Значения синдромов можно понять, изучив блочный код с
использованием полиномов.
При отсутствии ошибок передачи T(X) должно делиться на порождающий
полином P(X) без остатка, что можно легко показать, используя формулы (4.12)
и (4.13)
( ) ( ) ( ) ( ) ( )
( ) ( ).
( ) ( ) ( ) ( ) ( )
nk
T X X D X R X R X R X
Q X Q X
P X P X P X P X P X
−
= + = + + =
(4.14)
Выражение (4.14) справедливо в соответствии с правилами арифметики
по модулю 2 (
0aa=
). Следовательно, если ошибки отсутствуют, T(X)
делится на P(X) без остатка.
Если один или более бит являются ошибочными, полученный на
приемной стороне блок бит Z(X) будет иметь вид
( ) ( ) ( ),Z X T X E X=+
(4.15)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
