Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теор-информ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.58 Mб
Скачать

Порядок виконання роботи

1. Використовуючи методику Хаффмена і Шеннона-Фано, здійснити оптимальне і ефективне кодування ансамблю повідомлень з вірогідністями відповідно:

z1 = 0,22; z2 = 0,20; z3 = 0,16; z4 = 0,16; Z5 = 0,10; Z6 = 0,10;

z7 = 0,04; z8 = 0,02.

2. Перевірити оптимальність коду.

3. Розрахувати середню довжину кодового слова.

4. Ввести текст для кодування англійською мовою.

5. Виконати кодування методом Хаффмена.

6. Записати та проаналізувати результати кодування. Проверить оптимальность кода.

7. Виконати кодування методом Шенона-Фано.

8. Записати та проаналізувати результати кодування. Проверить оптимальность кода.

9. Порівняти результати стиснення обома методами.

10. Завантажити програму huffman.exe.

11. Ознайомитись з панеллю програми.

12. Ввести текст для кодування англійською мовою.

13. Виконати кодування методом Хаффмена та Шенона-Фано.

14. Порівняти результати кодування обома методами.

Контрольні запитання

  1. Який код називається оптимальним?

2. Який код називається префіксним?

3. Який принцип алгоритму кодування Хаффмена?

  1. Який принцип алгоритму кодування Шенона-Фано?

  2. До яких кодів належить метод Хаффмена?

  3. До яких кодів належить метод Шенона-Фано?

7. У чому полягає сутність оптимального кодування і практичний результат його застосування?

8. Як оцінюється ефективність ОНК?

9. Як перевірити оптимальність коду?

10. Які коди називаються оптимальними нерівномірними кодами?

Лабораторна робота № 5

Дослідження завадозахищених кодів

Мета роботи: вивчення принципів кодування, ознайомлення з класифікацією і основними характеристиками кодів, що виправляють та виявляють помилки: з методами кодування і декодування на прикладі коду з перевіркою парності та коду Хеммінга.

Теоретичні відомості

Будь-який реальний канал зв'язку схильний до зовнішніх впливів, а також в ньому можуть відбуватися внутрішні процеси, в результаті яких спотворюються передані сигнали і, отже, пов'язане з ними повідомлення. Такі дії називаються шумами (перешкодами).

Джерела перешкод можуть бути зовнішніми, наприклад, так звані «наводки» від потужних споживачів електрики або атмосферних явищ, що призводять до появи порушень в радіозв'язку; одночасна дія декількох прилеглих однотипних джерел (одночасна розмова кількох осіб). До перешкод можуть призводити і внутрішні особливості даного каналу, наприклад, фізичні неоднорідності носія; паразитні явища в шинах; процеси загасання сигналу в лінії зв'язку через велику віддаленість.

Якщо рівень перешкод виявляється порівняєм з інтенсивністю сигналу, то передача інформації з даного каналу виявляється взагалі неможливою. Однак і при відносно низьких рівнях шумів вони можуть викликати спотворення переданого сигналу. Існують і застосовуються методи захисту від перешкод, наприклад, екранування електричних ліній зв'язків; поліпшення вибірковості приймального пристрою і т.д.

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

Друга теорема Шеннона:

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

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

При цьому можна в якості самостійних розглянути дві ситуації:

• кодування забезпечує тільки встановлення факту спотворення інформації - в цьому випадку виправлення здійснюється шляхом її повторної передачі;

• кодування дозволяє локалізувати і автоматично виправити помилку передачі (зберігання).

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

Надійність забезпечується тим, що поряд з бітами, безпосередньо кодуючими повідомлення (будемо називати їх інформаційними бітами), передаються (зберігаються) додаткові біти, станом яких можна судити про правильність передачі (будемо називати їх контрольними бітами). При рівномірному кодуванні повідомлення довжина кодової ланцюжка на знак (або групу знаків) k до складається з довжини інформаційної частини ki, і числа контрольних бітів kc. Очевидно, k ki. Зручно визначити надмірність повідомлення для реального каналу L наступним чином:

Надлишкові завадозахисні коди широко застосовуються для виявлення й виправлення помилок при передачі даних і їхньому зберіганні в ЗП ЕОМ. Коригувальна здатність таких кодів оцінюється, в першу чергу, за такими показниками: кратність помилок, що виявляють у кодовому слові (r) і кратність помилок, що виправляють (s). Значення перших двох показників визначаються мінімальною кодовою відстанню Dmin, при цьому справедливо Dmin ≥ r + 1, Dmin ≥ 2s + 1 і Dmin ≥ r + s + 1. Значення r і s, визначені виходячи з Dmin, гарантовані у всіх випадках. У деяких ситуаціях, наприклад, кратність помилок, що виявляють, може бути й вище.

Сфера застосування різних надлишкових кодів визначається особливостями їхньої технічної реалізації.

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

Кодова відстань (відстань Хеммінга)—це мінімальна кількість символів, яку потрібно змінити у кодовому слові, щоб отримати наступне (найближче) кодове слово.

Вагою W(А) кодової комбінації A називається число двійкових одиниць, що міститься в ній.

Можна сказати, що кодова відстань визначається числом позицій, в яких їх двійкові знаки не збігаються. Це означає, що кодова відстань між двійковими комбінаціями X і Y дорівнює вазі W(Z) деякої третьої комбінації Z, одержуваної порозрядним складанням за модулем 2 цих комбінацій тобто d = W (Z) = W (X Y).

Наприклад: Х = 100011100001011; Y = 100101000110011;

Z = X Y

X = 100011100001011

Y = 100101000110011

Z = 000110100111000, тобто d = 6.

Найбільш поширеним є код з контролем парності.

Код з перевіркою на парність утворюється додаванням до групи інформаційних двійкових знаків одного контрольного. Значення його вибирається таким чином, щоб загальне число одиниць у слові було парним або непарним. Після читання або запису даних у пам'ять перевіряється, чи збережено принцип запису. Код, у якому при Dmin = 2, дозволяє виявляти однократні помилки в кодових словах. Варіант такого коду, що передбачає об'єднання кодових слів у блоки з контролем парності по рядку й стовпцю, має Dmin = 4 і забезпечує s = 1 і r = 3. Такий код часто використовується при асинхронній посимвольній передачі даних. Виявляються одиночні помилки і групові з непарною кратністю. Доцільно доповнювати "до непари", щоб відрізнити "0" від відсутності інформації в слові, тому що в цьому випадку в слові буде хоча б одна одиниця.

Код Хеммінга дозволяє виправити поодинокі помилки в окремих кодових словах. Це, зокрема, необхідно при збереженні даних у напівпровідниковій пам'яті. Помилки, що виникають, з'являються в різних розрядах незалежно, а це означає, що імовірність однократної помилки на кілька порядків вище, ніж дво-, трикратної і т.д. Таким чином, головна задача — виправлення саме однократних помилок. Так, у коді 7,4 (тут n = 7 — загальне число розрядів, а k = 4 — кількість інформаційних розрядів у кодовому слові) Dmin = 3 і s = 1. Такий код найчастіше застосовується при контролі даних в оперативному запам’ятовуючому пристрої (ОЗП).

Коди Хеммінга мають більшу відносну надмірність, ніж коди з перевіркою на парність і призначені або для виправлення одиночних помилок (при Dmin = 3) або для виправлення одиночних і виявлення без виправлення подвійних помилок (Dmin = 4). У такому коді n-значне число має m інформаційних і k контрольних розрядів. Кожен з контрольних розрядів є знаком парності для визначеної групи інформаційних знаків слова. При декодуванні виробляється k групових перевірок на парність. У результаті кожної перевірки у відповідний розряд регістра помилки записується 0, якщо перевірка була успішною, або 1 при виявленні непарності.

Групи для перевірки утворяться таким чином, що в регістрі помилки після закінчення перевірки виходить k-розрядне двійкове число, що показує номер позиції помилкового двійкового розряду. Зміна цього розряду — виправлення помилки.

Надлішкові завадозахісні коди широко застосовуються для виявлення й виправлення помилок при передачі даних и їхньому зберіганні в ЗП ЕОМ. Коригувальна здатність таких кодів оцінюється, в першу чергу, за такими Показники: Кратність помилок, что віявляють у кодовому слові (r) и кратність помилок, что віправляють (с). Значення перших двох показніків візначаються мінімальною кодовою відстанню Dmin, при цьому справедливо Dminr + 1,

Dmin ≥ 2s + 1 і Dmin ≥ r + s + 1. Значення r і с, візначені віходячі з Dmin, гарантовані у всех випадка. У деяк сітуаціях, наприклад, кратність помилок, что віявляють, может буті ї вищє.

Сфера застосування різніх надлишково кодів візначається особливістю їхньої технічної реализации.

Найбільш поширеним є код з контролем парності, який при Dmin = 2 дозволяє віявляті однократні помилки в кодових слів. Варіант такого коду, что передбачає об'єднання кодових слів у блоки з контролем парності по рядку й стовпцю, має Dmin = 4 і забезпечує s = 1 і r = 3. Такий код часто вікорістовується при асінхронній посімвольній передачі даних.

Код Хеммінга дозволяє виправити поодінокі помилки в окремому кодовому слові. Це, зокрема, застосовується при збереженні даних у напівпровідніковій пам'яті. Помилки, что вінікають, з'являються в різніх розряда незалежно, а це означає, что імовірність однократної помилки на кілька порядків вищє, ніж дво-, трікратної и т.д. Таким чином, головна задача - виправлення самє однократних помилок. Так, у коді 7,4 (тут n = 7 - загальне число розрядів, а k = 4 - кількість інформаційних розрядів у кодовому слові) Dmin = 3 і s = 1. Такий код найчастіше застосовується при контролі даних в оперативному запам'ятовуючому пристрої (ОЗП).

Коди, що виявляють помилку

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

Оскільки помилка має бути тільки виявлена, можна запропонувати інший спосіб кодування. Нехай є ланцюжок інформаційних біт завдовжки ki. Додамо до них один контрольний біт (kc=1), значення якого визначається тим, що нова кодова ланцюжок з ki+1 біт повинна містити парна кількість одиниць - з цієї причини такої контрольний біт називається бітом парності. Наприклад, для інформаційного байта 01010100 біт парності буде мати значення 1, а для байта 11011011 біт парності дорівнює 0. У разі одиночної помилки передачі число 1 перестає бути парним, що і служить свідченням збою. Наприклад, якщо отримана ланцюжок 110110111 (контрольний біт виділений підкресленням), ясно, що передача проведена з помилкою, оскільки загальна кількість одиниць дорівнює 7, тобто непарній. Запропонований спосіб кодування не дозволяє встановити, в якому конкретно бите міститься помилка і, отже, не дає можливості її виправити. Надмірність повідомлення при такому методі передачі дорівнює:

На перший погляд здається, що шляхом збільшення ki, можна як завгодно наближати надмірність до її мінімального значення (Lmin = 1). Однак зі зростанням ki, по-перше, зростає ймовірність парної помилки, яка контрольним бітом не відслідковуються; по-друге, при виявленні помилки потрібно заново передавати багато інформації. Тому зазвичай kc = 8 або kc = 16 і, отже, L = 1,125 (1,0625) відповідно.

Коди, що виправляють одиночну помилку

За аналогією з попереднім пунктом можна було б запропонувати простий спосіб встановлення помилки - передавати кожен символ тричі. Такий метод кодування призводить до надмірності повідомлення L = 3, що неприйнятно з економічної точки зору.

Яким чином слід здійснити кодування, щоб помилка при передачі могла бути локалізована (тобто визначено, в якому бите знаходиться помилка) і, природно, усунена. Такий метод кодування був запропонований в 1948 р Р.Хеммінгом; побудовані за цим методи коди отримали назву коди Хеммінга.

Основна ідея полягає в додаванні до інформаційних бітам декількох бітів парності, кожен з яких контролює певні інформаційні біти. Якщо пронумерувати всі передані біти, починаючи з 1 зліва направо (що інформаційні біти нумеруються з 0 і справа наліво), то контрольними (перевірочними) виявляються біти, номери яких рівні ступеням числа 2, а всі інші є інформаційними. Наприклад, для 8-бітного інформаційного коду контрольними виявляться біти з номерами 1, 2, 4 і 8:

1 2 3 4 5 6 7 8 9 10 11 12

20 21 22 23

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

Таблиця 5.1

Таблица 5.1.

перевірочні біти

контрольовані біти

1

1

3

5

7

9

11

13

15

17

19

21

2

2

3

6

7

10

11

14

15

18

19

22

4

4

5

6

7

12

13

14

15

20

21

22

8

8

9

10

11

12

13

14

15

24

25

26

16

16

17

18

19

20

21

22

23

24

25

26

32

32

33

34

35

36

37

38

39

40

41

42

Приклад 5.1

Припустимо, що в каналі зв'язку під дією перешкод відбулося спотворення і замість 0100101 було прийнято 0100111. Для виявлення помилки виробляють перевірки на парність.

Перша перевірка: сума 1 + 3 + 5 + 7 = 0 + 0 + 1 + 1 парні. В молодший розряд номера помилкової позиції записуємо 0.

Друга перевірка: сума 2 + 3 + 6 + 7 = 1 + 0 + 1 + 1 нечетна. У другій розряд номера помилкової позиції записуємо 1.

Третя перевірка: сума 4 + 5 + 6 + 7 = 0 + 1 + 1 + 1 нечетна. У третій розряд номера помилкової позиції записуємо 1.

Номер помилкову позицію 101 = 6. Отже, символ шостій позиції слід змінити на зворотний, і ми отримаємо правильну кодову комбінацію.

Приклад 5.2

Нехай замість зазначеної вище послідовності 000111011101 прийшла наступна (в 5-му бите 1 замінилася 0):

1 2 3 4 5 6 7 8 9 10 11 12

0 0 0 1 0 1 0 1 1 1 0 1

Аналізуємо стан контрольних бітів відповідно до табл. 5.1. Біт 1 - невірно - тобто помилка знаходиться в якому-небудь бите з непарним номером.

Біт 2 - вірно - отже з байтів з непарними номерами 3, 7 і 11 вірні (тобто помилка в 5 або 9-м). Біт 4 - невірно - значить, помилка може міститися тільки в 5-му бите.

Таким чином, однозначно встановлюється, що помилковим є 5-й біт - залишається виправити його значення на протилежне (інвертувати) і, тим самим, відновити правильну послідовність. Варто звернути увагу на те, що номер біта, що містить помилку (5), дорівнює сумі номерів контрольних бітів, що вказали на її існування (1 і 4) - це не випадковий збіг, а загальна властивість кодів Хеммінга.

На підставі сказаного можна сформулювати простий алгоритм перевірки та виправлення переданої послідовності біт в уявленні Хемминга:

(a) Провести перевірку всіх бітів парності;

(b) якщо всі біти парності вірні, то перейти до п. (е);

(c) обчислити суму номерів всіх неправильних бітів парності;

(d) інвертувати вміст біта, номер якого дорівнює сумі, знайденої в п. (c);

(e) виключити біти парності, передати правильний інформаційний код.

Надмірність кодів Хеммінга для різних довжин переданих послідовностей наведена нижче:

Кількість информаційнх біт

Кількість контрольних біт

Надмірність, L

8

4

1,50

16

5

1,31

32

6

1,06

Очевидно, що вигідніше передавати і зберігати більш довгі послідовності бітів.