Кодирование
Кодирование
Десятичные и двоичные коды
Равномерные и неравномерные коды
Системы счисления
Непомехозащищенные коды
Двоичный код на все комбинации
Единично-десятичный код
Двоично-десятичный код
Код Морзе
Помехозащищенные коды
Кодовое расстояние
Кодовые расстояния при n = 3
Корректирующая способность кода
Коды с обнаружением ошибок
Код с постоянным числом единиц и нулей в комбинациях
Распределительный код
Код с проверкой на четность
Код с числом единиц, кратным трем
Код с удвоением элементов (корреляционный код)
Инверсный код
Коды с обнаружением и исправлением ошибок
Коды Хэмминга
Коды Хэмминга: кодирование и декодирование
Контрольная сумма блока данных
Циклические коды
Сложение полиномов
Деление полиномов
Метод построения циклического кода
Пример построения циклического кода
Пример циклического кода
Алгоритм построения циклического кода
Алгоритм построения циклического кода
Выявление ошибок в блоке данных при помощи избыточного циклического кода (CRC)
Алгоритм вычисления 16-битного избыточного циклического кода
Вычисление 16-битного избыточного циклического кода на языке С++
353.00K
Категория: ИнформатикаИнформатика

Кодирование. Десятичные и двоичные коды

1. Кодирование

2. Кодирование

Кодирование – преобразование дискретного
сообщения в дискретный сигнал,
осуществляемое по определенному
правилу.
Декодирование – восстановление
дискретного сообщения по сигналу на
выходе дискретного канала,
осуществляемое с учетом правила
кодирования.
Код – совокупность условных сигналов,
обозначающих дискретные сообщения.

3. Десятичные и двоичные коды

Десятичные коды:
0, 1, …, 10, 11, …, 99
Двоичные коды:
0, 1, 10, 11, 100, 101, …, 1100011
U(t)
8
6
4
2
0
U(t)
1
0
83
t
1010011
t

4. Равномерные и неравномерные коды

Равномерные коды – коды, при
использовании которых, длина всех
кодовых комбинаций (кодовых слов)
одинакова.
001, 010, 011, 100 – равномерные коды.
1, 10, 11, 100 – неравномерные коды.

5. Системы счисления

Шестнадцатеричная
Десятичная
Восьмеричная
Двоичная
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111

6. Непомехозащищенные коды

Непомехозащищенные коды – коды,
содержащие кодовые комбинации,
отличающиеся друг от друга в одном разряде.
0010 и 0011 отличаются в первом разряде;
1110 и 0110 – в четвертом разряде;
1110 и 0100 – во втором и четвертом разрядах.

7. Двоичный код на все комбинации

Кодовые комбинации соответствуют записи
натурального ряда чисел в двоичной системе
счисления.
Пример: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111,
1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111.
Количество кодовых комбинаций:
N 2n

8. Единично-десятичный код

Каждый разряд десятичного числа
записывается в виде соответствующего
числа единиц; разряды при передаче по
каналу связи разделяются интервалами.
Неравномерный единично-десятичный код
352: 111 11111 11
149: 1 1111 111111111
Равномерный единично-десятичный код
352: 000000111 000011111 000000011
149: 000000001 000001111 111111111

9. Двоично-десятичный код

Каждый разряд десятичного числа
записывается в виде комбинации двоичного
кода.
Пример
352: 0011 0101 0011
149: 0001 0100 1001

10. Код Морзе

Неравномерный код, в котором сигналы
передаются в виде точек и тире.
1 1 1 0 1 0 1
.
.

А
Б
В
Г
Д
Е
Ж
З
·–
–···
·––
––·
–··
·
···–
––··
A
B
W
G
D
E
V
Z
И
К
Л
М
Н
О
П
Р
··
–·–
·–··
––
–·
–––
·––·
·–·
I
K
L
M
N
O
P
R
С ··· S
Т –
T
У ··– U
Ф ··–· F
Х ···· H
Ц –·–· C
Ч –––·
Ш ––––
Щ ––·– Q
Ы –·–– Y
Ю ··–– U
Я ·–·–
Й ·––– J
ЬЪ –··– X
Э ··–··

11. Помехозащищенные коды

Помехозащищенные коды (корректирующие
коды) – коды, позволяющие обнаружить
ошибки в кодовых комбинациях.
Помехозащищенные коды разделяются на
две группы:
коды с обнаружением ошибок;
коды с обнаружением и исправлением
ошибок.

12. Кодовое расстояние

Кодовое расстояние – минимальное число
элементов, в которых могут отличаться друг от друга
две кодовые комбинации в используемом коде.
n = 1:
0
1
n = 2:
00
01
10
11
0
1
1
d=1
00 00 00 01 01 10
01
10
11
11
10
11
01
10
11
10
11
01
d=1 d=1 d=2 d=1 d=2 d=1

13. Кодовые расстояния при n = 3

100
000
000
111
111
d=3
100
011
111
d=3
001
110
111
d=3
010
101
111
d=3
111
000
011
011
d=2
000
101
101
d=2
000
110
110
d=2
011
110
101
d=2
000
100
100
d=1
001
101
100
d=1
100
110
010
d=1
111
110
001
d=1
010
101
001
110
011
000 001 010 011
100 101 110 111

14. Корректирующая способность кода

dmin r s 1
dmin – минимальное кодовое расстояние;
r – количество обнаруживаемых ошибок;
s – количество исправляемых ошибок;
r s.

15. Коды с обнаружением ошибок

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

16. Код с постоянным числом единиц и нулей в комбинациях

Общее число кодовых комбинаций:
n!
N
l! n l !
l – число единиц в слове длиной n.
Cnl
C52 : N = 10
11000 01010 01100 00101 00110
10010 00011 01001 10001 10100
C73 : N = 35
1010100 0101010 1110000 0000111 1001001
0010101 1101000 1011000 0110100 0101100

17. Распределительный код

Код с постоянным весом, равным единице
N Cn1 n.
C51 : 00001 00010 00100 01000 10000
dmin 2

18. Код с проверкой на четность

n k 1,
k – количество информационных символов
(разрядов) в кодовой комбинации.
Информационные
символы
Контрольные
символы
Кодовая
комбинация
11011
0
110110
10101
1
101011
00010
1
000101
11000
0
110000
11110
0
111100
11111
1
111111
N 2 k 2 n 1
dmin 2

19. Код с числом единиц, кратным трем

n k 2,
k – количество информационных символов
(разрядов) в кодовой комбинации.
Информационные
символы
Контрольные
символы
Кодовая
комбинация
11011
11
1101111
10101
00
1010100
00010
11
0001011
11000
01
1100001
11110
11
1111011
11111
01
1111101
N 2k 2n 2
dmin 2

20. Код с удвоением элементов (корреляционный код)

Каждый элемент двоичного кода на все
сочетания передается двумя символами:
1 преобразуется в 10, а 0 – в 01.
Двоичный код на все
сочетания
Корреляционный код
11011
1010011010
10101
1001100110
00010
0101011001
11000
1010010101
11110
1010101001
11111
1010101010
N 2n / 2
dmin 2

21. Инверсный код

n k 2,
k – количество информационных символов
(разрядов) в кодовой комбинации.
Информационные
символы
Контрольные
символы
Кодовая
комбинация
11011
11011
1101111011
10101
01010
1010101010
00010
11101
0001011101
11000
11000
1100011000
11110
11110
1111011110
11111
00000
1111100000
N 2k 2n / 2
k
dmin
2
3
≥4
2
3
4

22. Коды с обнаружением и исправлением ошибок

dmin 3
Образуются путем добавления к кодовой
комбинации контрольных символов
коды Хэмминга;
циклические коды;
итеративные коды.

23. Коды Хэмминга

В качестве исходного используется k-разрядный
двоичный код на все сочетания. К нему добавляются
m контрольных символов.
n k m
При передаче кодовой комбинации может быть
искажен любой из n символов, т.е. число вариантов
искажения равно n+1 (включая передачу без
искажений).
2m n 1 2m k m 1
k
m
1
2,3,4
5…11
12…26
2
3
4
5

24. Коды Хэмминга: кодирование и декодирование

k4 k3 k2 k1
k4 k3 k2 m3 k1 m2 m1
Разряды двоичных
чисел
3
2
1
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
m1
m2
m3
Символы
кода
m1
m2
k1
m3
k2
k3
k4
Кодирование:
k1
k1
k2
k2
k3
k3
k4
k4
k4
m1 = k1 ^ k2 ^ k4
m2 = k1 ^ k3 ^ k4
m3 = k2 ^ k3 ^ k4
Декоди- l1 = m1 ^ k1 ^ k2 ^ k4
рование: l = m ^ k ^ k ^ k
2
2
1
3
4
l3 = m3 ^ k2 ^ k3 ^ k4
l3 l2 l1 – номер
искаженного бита

25. Контрольная сумма блока данных

123
0111 1011
47
0010 1111
170
1010 1010
125
0111 1101
45
0010 1101
170
1010 1010
31535 / 271 = 116 + 99 / 271
0111 1011 0010 1111 / 100001111 = 0111 0100 (0110 0011)
32045 / 271 = 118 + 67 / 271
0111 1101 0010 1101 / 100001111 = 0111 0110 (0100 0011)

26. Циклические коды

101101 = X5 + X3 + X2 + 1, X=2
Приводимый полином – полином, который можно
представить в виде произведения многочленов
низших степеней
Неприводимый полином – полином, который нельзя
представить в виде произведения многочленов
низших степеней
P ( X1 )
P ( X2 )
P ( X3 )
P ( X3 )
P ( X4 )
X+1
X2 + X + 1
X3 + X + 1
X3 + X2 + 1
X4 + X + 1
11
111
1011
1101
10011
3
7
11
13
19

27. Сложение полиномов

При операциях с полиномами применяется сложение
двоичных чисел по модулю 2, эквивалентное
операции «исключающее ИЛИ» с каждым разрядом.
0^0=0 0^1=1 1^0=1 1^1=0
1·X7 + 0·X6 + 1·X5 + 0·X4 + 0·X3 + 1·X2 + 1·X1 +
^
0·X0
77 + 1·X66 + 0·X5
4
3
2
1
0·X
+
0·X
+
1·X
+
1·X
+
1·X
5
4
3
2
1·X + 1·X + 1·X + 0·X + 1·X + 0·X + 0·X1 +
+
0
1·X
1·X0
1010 0110
^ 0100 1111
1110 1001

28. Деление полиномов

Деление двоичных полиномов аналогично делению
целых чисел. При этом операция вычитания
эквивалентна операции «исключающее ИЛИ».
11100110
1010
1000
1010
01011
1010
0010
1010
11010

29. Метод построения циклического кода

G(X) – исходная кодовая комбинация
P(X) – образующий полином
G( X ) X m
R X
Q X
P X
P X
Xm – одночлен той же степени, что и P(X)
Q(X) – частное от деления
R(X) – остаток от деления
F X G X X m R X
F(X) – закодированное сообщение

30. Пример построения циклического кода

P(X) = X + 1 → 11
G(X) = X2 + X → 0110
G(X) = X3 + X + 1 → 1011
G(X)·X1 → 01100
G(X)·X1 → 10110
01100
11
0000
10110
11
11
11
010
11
1
11
0100
F(X) → 01100
11
1101
F(X) → 10111

31. Пример циклического кода

P(X) = X + 1 → 11
0→00000
1→00011
3→00110
6→01100
C→11000
8→10001
2→00101
5→01010
A→10100
4→01001
9→10010
7→01111
F→11110
E→11101
D→11011
B→10111

32. Алгоритм построения циклического кода

3 2 1 0
Выдвигаемый
бит
№ бита
Выровненное
сообщение
1
0 1 1 1 = обр. полином
1. R = 0
2. В хвостовую часть сообщения добавляется m
нулевых битов
3. Сдвиг влево на 1 бит
4. Если выдвинут бит со значением 1, R=R^P(X)
5. Если обработаны не все биты, переход к п.3

33. Алгоритм построения циклического кода

P(X) = X4+X+1 → 10011
G(X) → 1010 0110
1010
1001
011
10
1
1
0110
1
111
011
100 0
0011
1011
1001
010
10
0
0000
10011
1 0111010
0
1
100
011
1110
F(X) → 1010 0110 1110
????
0 0101
1010 0110
0000
0001
0010
1010
010
10
0
0110
0110
0110
0110
0000
0000
0000
0000
0000
1 0100 110 0000
0111 110 0000
0 1111 10 0000
1 1111 0 0000
1100 0 0000
1 1000 0000
1011 0000
1 0110 000
0101 000
0 1010 00
1 0100 0
0111 0
0 1110

34. Выявление ошибок в блоке данных при помощи избыточного циклического кода (CRC)

Контрольные символы добавляются в начало или
конец блока данных. Комбинация контрольных
символов называется контрольной суммой (CRC).
CRC-12
1 80F
CRC-162
X12+X11+X3+X2+X+1
X16+X15+X2+1
X16+X15+ X13+1
1 A001
CRC-CCITT
X16+X12+X5+1
1 1021
CRC-161
1 8005
CRC-321
1 04c11db7
CRC-322
1 edb88320

35. Алгоритм вычисления 16-битного избыточного циклического кода

1. CRC = FFFF
2. С использованием значения X очередного байта
выполняется операция CRC=CRC^X
3. Сохраняется значение младшего бита CRC:
L=CRC&1
4. CRC сдвигается вправо на 1 бит
5. Если L=1, выполняется операция CRC=CRC^A001
6. Если выполнено меньше 8 сдвигов CRC,
происходит переход к п.3
7. Если обработаны не все байты блока данных,
происходит переход к п.2

36. Вычисление 16-битного избыточного циклического кода на языке С++

unsigned CalcCRC( unsigned char *Buf, unsigned Len ) {
unsigned CRC = 0xFFFF;
for( unsigned i=0; i<Len; ++i, ++Buf ) {
CRC ^= *Buf;
for( unsigned j=0; j<8; ++j ) {
bool LSB = CRC & 0x0001;
CRC >>= 1;
if(LSB) CRC ^= 0xA001;
}
}
return CRC;
}
English     Русский Правила