Uploaded by Nikita Efremov

Кодування дискретних повідомлень ефективними кодами

advertisement
Кодування дискретних повідомлень
ефективними кодами
Шеннона-Фано та Хаффмана
Практичне заняття з дисципліни
Теорія зв’язку
Мета заняття
Вивчення наступних положень теорії інформації:
– надмірність джерела дискретних повідомлень, її
причини;
– передумови до зменшення надмірності під час
кодування джерела;
– побудова кодів Шеннона-Фано та Хаффмана;
– розрахунки параметрів коду джерела.
Що таке надмірність джерела дискретних
повідомлень?
Надмірність джерела повідомлень – це його
властивість видавати інформацію більшою кількістю
знаків, ніж можна було б.
Приклад 1.
Перше повідомлення «У понеділок на другій парі
буде лабораторне заняття з Теорії зв’язку».
Друге повідомлення «Пн. 2 п. лб. ТЗ».
Обидва повідомлення містять одну і ту ж
інформацію, але першому повідомленню властива
велика надмірність.
Причин
надмірності
повідомлень дві:
джерела
дискретних
– залежність між знаками у повідомленнях;
– знаки мають різні ймовірності появи у
повідомленнях.
Якщо знаки у повідомленнях незалежні і мають
однакові ймовірності, то надмірності у повідомленнях
немає, а ентропія джерела максимальна
H max ( A )  log 2 M A
де МА – обсяг алфавіту джерела повідомлень.
Якщо ентропія джерела H(A), то його надмірність
визначається Hmax(A) – H(A). Вона показує, наскільки
знаки у середньому недовантажені інформацією. Для
порівняння джерел з різними обсягами алфавітів
використовують коефіцієнт надмірності джерела
K надм
H max  A  H  A
H  A

 1
H max  A
H max  A
Значення коефіцієнта надмірності джерела знаходиться
в межах 0 ≤ Kнадм <1.
Призначення кодера джерела
Кодер джерела призначений для представлення
повідомлень від джерела двійковими символами (рис. 1)
Двійкові
символи
Знаки
Джерело
повідомлень А
Кодер
джерела
Вихід джерела В
Рисунок 1 – Кодування джерела дискретних повідомлень
На цьому занятті розглядаються ефективні коди.
Ефективними (економними) називають коди джерел
повідомлень, які забезпечують зменшення надмірності
повідомлень під час кодування.
Передумови до зменшення надмірності під час
кодування джерела?
Для часткового чи повного усунення надмірності пропонуються
наступні умови (підходи) до побудови коду джерела:
1. Для усунення залежності між знаками у повідомленнях необхідно із
знаків джерела А скласти новий алфавіт з укрупнених знаків
(знакосполучень); укрупнення знаків проводять так, щоб укрупнені
знаки були (повністю чи практично) незалежні;
2. Код джерела повинен бути нерівномірним – більш ймовірним
знакам присвоюються більш короткі комбінації, а менш ймовірним
знакам присвоюються більш довгі комбінації;
3. Щоб ентропія повідомлення на виході кодера була близька до
максимального значення (1 дв. од.), ймовірності символів 1 і 0 на виході
кодера повинні бути близькими до 0,5;
4. Код джерела повинен бути префіксним – ніяка з коротких кодових
комбінацій не є префіксом інших кодових комбінацій більшої довжини
(префіксні коди називають також кодами без коми); виконання цієї
вимоги дає можливість виконати декодування двійкового повідомлення
без розділових знаків.
Метод ефективного кодування кодом Шеннона-Фано
Досить прості ефективні коди – коди Шеннона-Фано.
Кодами Шеннона-Фано виконується кодування незалежних
знаків, тобто умова 1 вже виконана. Наступні умови (2–4)
виконуються під час побудови кодової таблиці (табл. 1).
Алгоритм побудови коду:
1. Розташувати знаки в порядку убування їхніх
ймовірностей.
2. Розділити знаки на дві групи з приблизно рівними
ймовірностями. Ця процедура може привести до різних
кінцевих результатів, залежно від розділення знаків на групи.
3. Знакам верхньої групи (в таблиці) приписати символ “0”,
знакам нижньої групи – символ “1” (чи навпаки, це не має
істотного значення).
4. Повторити кроки 2 і 3, доки розділення знаків на групи не
закінчиться і їм не будуть приписані символи “0” чи “1”.
5. Кодова комбінація знака формується шляхом виписування
символів, приписаних цьому знаку, зліва направо.
Приклад 2
Задано джерело дискретних повідомлень ймовірностями
незалежних знаків:
а0
а1
а2
а3
а4
а5
а6
а7
0,1
0,5
0,2
0,01
0,09
0,015
0,015
0,07
Побудувати код Шеннона-Фано.
Рішення. Будуємо таблицю за описаним вище алгоритмом:
аі
Р(аі)
а1
0,5
а2
0,2
а0
0,1
а4
0,09
а7
0,07
а5
0,015
а6
0,015
а3
0,01
Розділення на групи
Кодові комбінації
0
0
0
0
100
1
101
0
110
0
1
1
1110
0
1
1
1
11110
0
111110
1
111111
Метод ефективного кодування кодом Хаффмана
Кодами Хаффмана виконується кодування незалежних знаків,
тобто умова 1 вже виконана. Наступні умови (2–4) виконуються
шляхом побудови кодового дерева.
Алгоритм побудови коду:
1. Розташувати знаки в порядку убування їхніх імовірностей.
2. Вибрати два вузли (знаки) з найменшими ймовірностями. З них
побудувати дві вітки, які сходяться в один вузол, що відповідає
складеному знаку, а його ймовірність дорівнює сумі
ймовірностей вузлів, з яких вийшли вітки. Віткам приписати
символи 1 і 0, наприклад, верхній вітці 0, а нижній вітці 1.
3. Переупорядкувати список знаків відповідно до кроку 1.
Повторити крок 2.
4. Повторити кроки 1 і 2 доки не буде досягнуто кореня кодового
дерева.
5. Сформувати кодові комбінації знаків шляхом виписування
символів, починаючи з кореня кодового дерева, проходячи по
вітках до кожного знаку, тобто справа наліво.
Приклад 3
Для джерела, заданого у прикладі 1, побудувати код
Хаффмана.
Знаки і їх
імовірності
Кодове дерево
а1
0,2
а2
а0
Корінь
дерева
0
0,5
0,1
1
0,09
а4
0
0
1
0
0,19
1
1
0
0,07
1
а7
0,015
0
а5
0,015
0
а6
0,01
а3
1
1
1
0,025
0,04
0,11
0,3
0,5
Кодова таблиця
Знак
аk
Р(аk)
а1
0,5
0
а2
0,2
10
а0
0,1
1100
а4
0,09
1101
а7
0,07
1110
а5
0,015 11110
а6
0,015 111110
а3
0,01
Рисунок 2 – Приклад побудови кодового дерева
Код. комб.
111111
Порівняння параметрів отриманих кодів Шеннона-Фано та
Хаффмана
Код
Параметри
Шеннона-Фано
Хаффмана
середня довжина кодової комбінації
MA
n   ni  P ( ai )
2,18
2,17
0,97
0,98
1,83
1,84
i 1
коефіцієнт ефективності коду
H ( A)

n
коефіцієнт стиснення коду

n
n
Для порівняння визначено:
M
H ( A )    P ( a i )  log 2 P ( a i ) = 2,12 дв. од./знак;
ентропію джерела
i 1
довжину коду при рівномірному (примітивному) кодуванні з умови: n ≥ log2MA,
але слід врахувати розділовий знак, який не несе ніякої інформації від джерела,
але добавляється у кожну кодову комбінацію рівномірного коду, тому n ≥
log2MA + 1, n = 4.
A
Висновки до отриманих результатів
Як у коду Шеннона-Фано, так і у коду Хаффмана середня
довжина кодової комбінації наближається до ентропії джерела
зверху, але не дорівнює їй. Даний результат відображає теорему
кодування Шеннона для каналу без шуму: будь-яке джерело
можна закодувати двійковим кодом при середній кількості
двійкових символів на знак джерела, як завгодно близькій до
ентропії, і неможливо домогтися середньої довжини кодових
комбінацій, меншої за ентропію. Рівність ( n = H(A)) буде
досягнута, якщо повністю видалити надлишковість, а саме,
імовірності символів 1 і 0 дорівнюють 0,5. Таким чином, теорема
Шеннона встановлює границі компактності представлення
інформації, яких можна досягти при ефективному кодуванні.
Параметри отриманого коду Хаффмана дещо кращі, ніж
параметри коду Шеннона-Фано. Це пояснюється тим, що
алгоритм побудови коду Хаффмана дає можливість повторного
упорядкування знаків у порядку убування їхніх імовірностей (п. 3
алгоритму). Тому вважають, що код Хаффмана оптимальний, а
код Шеннона-Фано не завжди є оптимальним.
Порівняємо надмірність повідомлень на вході та на виході кодера.
Розрахуємо надмірність на виході джерела (на вході кодера):
K надм 
H max  A  H  A
H  A
 1
H max  A
H max  A
H(A)max = log28 = 3 дв. од./знак;
Kнадм дж А = 0,29.
Для розрахунку коефіцієнта надмірності джерела В (по виходу кодера)
необхідно обчислити ентропію цього джерела H(В). Знайдемо ймовірності
символів 1 і 0 на виході джерела В. Розрахунки проведемо для одного із кодів,
наприклад, для коду Шеннона-Фано.
P(1) = 0,2·1/3+0,1·2/3+0,09·2/3+0,07·3/4+0,015·4/5+0,015·5/6+0,01=0,28;
P(0) = 0,5+0,2·2/3+0,1·1/3+0,09·1/3+0,07·1/4+0,015·1/5+0,015·1/6=0,72.
в цих формулах дробами подані ймовірності появ 1 або 0 у кодовій
комбінації, наприклад 1/3 уформулі P(1) означає, що у комбінації а2 100 одна
одиниця з трьох.
Ентропія джерела В
H(В)= – (0,28·log20,28+0,72·log20,72)=0,85 дв. од./знак;
Коефіцієнт надмірності джерела В
Kнадм дж В = 1 – 0,85 = 0,14.
Отже, Kнадм дж А > Kнадм дж В, – ефективне кодування зменшує надмірність.
Download