Interested Article - 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
666 10 = 0000`0010`1001`1010 2
Шаг 1. Знаковый бит s = 1: 0000`001 0`100 1`1010 2
Шаг 2. Собственно сжатие (соответствует s010`wxyz): 1010`0100 2
Шаг 3. Инвертирование: 1111`0001 2 = F1 16 = 241 10 .
Пример 2
—6666 10 = 1110`0101`1111`0110 2
Шаг 1. Число обращаем, знаковый бит s = 0: 0001` 1010 `0000`1001 2
Шаг 2. Собственно сжатие (соответствует s101`wxyz): 0101`1010 2
Шаг 3. Инвертирование: 0000`1111 2 =15 10

См. также

Источник —

Same as A-закон