Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 4.7 Ілюстр.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
189.44 Кб
Скачать

13

Національний авіаційний університет

Лекція № 4.7

Теорія інформації та кодування

Узагальнені завадостійкі коди

2013

Вступ

Лекція № 4.7 − “Узагальнені завадостійкі коди”. В лекції будуть розглянуті наступні учбові питання:

1 Узагальнені завадостійкі коди 3

2 Контрольне додавання 4

3 Лишково - Хеммінгові і лишково-матричні коди 7

4 Загальні відомості щодо теорії лишкових класів 11

1Узагальнені завадостійкі коди

Під узагальненими розумітимемо коди, призначені для виявлення (виявлення і виправлення) пакетних спотворень з кратністю b, в яких використовуються алгоритми кодування і декодування, аналогічні відповідним алгоритмам двійкових кодів, але по відношенню до узагальненого b − розрядного символу.

Для побудови цих кодів початкова кодова послідовність І1 І2ІM розбивається на m = M/b груп з розрядністю b, усередині яких групуються помилки:

І1………. Іb, Іb+1………І2b ........ Іm-b+1 ……ІM

1 – й пакет 2 – й пакет n – й пакет

Двійкові символи, що входять в один пакет, розглядаються як b  значний символ, який може приймати будь-яке із s значень від 0 до 2b – 1, де

s = 2b.

Як буде показано нижче операція над узагальненими символами виконуються до деякому модулю, тобто шукається лишок або найменший залишок від розподілу результату операції на деякий модуль. Це дало можливість для відмінності відповідних узагальнених кодів від двійкових ввести в їх назву слово “лишок”, тобто говорити про лишково  Хеммінгових (ЛХ), лишково  матричні (ЛМ), лишково  рекурентні (ЛР) коди. Слід зазначити, що лишкові – циклічні коди відомі під назвою кодів Ріда-Соломона – на ім’я авторів цих кодів.

2Контрольне додавання

Контрольне додавання є одним з найпоширеніших методів контролю цілісності інформаційних об’єктів (виявлення спотворень в цих об’єктах).

При кодуванні початкові базові кодові слова розбиваються на s b – розрядних узагальнених символів і записуються у вигляді α1, α2,... αs, де αi ≤ 2b – 1 а m = bs. Потім здійснюється додавання цих символів за певними правилами, наприклад, додавання по модулю (найчастіше використовується їх порозрядне додавання по модулю 2). Символи (у загальному випадку k) ознаки цілісності (контрольні ознаки) дописуються до початкового коду, за рахунок чого утворюється n − символьне БКС (n = m + k).

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

Приклад. Нехай кодуванню підлягає послідовність А = 100111001010, в якій слід забезпечити виявлення (виявлення і виправлення) пакетних спотворень з кратністю b = 4, s = 24 =16. Тоді така послідовність може бути представленою у вигляді:

І1………. І4, І5……І8 І9 ……І12

1 – й пакет 2 – й пакет 3 – й пакет

чи у вигляді: А = 1011.1100.1010, де крапками для наочності відокремлені чотирірозрядні пакети. Тоді процес кодування може бути представленим у вигляді:

порозрядне додавання по mod2 додавання по mod16

1011 11

1100 → 12

1010 10

1101→ {11+12+10}16= 0001

Тоді в канал буде переданою послідовність А = 101111001010.1101 при виконанні операції порозрядного додавання по модулю 2, чи 101111001010.0001 при виконанні операції додавання по модулю s = 16, де крапками для наочності відокремлені чотирірозрядні надлишкові пакети.

Нехай на приймальному боці одержана послідовність, яка має спотворення = 011111001010.1101 (подвійне спотворення у першому пакеті). Тоді, при декодуванні (за тим же алгоритмом, що і при кодуванні) одержимо:

0 111 7

1100 →12

1010 10

0001 → {7+12+10}16= 1101

1101 → 0001

1100 ≠ 0 (mod2) 1110 ≠ 0 (mod16)

Порівняння одержаних контрольних символів із переданими 1101→0001 при виконанні операції порозрядного додавання по модулю 2, чи 0001→1101 при виконанні операції додавання по модулю s = 16, показує їх відмінність, що свідчить про наявність у прийнятій послідовності спотворення.

Приклад розрахунку контрольної суми в протоколах ТСР/ІР

Перед розрахунком контрольної суми в протоколах ТСР/ІР повідомлення доповнюється в кінці нульовими бітами до довжини, кратної 16 бітам (додаткові нульові біти не відправляються разом з повідомленням). Початкове значення контрольної суми у час розрахунку контрольної суми повідомлення, що відправляється, приймається за нуль.

Для розрахунку контрольної суми уся інформація, для якої розраховується контрольна сума, розбивається на слова (1 слово = 2 байти (2 октети) = 16 біт). Потім розраховується порозрядне доповнення до одиниці суми всіх слів з порозрядним доповненням. Результат записується у відповідне поле заголовку.

У тому випадку, якщо контрольна сума вийшла рівною нулю, поле заповнюють одиницями. Якщо контрольну суму не потрібно розраховувати, значення поля залишають нульовим.

Для прикладу розрахуємо контрольну суму декількох 16-бітових слів: 0x398А, 0xF802, 0x14B2, 0xC281. Нагадаємо, що тут, як і в деяких мовах програмування позначка “0х” є префіксом, ознакою того, що далі записане число в шістьнадцатьковій системі числення. Знаходимо їх суму з переносом старшої (п’ятої) тетради (в разі її наявності) до молодшої та доповненням останнього біта молодшої тетради:

0x 3 9 8 A + 0x F 8 0 2 = 0011 1001 1000 1010 + 1111 1000 0000 0010 =

0011 1001 1000 1010

1111 1000 0000 0010

0001 0011 0001 1000 1100→

= 0001 0011 0001 1000 1100 → 0x 3 1 8 С → 0011 0001 1000 1101 = 0x 3 1 8 D

0x318D + 0x14B2 = 0011 0001 1000 1101 + 0001 0100 1011 0010 =

0011 0001 1000 1101

0001 0100 1011 0010

0000 0100 0110 0011 1111→

= 0000 0100 0110 0011 1111 = 0x0463F → 0x463F

0x463F + 0xC281 = 0100 0110 0011 1111 + 1100 0010 1000 0001 =

0100 0110 0011 1111

1100 0010 1000 0001

0001 0000 1000 1100 0000→

= 0001 0000 1000 1100 0000 → 0000 1000 1100 0001 →0x08C1

Тепер знаходимо порозрядне доповнення до одиниці отриманого результату:

0x08C1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xF73E або, інакше - 0xFFFF - 0x08C1 = 0xF73E. Це і є шукана контрольна сума

При отриманні повідомлення одержувач рахує контрольну суму заново (уже з урахуванням контрольної суми), і, якщо в результаті вийде двійкове число з шістнадцяти одиниць (тобто 0xffff), то контрольна сума вважається такою, що збіглася, і повідомлення приймається.

Таблиця переводу чисел

0hex

=

0dec

=

0oct

0

0

0

0

8hex

=

8dec

=

10oct

1

0

0

0

1hex

=

1dec

=

1oct

0

0

0

1

9hex

=

9dec

=

11oct

1

0

0

1

2hex

=

2dec

=

2oct

0

0

1

0

Ahex

=

10dec

=

12oct

1

0

1

0

3hex

=

3dec

=

3oct

0

0

1

1

Bhex

=

11dec

=

13oct

1

0

1

1

4hex

=

4dec

=

4oct

0

1

0

0

Chex

=

12dec

=

14oct

1

1

0

0

5hex

=

5dec

=

5oct

0

1

0

1

Dhex

=

13dec

=

15oct

1

1

0

1

6hex

=

6dec

=

6oct

0

1

1

0

Ehex

=

14dec

=

16oct

1

1

1

0

7hex

=

7dec

=

7oct

0

1

1

1

Fhex

=

15dec

=

17oct

1

1

1

1