Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка Укр - 69 - v1.1 - pass.docx
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
916.79 Кб
Скачать

1.5 Код Ріда - Соломона

Код Ріда-Соломона дозволяє скорегувати одну помилку в одному блоці даних. При його використанні до кожного блоку інформації додаються додаткові два елементи X і Y, значення яких знаходяться виходячи з умов:

для трьох одиниць інформації (байт):

байт1 + байт2 + байт3 + X + Y = 0

байт1 + 2 * байт2 + 3 * байт3 + 4 * X + 5 * Y = 0

для розрахунку конкретних значень X і Y для кодування трьох байт:

Y = 3 * байт1 + 2 * байт2 + байт3Х = – 4 * байт1 – 3 * байт2 – 2 * байт3

Тепер для з'ясування помилки і її корекції застосовуємо такі розрахунки:

Значення_помилки = байт1 + байт2 + байт3 + X + Y

так як раніше (до виникнення помилки) ця сума дорівнювала 0, то тепер вона дорівнює безпосередньо значенням помилки, яке досить просто відняти з недоброякісного байта. У разі якщо блок прийнятий безпомилково, то Значення_помилки = 0. Тепер знайдемо байт який треба виправляти:

N = байт1 + 2 * байт2 + 3 * байт3 + 4 * X + 5 * Y

Номер_помилкового_байта = N / Значення_помилки

При реалізації цього в реальний алгоритм необхідно обов'язково здійснювати перевірку на те чи існує помилка в блоці чи ні, тобто Значення_помилки = 0 чи ні, інакше отримуємо ділення на нуль.

Якщо необхідно захистити кодом Ріда-Соломона блок даних більше 3х байт, то формули розрахунку коригувальних значень лише трохи змінюються (для 16 байт):

Y = 16 * байт1 + 15 * байт2 + 14 * байт3 + ... + байт16Х = – 17 * байт1 – 16 * *байт2 – 15 * байт3 – ... – 2 * байт16

Значення_помилки = байт1 + байт2 + байт3 + ... + X + YN = байт1 + 2 * байт2 + 3 * байт3 + ... + 16 * байт16 + 17 * X * Y + 18

Даним кодом незручно захищати блоки інформації менше 4 байт, так як довжина контрольних параметрів X і Y повинна бути як мінімум 4 байти, 2 байти (DW) для X та 2 байти Y, тобто виходить, що до блоку даних з 4 байт буде доданий коригувальний блок з 4 байт.

Але що робити, якщо виникло дві або більше помилок у блоці? Як одна з ознак виникнення двох помилок можна вважати отримання як номер_помилкового_байта дробного числа, наприклад якщо у блоці з нулів зустрінеться 2 одиниці (дві помилки), у третьому і четвертому байтах, то Номер_помилкового_байта = 3.5 але якщо 4 одиниці, відповідно до 3, 4 і 5 байтах то Номер_помилкового_байта = 4.

2. Спеціальна частина

Для візуалізації процесу завадостійкого кодування слід розробити пристрій, який допоможе зрозуміти принцип роботи методу Хеммінга. Кодер - декодер будемо розробляти на основі ІМС К555ВЖ1.

2.1 Розробка пристрою кодування інформації методом ХемМінга

Кодер, перетворює 32-х бітне слово в 38-ми розрядний код Хеммінга, після чого слово зберігається в пам'яті або передається через шини і т.д. В процесі передачі або зберігання в слові може статися помилка, тому декодер не просто декодує слово, але і виправляє деякі помилки. Процес кодування і декодування можна представити у вигляді блок-схеми наведеної нижче.

Рис. 2.1 — Блок-схема кодування-декодування

Рис.2.2 — Схема кодера

На входи а1, а2...а32 подається кодоване слово. Блоки KR1, KR2, KR4, KR8, KR16 і KR32 формують контрольні розряди (біти парності). Весь процес кодування зводиться до формування контрольних розрядів і зсуву наявних розрядів. Так, перший біт слова стає третім бітом коду, а 2-й – 5м, 1,2,4,8,16,32 біти - контрольні. Таким чином, в результаті кодування 32-х бітне слово стає 38-ми бітним.

Блоки KR1, KR2, KR4, KR8, KR16 і KR32 зібрані на елементах виключне АБО. Отже, блок KR1 формує 1-й контрольний розряд підраховуючи парність 3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35 і 37 бітів, якщо кількість одиниць в цих розрядах парне, то контрольний біт дорівнює нулю, якщо непарне – одиниці.

Аналогічно блок KR2 формує 2-й контрольний розряд, підраховуючи парність 3,6,7,10,11,14,15,18,19,22,23,26,27,30,31,34,35 і 38 бітів, якщо кількість одиниць в цих розрядах парне, то контрольний біт дорівнює нулю, якщо непарне – одиниці.

Блок KR4 формує 4-й контрольний біт перевіряючи 5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37 і 38 біти.

Блок KR8 формує 8-й контрольний біт перевіряючи 9,10,11,12,13,14,15,24,25,26,27,28,29,30 і 31 біти.

Блок KR16 формує 16-й контрольний біт перевіряючи 17,18,19,20,21,22,23,24,25,26,27,28,29,30 і 31 біти.

Блок KR32 формує 32-й контрольний біт перевіряючи 33,34,35,36,37 і 38 біти.

Рис.2.3 — Схема блоків KR1-KR32

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

KR1

KR2

KR4

KR8

KR16

KR32

Рис.2.4 — Контрольні розряди блоків KR1-KR32