Файл: 22_Koduvannya_stiyke_do_zavad.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 18.04.2019

Просмотров: 241

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

136


Дискретна Математика :: Кодування стійке до завад



Тема 22. Кодування стійке до завад


В середині 40-х років 20 ст. Річард Геммінг працював у Лабораторіх Белла (Bell Labs) на обчислювальній машині Ball Model V. Це була електромеханічна машина, яка використовувала релейні блоки, швидкість яких була дуже низька: один оберт за декілька секунд. Дані вводились в машину за допомогою перфокарт і тому в процесі зчитування часто відбувались помилки. В робочі дні використовувались спеціальні коди, які виявляли та виправляли знайдені помилки, при цьому оператор дізнавався про помилку по спеціальному світовому сигналу, виправляв та запускав машину. У вихідні дні, коли не було операторів, при виникненні помилки машина автоматично виходила з програми та запускала іншу.

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


22.1. Коди стійкі до перешкод

Розглянемо один частковий випадок рівномірного двійкового кодування, коли А В = {0, 1}. Розглянемо схему рівномірно кодування k,n:

1 1,

2 2,

,

де i, i – відповідно слова довжиною k та n, n>k. Говорять, що схему k,n задає код = {12,…, } .

Введемо додаткові позначення. Елементи множини (двійкові вектори довжиною n) позначатимемо великими латинськими буквами X, Y, Z,…, а їх компоненти – відповідними малими буквами з індексами. Зокрема, елементарні коди позначатимемо як традиційно (12,…), так і X, Y, Z залежно від контексту.

Означення 22.1. Нормою двійкового вектора Х x1x2xn називають число, яке дорівнює кількості його одиничних компонент. Отже:

Припустимо, що в каналі зв’язку діє джерело адитивних перешкод, яке описують множиною P(n, t). Її елементи – двійкові вектори-помилки. При чому на n переданих поспіль двійкових символів припадає не більше ніж t помилок. Це означає, що коли на вході каналу зв'язку передано повідомлення , то на виході можна отримати будь-яке слово з множини { | P(n, t), || = ||}, де - поразрядне додавання за mod 2.

Позаяк проблема локалізації інформації (тобто розділення закодованого повідомлення на елементарні коди) у моделі рівномірного кодування тривіальна, то виявлення помилок полягає у відшуканні незбігу локалізованої групи n символів, яке не відповідає жодному з елементарних кодів. Якщо через помилку елементарний код перейде в інший елементарний код, то помилку не буде виявлено. Іноді можна виправити помилку. Якщо групу бітів локалізовано правильно, то для цього необхідно й достатньо, щоб помилкова група була «синонімом» єдиного елементарного коду.


Канал зв'язку називають надійним, якщо будь-які помилки можна виявити чи виправити відповідно до заданої мети декодування. Далі наведено головні положення побудови кодів, які забезпечують надійність найпростіших каналів зв'язку.

Означення 22.2. Віддалю Геммінга називають функцію (XY) двох змінних, означену на множині :

.

Тобто, віддаль Геммінга дорівнює кількості розрядів, у яких вектори Х та Y не збігаються.

Означення 22.3. Скалярний добуток двійкових векторів X, Y означається як:

Відповідно він дорівнює кількості розрядів, у яких Х та Y збігаються й дорівнюють 1.

Легко перевірити таке співвідношення:

,

(22.1)

де 0 – n-вимірний вектор із нульовими компонентами;

,

(22.2)

,

(22.3)

.

(22.4)

Для віддалі Геммінга виконуються аксіоми метрики:

  • (X, Y) 0, причому (X, Y) = 0 в тому лише випадку, коли X = Y;

  • (X, Y) = (Y, X);

  • (X, Y) + (Y, Z) (X, Z) (нерівність трикутника).

Метрика Геммінга – зручне математичне поняття для формулювання умов надійності кодування в разі адитивних помилок.

Означення 22.4. Нехай систему k,n задано кодом V = {12, …,  }. Кодовою віддалю для коду V називають величину:

(V) = min {(X,Y) | X, Y V, XY }.

Теорема 22.1. Якщо в каналі зв'язку діє джерело адитивних перешкод P(n, t), то правдиві такі твердження.

  1. Для виявлення будь-яких помилок необхідно й достатньо, щоб (V) > t.

  2. Для виправлення будь-яких помилок необхідно й достатньо, щоб (V) > 2t.

Доведення. 1. Нехай (V) > t. Якщо XV, ZP(n, t), Z0, то, використовуючи спочатку рівність (22.3), а потім – (22.1), можемо записати (XXZ) = (XXXXZ) = (0, Z) = ||Z||  t. Отже, XZV, і помилку виявлено.

Навпаки, нехай (XY) t й XYV, XY. Тоді, застосувавши рівність (22.2), маємо ||XY|| = (XY t; отже, X P(n, t). Звідси випливає, що XZ = Y, тобто помилку в елементарному коді Y виявити не можна.

2. Нехай (V)>2t. Якщо XV, ZP(n, t), то X – єдиний елементарний код із V, який міг перейти внаслідок помилки в XZ. Справді, припустимо, що існує такий двійковий вектор YX, що YV та YZ1 = XZ для якогось Z1 P(n, t). Додавши до обох частин останньої рівності XZ1, отримаємо YZ1Z. Але, згідно з рівністю (22.2) можемо записати ||XY|| = (XY) > 2t, а ||Z1Z||  ||Z1|| + ||Z|| 2t. Одержали суперечність.

Навпаки, нехай (XY 2t для якихось різних XV. Тоді ||XY||  2t, й існують такі двійкові вектори Z1, Z2, що ||Z1||  t, ||Z2||  t (тобто вони належать P(n, t)) та XZ1Z2. Додавши до обох частин останньої рівності YZ1, одержимо XZ1 = YZ2 = W. Отже, у разі отримання спотвореного елементарного коду W неможливо виявити, що було передано насправді: X чи Y. ►

Доведене твердження має геометричну інтерпретацію.

Означення 22.5. Множину St(X) = {(XZ t} називають кулею радіусом t з центром у точці X.

Теорема 22.2 (без доведення). Якщо в каналі зв'язку діє джерело адитивних перешкод P(n, t), то правдиві такі твердження.


1. Для виявлення будь-яких помилок необхідно й достатньо, щоб для будь-якого XV куля St(X) не містила інших елементарних кодів, окрім X.

2. Для виправлення будь-яких помилок необхідно й достатньо, щоб для будь-яких XV було виконано умову St(X St(Y) = .

Означення 22.6. Рівномірне кодування k,ni  i (i = 1, 2,…, 2k) називають систематичним, якщо можна виділити множину k розрядів I = {i1,…,ik}{1,2,…,n}, які називаються інформаційними, так, що коли i = x1xn (i = 1, 2,…, 2k), то i = xi1xik. Решту розрядів у такому разі називають контрольними.


22.2. Коди з самоконтролем

Як було показано в теоремі 22.1 для автоматичного виявлення помилок достатньо, щоб кодова віддаль (V) була більша за кількість можливих помилок t на n переданих бітів інформації. Розглянемо кодування таблиці символів ASCII, в якій представлено 256 записів. Для кодування елементів таблиці використовується один байт – вісім бітів. Легко бачити, що кодова віддаль (V) для таблиці ASCII буде складати 1 (наприклад, відстань між кодом 00000000 та 00000001 складає якраз 1). Таким чином, якщо = 1, то ми не зможемо автоматично виявляти помилки. Отже, (V) повинно бути не менше 2. Як цього можна досягнути?

На практиці використовується наступна схема. До кожного інформативного байту (8 розрядів) додається ще один розряд, який називається контрольним. Значення контрольного розряду встановлюється таким чином, щоб загальна кількість одиничних розрядів була парною (враховуючи як інформативні розряди, так і контрольні). Тоді, замість 8 розрядів буде передаватись 9. В попередньому прикладі ми отримуємо коди 000000000 та 000000011 (контрольний розряд позначений жирним). Як бачимо, в даному прикладі відстань між кодами вже становить 2, що призведе до автоматичного виявлення помилки.

Такий підхід дозволяє виявляти помилки, які відбулись в одному розряді, але не працює для помилок в більшій кількості розрядів. Наприклад, якщо ми хочемо передати код 00000000, то повинні додати ще контрольний розряд 0, і, зрештою, відправити повідомлення 000000000. Якщо помилки відбулись, припустимо, в двох розрядах і ми отримали, наприклад, код 100010000. В такому випадку кількість одиниць є парною і контрольний розряд містить 0, що є коректним з точки побудови коду. Отже, помилки не зможуть бути виявлені. Звісно, також даний підхід не дозволяє з’ясувати в якому саме розряді відбулась помилка.


22.3. Коди з самовиправленням

Нижче розглянемо коди, які дозволяють виправлення при одиничній помилці (тобто коли = 1).Можна показати, що кількість контрольних розрядів k повинна бути обрана такою, щоб виконувалась рівність: або , де n – кількість інформативних розрядів. Мінімальні значення k для заданого n наведені в таблиці 22.1

Діапазон n

Мінімальне k

1

2

2 – 4

3

5 – 11

4

12 – 26

5

27 – 57

6


Табл. 22.1


Перевіримо справедливість наведеної кількості контрольних кодів для найпростіших випадків. Розглянемо n = 1. Зрозуміло, що можливі тільки два коди: X1=0 та X2=1. В даній системі кодова віддаль (V)=1. За теоремою 22.1 (V) повинно бути не менше 3 ((V)>2), щоб код дозволяв автоматичне виправлення одиничних помилок. Якщо до кодів Xi додати тільки один контрольний розряд, то відстань складатиме лише 2 (X1=00 та X2=11). Отже, необхідно додати мінімум 2 контрольних розряди, щоб уможливити автоматичну корекцію одиничних помилок: X1=000 та X2=111. Дійсно, припустимо ми передавали код X1 і відбулась помилка в другому розряді – ми отримали код X´=010. Знаючи, що помилка можлива тільки в одному розряді, ми легко бачимо, що код X´ міг бути отриманий тільки з коду X1, адже від коду X2 його віддаляє дві помилки (потрібно змінити два розряди в X2 щоб отримати X´).

Тепер розглянемо n = 2. Тут можуть існувати чотири різні коди: X1=00, X2=01, X3=10, X4=11. За теоремою 22.1 (V) знову повинно бути не менше 3, тобто коди повинні відрізнятись як мінімум трьома розрядами. З табл. 22.1 видно, що кількість контрольних розрядів повинна дорівнювати 3, щоб дозволити автоматичну корекцію. Нижче наводиться одне з можливих приписувань значень контрольним розрядам, яка задовольняє умови теореми 22.1.

X1:

00000

X2:

01011

X3:

10101

X4:

11110

Відповідні значення відстаней між кодами становитимуть: (X1,X2) = 3, (X1,X3) = 3, (X1,X3) = 4, (X2,X3) = 4, (X2,X4) = 3, (X3,X4) = 3. Отже, (V) = 3.

Загалом можлива наступна схема визначення значень контрольних розрядів у випадку виправлення одиночних помилок. Припишемо кожному з розрядів (інформативним та контрольним) свій власний номер від 1 до n+k. Запишемо ці номери у двійковій системі. Оскільки 2k > n+k, то кожний номер можна представити k-розрядним двійковим числом.

Припустимо далі, що всі n+k розрядів коду розбиті на контрольні групи, які частково перетинаються, причому так, що одиниці у двійковому представленні номеру розряду вказують на його приналежність до певної контрольної групи. Наприклад, розряд №5 належить до першої та третьої контрольним групами, тому що у двійковому представленні його номеру 510 = …0001012 1й та 3й розряди містять одиниці.

Серед n+k розрядів при цьому є k розрядів, кожний з яких належить тільки одній контрольній групі: 110 = …0000012, 210 = …0000102, 410 = …0001002, … Ці k розрядів будемо вважати контрольними. Інші n розрядів, кожний з яких належить принаймні двом контрольним групам, будуть інформативними розрядами. В кожній контрольній групі буде по одному контрольному розряду. При цьому в кожний контрольний розряд помістимо таку цифру (0 або 1), щоб загальна кількість одиниць в його контрольній групі була парною.

Розглянемо випадок, коли n=8. За табл. 22.1 маємо, що k=4. Нехай початковий інформативний байт (без контрольних розрядів) є 01101011. Позначимо ki iконтрольний розряд та ni iінформативний розряд.



№ розряду

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100


k1

k2

n1

k3

n2

n3

n4

k4

n5

n6

n7

n8

Інформаційне кодове слово



0


1

1

0


1

0

1

1

k1

1


0


1


0


1


1


k2


0

0



1

0



0

1


k3




1

1

1

0





1

k4








1

1

0

1

1

Кодове слово з контрольними розрядами

1

0

0

1

1

1

0

1

1

0

1

1


Як видно, всі контрольні групи перекриваються між собою. Наприклад, перша група контролює розряди n1, n2, n4, n5 та n7. Друга група – n1, n3, n4, n6 та n7. Очевидно, що вони перетинаються.

Припустимо тепер, що при передачі даного коду 100111011011 відбулась помилка в 11-му розряді і ми отримали код 100111011001. Виконавши перевірку парності одиниць в кожній контрольній групі, ми виявили, що кількість одиниць стала непарною в групах №1, №2 та №4, а в групі №3 лишилась парною. Це, по-перше, вказує на наявність помилки, а, по-друге, означає, що номер помилкового розряду містить у двійковому представленні одиниці на першому, другому та четвертому місці та нуль на третьому місці, адже в третій групі помилку не виявлено (а тому помилковий розряд не входить у третю групу).


№ розряду

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

Парність


k1

k2

n1

k3

n2

n3

n4

k4

n5

n6

n7

n8


Передане слово

1

0

0

1

1

1

0

1

1

0

1

1


Отримане слово

1

0

0

1

1

1

0

1

1

0

0

1


k1

1


0


1


0


1


0


Помилка

k2


0

0



1

0



0

0


Помилка

k3




1

1

1

0





1

Вірно

k4








1

1

0

0

1

Помилка


Побудований код, звісно, не спроможний виявляти подвійні помилки. Наприклад, якщо помилка при передачі відбудеться в розрядах №3 та №6, так що отримали слово 101110011011.


№ розряду

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

Парність


k1

k2

n1

k3

n2

n3

n4

k4

n5

n6

n7

n8


Передане слово

1

0

0

1

1

1

0

1

1

0

1

1


Отримане слово

1

0

1

1

1

0

0

1

1

0

1

1


k1

1


1


1


0


1


1


Помилка

k2


0

1



0

0



0

1


Вірно

k3




1

1

0

0





1

Помилка

k4








1

1

0

1

1

Вірно