Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки МЗКІТ.doc
Скачиваний:
31
Добавлен:
12.02.2016
Размер:
3.38 Mб
Скачать

Хід роботи

1.Ознайомитися з теоретичним відомостями по темі лабораторної роботи.

2. Здійснити кодування і декодування власного прізвища записаного два рази без пропуску.

3.Завантажити програму LZWteach.EXE.

4.У Режимі демонстрація роботи алгоритму LZW ознайомитися з роботою алгоритму на прикладі введеної послідовності символів.

5.У Режимі оцінка вивчення алгоритму Лемпела-Зіва-Велча ввести послідовність задану викладачем і самостійно виконувати кодування і декодування заданої послідовності символів.

6.Виконати стиснення декількох файлів різного типу (текстових, програм , рисунків) у Режимі кодування/декодування файлів. Оцінити ефективність стиснення на файлах різного типу- побудувати гістограму в якій для файлів різного типу вказати початковий об’єм файлу і об’єм стисненого файлу. Для прикладу взяти 5 файлів різного типу.

7.Оформити звіт.

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

Тема роботи: Код Хемінга

Мета роботи: вивчення кодування та декодування інформації за допомогою коду Хеммінга

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

Код Хемінга - це код, який виявляє і виправляє одиничні помилки і виявляє подвійні помилки. Код Хемінга відноситься до систематичних кодів.

Систематичні коди -- це коди, в яких інформаційні та надлишкові символи розташовані на певних наперед визначених місцях. Код Хемінга, як і будь-який (n,k)-код, містить k інформаційних і (n-k) надлишкових символів. Надлишкова частина коду будується таким чином, щоб при декодуванні можна було б встановити не лише факт наявності помилок в даній комбінації,але й вказати номер позиції, в якій помилка. Здійснити це можна шляхом багатократної перевірки прийнятої комбінації на парність. Кількість перевірок рівна кількості надлишкових символів. При кожній перевірці отримують двійковий контрольний символ. Якщо результат перевірки дає парне число, то контрольному символу присвоюється ”0”, якщо непарне - то “1”. В результаті всіх перевірок утворюється (n-k)-розрядне двійкове число, що вказує на номер спотвореного символа. Для виправлення помилки достатньо змінити значення символа, який стоїть у позиції ( перевід (n-k)двійкового розрядного числа у десяткове число) на протилежне.

Необхідна кількість надлишкових символів виводиться з формули:

Кодування

Кодується деяка інформація подана у вигляді у двійковій формі( послідовності нулів і одиниць) k1 k2 k3 k4 k5 k6 ... kn.

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

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

b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11

r1 r2 k1 r3 k2 k3 k4 r4 k5 k6 k7

де r[i] - надлишкові символи, k[i] - інформаційні символи.

Складають кодову комбінацію з інформаційних і надлишкових символів, позиції надлишкових символів є степенями 2 (1, 2, 4, 8, 16, 32, …), а також при цьому позицію кожного символа(і інформаційних) у кодовій комбінації представляють у двійковій системі числення.

00001 b1 r1=k1 xor k2 xor k4 xor k5

00010 b2 r2=k1 xor k3 xor k4

00011 b3 k1

00100 b4 r3=k2 xor k3 xor k4

00101 b5 k2

00110 b6 k3

00111 b7 k4

01000 b8 r4=k5 xor k6 xor k7

01001 b9 k5

01010 b10 k6

01011 b11 k7

Надлишкові символи знаходять таким чином:

r1-це сума по модулю 2 (xor) тих k[i], в яких в першому розряді порядкового номера є "1";

r2-це сума по модулю 2(xor) тих k[i], в яких в другому розряді порядкового номера є"1";

r3- це сума по модулю 2 (xor) тих k[i], в яких в третьому розряді порядкового номера є "1";

r4- це сума по модулю 2 (xor) тих k[i], в яких в четвертому розряді порядкового номера є "1";

Приклад. Закодувати текст 1111101111 в коді Хемінга, кількість надлишкових і інформаційних дорівнює 9). Для цього потрібно текст поділити і додати надлишкові символи на потрібні позиції.

k1k2k3k4k5.k1k2k3k4k5

1 1 1 1 1 .0 1 1 1 1

Перше слово :

r1 = 1 xor 1 xor 1 xor 1 = 0

r2 = 1 xor 1 xor 1 = 1

r3 = 1 xor 1 xor 1 =1

r4 = 1

Друге слово :

r1 = 0 xor 1 xor 1 xor 1 = 1

r2 = 0 xor 1 xor 1 = 0

r3 = 1 xor 1 xor 1 = 1

r4 = 1 xor 1 xor 1 = 1

Результат : r1r2k1k2k3k4r4k5.r1r2k1r3k2k3k4r4k5

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

Декодування

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

r1 xor k1 xor k2 xor k4 xor k5 xor k7 xor… = С1 ,

r2 xor k1 xor k3 xor k4 xor k6 xor k7xor… = С2 ,

r3 xor k2 xor k3 xor k4 xor …=С3

r4 xor k5 xor k6 xor k7xor… = С4

Якщо кодове слово правильне, то система рівнянь виконується (тобто С1=С2=С3=С4=0). Якщо в кодовому слові є помилка, то права частина системи буде складатись не лише з нулів. Праву частину називають синдромом або розпізнавачем помилки. Щоб знайти помилку, необхідно прочитати синдром знизу вверх (С4С3С2С1) і перевести його в 10-ву систему числення- одержане число буде номером спотвореного символа.

Режими роботи програми

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

У режимі транспортування потрібно вибрати файл який ви хочете транспортувати , ввести рівень завад і кодову довжину і натиснути клавішу TRANSPORT. Програма перетворить цей файл в двійковий (з розширенням *.t2b). Потім закодує (утвориться файл з розширенням *.hem). Виходячи з заданого рівня завад, внесе в нього помилки (*.trp), після цього розкодує з виправленнями помилок(*.rhm) і перетворить назад в текстовий (*.t2b). Після цього треба натиснути клавішу VIEW RESULTS . З’явиться діалогове вікно , в якому треба вибрати відповідний файл (з розширенням *.t2b) і натиснути OPEN. З’явиться форма з двома вікнами. У верхньому показано початковий файл, в нижньому - переданий.