Тема 9. Застосування статистичних алгоритмів стиснення до блоків повідомлення

 

План

1.    Теоретичні границі стиснення інформації

2.    Метод блокування повідомлення

 

 

1.    Теоретичні границі стиснення інформації

 

Стиснення даних не може бути більше деякої теоретичної границі. Сформульована раніше теорема Шеннона про кодування каналу без шуму встановлює верхню границю стиснення інформації як ентропію джерела H(X).

Позначимо через L(X) функцію, що повертає довжину коду повідомлень

L(X)=len(code(X)),

де code(X) кожному значенню X ставить у відповідність деякий бітовий код; len( ) - повертає довжину цього коду.

Оскільки L(X) - функція від д. в. в. X, тобто також є д. в. в., то її середнє значення обчислюється як математичне сподівання:

 

.                            (9.1)

 

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

 

                                      (9.2)

 

для будь-якої д. в. в. X і будь-якого її коду.

Нехай - вектор даних завдовжки n;  - вектор частот символів у .

Тоді середня кількість бітів коду на одиницю повідомлення обчислюється так:

 

     ,                        (9.3)

 

де  - довжина коду повідомлення : ;  - вектор Крафта для .

Ентропія повідомлення  обчислюється так:

 

.                            (9.4)

 

Розглянемо функцію y=ln(x), яка є опуклою вниз, тобто її графік лежить не вище своєї дотичної y=x-1. Тоді можна записати таку нерівність:

 

ln(x) £ x-1, x>0.                                (9.5)

 

Підставимо в (2.7)  і помножимо обидві частини цієї нерівності на :

 

.                       (9.6)

 

Запишемо суми за i обох частин нерівності (2.8), і з урахуванням того, що для оптимального кодування Хаффмена нерівність Крафта (2.1) переходить в строгу рівність, дістанемо в правій частині (2.8) нуль, отже,

.

Перейдемо від натурального логарифма до двійкового і з урахуванням виразу (9.6) дістанемо

,

тобто приходимо до виразу (2.4), що визначає верхню границю стиснення даних.

      Припустимо, що у векторі Крафта  довжини кодових слів пов'язані з частотами символів у повідомленні так:

.

При виконанні цієї умови нерівність Крафта (2.1) обертається у строгу рівність, і код буде компактним, тобто матиме найменшу середню довжину. Тоді, оскільки для оптимальних кодів Шеннона-Фано і Хаффмена довжина кожної кодової комбінації округлюється до більшої цілої кількості бітів, маємо  

,

звідси

.

Таким чином, границі стиснення інформації при оптимальному статистичному кодуванні визначаються так:

 

.                           (9.7)

 

2.    Метод блокування повідомлення

 

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

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

Блоковий код називається блоковим кодом k-го порядку, якщо всі його блоки мають довжину k символів.

Метод блокування повідомлень полягає в такому.

За заданим e>0 можемо знайти таке k, що якщо розбити повідомлення на блоки завдовжки k (всього буде n/k блоків), то, використовуючи оптимальне статистичне кодування таких блоків, що розглядаються як одиниці повідомлень, можна досягти середньої довжини коду більше ентропії менш ніж на e.

Припустимо, що X1, X2, …, Xn – незалежні д. в. в., що мають однаковий розподіл ймовірностей. Тоді ентропія n-вимірної д. в. в.

.

Нехай  - повідомлення джерела, де , , … ,  - блоки повідомлення. Тоді

 

.                                   (9.9)

 

При оптимальному кодуванні k-послідовностей векторної д. в. в. , що розглядаються як одиниці повідомлення, справедлива нерівність

 

.                             (9.10)

 

Середня кількість бітів на одиницю повідомлення X

 

.                             (9.11)

Тоді з урахуванням (2.10) і (2.12) нерівність (2.11) можна записати так:

 

.                              (9.12)

 

Розділивши обидві частини (2.13) на k, отримуємо

 

,                                (9.13)

 

тобто достатньо вибрати .

Приклад 1  Стиснемо вектор даних X=(0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1,  0, 0, 1, 0, 1), використовуючи блоковий код 2-го порядку.

Розіб'ємо вектор на блоки довжини 2: (01, 10, 10, 01, 11, 10, 01, 01). Розглядатимемо ці блоки як елементи нового алфавіту {01, 10, 11}. Визначимо вектор частот появи блокових елементів в заданій послідовності. Одержуємо (4, 3, 1), тобто найбільш часто трапляється блок 01, потім 10 і найменше - 11; всього 8 блоків. Код Хаффмена для блоків символів представимо у вигляді кодового дерева (рис. 2) і відповідної таблиці кодів (табл. 2.5).

                                                 Таблиця 2.5

Блок повідомлення

Кодове слово

01

0

10

10

11

11

 

 

Замінюючи кожний блок повідомлення відповідним кодовим словом з таблиці кодів, дістанемо вихідну кодову послідовність Code(01, 10, 10, 01, 11, 10, 01, 01)= 010100111000.

Обчислимо ентропію, використовуючи статистичний розподіл ймовірностей символів повідомлення:

 (біт/сим).

Швидкість стиснення даних (середня довжина коду)

 (біт/сим).

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

Приклад 2  Нехай д. в. в. X1, X2, …, Xn незалежні, однаково розподілені і можуть набувати тільки два значення 0 та 1 з такою ймовірністю: P(Xi=0)=3/4 та P(Xi=1)=1/4, i=1…n.

Тоді ентропія одиниці повідомлення

 (біт/сим).

Мінімальне префіксне кодування - це коди 0 або 1 завдовжки 1 біт. Отже, середня кількість бітів на одиницю повідомлення  (біт/сим).

Розіб'ємо повідомлення на блоки довжиною n=2. Закон розподілу ймовірностей і відповідне кодування двовимірної д. в. в. наведені у табл. 2.6.

Таблиця 2.6

00

01

10

11

P

9/16

3/16

3/16

1/16

Префікс ний код

0

10

110

111

1

2

3

3

 

      У цьому випадку середня кількість бітів на одиницю повідомлення =(1×9/16+2×3/16+3×3/16)/2=27/32»

»0,84375 (біт/сим), тобто менше, ніж для неблокового коду.

Для блоків довжини три середня кількість бітів на одиницю повідомлення≈0,823, для блоків довжини чотири – ≈0,818 і т. д.

Метод блокування повідомлення

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

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

Блоковий код називається блоковим кодом k-го порядку, якщо всі його блоки мають довжину k символів.

Метод блокування повідомлень полягає в такому.

За заданим e>0 можемо знайти таке k, що якщо розбити повідомлення на блоки завдовжки k (всього буде n/k блоків), то, використовуючи оптимальне статистичне кодування таких блоків, що розглядаються як одиниці повідомлень, можна досягти середньої довжини коду більше ентропії менш ніж на e.

Приклад_2. Згрупувати по два і по три повідомлення в групі. Побудувати код Хаффмана. Виконати порівняльну характеристику щодо ефективності коду, швидкості передачі та похибки коду. Значення ймовірностей наступні: , .

 

Розв'язання

Код Хаффмана для двох повідомлень в групі:

Знайдемо ентропію для заданих повідомлень:

.

 

 

Код

0.64

 

 

0.64

 

 

0.64

1

 

1

1

1

 

 

 

 

0.16

 

 

0.20

1

 

0.36

0

 

 

00

2

 

 

 

 

0.16

1

 

0.16

0

 

 

 

 

 

011

3

 

 

 

0.04

0

 

 

 

 

 

 

 

 

010

3

 

 

 

Середня довжина кодового слова, яка припадає на одне повідомлення:

.

Швидкість передачі повідомлення:

 

.

 

Щоб знайти похибку коду, обчислимо ймовірність появи нулів і одиниць:

 

, .

 

Тоді ентропія коду рівна:

 

.

 

Похибка коду наступна:

 

.

Код Хаффмана для трьох повідомлень в групі:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код

0.512

 

 

0.512

 

 

0.512

 

 

0.512

 

 

0.512

 

 

0.512

 

 

0.512

1

 

1

1

1

 

 

 

 

 

 

0.128

 

 

0.128

 

 

0.128

 

 

0.128

 

 

0.232

 

 

0.256

1

 

0.488

0

 

 

110

3

 

 

 

 

 

 

 

 

 

0.128

 

 

0.128

 

 

0.128

 

 

0.128

 

 

0.128

1

 

0.232

0

 

 

 

 

 

111

3

 

 

 

0.128

 

 

0.128

 

 

0.128

 

 

0.128

1

 

0.128

0

 

 

 

 

 

 

 

 

101

3

 

 

 

0.032

 

 

0.040

 

 

0.064

1

 

0.104

0

 

 

 

 

 

 

 

 

 

 

 

10010

5

 

 

 

 

 

 

 

 

0.032

 

 

0.032

1

 

0.040

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10011

5

 

 

 

0.032

1

 

0.032

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10001

5

 

 

 

0.008

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10000

5

 

 

 

 

Середня довжина кодового слова, яка припадає на одне повідомлення:

.

Швидкість передачі повідомлення:

 

.

 

Щоб знайти похибку коду, обчислимо ймовірність появи нулів і одиниць:

 

, .

 

Тоді ентропія коду рівна:

 

.

 

Похибка коду наступна:

 

.

 

Результати кодування по два і по три повідомлення в групі методом Хаффмана наведені в наступній таблиці:

 

Обчислювані величини

Число повідомлень в групі

Граничні значення обчислюваних величин

2

3

0.780

0.728

925641

991758

0.359

0.374

0.641

0.626

, %

5.8

4.6