- 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).
Примеры
В примерах ниже индекс «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.
См. также
Для улучшения этой статьи желательно?: - Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Проставив сноски, внести более точные указания на источники.
Категория:- Алгоритмы сжатия с потерями
Wikimedia Foundation. 2010.