A-закон

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

А-закон — алгоритм стиснення зі втратою інформації, застосовується для стиснення звукових даних.

Реалізації для 16-бітових знакових цілих

[ред. | ред. код]

Принцип кодування схожий на кодування чисел з рухомою комою. Кожен семпл кодується у 8-бітове поле. Старший біт — біт знака, наступні 3 біти — беззнакова експонента, останні 4 — мантиса. Таким чином з використовуваних 16 біт, тільки 12 біт містять значущу інформацію, а 4 біти з 16 іноді відкидаються.

Крок 1

Якщо число від'ємне, його обертають, при цьому приймається, що s = 0, інакше s = 1.

Крок 2

16-бітове число перетворюється на 8-бітове відповідно до такої таблиці (для наочності півбайти — нібли — розділено знаком зворотного апострофа (`); s — знаковий біт; зірочками показано біти, що губляться при стисканні):

Початкове число Стиснене
s000`0000`wxyz`**** s000`wxyz
s000`0001`wxyz`**** s001`wxyz
s000`001w`xyz*`**** s010`wxyz
s000`01wx`yz**`**** s011`wxyz
s000`1wxy`z***`**** s100`wxyz
s001`wxyz`****`**** s101`wxyz
s01w`xyz*`****`**** s110`wxyz
s1wx`yz**`****`**** s111`wxyz
Крок 3

Біти інвертуються через один, починаючи від правого (тобто з 8-бітовим числом виконується операція XOR 0x55).

Приклади

[ред. | ред. код]

У прикладах нижче підрядковий індекс позначає розрядність (десяткове чи двійкове); на 1 кроці підкреслено мантису (частину цифр, що переходить у wxyz на 2 кроці).

Приклад 1
66610 = 0000 `0010'1001'10102
Крок 1. Знаковий біт s = 1: 0000'0010'1001'10102
Крок 2. Власне стискання (відповідає s001'wxyz): 1010'01002
Крок 3. Інвертування: 1111'00012 = F116 = 24110 .
Приклад 2
—666610 = 1110'0101'1111'01102
Крок 1. Число обертаємо, знаковий біт s = 0: 0001`1010`0000'10012
Крок 2. Власне стискання (відповідає s011'wxyz): 0101'10102
Крок 3. Інвертування: 0000'11112 = 1510

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]