- •Структурная схема преобразований в спдс
- •Характеристики системы передачи дискретных сообщений
- •Равномерное и неравномерное кодирование
- •Равномерные коды
- •Кодирование по методу Шеннона-Фано.
- •Кодирование по методу Хаффмана.
- •Дискретный канал дискретного времени
- •Дискретные каналы с памятью
- •Число символов, в которых одно слово отличается от другого, называется расстоянием Хэмминга.
- •Классификация помехоустойчивых кодов
- •Линейные коды
- •Декодирование линейных кодов
- •Код Хэмминга
- •Циклические коды
- •Выбор g(X) для построения циклического кода длины n.
- •Итеративные коды
- •Понятие о сверточных кодах
- •Устройства преобразования сигналов для физической линии
- •Сигналы и виды модуляции, используемые в модемах канала тч
- •Рассмотрим примеры сигналов амплитудной, частотной и фазовой модуляции.
Циклические коды
Циклическим кодом называется такой линейный код, у которого при любом циклическом сдвиге разрешенного кодового слова получается другое разрешенное кодовое слово.
Циклический код обладает всеми свойствами линейных кодов. Следовательно, его можно задать порождающей или проверочной матрицей. Но циклические коды обладают свойствами, которые позволяют сильно упростить процедуры и устройства кодирования и декодирования.
Представление кодовых слов степенными полиномами.
Кодовые слова
циклического кода ставят в соответствие
степенным полиномам по следующему
правилу: двоичной последовательности
V
длины n
соответствует
полином (n-1)-й
степени
Здесь х – формальная переменная.
Циклический сдвиг кодового слова на i разрядов влево соответствует умножению полинома V(x) на xi по модулю (xn+1).
Пример.
Пусть n=7. Задано кодовое слово 1001101 x6+x3+x2+1. Сдвиг кодового слова на 1 разряд влево дает другое кодовое слово 0011011 х4+х3+х+1.
V(x)*xi mod (xn+1)=(x6+x3+x2+1)*x mod (x7+1)=(x7+x4+x3+x) mod (x7+1)= =x4+x3+x+1
A=BmodC (А равно остатку от деления В на С)
Циклический сдвиг кодового слова на i разрядов вправо соответствует умножению полинома V(x) на x-i или хn-i по модулю (xn+1).
V(x)*x-i mod (xn+1)= V(x)*xn-i mod (xn+1)
Порождающий полином циклического кода
Множество кодовых слов циклического кода можно указать, задав любое ненулевое кодовое слово. Обычно для задания циклического кода указывают полином наименьшей степени g(x) , который полностью определяет код и называется порождающим. Степень порождающего полинома равна (n-k) , а свободный член V0 всегда равен 1.
Порождающий полином используют для определения порождающей матрицы циклического кода:
-
В качестве первой строки матрицы записывают g(x), дополнив комбинацию нулями слева для получения кодового слова длиной n символов.
-
Вторая строка – x*g(x) (циклический сдвиг первой строки на одну позицию влево).
-
Третья строка – x2*g(x) (циклический сдвиг первой строки на две позиции влево).
……………………………………………………………………………………..
-
К-я строка – xk-1*g(x) (циклический сдвиг первой строки на (k-1) позицию влево).
Пример.
Задан код (7,4) с
порождающим полиномом g(x)=x3+x+1.
Требуется записать его порождающую
матрицу.
Полиномы кодовых слов циклического кода делятся без остатка на свой порождающий полином g(x).
Выбор g(X) для построения циклического кода длины n.
Любой полином, который является делителем полинома (xn+1) можно использовать в качестве порождающего. С ростом n число возможных циклических кодов растет. На практике при построении циклических кодов пользуются таблицами разложения полиномов (xn+1) на неприводимые полиномы. Любой неприводимый полином, входящий в разложение, или произведение нескольких неприводимых полиномов можно выбрать в качестве порождающего полинома, который дает соответствующий циклический код.
Пример.
Требуется определить, какие циклические коды можно построить при длине кодового слова n=7.
x7+1=(x+1)(x3+x2+1)(x3+x+1)
Можно построить следующие ЦК:
-
(7,6) с g(x)=x+1
-
(7,1) с g(x)= (x3+x2+1)(x3+x+1)=x6+x4+x3+x5+x3+x2+x3+x+1=
=x6+x5+x4+x3+x2+x+1
-
(7,4) c g(x)= x3+x2+1
-
(7,4) c g(x)= x3+x+1
-
(7,3) c g(x)= (x+1)(x3+x2+1)=x4+x3+x+x3+x2+1=x4+x2+x+1
-
(7,3) c g(x)= (x+1)(x3+x+1)=x4+x2+x+x3+x+1=x4+ x3+x2+1
Процедура кодирования циклическим кодом
Процедура кодирования записывается следующим образом:
V(x)=U(x)*xn-k+R(x)
R(x)= U(x)*xn-k mod g(x)
В этом случае первые k разрядов кодового слова являются информационными, а последние r=n-k - проверочными.
Пример
Закодировать информационную последовательность U=0110 циклическим кодом (7,4) с порождающим полиномом g(x)= x3+x+1.
U(x)= x2+x, r=n-k=3, U(x)*x3= x5+x4
R(x)=(
x5+x4)
mod (x3+x+1)
R(x)=1
V=0110001 V(x)= x5+x4+1
Сложение коэффициентов при одинаковых степенях осуществляется по модулю 2.
Деление можно выполнять в двоичном виде.
U(x)*x3= x5+x4 0110000
g(x) 1011
R=001V=0110001
Число проверочных символов равно степени порождающего полинома.
Задача
Разделимый циклический код (7,4) задан порождающим полиномом
g(x)= x3+x2+1.
Соответствуют ли кодовые слова информационным последовательностям?
-
U1=1101 V1=1101000
-
U2=0001 V2=0001110
-
U3=1011 V3=1011100
Процедура декодирования циклического кода
В основу принципа декодирования циклического кода положено свойство делимости кодовых слов без остатка на порождающий полином.
Декодирование с обнаружением ошибок
Если принятая комбинация Y(x) делится без остатка на g(x), то считается, что ошибок нет или произошла не обнаруживаемая кодом ошибка. В случае обнаруженной ошибки имеет место ненулевой остаток от деления, который называется синдромом.
S(x)=Y(x) mod g(x)=e(x) mod g(x)
Здесь e(x) – полином ошибки.
Деление на
порождающий полином можно заменить
умножением на проверочный полином h(x)
по модулю (xn+1).
Результат в случае отсутствия ошибок
должен быть равен нулю.
[Y(x)*h(x)] mod (xn+1)=0
Декодирование с исправлением ошибок
Обычно в памяти декодера заданного циклического кода хранится некоторый типовой вектор ошибки и соответствующий ему типовой синдром.
Пусть ошибке вида e0 соответствует синдром S0. Назовем их типовыми.
S0(x)=e0(x) mod g(x)
Если вектор ошибки e' получается из e0 путем i циклических сдвигов, то есть
e'(x)=e0 (x)*xi mod (xn+1),
то синдром ошибки e' будет равен
S'(x)=S0(x)*xi mod g(x),
а S0(x)= S'(x)* x-i mod g(x)
Пример
Пусть для передачи сообщений используется циклический код (7,4) с порождающим полиномом g(x)= x3+x2+1. Декодер работает в режиме исправления одиночных ошибок.
При использовании ДСК без памяти таблица декодирования имеет вид
|
Вектор ошибки ei |
Синдром Si |
|
0000001 |
001 |
|
0000010 ………….. |
010 ……. |
|
1000000 |
110 |
В качестве типовых обычно выбирают e0=0000001 и S0=001.
Предположим при декодировании получен синдром S'=100. Требуется найти имеющий место вектор ошибки и исправить кодовое слово.
S0(x)=S'(x)*x-i mod g(x)
Если i=1, S1= x2* x-1 mod g(x)=x, не совпадает с типовым синдромом.
Если i=2, S2=x2*x-2 mod g(x)=1, совпадает с типовым синдромом.
Искомый вектор ошибки получается циклической перестановкой типового вектора e0 на i=2 разряда влево.
e'=0000100
Лекция 10
КОДИРУЮЩИЕ И ДЕКОДИРУЮЩИЕ УСТРОЙСТВА ЦИКЛИЧЕСКИХ КОДОВ
Основой кодера циклического кода является регистр сдвига (РС) с логическими обратными связями и сумматорами по модулю 2. Число ячеек памяти регистра равно r=n-k, число сумматоров по модулю 2 на единицу меньше числа ненулевых членов g(x). Место включения сумматоров определяется структурой (ненулевыми коэффициентами) порождающего полинома g(x).
Схема кодирующего устройства в общем виде
Нижеприведенная схема делит входную последовательность на полином
g(x)=grxr+gr-1xr-1+….+g1x+g0
Вх
1
Вых
0
1
2
r-1



g0
g1
g2
gr-1


-
2
Ключ
Например, для кода с порождающим полиномом g(x)=x3+x2+1 получаем g0=1, g1=0, g2=1. Получаем схему:
1
Вх
0
1
2
Вых

g0
g2

-
2
Ключ
В исходном состоянии Ключ находится в положении 1. Символы информационной последовательности, начиная со старшего разряда, поступают на вход схемы деления через входной сумматор и ключ (1) и одновременно через схему ИЛИ (1) на выход кодера. Через k тактов в регистре сдвига образуются проверочные символы, ключ переводится в положение (2) и проверочные символы поступают через схему ИЛИ на выход. Таким образом через n тактов на выходе формируется кодовое слово циклического кода.
Рассмотрим, как меняется состояние схемы на каждом такте работы кодера.
|
№ такта
|
Инф.символ на входе |
Символ в ячейке РС |
Положение ключа |
Символ на выходе |
||||
|
0 |
1 |
2 |
||||||
|
1 |
1 |
1 |
0 |
1 |
1 |
1 |
||
|
2 |
0 |
1 |
1 |
1 |
1 |
0 |
||
|
3 |
0 |
1 |
1 |
0 |
1 |
0 |
||
|
4 |
0 |
0 |
1 |
1 |
1 |
0 |
||
|
5 |
0 |
0 |
0 |
1 |
2 |
1 |
||
|
6 |
0 |
0 |
0 |
0 |
2 |
1 |
||
|
7 |
0 |
0 |
0 |
0 |
2 |
0 |
||
Используется 2-тактная работа схемы:
T' – считывание состояния
T'<T''
T'' – запись
Проверим, правильно ли сформированы проверочные символы:
10000000 |1101
1101
1010
1101
1110
1101
110 – проверочные символы найдены верно
Декодер циклического кода
Декодер циклического кода должен вычислять синдром и состоит из запоминающего регистра с числом ячеек памяти равным n и схемы деления на g(x). Кроме того, декодер содержит схемы дешифратора ошибки и устройства исправления либо стирания принятой кодовой комбинации.
Рассмотрим схему декодера циклического кода (7,4) с порождающим полиномом g(x)=x3+x2+1.
Запоминающий регистр
Вх
0
1
2
3
4
5
6
0
1
2
Вых
УИс
УСт
Схема деления на g(x)











Дешифратор ошибки
Рассмотрим два случая:
-
Поступающее на вход декодера кодовое слово не содержит ошибок.
На вход поступает последовательность 1000110.
|
№ такта |
Символ на входе |
Символ в ячейке схемы деления |
||
|
0 |
1 |
2 |
||
|
1 |
1 |
1 |
0 |
0 |
|
2 |
0 |
0 |
1 |
0 |
|
3 |
0 |
0 |
0 |
1 |
|
4 |
0 |
1 |
0 |
1 |
|
5 |
1 |
0 |
1 |
1 |
|
6 |
1 |
0 |
0 |
0 |
|
7 |
0 |
0 |
0 |
0 |
S=(000), ошибки в принятой последовательности не обнаружены. Деление закончено. Кодовое слово последовательно поступает из запоминающего регистра на выход декодера.
-
Поступающая последовательность содержит ошибку
e(x)=x3 0001000, следовательно на вход поступает комбинация 1001110.
|
№ такта |
Символ на входе |
Символ в ячейке схемы деления |
||
|
0 |
1 |
2 |
||
|
1 |
1 |
1 |
0 |
0 |
|
2 |
0 |
0 |
1 |
0 |
|
3 |
0 |
0 |
0 |
1 |
|
4 |
1 |
0 |
0 |
1 |
|
5 |
1 |
0 |
0 |
1 |
|
6 |
1 |
0 |
0 |
1 |
|
7 |
0 |
1 |
0 |
1 |
|
8 |
0 |
1 |
1 |
1 |
|
9 |
0 |
1 |
1 |
0 |
|
10 |
0 |
0 |
1 |
1 |
|
11 |
0 |
1 |
0 |
0 |
На 7-м такте в ячейках схемы деления сформирован синдром S', не совпадающий с S0 и не равный нулю.
Если декодер работает с обнаружением ошибок, дешифратор ошибки выдает в устройство стирания сигнал, запрещающий появление на выходе кодового слова.
Если декодер работает с исправлением ошибок, процесс деления продолжается до тех пор, пока в ячейках схемы деления не образуется синдром S0=001. В данном случае деление продолжается в течение 8 – 11 тактов. Начиная с 8-го такта на выходе декодера появляются символы кодового слова, начиная со старшего разряда (коэффициент при х6). На 11 – м такте в ячейках схемы деления образуется типовой синдром S0. Дешифратор ошибки формирует сигнал, изменяющий на выходе текущий символ кодового слова (коэффициент при х3). Деление закончено. Ошибка исправлена.
Лекция 11
