logo search
AK

3.5.2. Контроль передачі кодів

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

контроль по парності.

- контроль по непарності.

Якщо в процесі передачі коду виникає одиночна помилка (у одному двійковому розряді), то її можна виявити, оскільки при цьому порушується парність/непарність. Але виправити не можемо, оскільки не відомий номер помилкового розряду. Для визначення залишку ділення числа на вибраний модуль (в даному випадку - 2) використовуються схеми згортки по відповідному модулю. Наприклад, 155ИП2 шукає залишок 8-розрядного двійкового коду по модулю 2. Для того, щоб виправити одиночну помилку, необхідно визначити номер розряду, в якому виникла ця помилка і виправити інформацію в ньому на протилежну.

Для вирішення такого завдання необхідно мати надлишковий код, в якому мінімальна кодова відстань dmin > 2. Мінімальна кодова відстань - число двійкових розрядів, які потрібно змінити, щоб з однієї кодової інформації отримати іншу допустиму. Звичайний не надлишковий двійковий код має dmin = 1, тобто змінюючи інформацію в будь-якому розряді коду, ми отримуємо нову дозволену комбінацію в цьому коді. Надлишковий код з одним контрольним розрядом має dmin = 2, тобто змінюючи інформацію в одному розряді ми порушуємо парність/непарність, а це недопустима комбінація. Щоб виправити помилки, треба мати код з dmin > 2. У якості коду, у котрого dmin = 3, використовують надлишковий код Хеммінга, в якому використовується декілька контрольних розрядів. Якщо ви хочете виявити помилку кратності R, то ви повинні мати код з dmin = R+1, а якщо виправити, то - dmin = 2R+1.

У коді Хеммінга є група контрольних розрядів, які розподілені серед інформаційних розрядів і займають певні місця. Кожен контрольний розряд визначає парність деякої групи розрядів коду Хеммінга. Щоб в кожне контрольне співвідношення входив лише один контрольний розряд, місця розташування контрольних розрядів дорівнюють цілій мірі двійки (1,2,4,8). Перший контрольний розряд контролює парність розрядів коду Хеммінга, двійкові номери яких мають одиницю в молодшому або в першому розряді. Наприклад, 1,3,5,7-й розряди. Другий контрольний розряд коду Хеммінга контролює парність розрядів, номери яких мають одиницю в другому розряді (2,3,6,7). Третій контрольний розряд контролює парність розрядів 4,5,6,7.

Наприклад, якщо загальне число розрядів m = 7. Тоді кількість контрольних розрядів k = [log2(m+1)] = 3. Кількість інформаційних розрядів m- k = n = 4.

7

6

5

4

3

2

1

ІР 2

ІР 3

ІР 2

КР 3

ІР 1

КР 2

КР 1

Хай на стороні, що передає, маємо 10.

1

0

1

0

0

1

0

Щоб передати 10, треба обчислити контрольні розряди.

Е1 = 1  3  5  7 = 0 mod 2

0  0  1  1

Е2 = 2  3  6  7 = 0 mod 2

1  0  0  1

Е3 = 4  5  6  7 = 0 mod 2

0  1  0  1

Е3 Е2 Е1

00 0 - немає помилок.

10 1 - помилка в 5 розряді.

Хай ми прийняли:

1

0

0

0

0

1

0

Е1 = 0  0  0  1 = 1 mod 2

Е2 = 1  0  0  1 = 0 mod 2 помилка в 5 розряді, інформацію

Е3 = 0  0  0  1 = 1 mod 2 міняємо на протилежну

Якщо до коду Хеммінга додати ще один контрольний розряд, який контролюватиме парність/непарність всього коду, то ми зможемо за допомогою такого коду виправляти одиночні помилки і виявляти подвійні. Контрольні співвідношення E1 можна обчислювати за допомогою схем складання по модулю 2 згідно з рис. 3.19.

Рис. 3.19 - Схема складання по модулю два

Схема, за допомогою якої можна виправляти 7-розрядний двійковий код, складається з 7-розрядного вхідного регістра, 3х КС і дешифратора (3 входи/8 виходів) (рис. 3.20).

Рис. 3.20 - Схема, за допомогою якої можна виправляти 7-розрядний двійковий код

У вхідному регістрі використовуються двотактні універсальні JR - тригери, які працюють як тригери типу Т. Інформація заноситься по RS - входах. Після занесення інформації в цей регістр визначається контрольні співвідношення Е1 - - Е3, які подаються на дешифратор. Якщо високий потенціал на нульовому виході, то немає помилок, якщо на інших виходах - помилка у відповідному розряді. За допомогою синхросигналу можна значення коду у відповідному регістрі поміняти на протилежне.