A-закон
Материал из Википедии — свободной энциклопедии
А-закон — алгоритм сжатия с потерей информации, применяется для сжатия звуковых данных.
Содержание |
[править] Описание реализации алгоритма для 16-битных знаковых целых
На самом деле из исходного числа используется не более 12 бит, 4 наименее значащих бита можно сразу отбросить.
[править] Шаг 1
Если число отрицательно, оно обращается, при этом принимается, что s = 0, иначе s = 1.
[править] Шаг 2
16-битное число преобразуется в 8-битное в соответствии с таблицей (для наглядности полубайты (нибблы) разделены знаком «`»):
| Исходное число | Сжатое |
|---|---|
| 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 |
Примечания:
- s—знаковый бит.
- Звёздочками «*» показаны биты, теряющиеся при сжатии.
[править] Шаг 3
Биты инвертируются через один, начиная с самого правого (то есть с 8-битным числом проделывается XOR 0x55).
[править] Примеры
В примерах ниже индекс «10» соответствует десятичному числу, индекс «2» — двоичному; в «Шаге 1» подчёркнута та часть цифр, которая переходит в «wxyz» на «Шаге 2» (мантисса).
Пример 1. 66610 = 0000`0010`1001`10102
Шаг 1. Знаковый бит s = 1: 1000`0010`1001`10102
Шаг 2. Собственно сжатие (соответствует s010`wxyz): 1010`01002
Шаг 3. Инвертирование: 1111`00012 = F116 = 24110.
Пример 2. —666610 = 1110`0101`1111`01102
Шаг 1. Число обращаем, знаковый бит s = 0: 0001`1010`0000`10102
Шаг 2. Собственно сжатие (соответствует s101`wxyz): 0101`10102
Шаг 3. Инвертирование: 0000`11112.

