
- •Циклические коды-1
- •1. Введение
- •2. Сведения из теории
- •3. Примеры кодирования и декодирования
- •4. Описание лабораторного макета
- •5. Порядок выполнения работы
- •5.1 Расчетное задание
- •5.3 Экспериментальная часть
- •6. Литература
- •Циклические коды-2
- •1. Введение
- •2. Сведения из теории
- •3. Порядок выполнения работы
- •4. Вопросы
- •5. Литература
- •Свёрточные коды
- •1. Введение
- •2. Сведения из теории
- •2.1 Кодирование
- •2.2 Декодирование Витерби
- •2.3 Пороговое декодирование
- •3. Описание лабораторного макета
- •4. Порядок выполнения работы
- •5. Контрольные вопросы
- •6. Литература
- •Приложение А Пример нескольких шагов порогового декодирования для свёрточного кода ½
- •Некогерентная демодуляция бинарного ЧМ сигнала
- •1. Введение
- •2. Основные сведения из теории
- •3. Ход работы
- •4. Контрольные вопросы
- •5. Список литературы
- •Спектры сигналов с линейной модуляцией
- •1. Введение
- •2. Сведения из теории
- •2.2 Спектр мощности случайной последовательности чисел
- •2.3 Спектральная плотность мощности цифрового сигнала
- •3. Описание лабораторного макета
- •4. Порядок выполнения работы
- •5. Вопросы
- •6. Литература
- •Дельта-модуляция
- •1. Введение
- •2. Сведения из теории
- •3. Описание лабораторного макета
- •4. Порядок выполнения работы
- •5. Вопросы
- •6. Литература
- •Методика аналого-цифрового преобразования
- •1. Введение
- •2. Сведения из теории
- •2.1 АЦП последовательного счета
- •2.2 АЦП поразрядного взвешивания
- •2.3 Способ обнаружения и исправления сбоев
- •2.4 Вероятностная модель ошибок при АЦП
- •3. Описание лабораторного макета
- •4. Порядок выполнения работы
- •5. Вопросы
- •6. Литература

55
2. Сведения из теории
2.1 Кодирование
Так как свёрточный код является избыточным, то на один входной бит a приходится несколько (как минимум два) выходных битов, то есть математически кодер выполняет отображение
a→b(1)b(2)b(3)…b(n) , n>1 .
Для краткости записи выходное слово b(1)b(2)b(3)…b(n) можно рассматривать как число, принимающее значение от 0 до 2n−1 .
Для формирования выходного слова выбирают линейные операции по отношению к входному биту. Так, например, можно просто скопировать входной бит на все позиции выходного слова. Однако, если учесть заданное количество предыдущих входных битов, то вариантов становится больше: на разные позиции можно ставить значения разных линейных комбинаций битов, хранящихся в регистре сдвига.
Произвольное кодовое слово удобно записывать в виде полинома, коэффициенты которого совпадают с элементами этого слова, а возрастающим степеням xi соответствует увеличение задержки по времени3. Правило кодирования задается генераторными (порождающими) полиномами, каждый из которых отвечает за конкретный бит выходного слова.
Рассмотрим простой свёрточный код с отображением a→b(1)b(2) , где одному входному биту соответствует два выходных; в этом случае скорость кодирования равна ½. Для реализации такого кода необходимо задать два полинома. Возьмем, например, полиномы степени не больше первой
G1 (x)=1 , G2 (x)=1+x . |
(14) |
Непрекращающуюся последовательность входных битов |
ai запишем |
в виде полинома4 |
|
A( x)=∑ai xi , |
|
i |
|
3 Это следует из свойства z-преобразования, если x заменить на z−1.
4 Математически выгодно индекс суммирования ничем не ограничивать

56
где символом обозначено множество целых чисел. Две последовательности на выходе кодера определим через произведение двух полиномов
B(1)(x)=A (x)G1 (x)=A (x) , |
|
|
|
(15) |
||
B(2)(x)=A (x)G2 (x)= A(x)+x A( x)=∑(ai+ai−1) xi . |
||||||
|
|
|
|
|
i |
|
На основании (15) определяем правило работы кодера |
|
|||||
b(1)=a , |
b(2)=a +a |
i−1 |
. |
|
||
i |
i |
i |
i |
|
|
Произведение двух полиномов — это полином, коэффициенты которого вычисляются через свёртку коэффициентов перемножаемых полиномов5. Для доказательства данного факта не требуется ничего, кроме знания правил перемножения двух полиномов и приведения подобных слагаемых. Также данные факты известны тем, кто знает элементы теории z-преобразования.
Если для рассматриваемого свёрточного кода попытаться построить генераторную матрицу, которая есть у любого линейного блочного кода, то окажется, что она будет неограниченной по размерам
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
|
0 |
0 |
0 |
0 |
|
|
(…b0(1)b0(2)b1(1)b1(2)…)=(…a0 a1 |
…) |
… |
0 0 |
1 1 |
0 |
1 |
0 |
0 |
… |
, |
|||
|
|
0 |
0 |
0 |
0 |
|
1 |
1 |
0 |
1 |
|
||
|
|
( |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
1 |
) |
|
|
|
|
|
|
|
|
|
|
|
|
|

57
вательно выдающий все входные биты; в данном случае выдающий попарно, начиная сверху вниз. Блок x — это триггер, хранящий предыдущий входной бит. Сумматор по модулю два обозначен окружностью со знаком +. Он имеет два входа и один выход. Таблица сложения простая
0+0=0, 0+1=1 , 1+0=1, 1+1=0 .
Выходные биты кодера однозначно определяются входным битом и набором предыдущих входных битов, запомненных в регистре (в последовательно соединенных триггерных ячейках). Эти предыдущие биты называются состоянием кодера. Состояние иногда удобно записывать в виде десятичного числа, соответствующего двоичному коду. В рассматриваемом примере состояние определяется лишь одним битом ai−1 .
Считается, что в начальный момент кодер имеет нулевое состояние. Если на вход поступил бит 0, то на выходе будет пара 00, а в момент прихода следующего бита кодер перейдет в состояние 0, так как до этого на входе был 0. Данную ситуацию можно отобразить веткой, в которой штриховая линия обозначает приход нулевого бита, а слово
слева — состояние кодера в момент кодирования, то есть в момент выдачи пары битов 00 (эти биты обозначены над линией). Слово на конце стрелки — состояние кодера после прихода следующего кодируемого бита, то есть это будущее состояние.
Определим ветку, если пришел бит 1, а кодер находится в состоянии 0. Очевидно, что выходная пара — 11, а будущее состояние — 1. В данном случае будущее состояние определяется только те-
кущим входным битом, так как ячейка памяти (триггер) одна; в общем случае будущее зависит и от некоторых предыдущих битов. Здесь линия стрелки сплошная, так как пришел бит 1.
Осталось определить две ветки для единичного начального состояния: а) пришел 0, на выходе 01, будущее состояние — 0; б) пришла 1, на выходе 10, будущее состояние — 1.

58
Выписывая всевозможные состояния кодера в виде прямоугольных блоков с надписями внутри и соединяя их линиями со стрелками, можно получить диаграмму состояний (рис. 16).
|
Если кодер переходит, например, |
||
|
из единицы в единицу, то получается |
||
|
петля или цикл. Пример цикла — пода- |
||
|
ча на кодер одних единиц, что в |
||
|
установившемся режиме даст периоди- |
||
|
ческую |
выходную |
|
|
последовательность ...101010.... |
||
Рисунок 16: Диаграмма состояний |
С помощью диаграммы состоя- |
||
ний очень просто кодировать входную |
|||
свёрточного кодера ½ |
битовую последовательность. Рассмотрим, например, дельта-последователь- ность (цифровую дельта-функцию)
δn=100…0… , отклик на которую есть импульсная характеристика
hn=1101 00…00… ,
два ненулевых слова (11 и 01) которой говорят о том, что кодер обладает памятью. Индекс n у импульсной характеристики отвечает за пару битов, то есть за слово. Избыточность рассматриваемого кода равна 50%, так как на один входной бит кодер выдает два выходных. Кстати, можно отметить, что строки генераторной матрицы состоят из сдвинутых импульсных характеристик.
Рассмотрим более сложную входную последовательность a=110100…0… ,
отклик на которую по диаграмме состояний будет следующим b=1110 01 11010000…00 … .
Этот же результат можно получить несколько иным способом, если учесть, что отклик на сумму входных последовательностей равен сумме

59
откликов6, и что любую входную последовательность можно выразить через сумму дельта последовательностей, отличающихся лишь задержкой
a=1101=1000+0100+0001=δn +δn−1+δn−3 ,
b=hn +hn−1+hn−3=(110100 00 00…)+(00 1101 00 00…)+(00 00 00 1101…)= .
=(111001 1101…)
Слагаемые в скобках складываются по модулю два.
Составить схему свёрточного кодера с |
генераторными |
||
полиномами |
G1 (x)=1 , |
G2 (x)=1+x+x2 , |
и диаграмму |
состояний. |
|
|
|
Изучив §2.2 Декодирование Витерби, на основании диаграммы состояний построить решетку кода до момента её установления.
6 Это следует из свойства умножения полинома на сумму полиномов:
A (x)[ B(x)+C(x)]= A(x)B(x)+B(x)C( x)