Нижегородский государственный университет им. Н.И. Лобачевского Факультет вычислительной математики и кибернетики

advertisement
Нижегородский государственный университет
им. Н.И. Лобачевского
Факультет вычислительной математики и кибернетики
Учебно-исследовательская лаборатория
"Информационные технологии"
Свёрточные коды
Чумаков В.В.
Введение
Для передачи данных с большой скоростью наряду с
блоковыми кодами применяется схема кодирования,
при которой поток данных разбивается на блоки
очень небольшой длины k0 (часто k0 = 1), которые
называют кадрами информационных символов.
Каждый из этих кадров кодируется кадром кодового
слова длины n0. Кодирование каждого кадра
информационных символов в кадр кодового слова
производится с учётом предыдущих m кадров
информационных символов. Коды, получаемые таким
образом, называются древовидными кодами.
Наиболее важным подклассом древовидных кодов
являются свёрточные коды.
ИТЛаб ВМК ННГУ
Свёрточные коды
2-61
Древовидные и решетчатые коды
Длина кадра информационных символов k0
Длина кадра кодового слова
n0
Скорость кода
R=k0/n0
Ёмкость кодера
m
Длина кодового ограничения
v=mk0
Информационная длина слова
k=(m+1)k0
Кодовая длина блока
n=(m+1)n0
КИС
Окно кодирования
Логика
ККС
Кодер
ИТЛаб ВМК ННГУ
Свёрточные коды
3-61
Древовидные и решетчатые коды
Определение. Древовидный (n0,k0)-код - это
отображение на себя множества полубесконечных
последовательностей элементов из GF(q), такое, что
если для любого M первые Mk0 компонент двух
полубесконечных последовательностей совпадают, то
первые Mn0 компонент отображений этих
последовательностей тоже совпадают.
ИТЛаб ВМК ННГУ
Свёрточные коды
4-61
Древовидные и решетчатые коды
Конечность длины кодового ограничения.
Древовидный (n0,k0)-код с конечной длиной кодового
ограничения v, длиной слова k=v+k0 и кодовой
длиной блока n называется решетчатым (n,k)-кодом.
Постоянство во времени. Если две различные
последовательности совпадают, но имеется
временной сдвиг, то соответствующие им кодовые
последовательности совпадают с тем же сдвигом.
Линейность. Кодовая последовательность линейной
комбинации информационных последовательностей
совпадает с той же линейной комбинацией
соответствующих кодовых последовательностей.
Систематичность. Каждый кадр информационных
символов составляет первые k0 символов первого из
кадров кодовой последовательности, на которые
влияет данный кадр информационных символов.
ИТЛаб ВМК ННГУ
Свёрточные коды
5-61
Древовидные и решетчатые коды
Определение. Постоянный во времени древовидный
(n0,k0)-код, имеющий конечную длину слова k,
называется скользящим блоковым (n,k)-кодом.
Определение. Линейный скользящий блоковый (n,k)код называется свёрточным (n,k)-кодом. Свёрточный
(n,k)-код, удовлетворяющий условию
систематичности, называется систематическим
свёрточным (n,k)-кодом.
ИТЛаб ВМК ННГУ
Свёрточные коды
6-61
Древовидные и решетчатые коды
Кодовые биты
Информационные
биты
G(x)=[1 x5+x3+1]
Информационные
биты
n0=2, k0=1
+
+
+ +
v=5
Кодовые биты
n0=2, k0=1
+
G(x)=[x2+x+1 x2+1]
ИТЛаб ВМК ННГУ
n=12, k=6,
Свёрточные коды
n=6, k=3,
v=2
7-61
Древовидные и решетчатые коды
Время
Состояние
00
0
1
2
00
11
3
00
00
11
11
00
10
01
01
10
00
10
01
01
10
11
10
01
01
11
00
10
01
00
11
11
00
6
00
11
11
10
5
00
11
11
10
01
4
01
01
10
10
Решетчатая диаграмма свёрточного (6,3)-кода
ИТЛаб ВМК ННГУ
Свёрточные коды
8-61
Древовидные и решетчатые коды
Узлы в столбце решётки представляют состояния, в
которых может находиться регистр сдвига в данный
момент времени. Рёбра описывают изменение
состояния регистра при поступлении очередного
кадра информационных символов. Пути слева
направо по решётке соответствуют кодовым словам
на выходе кодера.
Если маркировка не обладает свойством линейности,
то код называется скользящим блоковым. Если
маркировка меняется от кадра к кадру, то она
соответствует общему решетчатому коду. Если же
число состояний в следующих друг за другом
временных кадрах неограниченно растёт, то такой код
называется общим древовидным кодом.
ИТЛаб ВМК ННГУ
Свёрточные коды
9-61
Древовидные и решетчатые коды
Решетчатый код может быть также представлен
деревом. Деревом называется граф, в котором число
вершин и рёбер неограниченно увеличивается при
движении из корня. Каждый узел дерева – состояние,
соответствующее всем поступившим в кодер
информационным символам. Дерево является
корректным описанием кодов с большой (в
частности, бесконечной) длиной кодового
ограничения.
ИТЛаб ВМК ННГУ
Свёрточные коды
10-61
Описание с помощью многочленов
Свёрточный ((m+1)n0,(m+1)k0)-код над GF(q) с
длиной кодового ограничения v=mk0 можно
генерировать с помощью n0k0 фильтров с конечным
импульсным откликом (КИО-фильтров) над GF(q).
Каждый КИО-фильтр может быть представлен
многочленом степени не выше m.
КИО
КИО
КИО
ИТЛаб ВМК ННГУ
n0=3, k0=1
Выходной
регулирующий
буфер
Свёрточные коды
11-61
Описание с помощью многочленов
Если входной поток записать как многочлен (может
быть, бесконечной степени), то работа фильтра может
быть описана как умножение многочленов, то есть
кодер, а потому и сам код, могут быть представлены
множеством из k0n0 многочленов, порождающих код.
Эти многочлены называются порождающими
многочленами. Степень порождающих многочленов
не превосходит m. При k0>1 некоторые порождающие
многочлены могут равняться нулю.
Пусть gij(x),i=1…k0, j=1…n0 - множество
порождающих многочленов. Оно может быть
записано в виде матрицы размера k0*n0, называемой
порождающей матрицей.
ИТЛаб ВМК ННГУ
Свёрточные коды
12-61
Описание с помощью многочленов
Дадим формальные понятия параметров кода.
Определение. Длиной кодового ограничения
свёрточного кода, задаваемого матрицей [gij(x)],
называется величина
k0
v   max j [deg gij ( x)]
i 1
Информационной длиной кодового слова называется
k  k0 max i , j [deg g ij ( x)  1]
Кодовой длиной блока называется
n  n0 max i , j [deg g ij ( x)  1]
ИТЛаб ВМК ННГУ
Свёрточные коды
13-61
Описание с помощью многочленов
Будем рассматривать входной кадр как k0
параллельно поступающих символов, а
последовательность входных кадров как k0
параллельных последовательностей символов. Они
могут быть представлены k0 информационными
многочленами di(x), i=1,…,k0, или вектором таких
многочленов: d(x) = [d1(x),…,dk0(x)]. Аналогично
выходное кодовое слово может быть представлено
вектором c(x) = [c1(x),…,cn0(x)]. Теперь операцию
кодирования можно записать в компактной форме:
c(x)=d(x)G(x)
Проверочной матрицей H(x) называется ((n0 - k0)* n0)матрица, удовлетворяющая условию G(x)HT(x)=0.
Вектор синдромных многочленов определяется
уравнением s(x)=v(x)HT(x). Он имеет размерность (n0
- k0).
ИТЛаб ВМК ННГУ
Свёрточные коды
14-61
Описание с помощью многочленов
Систематический кодер для свёрточного кода имеет
порождающую матрицу из многочленов вида
[E P(x)], где E – единичная матрица размера k0*k0, а
P(x) – матрица размера k0*(n0-k0). Для
систематических свёрточных кодов проверочную
матрицу можно сразу записать в виде
H(x)=[-PT(x) E], где E – единичная матрица размера
(n0-k0)*(n0-k0).
ИТЛаб ВМК ННГУ
Свёрточные коды
15-61
Описание с помощью многочленов
Рассмотрим важный частный случай k0=1. Упростим
обозначения, положив
G(x)=[g1(x),…,gn0(x)] и cj(x)=d(x)gj(x), j=1…n0.
Для систематического кода g1(x)=1.
Определение. Свёрточный код, порождающие
многочлены g1(x),…,gn0(x) которого удовлетворяют
условию НОД [g1(x),…,gn0(x)]=xa при некотором a,
называется некатастрофическим свёрточным кодом.
В противном случае он называется
катастрофическим свёрточным кодом.
ИТЛаб ВМК ННГУ
Свёрточные коды
16-61
Описание с помощью многочленов
Без ограничения общности можно считать xa=1, так
как невыполнение этого равенства просто
эквивалентно введению во все фильтры задержки,
что, очевидно, бессмысленно.
Некатастрофический свёрточный код при отсутствии
ошибок можно декодировать, используя алгоритм
Евклида, согласно которому существую многочлены
a1(x),…,an0(x) такие, что
a1(x)g1(x) +…+ an0(x)gn0(x)=1.
Поэтому если многочлен поступающих данных d(x)
кодируется по формуле cj(x)=d(x)gj(x), то d(x) можно
восстановить, используя соотношение
a1(x)c1(x) +…+ an0(x)cn0(x)=d(x).
ИТЛаб ВМК ННГУ
Свёрточные коды
17-61
Описание с помощью многочленов
Задача нахождения хорошего свёрточного кода
эквивалентна задаче поиска «хорошего» множества
взаимно простых многочленов. Найти произвольное
множество взаимно простых многочленов нетрудно, а
вот найти множество, которое хорошо исправляет
ошибки, действительно трудно.
ИТЛаб ВМК ННГУ
Свёрточные коды
18-61
Описание с помощью многочленов
 n0 
Некатастрофический код можно определить через  k 
различных (k0*k0)-подматриц матрицы G(x). Пусть
detl(x) – определитель l-й подматрицы.
0
Определение. Свёрточный код с матрицей
порождающих многочленов G(x), определители
detl(x), l=1,…,  nk  подматриц которой удовлетворяют
условию
0
0
НОД [detl(x), l=1,…,  nk  ]=xa
0
0
при некотором a, называется некатастрофическим
свёрточным кодом. В противном случае он
называется катастрофическим свёрточным кодом.
ИТЛаб ВМК ННГУ
Свёрточные коды
19-61
Описание с помощью многочленов
Некатастрофический код может быть обращён, то
есть существует (n0*k0)-матрица G*(x) такая, что
G*(x)G(x)= xaE,
где E – единичная матрица размера k0*k0. Найти G*(x)
в общем случае затруднительно.
Для систематических кодов условия
некатастрофичности всегда выполняются.
ИТЛаб ВМК ННГУ
Свёрточные коды
20-61
Исправление ошибок и понятия расстояния
Длина кодового слова свёрточного кода столь велика,
что в фиксированный момент времени декодер может
хранить в памяти только его часть, поэтому все
решения принимаются декодером на сегментах
кодовых слов конечной длины.
Проблема декодирования свёрточных кодов в
большинстве случаев сводится к вопросу
исправления ошибок в первом кадре, так как влияние
информационных символов этого кадра на
последующие кадры кодовых слов известно и может
быть исключено из них.
ИТЛаб ВМК ННГУ
Свёрточные коды
21-61
Исправление ошибок и понятия расстояния
Процедура, использующая информационные
символы исправленного кадра для явного исключения
их влияния на последующие кадры, называется
процедурой с обратной связью. Другие декодеры
оперируют таким образом, чтобы соответствующим
образом декодированные предшествующие кадры не
оказывали никакого влияния на текущий кадр.
ИТЛаб ВМК ННГУ
Свёрточные коды
22-61
Исправление ошибок и понятия расстояния
В любом декодере может случиться так, что в связи
со слишком большим количеством ошибок очередной
кадр кодового слова не будет исправлен должным
образом. В некоторых декодерах это приводит к
введению ошибок в последующие кадры, вызывая их
неправильное декодирование. Если ошибка в
декодировании одного кадра приводит к появлению в
кодовом слове бесконечного числа дополнительных
ошибок, то говорят, что в декодере происходит
распространение ошибок. Если распространение
ошибок может быть устранено выбором алгоритма
декодирования, это явление называют обычным
распространением ошибок, если же распространение
ошибок вызывается выбором порождающего
многочлена свёрточного кода, то говорят о
катастрофическом распространении ошибок. Выбор
надлежащей конструкции системы позволяет
избежать обеих этих возможностей.
ИТЛаб ВМК ННГУ
Свёрточные коды
23-61
Исправление ошибок и понятия расстояния
Число символов, которые декодер может хранить в
памяти, называется шириной окна декодирования.
Увеличение ширины окна декодирование приводит к
улучшению характеристик до достижения насыщения
(~3n).
Свёрточный код характеризуется несколькими
минимальными расстояниями, определяемыми
длинами начальных сегментов кодовых слов, между
которыми вычисляется расстояние. Мера расстояния
определяется таким образом, что если при
декодировании двух сегментов получается один и тот
же первый информационный кадр, то эти сегменты
считаются эквивалентным.
ИТЛаб ВМК ННГУ
Свёрточные коды
24-61
Исправление ошибок и понятия расстояния
Определение. Минимальное расстояние Хэмминга
для любых начальных сегментов длины l кадров всех
пар кодовых слов, отличающихся начальным кадром,
называется l-м минимальным расстоянием
свёрточного кода и обозначается d*l. Если l = m+1, то
оно называется просто минимальным расстоянием и
обозначается d*. Последовательность d*1, d*2, d*3, …
называется дистанционным профилем свёрточного
кода.
Очевидно, что функция d*l является монотонной.
Вследствие линейности свёрточного кода одно из
двух кодовых слов может быть нулевым. В этом
случае l-е минимальное расстояние равно
минимальному из всех весов сегментов длины l
кадров кодовых слов с ненулевым первым кадром.
Оно может быть вычислено по маркированной
решётке.
ИТЛаб ВМК ННГУ
Свёрточные коды
25-61
Исправление ошибок и понятия расстояния
Если в первых l кадрах произошло не более t ошибок,
и 2t< d*l, то ошибки, которые появились в первом
кадре, могут быть исправлены. При t=m+1 такой код
называется свёрточным кодом, исправляющим t
ошибок на длине блока.
Определение. Свободным расстоянием свёрточного
кода называется d  max l dl .
Определение. Свободной длиной свёрточного кода
называется длина имеющего наименьший вес
ненулевого начального сегмента кодовой
последовательности свёрточного кода.
ИТЛаб ВМК ННГУ
Свёрточные коды
26-61
Матричное описание свёрточных кодов
Пусть свёрточный код задан матрицей G(x)=[gij(x)].
Запишем многочлены gij(x) в виде
gij(x)=gij0 + gij1x +…+ gijlxl.
Для построения порождающей матрицы
коэффициенты gijl упорядочиваются в виде матрицы.
Пусть при каждом l Gl=[gijl]. является (k0*n0)матрицей. Тогда порождающая матрица свёрточного
кода имеет следующий вид:
G=
ИТЛаб ВМК ННГУ
G0 G1 G2 … Gm 0 0 0 …
0 G0 G1 … Gm-1 Gm 0 0 …
…
…
Свёрточные коды
27-61
Матричное описание свёрточных кодов
В случае систематического кода G0=[E P0], при l>0
Gl=[0 Pl]. Структура этих матричных выражений
соответствует работе регистра сдвига кодера.
Проверочной матрицей является любая матрица H,
удовлетворяющая условиям G*l H*l=0, l=0,1,2…, где
G*l и H*l – главные миноры порядка l матриц G и H.
ИТЛаб ВМК ННГУ
Свёрточные коды
28-61
Некоторые простые свёрточные коды
Не существует конструктивных методов поиска
свёрточных кодов с большой длиной кодового
ограничения. Большинство известных и используемых
в настоящее время лучших свёрточных кодов было
найдено с помощью ЭВМ.
Класс двоичных свёрточных кодов, исправляющих
одну ошибку и называемых кодами Вайнера-Эша,
аналогичен классу кодов Хэмминга. Для каждого
натурального m существует ((m+1)2m,(m+1)(2m-1))-код
Вайнера-Эша, определяемый проверочной матрицей
H’(2m-1,2m-1-m)-кода Хэмминга. Это – проверочная
[m*(2m-1)]-матрица, в которой все столбцы различны и
ненулевые. Определим множество [1*(2m-1)]-матриц
P1,…,Pm через строки H’. Обозначим через P0 [1*(2m1)]-матрицу, все элементы которой равны единице.
Тогда проверочная матрица кода Вайнера-Эша
запишется в следующем виде:
ИТЛаб ВМК ННГУ
Свёрточные коды
29-61
Некоторые простые свёрточные коды
P0
1
0
0
0
0
0
P1
0
P0
1
0
0
0
P2
0
P1
0
P0
1
0
Pm
0
…
0
0
Pm
…
…
0
…
Теорема. Минимальное расстояние кода Вайнера-Эша
равно 3. Таким образом, он является свёрточным
кодом, исправляющим одну ошибку.
ИТЛаб ВМК ННГУ
Свёрточные коды
30-61
Алгоритмы синдромного декодирования
Предположим, что принята бесконечная
последовательность, состоящая из кодового
слова и шума: v = c+e. Синдром s = vHT = eHT
имеет бесконечную длину. Декодер вычисляет
компоненты s по мере поступления v, исправляя
ошибки и сбрасывая компоненты, вычисленные
давно. Декодер содержит таблицу возможных
сегментов синдромов и соответствующих
сегментов конфигураций шума. Найдя в
таблице полученный сегмент синдрома, декодер
имеет возможность исправить начальный
сегмент кодового слова.
ИТЛаб ВМК ННГУ
Свёрточные коды
31-61
Алгоритмы синдромного декодирования
Регулирующий буфер
+
+
Проверка на наличие одного
из следующих синдромов:
0 0 1 1 1
0 0 0 1 0
0 1 0 0 1
Принятые
биты
+
0 1 1 1 1
1 1 0 0 1
1 0 0 0 1
+
Да
+
+
Проверка на наличие одного
из следующих синдромов:
+ +
0 0 1 1 1
0 0 0 1 0
0 1 0 0 1
0 1 1 1 1
1 1 0 0 1
1 0 0 0 1
Да
+
+
Декодер для свёрточного (6,3)-кода
ИТЛаб ВМК ННГУ
Свёрточные коды
32-61
Алгоритмы синдромного декодирования
Конфигурация ошибок
Третий кадр
Второй кадр
Синдром
Первый кадр
0 0
0 0
0 0
0 0
0 1
1 0
0 0 1 1 1
0 0 1 0 1
0 0
0 0
1 1
0 0 0 1 0
0 0
0 0
0 1
1 0
0 1
0 1
0 1 0 0 1
0 1 1 0 1
0 1
1 0
0 0
0 0
0 1
0 1
1 1 0 1 1
1 0 0 1 1
0 0
0 1
1 0
0 1 0 1 1
0 0
0 1
1 0
0 0
1 0
1 0
0 1 1 1 1
1 1 0 0 1
1 0
0 0
1 0
1 0 0 0 1
Таблица декодирования для свёрточного (6,3)-кода
ИТЛаб ВМК ННГУ
Свёрточные коды
33-61
Алгоритмы синдромного декодирования
Декодер исправляет две ошибки в шести первых
битах. Вклад каждой исправленной ошибки
устраняется из регистра синдрома с помощью
обратной связи. Так как код несистематический, то
информационные символы восстанавливаются по
исправленному кодовому слову. Для восстановления
информации используется следующее соотношение:
1 = НОД (x2+x+1,x2+1) = x(x2+x+1) + (x+1)(x2+1)
ИТЛаб ВМК ННГУ
Свёрточные коды
34-61
Алгоритмы синдромного декодирования
После исправления первого кадра нужно изменить
синдром таким образом, чтобы он не вызвал
ошибочного исправления в следующем кадре.
Существуют два способа:
- после каждого исправления ошибки устанавливается
нулевое состояние регистра синдрома.
- из регистра синдрома вычитается корректирущий
синдром.
Приведённый декодер не является полным, так как
таблица декодирования содержит не все возможные
синдромы. Для исправления других конфигураций
ошибок можно увеличивать синдромную память или
длину блока кода.
ИТЛаб ВМК ННГУ
Свёрточные коды
35-61
Коды для исправления пакетов ошибок
Пакетом ошибок длины t называется любая
последовательность из t символов, из которых первый
и последний не равны нулю. В бесконечно длинном
слове, принятом декодером, может появиться много
ошибок. Примем, что эти ошибки собраны в пакеты
различной длины. Если пакеты ошибок находятся друг
от друга достаточно далеко, то декодер в любой
момент времени содержит лишь один пакет ошибок.
Свёрточный код, для которого декодер может
исправлять любой изолированный пакет ошибок
длины t, называется свёрточным кодом, способным
исправлять пакеты ошибок длины t.
ИТЛаб ВМК ННГУ
Свёрточные коды
36-61
Коды для исправления пакетов ошибок
Очевидно, что любой свёрточный (n,k)-код,
исправляющий t ошибок, будет исправлять пакет
ошибок длины t. Свёрточный код для исправления
более длинных пакетов может быть получен
перемежением. Чтобы получить свёрточный (jn,jk)-код
из (n,k)-кода, возьмём j одинаковых (n,k)-кодеров и
построим кодовые слова, чередуя их выходные
символы. Если исходный код может исправлять пакеты
ошибок длины t, то код-перемежение может
исправлять пакеты ошибок длины jt.
Если g(x) - порождающий многочлен исходного кода,
то g(xj) - порождающий многочлен кода-перемежения.
ИТЛаб ВМК ННГУ
Свёрточные коды
37-61
Коды для исправления пакетов ошибок
Определение. пусть t и n0 - любые положительные
целые числа. Кодом Ивадаре называется
исправляющий пакеты ошибок двоичный
систематический свёрточный код со следующей
порождающей (n0-1)*n0)-матрицей:
 1 0 ... 0 g1 ( x) 


0
1
...
0
g
(
x
)


2
G ( x)  
... ...
... 


 0 0 ... 1 g n 1 ( x) 
0


где
g i ( x)  x (t 1)( 2 n0 i ) i 3  x (t 1)( n0 i ) 1 , i  1,..., n0  1
Коды Ивадаре называются свёрточными
((m+1)n0,(m+1)(n0-1))-кодами с числом кадров m,
равным (t+1)(2n0-1)-2.
ИТЛаб ВМК ННГУ
Свёрточные коды
38-61
Коды для исправления пакетов ошибок
Проверочная матрица такого кода:
H ( x)  [ g1 ( x)
g 2 ( x) ... g n0 1 ( x) 1]
Так как n0-k0=1, то имеется только один
синдромный многочлен
n0 1
n0 1
i 1
i 0
s( x)   gi ( x)ei ( x)  en0 ( x)  en0 ( x)  [ x (t 1)( n0 i )1  x (t 1)( 2n0 i )i 3 ]ei ( x)
Пусть пакет начинается в первом кадре и содержит
tn0 битов. Он может захватывать (t+1) кадров.
Докажем, что код Ивадаре может исправлять такой
пакет ошибок. Для этого покажем, что декодер
может восстановить по синдрому пакет ошибок, и
что встретившийся в более позднем кадре пакет
ошибок не вызовет сбоя в работе декодера.
ИТЛаб ВМК ННГУ
Свёрточные коды
39-61
Коды для исправления пакетов ошибок
Кодер для (72,48)-кода Ивадаре с n0=3, t=4 и m+1=24.
+
24-разрядный регистр сдвига
+
+
20-разрядный регистр сдвига
ИТЛаб ВМК ННГУ
Свёрточные коды
40-61
Коды для исправления пакетов ошибок
Обозначим через c1(x) и c2(x) многочлены
информационных битов, а через c3(x) - многочлен
проверочных битов. Соответствующими
многочленами ошибок будут e1(x), e2(x) и e3(x).
s(x) = e3(x) + (x4+x19)e2(x) + (x9+x23)e1(x),
где для пакета ошибок, начинающегося в первом
кадре,
e3(x) = e30 + e31x + e32x2 + e33x3,
e2(x) = e20 + e21x + e22x2 + e23x3 + e24x4,
e1(x) = e10 + e11x + e12x2 + e13x3 + e14x4.
Порождающие многочлены выбраны так, чтобы на
каждый бит синдрома влиял лишь один
ошибочный бит.
ИТЛаб ВМК ННГУ
Свёрточные коды
41-61
Коды для исправления пакетов ошибок
Каждый бит многочлена e2(x) воздействует на синдром
дважды: за его первым появлением следует отклик с
задержкой на 15 битов. Аналогично каждый бит
многочлена e1(x) воздействует на синдром дважды: за
его первым появлением следует отклик с задержкой на
14 битов. Так как e24 и e10 не могут одновременно быть
ненулевыми, то эти пары ошибок не перекрываются.
Каждый бит многочлена e13(x) воздействует на синдром
один раз. За его первым появлением следуют только
нули - один с задержкой на 14 битов, другой - с
задержкой на 15 битов. Эти нули определяют e3(x).
Если в действительности пакет ошибок начинается в l-м
кадре, то синдром сдвигается вправо на l битов, и перед
ним вставляется l нулей. Эта конфигурация не будет
воспринята декодером как пакет ошибок,
начинающийся в первом кадре.
ИТЛаб ВМК ННГУ
Свёрточные коды
42-61
Коды для исправления пакетов ошибок
Декодер для (72,48)-кода Ивадаре с n0=3, t=4 и m+1=24.
+ +
+
v1(x) - регистр
+
Регулировка
+
v2(x) - регистр
+
+
+
s0
Синдромный регистр
+ s4 +
I
ИТЛаб ВМК ННГУ
Свёрточные коды
43-61
Коды для исправления пакетов ошибок
Первые четыре бита синдрома зависят лишь от
ошибок в принятых проверочных битах, поэтому для
хранения синдрома может быть использован 16разрядный регистр.
Сначала декодер исправляет второй бит каждого кадра
пакета ошибок, затем возвращается к началу пакета и
исправляет первый бит. Поэтому в декодере имеется 4разрядный регистр сдвига, в котором хранится c2(x)
после исправления.
ИТЛаб ВМК ННГУ
Свёрточные коды
44-61
Коды для исправления пакетов ошибок
Для исправления ошибки в v2(x) декодер проверяет
компоненты s4 и s19 синдрома. Если обе компоненты
равны единице, то правый бит v2(x) является
ошибочным. В потоке данных и в синдроме делаются
исправления. Пакет ошибок e3(x), начинающийся в
более позднем кадре, не может вызвать сбоя, так как
отклик e3(x) равен нулю.
Параллельно с этим для исправления ошибки в v1(x)
декодер проверяет компоненты s5 и s19 синдрома. Если
обе компоненты равны единице, а s4 равен нулю, то
правый бит v1(x) является ошибочным. В потоке
данных и в синдроме делаются исправления. Пакет
ошибок e3(x), начинающийся в более позднем кадре, не
может вызвать сбоя, так как отклик e3(x) равен нулю. В
силу выбора способа проверки ещё не исправленный
бит e2(x) также не может вызвать сбоя.
ИТЛаб ВМК ННГУ
Свёрточные коды
45-61
Коды для исправления пакетов ошибок
Для правильного исправления пакетов ошибок длины
12 необходимо, чтобы до 29-го кадра не происходило
ошибок. То есть, если между пакетами ошибок есть 24
свободных от ошибок кадра (72 бита), то декодер будет
успешно исправлять любые пакеты ошибок длины 12.
ИТЛаб ВМК ННГУ
Свёрточные коды
46-61
Алгоритм декодирования Витерби
Алгоритм декодирования Витерби является полным
алгоритмом декодирования свёрточных кодов.
Практически он употребляется для двоичных кодов с
малой длиной кодового ограничения.
Алгоритм Витерби является эффективной
реализацией процедуры декодирования по минимуму
расстояния. Выберем окно декодирования ширины b,
превышающей длину блока n, вычислим все кодовые
слова длины b, сравним принятое слово с каждым из
них и выберем кодовое слово, ближайшее к
принятому слову. Первый информационный кадр
выбранного кодового слова берём в качестве первого
информационного кадра декодированного кодового
слова. Этот кадр затем кодируется вновь и
вычитается из принятого слова. После этого в
декодер вводится следующий кадр кодового слова и
процесс повторяется.
ИТЛаб ВМК ННГУ
Свёрточные коды
47-61
Алгоритм декодирования Витерби
В основе алгоритма Витерби лежит принцип
Беллмана. Декодер Витерби итеративно обрабатывает
кадр за кадром, двигаясь по решётке кода и пытаясь
повторить путь кодера. В каждый момент времени
декодер по принятой последовательности определяет
наиболее правдоподобный путь к каждому узлу и
определяет расстояние между этими путями и
принятой последовательностью. Это расстояние
называется мерой расходимости пути. Наиболее
правдоподобный путь к узлу N очередного
временного кадра определяется как наиболее
правдоподобное из продолжений путей к узлам Ni
предыдущего временного кадра рёбрами (Ni,N)
решётки.
ИТЛаб ВМК ННГУ
Свёрточные коды
48-61
Алгоритм декодирования Витерби
Если на некоторой итерации оказалось, что все
выжившие пути, ведущие в узлы текущего
временного кадра, проходят через один и тот же узел
первого кадра, то этот узел определяет первый
декодированный информационный кадр.
Вследствие конечности ширины окна декодирования
b однозначное решение о декодировании очередного
кадра кодового слова может оказаться невозможным.
Кроме того, однозначное решение, принятое
декодером, также может оказаться ошибочным. Это
обязательно приведёт к распространению ошибок,
которое в случае некатастрофического кода через
некоторое время будет выявлено и остановлено
декодером.
ИТЛаб ВМК ННГУ
Свёрточные коды
49-61
Алгоритмы поиска по решётке
Можно улучшить характеристики свёрточного кода,
увеличив длину кодового ограничения. Декодер
Витерби, однако, быстро становится непрактичным:
при длине кодового ограничения 10 декодер
двоичного кода должен помнить до 1024 выживших
путей. Для того, чтобы ослабить влияние больших
длин кодового ограничения, была разработана
стратегия, игнорирующая маловероятные пути по
решётке, пока они остаются маловероятными. При
такой стратегии не принимается решений о том,
чтобы окончательно оставить некоторый путь. Время
от времени декодер возвращается назад, чтобы
продолжить оставленный ранее путь.
ИТЛаб ВМК ННГУ
Свёрточные коды
50-61
Алгоритмы поиска по решётке
Все такие стратегии известны под общим названием
последовательного декодирования. Последовательное
декодирование имеет довольно общий характер и
может использоваться в самых разных каналах.
Алгоритм последовательного декодирования является
«в меру жадным». В отличие от декодера Витерби,
последовательный декодер на каждом уровне
находится в конкретном узле. Он анализирует
следующий временной кадр, выбирая ближайшее в
смысле расстояния Хэмминга ребро к принятому
кадру, и переходит в узел на следующем уровне.
ИТЛаб ВМК ННГУ
Свёрточные коды
51-61
Алгоритмы поиска по решётке
При наличии ошибок декодер может случайно
выбрать неправильную ветвь. Если он продолжает
следовать по ложному пути, то через некоторое время
он обнаружит, что происходит слишком много
ошибок. Последовательный декодер вернётся назад
на несколько кадров и начнёт исследовать
альтернативные пути до тех пор, пока не найдётся
правдоподобный путь. Затем декодер продолжит
движение по новому пути.
При прохождении b кадров решётки принимается
окончательное решение относительно самого старого
кадра. Он выводится из окна, и в рассмотрение
вводится очередной кадр решётки.
ИТЛаб ВМК ННГУ
Свёрточные коды
52-61
Алгоритмы поиска по решётке
Наиболее известным алгоритмом поиска по решётке
является алгоритм Фано. В этом алгоритме требуется
знать верхнюю оценку p вероятности появления
ошибок в канале (p<1/2). Пока декодер движется по
правильному пути, число ошибок, встреченных в
первых l кадрах, не превосходит pn0l. Определим
перекошенное расстояние формулой
t(l) = pn0l - d(l),
где d(l) - расстояние Хэмминга между принятым
словом и текущим путём по решётке. Для
правильного пути t(l) положительно и возрастает.
Если вдруг t(l) станет уменьшаться, то декодер
заключает, что в некотором узле он выбрал
ошибочное ребро, и возвращается по решётке,
проверяя другие пути.
ИТЛаб ВМК ННГУ
Свёрточные коды
53-61
Алгоритмы поиска по решётке
Для того, чтобы решить, когда t(l) начнёт
уменьшаться, декодер использует текущий порог
T = D*h, где
D - приращение порога, а h = [t(l)/D].
В алгоритме Фано требуется, чтобы рёбра,
выходящие из каждого узла, были пронумерованы
согласно некоторому правилу. Наиболее общим
является правило минимума расстояния. Рёбра
упорядочиваются в соответствии с их расстояниями
Хэмминга до соответствующего кадра принятого
слова. Вообще может быть использован любой
фиксированный порядок (например,
лексикографический).
ИТЛаб ВМК ННГУ
Свёрточные коды
54-61
Алгоритмы поиска по решётке
Основой декодера, реализованного на алгоритме
Фано, является копия кодера с несколькими
вспомогательными ячейками памяти. Декодер
пытается подать символы в копию кодера так, чтобы
на его выходе появилось кодовое слово, достаточно
близкое к принятому слову. После каждой итерации
он может обратиться к последнему кадру, поданному
в копию кодера. На основе сравнения t(l) и T он
может изменить информацию в этом кадре, вернуться
к более раннему кадру или ввести новый кадр.
ИТЛаб ВМК ННГУ
Свёрточные коды
55-61
Алгоритмы поиска по решётке
Для того, чтобы гарантировать конечность работы
декодера, достаточно доказать два утверждения:
- если декодер не может найти альтернативный путь,
он двигается назад к узлу, в котором было
установлено текущее значение порога, и понижает
его.
- декодер не будет повышать порог до тех пор, пока
не достигнет ранее неисследованного узла.
ИТЛаб ВМК ННГУ
Свёрточные коды
56-61
Алгоритмы поиска по решётке
Что касается первого утверждения, очевидно, что
если декодер не может найти новое ребро, от
которого он может двигаться вперёд, то он должен в
конце концов возвратиться к указанному узлу. Если в
предшествующем некоторому узлу кадре
перекошенное расстояние t(l-1) меньше текущего
значения порога T, то порог был увеличен в l-м кадре.
ИТЛаб ВМК ННГУ
Свёрточные коды
57-61
Алгоритмы поиска по решётке
Для того, чтобы доказать второе утверждение,
заметим, что после понижения порога на D декодер
ищет следующие рёбра в том же порядке, что и до
этого, пока не найдёт то место, в котором
перекошенное расстояние, ранее бывшее меньше
порога, становится больше него. До этого момента
порог T не может измениться. Действительно, после
понижения порога на D перекошенное расстояние в
тех узлах, где оно превышало первоначальный порог,
всегда будет меньше T+D. Когда декодер продвинется
в новую часть дерева, он обязательно достигнет 
состояния, в котором t(l-1)<T+D и t(l) T. В этой
точке порог повышается. Это и является тестом для
определения того, новый ли узел был посещён, и нет
необходимости помнить все посещённые узлы.
ИТЛаб ВМК ННГУ
Свёрточные коды
58-61
Задания
Приводятся ссылки на книгу:
Р.Блейхут.
Теория и практика
кодов,контролирующих ошибки.
(гл.12 «Свёрточные коды»)
Задания:
12.1, 12.3, 12.5, 12.6 (а,в), 12.7, 12.8(г), 12.9
ИТЛаб ВМК ННГУ
Свёрточные коды
59-61
Контакты:
ECCG,
eccg@wl.unn.ru
Чумаков Виктор,
vcart@nm.ru
ИТЛаб ВМК ННГУ
Свёрточные коды
60-61
Контакты:
Нижегородский университет,
Факультет вычислительной математики и кибернетики,
Учебно-исследовательская Лаборатория
"Информационные технологии"
603950, Нижний Новгород, пр. Гагарина, 23,
р.т.: +7 (8312) 65-48-59,
E-mail: itlab@unn.ac.ru
ИТЛаб ВМК ННГУ
Свёрточные коды
61-61
Download