Код Хеммінга
Завадостійке кодування. Двійкові та узагальнені завадостійкі коди
Теорія інформації та кодування – 2
Вступ
Лекція № 1.3 − “Завадостійке кодування. Двійкові та узагальнені завадостійкі коди”. В лекції будуть розглянуті наступні учбові питання:
1. Код Хеммінга. 3
2. Циклічні коди. 9
3. Узагальнені завадостійкі коди. Контрольне додавання. 12
4. Узагальнені завадостійкі коди. Лишково - матричні коди. 13
Коди Хеммінга призначені для виправлення одиночних спотворень і мають, зрозуміло, більшу надмірність, ніж коди з перевіркою на парність. У такому коді n-значне число має m інформаційних і k контрольних розрядів. При кодуванні формуються k контрольних розрядів, кожний з яких є ознакою парності для певної групи інформаційних знаків базового кодового слова.
Код Хеммінга представляє собою блочний код, який дозволяє виявити і виправити помилково переданий біт в межах переданого блоку. Звичайно код Хеммінга характеризується двома цілими числами (n, m), наприклад, (11, 7). Такий запис говорить, що при передачі 7-бітного коду використовується 4 контрольних біта (k = 11 – 7 = 4).
При цьому приймається наступна нумерація біт (знаків коду): всі біти кодової комбінації одержують номери, починаючи з 1, справа наліво (варто нагадати, що в двійковій системі числення біти нумеруються з 0 справа наліво); контрольними (перевірочними) є біти з номерами 1, 2, 4, 8 і т.д. – всі інші є інформаційними. При цьому при формуванні коду Хеммінга для наочності при кодуванні чи декодуванні інформаційні та контрольні розряди зручно представляти записаними в деякий шаблон чи таблицю. Наприклад, для семизначної двійкової послідовності 1110011:
Таблица 1 | |||||||||||
Позиция бита | |||||||||||
Значение бита | * | * | * | * | |||||||
Код номера позиції | |||||||||||
В цій таблиці невизначені спочатку при кодуванні значення контрольних символів помічені зірочкою (*). Нагадаємо, що при використанні коду Хеммінга для передачі семирозрядних повідомлень потрібно 4 надлишкових символи
(k ³ log2 (n + 1), k ³ 4), тобто слід використовувати код (11, 7).
Розглянемо історично перший, алгоритм із використанням k послідовних кроків (перевірок), кожна із яких забезпечує обчислення суми по модулю 2 груп символів, номери яких вибираються за певними правилами.
Щоб число в синдромі спотворень указувало номер позиції помилкового розряду, групи для перевірки вибираються за правилом:
I гр.: | : | всі непарні позиції, включаючи і позиції контрольного розряду, тобто позиції, в першому молодшому розряді яких стоїть 1. |
II гр.: | : | всі позиції, номери яких в двійковому представленні мають 1 в другому розряді справа (наприклад, 2, 3, 6, 7, 10) і т.д. |
III гр. | : | розряди, що мають "1" в третьому розряді справа, і т.д. |
Примітка 1: У кожний з контрольних розрядів при побудові коду Хеммінга заноситься таке значення, щоб загальне число одиниць в його контрольній сумі із урахуванням контрольного було парним. Тобто, для (n, m) − коду Хеммінга перевірочні символи визначаються із перевірочних рівнянь:
де − перевірочні символи.
При перевірці наявності спотворень за тими ж правилами, що розглянуті вище, розраховуються так звані елементи синдрому спотворень Si. Але при розрахунку елементів синдрому спотворень використовуються і сформовані раніше перевірочні елементи. Тобто, елементи синдрому визначаються з виразів (синдромних рівнянь):
Перевірочні рівняння використовуються для побудови кодера, а синдромні − декодера коду Хеммінга.
Приклад 1. Хай передається семизначна двійкова послідовність 1110011. Як уже визначено вище, кількість перевірочних символів k = 4 та, відповідно, загальна довжина коду n = 11 (див. табл. 1). Тоді позиції контрольних біт та позиції, що перевіряються, у відповідних перевірках надано в (табл. 2).
Таблица 1 | |||||||||||
Позиция бита | |||||||||||
Значение бита | * | * | * | * | |||||||
Код номера позиції | |||||||||||
Таблиця 2. Формування контрольних груп
Номер перевірки | Позиція контрольного біту | Позиції, що перевіряються |
1, 3, 5, 7, 9, 11 | ||
2, 3, 6, 7, 10, 11 | ||
4, 5, 6, 7 | ||
8, 9, 10, 11 |
Отже, значення контрольних біт визначимо із системи перевірочних рівнянь:
Отже контрольна сума та значення відповідних контрольних символів дорівнюють 1110, а таблиця 1 набуде вигляду (табл. 3):
Таблица 3 | |||||||||||
Позиція біт | |||||||||||
Значення біт |
Нехай при передаванні спотворень символів не відбулося. Тоді система синдромних рівнянь набуде вигляду:
Отже контрольна сума та значення відповідних символів синдрому дорівнюють 0000, що свідчить про відсутність спотворень.
Тепер розглянемо два випадки спотворень в одному з біт посилки, наприклад в біті 7 (1 замість 0) і в біті 5 (0 замість 1). Здійснимо декодування для обох випадків (таблиці 4).
Таблица 4 | |||||||||||
Позиція біт | |||||||||||
Значення біт (1) | |||||||||||
Значення біт (2) |
Тоді система синдромних рівнянь для першого випадку набуде вигляду:
Отже контрольна сума та значення відповідних символів синдрому дорівнюють 0111, що свідчить про наявність спотворення у біті із номером 7.
Система синдромних рівнянь для другого випадку набуде вигляду:
Отже контрольна сума та значення відповідних символів синдрому дорівнюють 0101, що свідчить про наявність спотворення у біті із номером 5.
Таким чином, застосування коду Хеммінга дозволило виявити як наявність так і місце спотворення.
Оскільки у двійковому коді символи можуть мати значення 0 чи 1, то у другому алгоритмі операція кодування (а в подальшому і декодування) перетворюється на додавання кодів позицій ненульових біт. Контрольне додавання здійснюється шляхом виконання операції порозрядного додавання по модулю 2 над кодами номерів ненульових бітів. У випадку послідовності за таблицею 1 – це коди біт із номерами: 11, 10, 9, 5 і 3.
Обчислимо контрольну суму (табл. 5):
Таблица 5 | |
Номери ненульових біт | Коди їх номерів |
Контр. Σ |
Таким чином, приймач одержить код (табл. 6):
Таблица 6 | |||||||||||
Позиція біт | |||||||||||
Значення біт | |||||||||||
Значення біт за табл. 3 |
Порівнюючи значення біт, одержаних за цим алгоритмом та обрахованих раніше за табл. 3, упевнюємося в їх ідентичності.
Для перевірки правильності формування контрольних символів здійснимо декодування, для чого, згідно із уже визначеним алгоритмом, знову знайдемо суму кодів номерів ненульових бітів, включаючи контрольні (табл. 7), и одержимо нуль, що свідчить про відсутність спотворень:
Таблица 7 | |
Номери ненульових біт | Коди їх номерів |
Контр. Σ |
Ну а тепер знову розглянемо два випадки спотворень в одному з біт посилки, наприклад в біті 7 (1 замість 0) і в біті 5 (0 замість 1). Здійснимо декодування для обох випадків (таблиця 8).
Звернемо увагу, що в обох випадках при декодуванні контрольна сума дорівнює позиції біта, переданого зі спотворенням. Тепер для його виправлення досить інвертувати біт, номер якого вказаний у контрольній сумі.
Таблица 8 | |||||||||||||||||||||||||||||||||||||||
|
|
Зрозуміло, що якщо при передачі буде спотворено більш ніж один біт, код Хеммінга при даній надмірності виявиться даремним.