ГОСТ Р 53556.11-2014
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Звуковое вещание цифровое
КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ
Часть III
(MPEG-4 AUDIO)
Аудиокодирование без потерь
Digital sound broadcasting. Coding of signals of sound broadcasting with reduction of redundancy for transfer on digital communication channels. Part III (MPEG-4 audio). Audio lossless coding
ОКС 33.170
Дата введения 2015-01-01
Предисловие
1 РАЗРАБОТАН Техническим комитетом по стандартизации ТК 480 "Связь"
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 480 "Связь"
3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 17 марта 2014 г. N 148-ст
4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта ИСО/МЭК 14496-3:2009* "Информационные технологии. Кодирование аудиовизуальных объектов. Часть 3. Аудио" (ISO/IEC 14496-3:2009 "Information technology - Coding of audio-visual objects - Part 3: Audio", NEQ) [1]
________________
* Доступ к международным и зарубежным документам, упомянутым в тексте, можно получить, обратившись в Службу поддержки пользователей. - .
5 ВВЕДЕН ВПЕРВЫЕ
6 ПЕРЕИЗДАНИЕ. Июль 2020 г.
Правила применения настоящего стандарта установлены в статье 26 Федерального закона от 29 июня 2015 г. N 162-ФЗ "О стандартизации в Российской Федерации". Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
1 Область применения
Этот стандарт описывает алгоритм кодирования аудиосигналов без потерь: аудиокодирование без потерь MPEG-4 (ALS).
MPEG-4 ALS являются схемой сжатия данных цифрового аудио без потерь, то есть декодируемые данные являются разрядно-идентичной реконструкцией исходных входных данных. Входные сигналы могут быть целочисленными данными РСМ от 8 до 32-разрядной длины слова или 32-разрядными данными IEEE с плавающей точкой. MPEG-4 ALS обеспечивает широкий диапазон гибкости с точки зрения компромисса сжатия - сложности, поскольку комбинация нескольких инструментов позволяет определить уровень компрессии с различными степенями сложности.
2 Технический обзор
2.1 Структура кодера и декодера
Входные аудиоданные делятся на фреймы (кадры). В пределах фрейма каждый канал может быть дополнительно разделен на блоки аудиосэмплов (выборок аудио) для дальнейшей обработки. Для каждого блока вычисляется ошибка прогноза, используя краткосрочный прогноз и дополнительно долгосрочный прогноз (LTP). Межканальная избыточность может быть удалена объединенным кодированием каналов, используя либо дифференциальное кодирование пар каналов, либо многоканальное кодирование (МСС). Остающаяся ошибка прогноза является в итоге кодированной энтропией.
Кодер генерирует информацию о потоке битов, позволяющую произвольный доступ с промежутками в несколько фреймов. Кодер может также обеспечить контрольную сумму CRC, которую может использовать декодер, чтобы проверить декодируемые данные. Декодер применяет инверсные операции кодера в обратном порядке. Его вывод является разрядно-идентичной версией исходных входных аудиоданных.
2.2 Расширения с плавающей точкой
В дополнение к целочисленным аудиосигналам MPEG-4 ALS также поддерживает сжатие аудиосигналов без потерь в 32-разрядном формате с плавающей точкой IEEE. Последовательность с плавающей точкой моделируется суммой целочисленной последовательности, умноженной на константу (ACF: Approximate Common Factor), и остаточной последовательностью. Целочисленная последовательность сжимается, используя основные инструменты ALS для целочисленных данных, в то время как остаточная последовательность отдельно сжимается замаскированным инструментом Lempel-Ziv.
3 Термины и определения
3.1 Определения
В стандарте используются следующие определения и сокращения.
Frame | Сегмент аудиосигнала (содержащий все каналы). |
Block | Сегмент одного звукового канала. |
Sub-block | Часть блока, которая использует те же параметры кодирования энтропии. |
Random Access Frame | Фрейм, который может декодироваться без декодирования предыдущих фреймов. |
Residual | Ошибка прогноза, то есть истинный минус предсказанного сигнала. |
Predictor/Prediction Filter | Линейный фильтр FIR, который вычисляет оценку входного сигнала, используя предыдущие выборки. |
Prediction order | Порядок фильтра прогноза (число коэффициентов прогнозирующего устройства). |
LPC coefficients | Коэффициенты фильтра прогноза прямой формы. |
Parcor coefficients | Представление parcor коэффициентов прогнозирующего устройства. |
Quantized coefficients | Квантованные коэффициенты parcor. |
LTP | Долгосрочный прогноз. |
Rice code | Также известно как код Golomb-Rice. В этом документе используется краткая форма. |
BGMC | Блоковый код Block Gilbert-Moore Code (также известен как код Elias-Shannon-Fano). |
CRC | Контроль циклически избыточным кодом. |
LPC | Кодирование с линейным предсказанием. |
PCM | Импульсно-кодовая модуляция. |
Mantissa | Дробная часть данных с плавающей точкой. |
Exponent | Экспоненциальная часть данных с плавающей точкой. |
ACFC | Кодирование с приближенным общим множителем. |
Masked-LZ | Замаскированное кодирование Lempel-Ziv. |
MCC | Многоканальное кодирование. |
MSB | Старший значащий бит. |
LSB | Младший значащий бит. |
3.2 Мнемоника
uimsbf | Целое число без знака, старший значащий бит сначала |
simsbf | Целое число со знаком, старший значащий бит сначала |
bslbf | Битовая строка, левый бит сначала, где "левый" является порядком, в котором пишутся биты |
ЕЕЕ32 | 32-разрядные данные с плавающей точкой IEEE (4 байта), старший значащий бит сначала |
Мнемонический код Райса и BGMC указывают, что используются кодовые комбинации переменной длины.
3.3 Типы данных
В разделах псевдокода используются следующие типы данных:
INT64 | 64-разрядное целое число со знаком (дополнение до двух) |
long | 32-разрядное целое число со знаком (дополнение до двух) |
short | 16-разрядное целое число со знаком (дополнение до двух) |
х. у | Дробное представление с фиксированной точкой со знаком, где х является числом битов слева от точки в двоичном числе, и у является числом битов справа от точки в двоичном числе (представление знака дополнения до двух). 64-разрядное целое число со знаком (дополнение до двух) |
Если перед типом данных добавляется "без знака", то типом является тип без знака вместо типа со знаком.
3.4 Замечания по реализации
В этом документе есть несколько логарифмических арифметических вычислений в форме 'ceil(log2(...))', которые определяют целочисленное значение, которое описывает число необходимых битов для определенного параметра.
Чтобы избежать непоследовательных результатов и реализовать ceil() и Iog2(), не должны использоваться никакие функции с плавающей точкой. Чтобы получить математически корректные целочисленные результаты, должны использоваться реализации с фиксированной точкой (например, применение сдвигов битов).
4 Синтаксис
4.1 Конфигурация декодера
Таблица 1 - Синтаксис ALSSpecificConfig
Окончание таблицы 1
4.2 Полезные нагрузки потока битов
Таблица 2 - Синтаксис высокоуровневой полезной нагрузки (frame_data)
Окончание таблицы 2
Таблица 3 - Синтаксис block_data
Продолжение таблицы 3
Окончание таблицы 3
Таблица 4 - Синтаксис channel_data
Таблица 5 - Синтаксис RLSLMS_extension_data
4.3 Полезные нагрузки для данных с плавающей точкой
Таблица 6 - Синтаксис diff_float_data
Окончание таблицы 6
Таблица 7 - Синтаксис diff_mantissa
Окончание таблицы 7
Таблица 8 - Синтаксис Masked_LZ_decompression
5 Семантика
5.1 Общая семантика
5.1.1 ALSSpecificConfig
ALSSpecificConfig содержит общие данные конфигурации. Дополнительно могут быть встроены заголовок и концевик исходного аудиофайла, чтобы восстановить эту информацию в дополнение к фактическим аудиоданным. Синтаксис ALSSpecificConfig определяется в таблице 1, ее элементы описываются в таблице 9.
Таблица 9 - Элементы ALSSpecificConfig
Поле | Количество битов | Описание/Значения |
als_id | 32 | Идентификатор ALS |
samp_freq | 32 | Частота дискретизации, Гц |
samples | 32 | Число выборок (на канал) |
channels | 16 | Число каналов - 1 (0 - моно, 1 - стерео, ...) |
file_type | 3 | 000 - неизвестно/неотработанный файл; |
resolution | 3 | 000 - 8-бит; |
floating | 1 | 1 - 32-битовый с плавающей точкой IEEE, 0 - целый |
msb_first | 1 | Исходный порядок байта входных аудиоданных: |
Frame_length | 16 | Длина фрейма - 1 (например, frame_length = 0x1FFF сигнализирует о длине N=8192) |
random_access | 8 | Расстояние между фреймами RA frames (во фреймах, 0...255). Если RA не используется, величина равна 0. Если каждый фрейм является фреймом RA, величина равна 1. |
ra_flag | 2 | Указывает, где хранится размер блоков случайного доступа (ra_unit_size) |
adapt_order | 1 | Адаптивный порядок: 1 - вкл, 0 - выкл |
coef_table | 2 | Табличный индекс (00, 01, или 10 параметров кода Rice для кодирования энтропии коэффициентов прогнозатора, 11 - кодирование энтропии отсутствует |
long_term_prediction | 1 | Долгосрочный прогноз (LTP): 1 - вкл, 0 - выкл |
long_term_prediction | 1 | Долгосрочный прогноз (LTP): 1 - вкл, 0 - выкл |
max_order | 10 | Максимальный порядок прогноза (0..1023) |
bgmc_mode | 1 | Режим BGMC: 1 - вкл, 0 - выкл (кодирование Rice только) |
joint_stereo | 1 | Joint Stereo: 1 - вкл, 0 - выкл, если каналы - 0 (моно), joint_stereo - 0 |
block_switching | 2 | Число уровней коммутации блока: |
mc_coding | 1 | Расширенное межканальное кодирование: 1 - вкл, 0 - выкл, если каналы - 0 (моно), mc_coding - 0 |
sb_part | 1 | Расчленение субблока для кодирования энтропии остатка, если bgmc_mode = 0: |
chan_config | 1 | Указывает, что поле chan_config_info присутствует |
chan_sort | 1 | Перестановка каналов: 1 - вкл, 0 - выкл, если каналы - 0 (моно), chan_sort - 0 |
crc_enabled | 1 | Указывает, что поле crc присутствует |
RLSLMS | 1 | Использование предсказателя RLS-LMS: 1 - вкл, 0 - выкл |
Зарезервировано | 5 | |
aux_data_enabled | 1 | Указывает, что вспомогательные данные присутствуют (поля aux_size и aux_data) |
chan_config_info | 16 | Отображение каналов на местоположение громкоговорителя. Каждый бит указывает, существует ли канал для определенного местоположения |
chan_pos[] | (channels+1)* ChBits | Если перестановка каналов включена (chan_sort - 1), имеет место исходное расположение каналов. Число битов на канал ChBits = ceil[log2(channels+1)] = 1..16, где channels+1 является числом каналов |
header_size | 32 | Размер заголовка исходного аудиофайла в байтах |
trailer_size | 32 | Размер концевика исходного аудиофайла в байтах |
orig_header[] | header_size*8 | Заголовок исходного аудиофайла |
orig_trailer[] | trailer_size*8 | Концевик исходного аудиофайла |
crc | 32 | 32-битовый контрольный код CCITT-32 CRC байтов исходных аудиоданных (полином: |
ra_unit_size[] | #frames*32 | Расстояние (в байтах) между фреймами произвольного доступа, то есть размеры блоков произвольного доступа, где количество фреймов #frames=((samples-1)/(frame_length+1)) +1. В ALSSpecificConfig() это поле появляется только когда ra_flag = 2. |
aux_size | 32 | Размер поля aux_data в байтах |
aux_data | aux_size*8 | Вспомогательные данные (для декодирования не требуется) |
5.1.2 frame_data
Это высокоуровневая полезная нагрузка ALS. Если random_access> 0, число полезных нагрузок, отображенных в одном устройстве доступа, равняется значению random_access (1 ... 255). В этом случае размер каждого блока доступа может быть сохранен в ra_unit_size. Если random_access = 0, все полезные нагрузки отображаются в тот же самый блок доступа.
Поле bs_info содержит информацию о переключении блока для канала или пары каналов. Синтаксис frame_data определяется в таблице 2, его элементы описываются в таблице 10.
Таблица 10 - Элементы frame_data
Поле | Количество битов | Описание/Значения |
ra_unit_size | 32 | Расстояние (в байтах) до следующего фрейма произвольного доступа, то есть размер блока случайного доступа. В frame_data() это поле появляется, только когда ra_flag = 1. |
bs_info | 8, 16, 32 | Информация о переключении блока. |
js_switch | 1 | Если js_switch = 1, выбирается Joint Stereo (разница каналов), даже если задействовано MCC (mc_coding) |
num_bytes_diff_float | 32 | Присутствует, только когда floating = 1: |
5.1.3 block_data
Блочные данные определяют тип блока (нормальный, постоянный, тишина) и в основном содержат индексы кода, порядок прогнозирующего устройства, коэффициенты прогнозирующего устройства и кодированные остаточные значения. Синтаксис block_data определяется в таблице 3, его элементы описываются в таблице 11.
Таблица 11 - Элементы block_data
Поле | Количество битов | Описание/Значения |
block_type | 1 | 1 - нормальный блок |
const_block | 1 | Только если block_type = 0: |
js_block | 1 | Блок содержит разностный сигнал объединенного стерео |
const_val | 8, 16, 24, 32 | Постоянная величина выборки этого блока |
ec_sub | 0..2 | Число субблоков для кодирования энтропии. |
s[], sx[] | Изменяется | До 8 индексов кода Rice (s) или BGMC (s,sx) для кодирования энтропии субблоков (число дается ec_sub). Разностные значения кодируются по Rice |
shift_lsbs | 1 | Указывает, что все исходные значения входных выборок блока были сдвинуты вправо перед дальнейшей обработкой, чтобы удалить пустые LSBs |
quant_cof[] | Изменяется | Кодированные по Rice квантованные коэффициенты |
LTPenable | 1 | Переключение LTP: 1 - вкл, 0 - выкл |
LTPgain[] | Изменяется | Кодированные по Rice величины усиления (5-tap) |
res[] | Изменяется | Кодированные по Rice остаточные величины |
shift_pos | 4 | Число позиций - 1, на которое были сдвинуты вправо значения выборок этого блока: |
opt_order | 1...10 | Порядок прогнозатора для этого блока (длиной NB): |
LTPlag | 8, 9, 10 | Величины задержки LTP |
smp_val[0] | Изменяется | Кодированная по Rice величина выборки в начале блока произвольного доступа |
msb[] | Изменяется | BGMC-кодированные старшие значащие биты остатков. Для остатков вне центральной области передается спектральное "tail_code" |
lsb[] | Изменяется | Прямо передаваемые младшие значащие биты остатков |
tail[] | Изменяется | Кодированные по Rice остаточные величины вне центральной области (концевики) |
5.1.4 channel_data
Синтаксис channel_data определяется в таблице 4, его элементы описываются в таблице 12.
Таблица 12 - Элементы channel_data
Поле | Количество битов | Описание/Значения |
stop_flag | 1 | 0 - Продолжение описания межканальных связей |
master_channel_index | 1..16 | Индекс мастер-канала. |
time_difference_flag | 1 | 0 - Трехотводный без задержки разновременности, |
weighting factor | Изменяется | Индексы коэффициента межканального взвешивания |
time_difference_sign | 1 | 0 - Положительный, 1 - отрицательный. "Положительный" означает, что эталонный канал задержан относительно канала кодирования |
time_difference_value | 5, 6, 7 | Канал кодирования. |
5.1.5 RLSLMS_extension_data
Синтаксис RLSLMS_extension_data определяется в таблице 5, его элементы описываются в таблице 13.
Таблица 13 - Элементы RLSLMS_extension_data
Поле | Количество битов | Описание/Значения |
mono_block | 1 | mono_frame - 0: CPE кодировано с joint-stereo RLS |
ext_mode | 1 | Параметры прогнозатора RLS-LMS обновляются в блоке расширения. |
extension_bits | 3 | Тип параметров RLS-LMS, переносимых в блоке расширения: |
RLS_order | 4 | Порядок прогнозатора RLS |
LMS_stage | 3 | Количество прогнозаторов LMS в каскаде |
LMS_order[] | 5*LMS_stage | Порядок прогнозатора LMS |
RLS_lambda | 10 | Лямбда-параметр прогнозатора RLS |
RLS_lambda_ra | 10 | Лямбда-параметр прогнозатора RLS для фрейма произвольного доступа |
LMS_mu[] | 5*LMS_stage | Параметр прогнозатора LMS - длина шага NLMS |
LMS_stepsize | 3 | Параметр линейного объединителя - длина шага Sign Sign LMS |
5.2 Семантика для данных с плавающей точкой
5.2.1 diff_float_data
Синтаксис diff_float_data определяется в таблице 6, его элементы описываются в таблице 14.
Таблица 14 - Элементы diff_float_data
Поле | Количество битов | Описание/Значения |
use_acf | 1 | 1 - acf_flag[c] присутствует |
acf_flag[c] | 1 | 1 - acf_mantissa[c] присутствует |
acf_mantissa[c] | 23 | Полные данные о мантиссе общего множителя |
highest_byte[c] | 2 | Старшие ненулевые байты мантиссы во фрейме |
partA_flag[c] | 1 | 1 - в PartA существуют выборки |
shift_amp[c] | 1 | 1 - shift_value[c] присутствует |
shift_value[c] | 8 | Величина сдвига: эта величина добавляется к экспоненте величин с плавающей точкой канала с после преобразования декодированного целого в величины с плавающей точкой и перед добавлением целого и данных разницы |
5.2.2 diff_mantissa
Синтаксис diff_mantissa определяется в таблице 7, его элементы описываются в таблице 15.
Таблица 15 - Элементы diff_mantissa
Поле | Количество битов | Описание/Значения |
int_zero[c][n] | Изменяется | int_zero для n-ой выборки и с-го канала устанавливается в округленное целое равное "0". Эта величина не является синтаксическим элементом, но может быть определена из ассоциированного целого значения, которое доступно как в кодере, так и в декодере |
mantissa[c][n] | nbits[c][n] | Полные данные о мантиссе |
compresed_flag[c] | 1 | 1 - Выборки упакованы |
nchars | Изменяется | Количество символов для декодирования |
float_data[c][n] | 32 | 32-битовая величина с плавающей точкой IEEE |
nbits[c][n] | Эта величина не является синтаксическим элементом. Она может быть определена из целой величины acf_mantissa[c] и highest_byte[c]. |
5.2.3 Masked_LZ_decompression
Синтаксис Masked_LZ_decompression определяется в таблице 8, его элементы описываются в таблице 16.
Таблица 16 - Элементы Masked_LZ_decompression
Поле | Количество битов | Описание/Значения |
string_code | code_bits | Кодекс индекса словаря |
code_bits | Изменяется | code_bits изменяется от 9 до 15 битов в зависимости от количества записей, хранящихся в словаре |
6 Инструменты ALS
В стандартах кодирования MPEG с наибольшими потерями подробно определяется только декодер. Однако схема кодирования без потерь обычно требует спецификации некоторых (но не всех) частей кодера. Так как процесс кодирования должен быть совершенно обратимым без потери информации, несколько частей кодера и декодера должны быть определены детерминированным способом.
6.1 Краткий обзор
6.1.1 Структура потока битов
Каждый фрейм (frame_data) состоит из В = 1 ... 32 блоков выборок (block_data) для каждого канала. Помимо общей информации о блоке (например, блок тишины, блок различия объединенного стерео (joint stereo) и т.д.) каждый блок обычно содержит индексы кода, порядок прогнозирующего устройства K, коэффициенты прогнозирующего устройства и остаточные значения, кодированные по Райсу или BGMC. Если используется объединенное кодирование между парами каналов, часть блока идентична для обоих каналов, и блоки сохраняются перемежающимся способом. Иначе, эта часть блока для каждого канала независима.
Если вводятся данные с плавающей точкой, дополнительные элементы потока битов для дифференциальных значений мантиссы вставляются после потока битов каждого целочисленного фрейма.
6.1.2 Декодирование ALSSpecificConfig
ALSSpecificConfig содержит информацию об исходных данных (например, "samp_freq", "channels", "resolution"), а также глобальные параметры, которые не изменяются от фрейма к фрейму (например, "frame_length", "max_order"). Наиболее важные параметры описываются далее.
Идентификатор ALS - это поле должно содержать значение 1095521024 = 0x414С5300 (шестнадцатеричное). Используя побайтовое чтение, первые три байта эквивалентны кодам ASCII для 'ALS'.
Частота дискретизации - частота дискретизации исходных аудиоданных сохраняется, например для прямого воспроизведения сжатого файла.
Выборки - общее количество аудиовыборок на канал.
Число каналов - 1 (моно), 2 (стерео), или более (многоканальный).
Разрешение - 8-битовое, 16-битовое, 24-битовое, или 32-битовое. Если разрешение исходных аудиоданных находится в промежутке (например, 20-битовое), для представления выборок используется более высокое разрешение.
Плавающая точка - указывает формат аудиоданных. Если этот флаг установлен, аудиоданные представлены в 32-битовом формате с плавающей точкой IEEE, иначе аудиоданные являются целочисленными.
Порядок байтов - указывает на порядок байтов исходного аудиофайла, либо старший значащий байт сначала (например, aiff), либо младший значащий байт сначала (например, wave).
Длина фрейма - число выборок в каждом фрейме (на канал).
Произвольный доступ - расстояние (во фреймах) между теми фреймами, которые могут декодироваться независимо от предыдущих фреймов (фреймы произвольного доступа). Перед каждым фреймом произвольного доступа есть поле "ra_unit_size", которое определяет это расстояние в байтах.
Адаптивный порядок - у каждого блока может быть индивидуальный порядок прогнозирующего устройства.
Таблица коэффициентов - таблица, содержащая параметры, которые используются для кодирования энтропии коэффициентов прогнозирующего устройства.
Максимальный порядок - максимальный порядок фильтра прогноза. Если "adapt_order" выключается, этот порядок используется для всех блоков.
Переключение блоков - вместо одного блока на канал может быть до 32 более коротких блоков. Если переключение блоков не используется, размер блока идентичен длине фрейма.
Режим BGMC - указывает, что для остатка прогноза используются коды BGMC. Если этот флаг устанавливается в 0, для остатка прогноза используются более простые коды Райса.
Раздел подблока - раздел подблока для кодирования энтропии остатка.
Объединенное стерео - в каждом блоке может быть закодирован разностный сигнал вместо сигнала левого или правого канала (или один из двух каналов пары каналов, соответственно).
Многоканальное кодирование - расширенное межканальное кодирование.
Вид канала - перегруппировка каналов, используемая для создания выделенных пар каналов.
Позиции канала - исходные позиции канала, используемые только если включается channel_sort.
Размер заголовка - размер заголовка исходного аудиофайла в байтах.
Размер концевика - размер оконечной неаудиоинформации в исходном аудиофайле в байтах.
Исходный заголовок - встроенный заголовок исходного аудиофайла.
Исходный концевик - встроенная оконечная часть исходного аудиофайла.
CRC - контрольная сумма циклической избыточности (CCITT-32) байтов исходных аудиоданных (то есть в их оригинальном порядке, включая чередование каналов).
6.1.3 Число фреймов
Число фреймов для декодирования зависит от фактической длины фрейма (N = frame_length + 1) и числа выборок. Это может быть определено следующим образом:
N = frame_length + 1.
frames = samples / N;
remainder = samples % N;
if (remainder)
{
frames++;
N_last = remainder;
}
else
N_last = N;
Если число выборок не является кратным длине фрейма N, длина последнего фрейма соответственно уменьшается (N_last = остаток).
Если значение выборок является (шестнадцатеричным) 0xFFFFFFFF, число выборок не определяется. Если полезная нагрузка ALS сохраняется, используя формат файла MPEG-4, число выборок может быть получено из метаданных файла.
Если число выборок недоступно, число фреймов не определено, и считается, что у всех фреймов одна и та же длина N. В этом случае размеры блоков произвольного доступа не должны сохраняться в ALSSpecifcConfig (то есть должны использоваться только ra_flag = 0 или ra_flag = 1), так как число блоков произвольного доступа тоже не определено.
6.1.4 Объединенное кодирование каналов
Чтобы использовать дублирование между каналами, кодер может применить простой подход, состоящий из пар каналов и одиночных каналов. Два канала пары каналов могут быть закодированы, используя кодирование различия, тогда как одиночные каналы кодируются независимо.
Об общем использовании объединенного кодирования сообщается флагом joint_sfereo в заголовке ALS. Если joint_stereo выключен, каждый канал является одиночным каналом и кодируется независимо от других каналов. Если joint_stereo включен, в каждом случае два соседних канала расцениваются как пара каналов. Если число каналов нечетно, то один канал остается одиночным.
Определение пар каналов не означает, что должно использоваться объединенное кодирование. Если joint_stereo будет установлен, то декодер будет считать комбинации двух каналов парами каналов, даже если кодер фактически никогда не использовал объединенное кодирование. В этом случае декодер просто не будет обнаруживать block_data с установленным флагом js_block.
Если выбирается МСС (Многоканальное кодирование), то декодируется информация об отношении между каналами (ведущий или ведомый). Декодируемые остаточные значения ведомого канала изменяются добавлением значений ведущего канала, умноженных на декодированные коэффициенты взвешивания. Другие процессы реконструкции для сигналов всех каналов, которые включают декодирование параметров, декодирование остатка прогноза, фильтрацию синтеза долгосрочного и краткосрочного прогноза, идентичны процессам для декодирования независимых каналов. Инструменты кодирования двух объединенных каналов, объединенное стерео и МСС, могут быть адаптивно выбраны на пофреймовой основе.
6.1.5 Конфигурация и перестановка каналов
Поле chan_config_info определяет отображение канал - динамик, указывая, существует ли канал для определенного местоположения. Существующие каналы должны быть расположены в предопределенном порядке (таблица 17). Если определенный канал присутствует, устанавливается соответствующий бит в поле chan_config_info.
Таблица 17 - Конфигурация канала
Положение динамика | Сокращение | Позиция бита в chan_config_info |
Слева | L | 1 |
Справа | R | 2 |
Слева сзади | Lr | 3 |
Справа сзади | Rr | 4 |
Левый боковой | Ls | 5 |
Правый боковой | Rs | 6 |
В центре | С | 7 |
Центральный сзади/Окружение | S | 8 |
Низкочастотные эффекты | LFE | 9 |
Левый Downmix | L0 | 10 |
Правый Downmix | R0 | 11 |
Моно Downmix | M | 12 |
(Зарезервировано) | 13-16 |
Решение о том, какие каналы группируются, может быть принято автоматически кодером или вручную пользователем. Если конфигурация каналов указывается в исходном файле, кодер может сделать подходящую перестановку. Если формат файла не имеет конфигурации каналов по умолчанию, но пользователь знает отображение канал - динамик в этом конкретном случае, он может сообщить кодеру, как сгруппировать каналы.
Декодер должен инвертировать возможную перестановку каналов (флаг chan_sort), присваивая каждому каналу его исходную позицию, которая хранится в chan_pos [].
6.1.6 Декодирование фреймов
Фрейм составляет высокоуровневую полезную нагрузку (frame_data), то есть основной блок аудиоданных (см. в таблице 2 о синтаксисе и таблице 10 о семантике). Если используется переключение блоков, каждый канал фрейма может быть подразделен на 32 блока. Иначе, блок состоит из всех выборок канала фрейма.
6.1.7 Декодирование блоков
Структура block_data () содержит информацию об одном блоке (то есть сегмент аудиоданных из одного канала). Она определяет, является ли блок "нормальным" блоком (то есть содержащим закодированные аудиовыборки), постоянным блоком (все аудиовыборки являются одними и теми же) или блоком тишины (все аудиовыборки являются нулем). Кроме того поле "joint_stereo" указывает, содержит ли блок разностный сигнал (правый канал минус левый). Либо левый, либо правый канал может быть заменен этим разностным сигналом. Структура, в случае блочного переключения, также содержит информацию когда длина блока может быть короче, чем длина фрейма.
Для "нормальных" блоков блочные данные включают:
- индексы кода;
- порядок прогнозирующего устройства K;
- квантованные и закодированные коэффициенты прогнозирующего устройства (или параметры прогнозирующего устройства RLS-LMS в случае режима RLSLMS);
- параметры LTP в случае режима LTP;
- кодированные остаточные значения по Райсу или BGMC.
Если блок дополнительно подразделяется на подблоки для кодирования энтропии (обозначенный как ec_sub), параметры кода s и sx передаются для каждого подблока.
В случае адаптивного порядка прогнозирующего устройства (adapt_order) указывается порядок для блока (opt_order). Имеется также флаг (shift_lsbs), определяющий есть ли у всех аудиовыборок в текущем блоке некоторые LSB, которые являются перманентно нулевыми. В этом случае число пустых LSB дается в другом поле (shift_pos). Это означает, что кодер сместил все значения выборок вправо на shift_pos+1 позиций до выполнения прогноза. Таким образом декодер должен сместить выходные значения выборок влево на shift_pos+1 позиций после того, как был применен инверсный фильтр прогноза. Если процесс прогноза использует выборки из предыдущего блока, смещенная версия этих выборок должна использоваться в качестве ввода как в фильтр прогноза, так и в инверсный фильтр прогноза (то есть как в кодере, так и в декодере), даже если LSB не являются нулем в предыдущем блоке. Это необходимо, чтобы выровнять амплитудный диапазон входных выборок прогнозирующего устройства с выборками, которые будут спрогнозированы.
6.1.8 Чередование
Наиболее несжатые форматы аудиофайла хранят два канала стереосигнала как последовательность чередующихся выборок (L1, R1, L2, R2, L3, R3, ... ). Для многоканальных данных с М каналами каждый шаг выборки включает М чередующихся выборок. Так как кодер создает блоки выборок для каждого канала, декодируемые выборки всех каналов вероятно придется снова чередовать прежде, чем записать их в выходной аудиофайл.
6.2 Переключение блоков
Если включено block_switching, каждый канал фрейма может быть иерархически подразделен на блоки вплоть до 32 блоков.
Произвольные комбинации блоков с
О фактическом разделении сообщается в дополнительном поле bs_info, длина которого зависит от числа уровней переключения блоков (таблица 18). Фрейм длиной N должен быть разделен на
Таблица 18 - Уровни переключения блоков
Максимальное количество уровней | Минимальное | Количество байтов для bs_info |
0 | N | 0 |
1 | N/2 | 1 |
2 | N/4 | 1 |
3 | N/8 | 1 |
4 | N/16 | 2 |
5 | N/32 | 4 |
Поле bs_info состоит из 4 байтов, где отображение битов относительно уровней от 1 до 5 имеет вид [(0) 1223333 44444444 55555555 55555555]. Первый бит используется только чтобы сигнализировать о независимом переключении блоков.
В каждом фрейме передаются поля bs_info для всех пар каналов и всех одиночных каналов, задействуя переключение независимого блока для различных каналов. В то время как длина фрейма идентична для всех каналов, переключение блока может быть выполнено индивидуально для каждого канала. Если используется различное кодирование, оба канала пары каналов должны быть переключены синхронно, но другие пары каналов все еще могут использовать различное переключение блоков.
Если два канала пары каналов не коррелированы друг с другом, то кодирование различия не будет окупаться, и не будет никакой необходимости переключать оба канала синхронно. Вместо этого имеет смысл переключать каналы независимо.
Как правило поле bs_info будет для каждой пары каналов и во фрейме одиночного канала, то есть два канала пары каналов переключаются синхронно. Если они переключаются независимо, первый бит bs_info устанавливается в 1, и информация применяется к первому каналу пары каналов. В этом случае становится необходимым другое поле bs_info для второго канала.
6.3 Прогноз
В этой главе описывается прямая адаптивная схема прогноза.
Кодер состоит из нескольких стандартных блоков. Буфер хранит один блок входных выборок, и соответствующий набор коэффициентов parcor вычисляется для каждого блока. Число коэффициентов, то есть порядок прогнозирующего устройства, может быть также адаптировано. Квантованные значения parcor являются кодированными для передачи энтропией и преобразованными в коэффициенты LPC для фильтра прогноза, который вычисляет остаток прогноза.
Декодер значительно менее сложен, чем кодер, так как никакая адаптация не должна выполняться. Переданные значения parcor декодируются, преобразовываются в коэффициенты LPC и используются инверсным фильтром прогноза для вычисления сигнала реконструкции без потерь. Вычислительная работа декодера зависит от порядка прогнозирующего устройства, выбранного кодером.
Если порядок прогноза K выбирается адаптивно (adapt_order = 1), число битов, используемых для сигнализации о фактическом порядке (opt_order = K) в каждом блоке, ограничивается в зависимости как от глобального максимального порядка (max_order), так и в зависимости от размера блока
Bits = min{ceil[log2(max_order + 1)], max[ceil(log2(
Максимальный порядок
Таблица19 - Примеры максимальных порядков прогноза в зависимости от длины блока и max_order
max_order = 1023 | max_order = 100 | |||
Количество битов для opt_order | Количество битов для opt_order | |||
8192 | 10 | 1023 | 7 | 100 |
4096 | 9 | 511 | 7 | 100 |
2048 | 8 | 255 | 7 | 100 |
1024 | 7 | 127 | 7 | 100 |
512 | 6 | 63 | 6 | 63 |
256 | 5 | 31 | 5 | 31 |
128 | 4 | 15 | 4 | 15 |
64 | 3 | 7 | 3 | 7 |
32 | 2 | 3 | 2 | 3 |
16 | 1 | 1 | 1 | 1 |
Базовый (краткосрочный) прогноз может быть объединен с долгосрочным прогнозом (LTP).
6.3.1 Коэффициенты прогнозирующего устройства
Передача коэффициентов фильтра прогноза выполняется путем использования коэффициентов parcor
6.3.1.1 Квантование и кодирование коэффициентов parcor
Первые два коэффициента parcor (
Остающиеся коэффициенты квантуются, используя простые 7-битовые универсальные квантователи:
Во всех случаях получающиеся квантованные значения
Передача квантованных коэффициентов
Таблица 20 - Параметры кода Райса, используемые для кодирования коэффициентов parcor
Номер коэффициента | coef_table = 00 | coef_table = 01 | coef_table = 10 | |||
Смещение | Параметр Райса | Смещение | Параметр Райса | Смещение | Параметр Райса | |
1 | -52 | 4 | -58 | 3 | -59 | 3 |
2 | -29 | 5 | -42 | 4 | -45 | 5 |
3 | -31 | 4 | -46 | 4 | -50 | 4 |
4 | 19 | 4 | 37 | 5 | 38 | 4 |
5 | -16 | 4 | -36 | 4 | -39 | 4 |
6 | 12 | 3 | 29 | 4 | 32 | 4 |
7 | -7 | 3 | -29 | 4 | -30 | 4 |
8 | 9 | 3 | 25 | 4 | 25 | 3 |
9 | -5 | 3 | -23 | 4 | -23 | 3 |
10 | 6 | 3 | 20 | 4 | 20 | 3 |
11 | -4 | 3 | -17 | 4 | -20 | 3 |
12 | 3 | 3 | 16 | 4 | 16 | 3 |
13 | -3 | 2 | -12 | 4 | -13 | 3 |
14 | 3 | 2 | 12 | 3 | 10 | 3 |
15 | -2 | 2 | -10 | 4 | -7 | 3 |
16 | 3 | 2 | 7 | 3 | 3 | 3 |
17 | -1 | 2 | -4 | 4 | 0 | 3 |
18 | 2 | 2 | 3 | 3 | -1 | 3 |
19 | -1 | 2 | -1 | 3 | 2 | 3 |
20 | 2 | 2 | 1 | 3 | -1 | 2 |
0 | 2 | 0 | 2 | 0 | 2 | |
2 | 1 | 2 | 1 | 2 | 1 | 2 |
0 | 1 | 0 | 1 | 0 | 1 |
6.3.1.2 Реконструкция коэффициентов parcor
Кодированные по Райсу остаточные значения
Затем производится реконструкция первых двух коэффициентов, используя:
где 2
Таблица 21 - Индексы
i | Г(i) | i | Г(i) | i | Г(i) | i | Г(i) |
- 64 | - 1048544 | - 50 | - 1021664 | - 36 | - 944608 | -22 | - 817376 |
- 63 | - 1048288 | - 49 | - 1017824 | - 35 | - 937184 | - 21 | - 806368 |
- 62 | - 1047776 | - 48 | - 1013728 | - 34 | - 929504 | - 20 | - 795104 |
- 61 | - 1047008 | - 47 | - 1009376 | - 33 | - 921568 | - 19 | - 783584 |
- 60 | - 1045984 | - 46 | - 1004768 | - 32 | - 913376 | - 18 | - 771808 |
- 59 | - 1044704 | - 45 | - 999904 | - 31 | - 904928 | - 17 | - 759776 |
- 58 | - 1043168 | -44 | - 994784 | - 30 | - 896224 | - 16 | - 747488 |
- 57 | - 1041376 | - 43 | - 989408 | - 29 | - 887264 | - 15 | - 734944 |
- 56 | - 1039328 | - 42 | - 983776 | - 28 | - 878048 | - 14 | - 722144 |
- 55 | - 1037024 | - 41 | - 977888 | - 27 | - 868576 | - 13 | - 709088 |
- 54 | - 1034464 | - 40 | - 971744 | - 26 | - 858848 | - 12 | - 695776 |
- 53 | - 1031648 | - 39 | - 965344 | - 25 | - 848864 | - 11 | - 682208 |
- 52 | - 1028576 | - 38 | - 958688 | - 24 | - 838624 | - 10 | - 668384 |
- 51 | - 1025248 | - 37 | - 951776 | - 23 | - 828128 | - 9 | - 654304 |
Окончание таблицы 21
i | Г(i) | i | Г(i) | i | Г(i) | i | Г(i) |
- 8 | - 639968 | 10 | - 338144 | 28 | 46624 | 46 | 514336 |
- 7 | - 625376 | 11 | - 318944 | 29 | 70432 | 47 | 542752 |
- 6 | - 610528 | 12 | - 299488 | 30 | 94496 | 48 | 571424 |
- 5 | - 595424 | 13 | - 279776 | 31 | 118816 | 49 | 600352 |
- 4 | - 580064 | 14 | - 259808 | 32 | 143392 | 50 | 629536 |
- 3 | - 564448 | 15 | - 239584 | 33 | 168224 | 51 | 658976 |
- 2 | - 548576 | 16 | - 219104 | 34 | 193312 | 52 | 688672 |
- 1 | - 532448 | 17 | - 198368 | 35 | 218656 | 53 | 718624 |
0 | - 516064 | 18 | - 177376 | 36 | 244256 | 54 | 748832 |
1 | - 499424 | 19 | - 156128 | 37 | 270112 | 55 | 779296 |
2 | - 482528 | 20 | - 134624 | 38 | 296224 | 56 | 810016 |
3 | - 465376 | 21 | - 112864 | 39 | 322592 | 57 | 840992 |
4 | - 447968 | 22 | - 90848 | 40 | 349216 | 58 | 872224 |
5 | - 430304 | 23 | - 68576 | 41 | 376096 | 59 | 903712 |
6 | - 412384 | 24 | - 46048 | 42 | 403232 | 60 | 935456 |
7 | - 394208 | 25 | - 23264 | 43 | 430624 | 61 | 967456 |
8 | - 375776 | 26 | - 224 | 44 | 458272 | 62 | 999712 |
9 | - 357088 | 27 | 23072 | 45 | 486176 | 63 | 1032224 |
Реконструкция коэффициентов 3-го и более высоких порядков производится, используя формулу
6.3.1.3 Преобразование восстановленных коэффициентов parcor в коэффициенты прямого фильтра
Масштабированные коэффициенты parcor затем преобразовываются в коэффициенты LPC, используя следующий алгоритм:
Здесь LONG_MAX = 2
6.3.2 Фильтр прогноза
Вычисление спрогнозированного сигнала должно быть выполнено детерминированным способом, чтобы включить идентичное вычисление и в кодере, и в декодере, поэтому невозможно использовать коэффициенты с плавающей запятой. Вместо этого используют целочисленное представление с увеличением масштаба. Так как коэффициенты увеличиваются с множителем 2
6.3.2.1 Кодер
Следующий алгоритм описывает вычисление остатка d для входного сигнала х, длины блока N, порядка прогнозирующего устройства K и коэффициентов LPC cof.
Чтобы предсказать первую выборку текущего блока, прогнозирующее устройство использует последние K выборок из предыдущего блока.
Если текущий блок (или подблок) является первым блоком канала во фрейме с произвольным доступом, никакие выборки из предыдущего блока не могут использоваться. В этом случае используется прогноз с прогрессивным порядком, где масштабированные коэффициенты parcor прогрессивно конвертируются в коэффициенты LPC cof в фильтре прогноза. В каждой рекурсии вычисляются величина текущего остатка d(n) и новый набор n+1 коэффициентов LPC (первый цикл). После того, как вычисляются первые значения остатка K и все K коэффициенты, используется прогноз полного порядка (второй цикл). Индексы для par и cof в этой реализации начинаются с 1.
Только первая выборка х(0) передается непосредственно, используя код Райса с s = resolution - 4 (то есть s = 12 для 16-битового и s = 20 для 24-битового). Следующие две величины остатка d(1) и d(2) кодируются кодами Райса, которые связываются с первым параметром Райса блока s[0]. В зависимости от кодера энтропии остающиеся величины остатка от d(3) до d(K) являются или кодированными по Райсу с s[0], или BGMC-кодированными с s[0] и sx[0]. Сводка всех кодов дается в таблице 22.
Таблица 22 - Параметры кода для различных позиций выборки
Выборка/Остаток | Параметр кода |
х(0) | Разрешающая способность - 4 |
d(1) | s[0] + 3 |
d(2) | s[0] + 1 |
d(3) ... d(K) | s[0] (BGMC: sx[0]) |
6.3.2.2 Декодер
Алгоритм для вычисления исходного сигнала в декодере почти идентичен с алгоритмом кодера, за исключением последней инструкции:
В случае произвольного доступа используется прогноз с прогрессивным порядком. Алгоритм для вычисления также почти идентичен с алгоритмом кодера за исключением двух строк, где вычисляется х. Индексы для par и cof начинаются с 1.
Если кодером использовалось кодирование объединенных каналов, декодируемый сигнал х может быть разностным сигналом. В этом случае должна быть произведена дальнейшая обработка, чтобы получить исходный сигнал.
6.4 Долгосрочный прогноз (LTP)
6.4.1 Усиление и задержка LTP
Если LTPenable включено, декодируются величины усиления p(i) и значение задержки
Таблица 23 - Значения реконструкции и код Райса для усиления
Величины усиления | Индекс | Префикс | Субкод |
0 | 0 | 0 | 00 |
8 | 1 | 0 | 01 |
16 | 2 | 0 | 10 |
24 | 3 | 0 | 11 |
32 | 4 | 10 | 00 |
40 | 5 | 10 | 01 |
48 | 6 | 10 | 10 |
56 | 7 | 10 | 11 |
64 | 8 | 110 | 00 |
70 | 9 | 110 | 01 |
76 | 10 | 110 | 10 |
82 | 11 | 110 | 11 |
88 | 12 | 1110 | 00 |
92 | 13 | 1110 | 01 |
96 | 14 | 1110 | 10 |
100 | 15 | 1110 | 11 |
Таблица 24 - Значения реконструкции и код Райса для усиления
Величины усиления | Индекс | Префикс | Субкод |
0 | 0 | 0 | 00 |
-8 | 1 | 0 | 01 |
8 | 2 | 0 | 10 |
-16 | 3 | 0 | 11 |
16 | 4 | 10 | 00 |
-24 | 5 | 10 | 01 |
24 | 6 | 10 | 10 |
-32 | 7 | 10 | 11 |
32 | 8 | 110 | 00 |
-40 | 9 | 110 | 01 |
40 | 10 | 110 | 10 |
-48 | 11 | 110 | 11 |
48 | 12 | 1110 | 00 |
-56 | 13 | 1110 | 01 |
56 | 14 | 1110 | 10 |
-64 | 15 | 1110 | 11 |
64 | 16 | 11110 | 00 |
Таблица 25 - Значения реконструкции и код Райса для усиления
Величины усиления | Индекс | Префикс | Субкод |
0 | 0 | 0 | 0 |
-8 | 1 | 0 | 1 |
8 | 2 | 10 | 0 |
-16 | 3 | 10 | 1 |
16 | 4 | 110 | 0 |
-24 | 5 | 110 | 1 |
24 | 6 | 1110 | 0 |
-32 | 7 | 1110 | 1 |
32 | 8 | 11110 | 0 |
-40 | 9 | 11110 | 1 |
40 | 10 | 111110 | 0 |
-48 | 11 | 111110 | 1 |
48 | 12 | 1111110 | 0 |
-56 | 13 | 1111110 | 1 |
56 | 14 | 11111110 | 0 |
-64 | 15 | 11111110 | 1 |
64 | 16 | 111111110 | 0 |
Переданное значение относительной задержки является фактическим значением исключая стартовое значение задержки. Оно непосредственно кодируется естественным двоичным кодированием от 8 до 10 битов в зависимости от частот дискретизации. Фактические значения задержки показаны в таблице 26, где "optP" обозначает фактический порядок на краткосрочный прогноз.
Таблица 26 - Поисковый диапазон задержки
Поисковый диапазон | Начало | Конец |
Freq < 96 кГц | max(optP,3)+1 | max(optP,3)+25 |
Freq >= 96 кГц | max(optP,3)+1 | max(optP,3)+51 |
Freq >= 192 кГц | max(optP,3)+1 | max(optP,3)+102 |
6.4.2 Процедура синтеза LTP
Если декодируются параметры задержки и усиления, выполняется операция следующей рекурсивной фильтрации
Для того, чтобы обеспечить совершенную реконструкцию, процесс должен быть строго определен. Псевдокод для этого фильтра в декодере следующий:
Здесь d является остаточным сигналом (который позже подается в фильтр синтеза). LTPgain является величиной усиления р(i)*128. Задержка имеет величину
Для простой комбинации с адаптивным переключением блока все значения остаточного сигнала и d(i) в предыдущем блоке равны "0". Процесс фильтрации синтеза имеет псевдокод для процесса фильтрации анализа в кодере. Этот процесс также должен быть нормативным с целью совершенной реконструкции. В этом псевдокоде различие между кодером и декодером появляется в последней строке. Ввод и вывод в декодере являются общими, в то время как в кодере они отличаются.
Здесь d является остатком краткосрочного прогноза и dout является остатком LTP.
6.5 Прогнозирующее устройство RLS-LMS
Обратно-адаптивный прогноз использует адаптивное прогнозирующее устройство RLS-LMS.
В кодере прогнозирующее устройство RLS-LMS генерирует оценку текущей входной аудиовыборки при использовании прошлых выборок. Эта оценка вычитается из текущей выборки, чтобы сгенерировать остаток, который затем кодируется кодером энтропии, чтобы сформировать поток битов ALS.
В декодере выполняется обратный процесс. Декодер энтропии декодирует поток битов ALS в остаток, который затем добавляется к оценке прогнозирующего устройства RLS-LMS, чтобы регенерировать исходную аудиовыборку.
Прогнозирующее устройство RLS-LMS состоит из каскада прогнозирующих устройств DPCM, RLS прогнозирующего устройства и серии прогнозирующих устройств LMS. Входные выборки последовательно проходят через цепочку прогнозирующих устройств. Остатки из одного прогнозирующего устройства служат вводом в следующее прогнозирующее устройство. Оценки из прогнозирующих устройств в цепочке взвешиваются и складываются линейным объединителем, чтобы сгенерировать заключительную оценку текущей входной выборки.
Прогнозирующее устройство RLS-LMS может быть включено/выключено установкой RLSLMS в ALSSpecificConfig () в 1/0, соответственно.
6.5.1 Прогнозирующее устройство DPCM
Ввод: исходная аудиовыборка х(n).
Остаток:
Оценка:
Прогнозирующее устройство DPCM является первым прогнозирующим устройством в цепочке прогнозирующих устройств RLS-LMS. Это простое прогнозирующее устройство первого порядка с набором коэффициентов, то есть предыдущая входная выборка используется в качестве оценки текущей входной выборки. Это иллюстрируется следующим образом:
где
6.5.2 Прогнозирующее устройство RLS
Ввод: остаток прогнозирующего устройства DPCM
Остаток:
Оценка:
Прогнозирующее устройство RLS является вторым прогнозирующим устройством в цепочке прогнозирующих устройств RLS-LMS. Алгоритм RLS используется, чтобы адаптировать весовых коэффициентов прогнозирующего устройства. Алгоритм инициализируется, устанавливая матрицы инверсной автокорреляции М
где
Вектор веса прогнозирующего устройства RLS, определенный как
инициализируется как
Для каждого индекса
где
и
где
6.5.2.1 Прогнозирующее устройство RLS объединенного стерео
Для элемента пары каналов (СРЕ), если joint_stereo в ALSSpecificConfig () устанавливается в 1, прогнозирующее устройство RLS будет работать в режиме объединенного-стерео. В режиме объединенного-стерео прогнозирующее устройство RLS использует как внутриканальный прогноз, так и межканальный прогноз.
Входными сигналами прогнозирующего устройства являются остаток прогнозирующего устройства DPCM канала L,
где
Прогнозирующее устройство RLS объединенного-стерео канала L обновляется алгоритмом RLS, данным в 6.5.2, где вектор веса, входной вектор и остаток в алгоритме RLS пересматриваются следующим образом:
Входные сигналы в прогнозирующее устройство для правого звукового канала являются остатком прогнозирующего устройства DPCM канала L,
где
Прогнозирующее устройство RLS объединенного-стерео канала R обновляется алгоритмом RLS, данным в 6.5.2, где вектор веса, входной вектор и остаток в алгоритме RLS переопределяются следующим образом:
Декодер обрабатывает CPE в порядке LRLRLR.....Текущая выборка канала L всегда декодируется перед текущей выборкой канала R.
6.5.2.2 Прогнозирующее устройство RLS моно
Для элемента одиночного канала (SCE) прогнозирующее устройство RLS работает в режиме моно. В режиме моно прогнозирующее устройство RLS обновляется алгоритмом RLS.
Для СРЕ, если joint_stereo в ALSSpecificConfig () устанавливается в 0, используется моно RLS для каждого отдельного канала в СРЕ. Для СРЕ, если mono_blok в RLSLMS_extension () устанавливается в 1, СРЕ будет кодировано как два отдельных канала L и L-R. Канал L обрабатывается как SCE, тогда как канал различия L-R проходит непосредственно в кодер энтропии. Для SCE, если входной фрейм содержит только постоянные величины, прогнозирующее устройство RLS-LMS применяется для этого фрейма. Для СРЕ, если входной фрейм обоих каналов содержит только постоянные величины, прогнозирующее устройство RLS-LMS применяется для этого фрейма.
6.5.2.3 Операция фильтрации в прогнозирующем устройстве RLS
Следующий псевдокод иллюстрирует, как прогнозирующее устройство RLS порядка М генерирует оценочный сигнал.
6.5.2.4 Адаптация веса в прогнозирующем устройстве RLS
Следующий псевдокод иллюстрирует, как обновляется вектор веса прогнозирующего устройства RLS порядка М.
Продолжение
Продолжение
Окончание
Прогнозирующее устройство RLS может быть выключено установкой RLS_order в нуль. В этом случае оценка прогнозирующего устройства RLS
6.5.3 Прогнозирующие устройства LMS
Ввод:
Остаток:
Оценка:
Прогнозирующее устройство RLS-LMS содержит ряд прогнозирующих устройств LMS. Чтобы адаптировать веса прогнозирующего устройства, используется алгоритм нормализованного LMS (NLMS). Для прогнозирующего устройства LMS М-порядка его вектора веса
инициализируется как
Для каждого индекса времени
где
Вектор веса прогнозирующего устройства LMS обновляется согласно
где
6.5.3.1 Операция фильтрации в прогнозирующем устройстве LMS
Следующий псевдокод иллюстрирует, как прогнозирующее устройство LMS М-порядка генерирует оценочный сигнал. Порядок прогнозирующего устройства LMS определяется в 6.5.6.3.
Окончание
6.5.3.2 Адаптация веса в прогнозирующем устройстве LMS
Следующий псевдокод иллюстрирует, как обновляется вектор веса прогнозирующего устройства LMS порядка М.
6.5.4 Линейный объединитель
Ввод:
Вывод:
Линейный объединитель умножает оценки из прогнозирующих устройств DPCM, RLS и LMS на ряд весов. Результаты суммируются, чтобы обеспечить заключительную оценку прогнозирующего устройства RLS-LMS. Знак алгоритм Sign-Sign LMS используется, чтобы обновить веса линейного объединителя. Если в каскаде прогнозирующего устройства RLS-LMS есть всего
Входной вектор линейного объединителя дается так:
Заключительная оценка прогнозирующего устройства RLS-LMS дается следующим образом
Вектор веса линейного объединителя обновляется алгоритмом Sign-Sign LMS
где
Следующий псевдокод иллюстрирует, как линейный объединитель K-порядка генерирует заключительную оценку прогнозирующего устройства RLS-LMS. Порядок линейного объединителя дается из LMS_stage+2. Код также показывает, как обновляется вектор веса линейного объединителя. Первые два веса линейного объединителя не обновляются.
6.5.5 Инициализация прогнозирующего устройства RLS-LMS
Прогнозирующее устройство RLS-LMS инициализируется в следующие моменты: запуск кодирования, запуск декодирования, старт каждого фрейма произвольного доступа (РА), и всякий раз, когда изменяется порядок фильтра. Прогнозирующее устройство RLS-LMS инициализируется заполнением нулями следующих буферов: предыдущая входная выборка прогнозирующего устройства DPCM, входной вектор и вектор веса прогнозирующего устройства RLS, все входные векторы и векторы веса прогнозирующего устройства LMS и входной вектор линейного объединителя. Матрица Р прогнозирующего устройства RLS инициализируется, вызывая функцию reinit_P(P). Вектор веса линейного объединителя устанавливается в константу FRACTION, которая представляет 1,0 в формате 8.24.
В таблице 27 перечисляются константы и макросы, используемые прогнозирующим устройством RLS-LMS.
Таблица 27 - Константы и макросы
Константы и макросы | Значение | Комментарии |
JS_INIT_P | 115292150460684 | 0,0001 в формате 4.60 |
FRACTION | (1L"24) | 1,0 в формате 8.24 |
ROUND1(x) | ((INT32) ((x+8)>>4)) | Функция округления |
ROUND2(x) | ((INT64) ((INT64) х + (INT64) 1)>>1) | Функция округления |
6.5.6 Параметры прогнозирующего устройства RLS-LMS
Параметры прогнозирующего устройства RLS-LMS могут быть изменены каждый фрейм. Об этом сообщается в RLSLMS_extension(), когда ext_mode = 1.
6.5.6.1 RLS_order
Параметр RLS_order определяет порядок прогнозирующего устройства RLS. Допустимые значения и соответствующие 4-битовые индексы перечисляются в таблице 28.
Таблица 28 - RLS_order
Индекс | RLS_order | Индекс | RLS_order |
0 | 0 | 8 | 16 |
1 | 2 | 9 | 18 |
2 | 4 | 10 | 20 |
3 | 6 | 11 | 22 |
4 | 8 | 12 | 24 |
5 | 10 | 13 | 26 |
6 | 12 | 14 | 28 |
7 | 14 | 15 | 30 |
6.5.6.2 LMS_stage
Параметр LMS_stage определяет число прогнозирующих устройств LMS в цепочке прогнозирующих устройств RLS-LMS. Допустимые значения и соответствующие 3-битовые индексы перечисляются в таблице 29.
Таблица 29 - LMS_stage
Индекс | LMS_stage |
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
6.5.6.3 LMS_order
Параметр LMS_order определяет порядок прогнозирующего устройства LMS. Допустимые значения и соответствующие 5-битовые индексы перечисляются в таблице 30.
Таблица 30 - LMS_order
Индекс | LMS_order | Индекс | LMS_order |
0 | 2 | 16 | 32 |
1 | 3 | 17 | 36 |
2 | 4 | 18 | 48 |
3 | 5 | 19 | 64 |
4 | 6 | 20 | 80 |
5 | 7 | 21 | 96 |
6 | 8 | 22 | 128 |
7 | 9 | 23 | 256 |
8 | 10 | 24 | 384 |
9 | 12 | 25 | 448 |
10 | 14 | 26 | 512 |
11 | 16 | 27 | 640 |
12 | 18 | 28 | 768 |
13 | 20 | 29 | 896 |
14 | 24 | 30 | 1024 |
15 | 28 | 31 | Зарезервировано |
6.5.6.4 LMS_mu
Параметр LMS_mu определяет длину шага (stepsize) алгоритма NLMS, который используется, чтобы обновить прогнозирующее устройство LMS. Допустимые значения и соответствующие 5-битовые индексы перечисляются в таблице 31.
Таблица 31 - LMS_mu
Индекс | LMS_mu | Индекс | LMS_mu |
0 | 1 | 16 | 18 |
1 | 2 | 17 | 20 |
2 | 3 | 18 | 22 |
3 | 4 | 19 | 24 |
4 | 5 | 20 | 26 |
5 | 6 | 21 | 28 |
6 | 7 | 22 | 30 |
7 | 8 | 23 | 35 |
8 | 9 | 24 | 40 |
9 | 10 | 25 | 45 |
10 | 11 | 26 | 50 |
11 | 12 | 27 | 55 |
12 | 13 | 28 | 60 |
13 | 14 | 29 | 70 |
14 | 15 | 30 | 80 |
15 | 16 | 31 | 100 |
6.5.6.5 LMS_stepsize
Параметр LMS_stepsize определяет длину шага (stepsize) алгоритма Sign-Sign LMS, который используется, чтобы обновить линейный объединитель. Допустимые значения (формат 7.24) и соответствующие 3-битовые индексы перечисляются в таблице 32.
Таблица 32 - LMS_stepsize
Индекс | LMS_stepsize | Комментарии |
0 | 1677 | 0,0001 (формат .24) |
1 | 3355 | 0,0002 |
2 | 8388 | 0,0005 |
3 | 16777 | 0,001 |
4 | 33554 | 0,002 |
5 | 83886 | 0,005 |
6 | 167772 | 0,01 |
7 | 335544 | 0,02 |
6.5.6.6 RLS_lambda и RLS_lambda_ra
RLS_lambda и RLS_lambda_ra являются параметрами, которые управляют фактором игнорирования прогнозирующего устройства RLS. RLS_lambda_ra используется только для фрейма РА, тогда как RLS_lambda используется и для обоих фреймов РА и non-РА. RLS_lambda и RLS_lambda_ra принимают целочисленные значения в диапазоне [1, 1023]. Фактор игнорирования RLS
и
6.5.7 Произвольный доступ
Прогнозирующее устройство RLS-LMS переинициализируется в начале каждого фрейма произвольного доступа. Во фрейме РА прогнозирующее устройство RLS-LMS использует RLS_lambda_ra, чтобы определить фактор игнорирования RLS для первых 300 выборок. Для остальной части выборок во фрейме используется RLS_lambda. Во фрейме РА прогнозирующие устройства LMS в цепочке прогнозирующих устройств RLS-LMS начинают обновлять свои состояния только после первых N/32 выборок во фрейме, где N является длиной фрейма.
6.6 Кодированный остаток
Есть два возможных режима для передачи остатка прогноза: быстрая схема кодирования, использующая простые коды Райса и более сложная и эффективная схема, которая использует блок кодов Гильберта-Мура (BGMC).
6.6.1 Коды Райса (Rice Codes)
Когда флаг bgmc_mode в ALSSpecificConfig устанавливается в 0, остаточные значения являются кодированной энтропией, использующей коды Райса. Выбранный синтаксис для генерации кодовой комбинации определяется в следующем.
Код Райса определяется параметром
Для
Подкод для
Для
Таблицы 33 и 34 показывают примеры для кода Райса с
Таблица 33 - Код Райса с
Значения | Префикс | Кодовая комбинация | |
-8...+7 | 1 | 0 | 0хххх |
-16...-9; +8... + 15 | 2 | 1 | 10хххх |
-24...-17; +16...+23 | 3 | 110 | 110хххх |
-32...-25; +24...+31 | 4 | 1110 | 1110хххх |
-40...-33; +32...+39 | 5 | 11110 | 11110хххх |
Таблица 34 - Подкоды кода Райса с
Значения ( | Значения ( | Значения ( | Подкод (хххх) |
-8 | -16 | -24 | 0111 |
-7 | -15 | -23 | 0110 |
-6 | -14 | -22 | 0101 |
-5 | -13 | -21 | 0100 |
-4 | -12 | -20 | 0011 |
-3 | -11 | -19 | 0010 |
-2 | -10 | -18 | 0001 |
-1 | -9 | -17 | 0000 |
0 | 8 | 16 | 1000 |
1 | 9 | 17 | 1001 |
2 | 10 | 18 | 1010 |
3 | 11 | 19 | 1011 |
4 | 12 | 20 | 1100 |
5 | 13 | 21 | 1101 |
6 | 14 | 22 | 1110 |
7 | 15 | 23 | 1111 |
Таблица 35 - "Специальный" код Райса с
Значения | r | Префикс | Кодовая комбинация |
0 | 1 | 0 | 0 |
-1 | 2 | 10 | 10 |
+1 | 3 | 110 | 110 |
-2 | 4 | 1110 | 1110 |
+2 | 5 | 11110 | 11110 |
Для каждого блока остаточных значений все значения могут быть закодированы, используя тот же самый код Райса или, если установлен флаг sb_part в заголовке файла, блок может быть разделен на четыре подблока, каждый из которых кодируется различными кодами Райса. В последнем случае флаг ec_sub в заголовке блока указывает, используется один или четыре блока.
В то время как параметр s[i=0] первого подблока непосредственно передается 4 битами (разрешение
Таблица 36 - Кодирование параметров кода Райса s [i]
Параметр кода (i = индекс подблока) | Различие | Параметр кода Райса, используемый для различий |
s[i] (i>0) | s[i]-s[i-1] | 0 |
6.6.2 Режим кодирования BGMC
Когда флаг bgmc_mode в заголовке файла устанавливается в 1, остаточные значения разделяются на MSB, LSB и хвостовые компоненты, которые затем кодируются, используя блок Гильберта-Мура, фиксированную длину и коды Райса соответственно.
Кроме того используется различная схема разделения на подблоки. Если флаг sb_part в заголовке файла устанавливается, каждый блок может быть разделен на 1, 2, 4, или 8 подблоков, где фактическое число обозначается 2-битовым полем ec_sub в заголовке блока. Если sb_part не устанавливается, каждый блок может быть разделен только на 1 или 4 подблока, и фактическое число указывается 1-битовым полем ec_sub.
6.6.2.1 Дополнительные параметры
В дополнение к параметру кода s (используется для создания кодов Райса), кодер/декодер BGMC опирается на следующие величины:
Число самых младших значащих битов (LSBs) к остатков, которые будут переданы непосредственно:
где s является параметром Райса и В является параметром, зависящим от размера подблока N:
где 0
Индекс таблицы частот sx используется для того, чтобы кодировать/декодировать MSBs.
Параметр sx передается в дополнение к s для каждого подблока, где 'полный' параметр BGMC может быть представлен как S = 16·s + sx. Подобно режиму кодирования Райса первый параметр передается непосредственно, в то время как для последующих параметров передаются только закодированные различия (таблица 37).
Таблица 37 - Кодирование BGMC кодирует параметры S[i] = 16·s[i] + sx[i]
Параметр кода (i = индекс подблока) | Различие | Параметр кода Райса, используемый для различий |
S[i] (i>0) | S[i]-S[i-1] | 2 |
6.6.2.2 Разделение остаточных значений на MSB, LSB и хвостовые части
Процесс получения отсеченных и с удаленным знаком значений MSB, LSB или хвостовых частей, соответствующих остаточным выборкам (res [i]), может быть описан следующим образом:
Максимальные абсолютные значения MSB и коды хвостовых частей, используемых в этом алгоритме (массивы max_msb [ ] и tail_code [ ] соответственно), определяются в таблицах 38 и 39.
Таблица 38 - Максимальные/минимальные значения остаточных MSB
0 | 1 | 2 | 3 | 4 | 5 | |
0 | ±64 | ±32 | ±16 | ±8 | ±4 | ±2 |
1 | ±64 | ±32 | ±16 | ±8 | ±4 | ±2 |
2 | ±64 | ±32 | ±16 | ±8 | ±4 | ±2 |
3 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
4 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
5 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
6 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
7 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
8 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
9 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
10 | ±96 | ±48 | ±24 | ±12 | ±6 | ±3 |
11 | ±128 | ±64 | ±32 | ±16 | ±8 | ±4 |
12 | ±128 | ±64 | ±32 | ±16 | ±8 | ±4 |
13 | ±128 | ±64 | ±32 | ±16 | ±8 | ±4 |
14 | ±128 | ±64 | ±32 | ±16 | ±8 | ±4 |
15 | ±128 | ±64 | ±32 | ±16 | ±8 | ±4 |
Таблица 39 - Коды хвостовой части
0 | 1 | 2 | 3 | 4 | 5 | |
0 | 74 | 44 | 25 | 13 | 7 | 3 |
1 | 68 | 42 | 24 | 13 | 7 | 3 |
2 | 58 | 39 | 23 | 13 | 7 | 3 |
3 | 126 | 70 | 37 | 19 | 10 | 5 |
4 | 132 | 70 | 37 | 20 | 10 | 5 |
5 | 124 | 70 | 38 | 20 | 10 | 5 |
6 | 120 | 69 | 37 | 20 | 11 | 5 |
7 | 116 | 67 | 37 | 20 | 11 | 5 |
8 | 108 | 66 | 36 | 20 | 10 | 5 |
9 | 102 | 62 | 36 | 20 | 10 | 5 |
10 | 88 | 58 | 34 | 19 | 10 | 5 |
11 | 162 | 89 | 49 | 25 | 13 | 7 |
12 | 156 | 87 | 49 | 26 | 14 | 7 |
13 | 150 | 86 | 47 | 26 | 14 | 7 |
14 | 142 | 84 | 47 | 26 | 14 | 7 |
15 | 131 | 79 | 46 | 26 | 14 | 7 |
Инверсный процесс (декодирование), восстанавливающий исходные остаточные выборки (res [i]) на основе их MSB, LSB или хвостовых частей, может быть описан следующим образом:
6.6.2.3 Кодирование и декодирование MSB
Отсеченные MSB остаточных выборок блочно кодируются, используя коды Гильберта-Мура, созданные для распределения (кумулятивная таблица частот), индексированного параметром sx.
Процесс кодирования состоит из инициализации состояния (арифметического) кодера блока Гильберта-Мура, последовательного кодирования всех значений MSB во всех подблоках, и сбрасывания состояния кодера.
Спецификации на языке С соответствующих функций кодера даются ниже.
Спецификации соответствующих функций декодера блока Гильберта-Мура на языке С даются ниже.
Совокупные таблицы частот (массивы s_freq [ ]), используемые вышеприведенными алгоритмами для кодирования/декодирования остаточных MSB, перечисляются ниже. Соответствующая (в пределах каждого подблока) таблица выбирается, используя параметр sx.
Таблица 40 - Совокупные таблицы частот, используемые кодером/декодером BGMC
Номер | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
0 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 | 16384 |
1 | 16066 | 16080 | 16092 | 16104 | 16116 | 16128 | 16139 | 16149 | 16159 | 16169 | 16177 | 16187 | 16195 | 16203 | 16210 | 16218 |
2 | 15748 | 15776 | 15801 | 15825 | 15849 | 15872 | 15894 | 15915 | 15934 | 15954 | 15970 | 15990 | 16006 | 16022 | 16036 | 16052 |
3 | 15431 | 15473 | 15510 | 15546 | 15582 | 15617 | 15649 | 15681 | 15709 | 15739 | 15764 | 15793 | 15817 | 15842 | 15863 | 15886 |
4 | 15114 | 15170 | 15219 | 15268 | 15316 | 15362 | 15405 | 15447 | 15485 | 15524 | 15558 | 15597 | 15629 | 15662 | 15690 | 15720 |
5 | 14799 | 14868 | 14930 | 14991 | 15050 | 15107 | 15162 | 15214 | 15261 | 15310 | 15353 | 15401 | 15441 | 15482 | 15517 | 15554 |
6 | 14485 | 14567 | 14641 | 14714 | 14785 | 14853 | 14919 | 14981 | 15038 | 15096 | 15148 | 15205 | 15253 | 15302 | 15344 | 15389 |
7 | 14173 | 14268 | 14355 | 14439 | 14521 | 14600 | 14677 | 14749 | 14816 | 14883 | 14944 | 15009 | 15065 | 15122 | 15172 | 15224 |
8 | 13861 | 13970 | 14069 | 14164 | 14257 | 14347 | 14435 | 14517 | 14594 | 14670 | 14740 | 14813 | 14878 | 14942 | 15000 | 15059 |
9 | 13552 | 13674 | 13785 | 13891 | 13995 | 14096 | 14195 | 14286 | 14373 | 14458 | 14537 | 14618 | 14692 | 14763 | 14828 | 14895 |
10 | 13243 | 13378 | 13501 | 13620 | 13734 | 13846 | 13955 | 14055 | 14152 | 14246 | 14334 | 14423 | 14506 | 14584 | 14656 | 14731 |
11 | 12939 | 13086 | 13219 | 13350 | 13476 | 13597 | 13717 | 13827 | 13933 | 14035 | 14132 | 14230 | 14321 | 14406 | 14485 | 14567 |
12 | 12635 | 12794 | 12938 | 13081 | 13218 | 13350 | 13479 | 13599 | 13714 | 13824 | 13930 | 14037 | 14136 | 14228 | 14314 | 14403 |
13 | 12336 | 12505 | 12661 | 12815 | 12963 | 13105 | 13243 | 13373 | 13497 | 13614 | 13729 | 13845 | 13952 | 14051 | 14145 | 14240 |
14 | 12038 | 12218 | 12384 | 12549 | 12708 | 12860 | 13008 | 13147 | 13280 | 13405 | 13529 | 13653 | 13768 | 13874 | 13976 | 14077 |
15 | 11745 | 11936 | 12112 | 12287 | 12457 | 12618 | 12775 | 12923 | 13065 | 13198 | 13330 | 13463 | 13585 | 13698 | 13808 | 13915 |
16 | 11452 | 11654 | 11841 | 12025 | 12206 | 12376 | 12542 | 12699 | 12850 | 12991 | 13131 | 13273 | 13402 | 13522 | 13640 | 13753 |
17 | 11161 | 11373 | 11571 | 11765 | 11956 | 12135 | 12310 | 12476 | 12636 | 12785 | 12933 | 13083 | 13219 | 13347 | 13472 | 13591 |
18 | 10870 | 11092 | 11301 | 11505 | 11706 | 11894 | 12079 | 12253 | 12422 | 12579 | 12735 | 12894 | 13037 | 13172 | 13304 | 13429 |
19 | 10586 | 10818 | 11037 | 11250 | 11460 | 11657 | 11851 | 12034 | 12211 | 12376 | 12539 | 12706 | 12857 | 12998 | 13137 | 13269 |
20 | 10303 | 10544 | 10773 | 10996 | 11215 | 11421 | 11623 | 11815 | 12000 | 12173 | 12343 | 12518 | 12677 | 12824 | 12970 | 13109 |
21 | 10027 | 10276 | 10514 | 10746 | 10975 | 11189 | 11399 | 11599 | 11791 | 11972 | 12150 | 12332 | 12499 | 12652 | 12804 | 12950 |
22 | 9751 | 10008 | 10256 | 10497 | 10735 | 10957 | 11176 | 11383 | 11583 | 11772 | 11957 | 12146 | 12321 | 12480 | 12639 | 12791 |
23 | 9483 | 9749 | 10005 | 10254 | 10500 | 10730 | 10956 | 11171 | 11378 | 11574 | 11766 | 11962 | 12144 | 12310 | 12475 | 12633 |
24 | 9215 | 9490 | 9754 | 10011 | 10265 | 10503 | 10737 | 10959 | 11173 | 11377 | 11576 | 11778 | 11967 | 12140 | 12312 | 12476 |
25 | 8953 | 9236 | 9508 | 9772 | 10034 | 10279 | 10521 | 10750 | 10971 | 11182 | 11388 | 11597 | 11792 | 11971 | 12149 | 12320 |
26 | 8692 | 8982 | 9263 | 9534 | 9803 | 10056 | 10305 | 10541 | 10769 | 10987 | 11200 | 11416 | 11617 | 11803 | 11987 | 12164 |
27 | 8440 | 8737 | 9025 | 9303 | 9579 | 9838 | 10094 | 10337 | 10571 | 10795 | 11015 | 11237 | 11444 | 11637 | 11827 | 12009 |
28 | 8189 | 8492 | 8787 | 9072 | 9355 | 9620 | 9883 | 10133 | 10373 | 10603 | 10830 | 11059 | 11271 | 11471 | 11667 | 11854 |
29 | 7946 | 8256 | 8557 | 8848 | 9136 | 9407 | 9677 | 9933 | 10179 | 10414 | 10647 | 10882 | 11100 | 11307 | 11508 | 11701 |
30 | 7704 | 8020 | 8327 | 8624 | 8917 | 9195 | 9471 | 9733 | 9985 | 10226 | 10465 | 10706 | 10930 | 11143 | 11349 | 11548 |
31 | 7472 | 7792 | 8103 | 8406 | 8703 | 8987 | 9268 | 9536 | 9793 | 10040 | 10285 | 10532 | 10762 | 10980 | 11192 | 11396 |
32 | 7240 | 7564 | 7879 | 8188 | 8489 | 8779 | 9065 | 9339 | 9601 | 9854 | 10105 | 10358 | 10594 | 10817 | 11035 | 11244 |
33 | 7008 | 7336 | 7655 | 7970 | 8275 | 8571 | 8862 | 9142 | 9409 | 9668 | 9925 | 10184 | 10426 | 10654 | 10878 | 11092 |
34 | 6776 | 7108 | 7431 | 7752 | 8061 | 8363 | 8659 | 8945 | 9217 | 9482 | 9745 | 10010 | 10258 | 10491 | 10721 | 10940 |
35 | 6554 | 6888 | 7215 | 7539 | 7853 | 8159 | 8459 | 8751 | 9029 | 9299 | 9568 | 9838 | 10091 | 10330 | 10565 | 10790 |
36 | 6333 | 6669 | 7000 | 7327 | 7645 | 7955 | 8260 | 8557 | 8842 | 9116 | 9391 | 9666 | 9925 | 10169 | 10410 | 10640 |
37 | 6122 | 6459 | 6792 | 7123 | 7444 | 7758 | 8067 | 8369 | 8658 | 8937 | 9218 | 9497 | 9761 | 10011 | 10257 | 10492 |
38 | 5912 | 6249 | 6585 | 6919 | 7244 | 7561 | 7874 | 8181 | 8475 | 8759 | 9045 | 9328 | 9598 | 9853 | 10104 | 10344 |
39 | 5711 | 6050 | 6387 | 6724 | 7051 | 7371 | 7688 | 7998 | 8297 | 8585 | 8876 | 9163 | 9438 | 9697 | 9953 | 10198 |
40 | 5512 | 5852 | 6190 | 6529 | 6858 | 7182 | 7502 | 7816 | 8120 | 8411 | 8707 | 8999 | 9278 | 9542 | 9802 | 10052 |
41 | 5320 | 5660 | 5998 | 6339 | 6671 | 6997 | 7321 | 7638 | 7946 | 8241 | 8541 | 8837 | 9120 | 9389 | 9654 | 9908 |
42 | 5128 | 5468 | 5807 | 6150 | 6484 | 6812 | 7140 | 7460 | 7773 | 8071 | 8375 | 8675 | 8963 | 9236 | 9506 | 9764 |
43 | 4947 | 5286 | 5625 | 5970 | 6305 | 6635 | 6965 | 7288 | 7604 | 7906 | 8213 | 8517 | 8809 | 9086 | 9359 | 9622 |
44 | 4766 | 5104 | 5445 | 5790 | 6127 | 6459 | 6790 | 7116 | 7435 | 7741 | 8051 | 8359 | 8655 | 8936 | 9213 | 9481 |
45 | 4595 | 4931 | 5272 | 5618 | 5956 | 6289 | 6621 | 6950 | 7271 | 7580 | 7894 | 8205 | 8504 | 8789 | 9070 | 9342 |
46 | 4425 | 4760 | 5100 | 5446 | 5785 | 6120 | 6452 | 6785 | 7108 | 7419 | 7737 | 8051 | 8354 | 8642 | 8927 | 9203 |
47 | 4264 | 4598 | 4937 | 5282 | 5622 | 5957 | 6290 | 6625 | 6950 | 7263 | 7583 | 7901 | 8207 | 8498 | 8787 | 9066 |
48 | 4104 | 4436 | 4774 | 5119 | 5459 | 5795 | 6128 | 6465 | 6792 | 7107 | 7429 | 7751 | 8060 | 8355 | 8647 | 8929 |
49 | 3946 | 4275 | 4613 | 4957 | 5298 | 5634 | 5968 | 6306 | 6634 | 6952 | 7277 | 7602 | 7914 | 8212 | 8508 | 8793 |
50 | 3788 | 4115 | 4452 | 4795 | 5137 | 5473 | 5808 | 6147 | 6477 | 6797 | 7125 | 7453 | 7769 | 8070 | 8369 | 8657 |
51 | 3640 | 3965 | 4301 | 4642 | 4983 | 5319 | 5655 | 5995 | 6326 | 6647 | 6977 | 7308 | 7627 | 7931 | 8233 | 8524 |
52 | 3493 | 3816 | 4150 | 4490 | 4830 | 5165 | 5503 | 5843 | 6175 | 6497 | 6830 | 7163 | 7485 | 7792 | 8097 | 8391 |
53 | 3355 | 3674 | 4007 | 4345 | 4684 | 5018 | 5356 | 5697 | 6029 | 6353 | 6687 | 7022 | 7347 | 7656 | 7964 | 8261 |
54 | 3218 | 3534 | 3865 | 4201 | 4539 | 4871 | 5209 | 5551 | 5883 | 6209 | 6544 | 6882 | 7209 | 7520 | 7831 | 8131 |
55 | 3090 | 3403 | 3731 | 4065 | 4401 | 4732 | 5069 | 5411 | 5742 | 6070 | 6406 | 6745 | 7074 | 7388 | 7700 | 8003 |
56 | 2963 | 3272 | 3597 | 3929 | 4263 | 4593 | 4929 | 5271 | 5602 | 5931 | 6268 | 6609 | 6939 | 7256 | 7570 | 7875 |
57 | 2842 | 3147 | 3469 | 3798 | 4131 | 4458 | 4794 | 5135 | 5466 | 5796 | 6133 | 6476 | 6807 | 7126 | 7442 | 7749 |
58 | 2721 | 3023 | 3341 | 3669 | 3999 | 4324 | 4660 | 5000 | 5330 | 5661 | 5998 | 6343 | 6676 | 6996 | 7315 | 7624 |
59 | 2609 | 2907 | 3218 | 3547 | 3874 | 4197 | 4532 | 4871 | 5199 | 5531 | 5868 | 6214 | 6548 | 6870 | 7190 | 7502 |
60 | 2498 | 2792 | 3099 | 3425 | 3750 | 4071 | 4404 | 4742 | 5068 | 5401 | 5738 | 6085 | 6420 | 6744 | 7065 | 7380 |
61 | 2395 | 2684 | 2981 | 3310 | 3632 | 3951 | 4282 | 4618 | 4943 | 5275 | 5612 | 5960 | 6296 | 6621 | 6943 | 7260 |
62 | 2292 | 2577 | 2869 | 3196 | 3515 | 3831 | 4160 | 4495 | 4818 | 5150 | 5487 | 5835 | 6172 | 6498 | 6821 | 7140 |
63 | 2196 | 2476 | 2758 | 3086 | 3401 | 3714 | 4041 | 4374 | 4696 | 5027 | 5364 | 5712 | 6050 | 6377 | 6701 | 7022 |
64 | 2100 | 2375 | 2652 | 2976 | 3287 | 3597 | 3922 | 4253 | 4574 | 4904 | 5241 | 5589 | 5928 | 6256 | 6581 | 6904 |
65 | 2004 | 2274 | 2546 | 2866 | 3173 | 3480 | 3803 | 4132 | 4452 | 4781 | 5118 | 5466 | 5806 | 6135 | 6461 | 6786 |
66 | 1908 | 2173 | 2440 | 2756 | 3059 | 3363 | 3684 | 4011 | 4330 | 4658 | 4995 | 5343 | 5684 | 6014 | 6341 | 6668 |
67 | 1820 | 2079 | 2334 | 2650 | 2949 | 3250 | 3568 | 3893 | 4211 | 4538 | 4875 | 5223 | 5564 | 5895 | 6223 | 6551 |
68 | 1732 | 1986 | 2234 | 2545 | 2840 | 3138 | 3452 | 3775 | 4093 | 4419 | 4755 | 5103 | 5444 | 5776 | 6105 | 6435 |
69 | 1651 | 1897 | 2134 | 2447 | 2737 | 3032 | 3343 | 3663 | 3979 | 4304 | 4640 | 4987 | 5328 | 5660 | 5990 | 6322 |
70 | 1570 | 1810 | 2041 | 2350 | 2635 | 2927 | 3234 | 3552 | 3866 | 4190 | 4525 | 4872 | 5212 | 5545 | 5876 | 6209 |
71 | 1497 | 1724 | 1949 | 2260 | 2539 | 2828 | 3131 | 3446 | 3759 | 4081 | 4414 | 4761 | 5100 | 5433 | 5764 | 6099 |
72 | 1424 | 1645 | 1864 | 2170 | 2444 | 2729 | 3029 | 3340 | 3652 | 3972 | 4304 | 4650 | 4988 | 5321 | 5653 | 5989 |
73 | 1355 | 1567 | 1779 | 2085 | 2354 | 2635 | 2931 | 3239 | 3549 | 3867 | 4198 | 4542 | 4879 | 5212 | 5545 | 5881 |
74 | 1287 | 1493 | 1699 | 2000 | 2264 | 2541 | 2833 | 3138 | 3446 | 3762 | 4092 | 4435 | 4771 | 5104 | 5437 | 5773 |
75 | 1223 | 1419 | 1620 | 1921 | 2181 | 2453 | 2741 | 3043 | 3348 | 3662 | 3990 | 4332 | 4667 | 4999 | 5331 | 5668 |
76 | 1161 | 1351 | 1547 | 1843 | 2098 | 2366 | 2649 | 2948 | 3250 | 3562 | 3888 | 4229 | 4563 | 4895 | 5226 | 5563 |
77 | 1100 | 1284 | 1474 | 1770 | 2020 | 2284 | 2563 | 2858 | 3157 | 3467 | 3790 | 4130 | 4462 | 4793 | 5124 | 5461 |
78 | 1044 | 1222 | 1407 | 1698 | 1943 | 2202 | 2477 | 2768 | 3065 | 3372 | 3693 | 4031 | 4362 | 4692 | 5022 | 5359 |
79 | 988 | 1161 | 1340 | 1632 | 1872 | 2126 | 2396 | 2684 | 2977 | 3281 | 3600 | 3936 | 4265 | 4594 | 4924 | 5260 |
80 | 938 | 1105 | 1278 | 1566 | 1801 | 2050 | 2316 | 2600 | 2889 | 3191 | 3507 | 3841 | 4169 | 4496 | 4826 | 5161 |
81 | 888 | 1050 | 1217 | 1501 | 1731 | 1975 | 2236 | 2516 | 2802 | 3101 | 3415 | 3747 | 4073 | 4400 | 4729 | 5063 |
82 | 839 | 995 | 1157 | 1436 | 1661 | 1900 | 2157 | 2433 | 2716 | 3012 | 3323 | 3653 | 3978 | 4304 | 4632 | 4965 |
83 | 790 | 941 | 1097 | 1376 | 1596 | 1830 | 2083 | 2355 | 2634 | 2928 | 3235 | 3563 | 3886 | 4211 | 4538 | 4871 |
84 | 746 | 891 | 1043 | 1316 | 1532 | 1761 | 2009 | 2278 | 2553 | 2844 | 3147 | 3473 | 3795 | 4118 | 4444 | 4777 |
85 | 702 | 842 | 989 | 1261 | 1472 | 1697 | 1940 | 2205 | 2476 | 2764 | 3064 | 3387 | 3707 | 4028 | 4353 | 4686 |
86 | 662 | 797 | 940 | 1207 | 1412 | 1633 | 1871 | 2133 | 2399 | 2684 | 2981 | 3302 | 3619 | 3939 | 4262 | 4595 |
87 | 623 | 753 | 891 | 1157 | 1357 | 1574 | 1807 | 2065 | 2326 | 2608 | 2902 | 3220 | 3535 | 3853 | 4174 | 4506 |
88 | 588 | 713 | 846 | 1108 | 1303 | 1515 | 1743 | 1997 | 2254 | 2533 | 2823 | 3138 | 3451 | 3767 | 4087 | 4417 |
89 | 553 | 673 | 801 | 1061 | 1251 | 1459 | 1683 | 1932 | 2185 | 2460 | 2746 | 3059 | 3369 | 3684 | 4002 | 4331 |
90 | 520 | 636 | 759 | 1015 | 1200 | 1403 | 1623 | 1867 | 2117 | 2387 | 2670 | 2980 | 3288 | 3601 | 3917 | 4245 |
91 | 488 | 599 | 718 | 973 | 1153 | 1351 | 1567 | 1807 | 2052 | 2318 | 2594 | 2905 | 3210 | 3521 | 3835 | 4162 |
92 | 459 | 566 | 680 | 931 | 1106 | 1300 | 1511 | 1747 | 1987 | 2250 | 2522 | 2830 | 3133 | 3441 | 3753 | 4079 |
93 | 431 | 533 | 643 | 893 | 1063 | 1252 | 1459 | 1690 | 1926 | 2185 | 2450 | 2759 | 3059 | 3364 | 3674 | 3999 |
94 | 405 | 503 | 609 | 855 | 1020 | 1205 | 1407 | 1634 | 1866 | 2121 | 2382 | 2688 | 2985 | 3287 | 3595 | 3919 |
95 | 380 | 473 | 575 | 819 | 979 | 1160 | 1357 | 1580 | 1808 | 2059 | 2314 | 2619 | 2913 | 3212 | 3518 | 3841 |
96 | 357 | 446 | 543 | 783 | 938 | 1115 | 1307 | 1526 | 1750 | 1997 | 2248 | 2550 | 2841 | 3137 | 3441 | 3763 |
97 | 334 | 419 | 511 | 747 | 897 | 1070 | 1257 | 1472 | 1692 | 1935 | 2182 | 2481 | 2769 | 3062 | 3364 | 3685 |
98 | 311 | 392 | 479 | 711 | 856 | 1025 | 1207 | 1418 | 1634 | 1873 | 2116 | 2412 | 2697 | 2987 | 3287 | 3607 |
99 | 288 | 365 | 447 | 677 | 818 | 982 | 1159 | 1366 | 1578 | 1813 | 2050 | 2345 | 2627 | 2915 | 3212 | 3530 |
100 | 268 | 340 | 418 | 644 | 780 | 939 | 1111 | 1314 | 1522 | 1754 | 1987 | 2278 | 2557 | 2843 | 3138 | 3454 |
101 | 248 | 316 | 389 | 614 | 746 | 899 | 1067 | 1266 | 1470 | 1698 | 1924 | 2215 | 2490 | 2773 | 3066 | 3380 |
102 | 230 | 294 | 363 | 584 | 712 | 860 | 1023 | 1218 | 1418 | 1642 | 1864 | 2152 | 2424 | 2704 | 2995 | 3307 |
103 | 213 | 272 | 337 | 557 | 681 | 824 | 983 | 1174 | 1369 | 1588 | 1804 | 2092 | 2360 | 2638 | 2926 | 3236 |
104 | 197 | 253 | 314 | 530 | 650 | 789 | 943 | 1130 | 1321 | 1535 | 1748 | 2032 | 2297 | 2572 | 2858 | 3166 |
105 | 182 | 234 | 291 | 505 | 621 | 756 | 905 | 1088 | 1275 | 1483 | 1692 | 1974 | 2237 | 2508 | 2792 | 3097 |
106 | 168 | 216 | 270 | 480 | 592 | 723 | 868 | 1047 | 1229 | 1433 | 1638 | 1917 | 2177 | 2445 | 2726 | 3029 |
107 | 154 | 199 | 249 | 458 | 566 | 693 | 834 | 1009 | 1187 | 1384 | 1585 | 1863 | 2119 | 2384 | 2662 | 2963 |
108 | 142 | 184 | 230 | 436 | 540 | 663 | 800 | 971 | 1145 | 1338 | 1534 | 1809 | 2062 | 2324 | 2599 | 2897 |
109 | 130 | 169 | 212 | 416 | 517 | 636 | 769 | 936 | 1105 | 1292 | 1484 | 1758 | 2007 | 2266 | 2538 | 2834 |
110 | 119 | 155 | 195 | 396 | 494 | 609 | 738 | 901 | 1066 | 1249 | 1437 | 1707 | 1953 | 2208 | 2478 | 2771 |
111 | 108 | 142 | 179 | 378 | 473 | 584 | 709 | 868 | 1027 | 1206 | 1390 | 1659 | 1901 | 2153 | 2420 | 2710 |
112 | 99 | 130 | 164 | 360 | 452 | 559 | 681 | 836 | 991 | 1165 | 1346 | 1611 | 1849 | 2098 | 2362 | 2650 |
113 | 90 | 118 | 149 | 343 | 431 | 535 | 653 | 804 | 955 | 1125 | 1302 | 1564 | 1798 | 2044 | 2305 | 2591 |
114 | 81 | 106 | 135 | 326 | 410 | 511 | 625 | 772 | 919 | 1085 | 1258 | 1517 | 1748 | 1990 | 2249 | 2532 |
115 | 72 | 95 | 121 | 310 | 391 | 489 | 600 | 743 | 883 | 1045 | 1215 | 1473 | 1700 | 1939 | 2195 | 2475 |
116 | 64 | 85 | 108 | 295 | 373 | 467 | 575 | 714 | 850 | 1008 | 1174 | 1429 | 1652 | 1888 | 2141 | 2418 |
117 | 56 | 75 | 96 | 281 | 356 | 447 | 552 | 685 | 817 | 971 | 1133 | 1387 | 1607 | 1839 | 2089 | 2363 |
118 | 49 | 66 | 85 | 267 | 340 | 427 | 529 | 658 | 786 | 937 | 1095 | 1346 | 1562 | 1791 | 2037 | 2309 |
119 | 42 | 57 | 74 | 255 | 325 | 409 | 508 | 631 | 756 | 903 | 1057 | 1307 | 1519 | 1745 | 1988 | 2257 |
120 | 36 | 49 | 64 | 243 | 310 | 391 | 487 | 606 | 728 | 871 | 1021 | 1268 | 1476 | 1699 | 1939 | 2205 |
121 | 30 | 41 | 54 | 232 | 296 | 374 | 466 | 582 | 700 | 840 | 986 | 1230 | 1435 | 1655 | 1891 | 2155 |
122 | 25 | 34 | 45 | 221 | 282 | 358 | 447 | 559 | 674 | 810 | 952 | 1193 | 1394 | 1611 | 1844 | 2105 |
123 | 20 | 27 | 36 | 211 | 270 | 343 | 428 | 536 | 648 | 780 | 918 | 1158 | 1355 | 1569 | 1799 | 2057 |
124 | 15 | 21 | 28 | 201 | 258 | 328 | 410 | 515 | 624 | 752 | 887 | 1123 | 1317 | 1527 | 1754 | 2009 |
125 | 11 | 15 | 20 | 192 | 247 | 313 | 392 | 494 | 600 | 724 | 856 | 1090 | 1281 | 1487 | 1711 | 1963 |
126 | 7 | 10 | 13 | 183 | 236 | 300 | 376 | 475 | 578 | 698 | 827 | 1058 | 1245 | 1448 | 1668 | 1918 |
127 | 3 | 5 | 6 | 174 | 225 | 287 | 360 | 456 | 556 | 672 | 798 | 1026 | 1210 | 1409 | 1626 | 1873 |
128 | 0 | 0 | 0 | 166 | 214 | 274 | 344 | 437 | 534 | 647 | 770 | 994 | 1175 | 1370 | 1584 | 1828 |
129 | - | - | - | 158 | 203 | 261 | 328 | 418 | 512 | 622 | 742 | 962 | 1140 | 1331 | 1542 | 1783 |
130 | - | - | - | 150 | 192 | 248 | 313 | 399 | 490 | 597 | 714 | 930 | 1105 | 1292 | 1500 | 1738 |
131 | - | - | - | 142 | 182 | 235 | 298 | 380 | 468 | 572 | 686 | 899 | 1071 | 1255 | 1459 | 1694 |
132 | - | - | - | 134 | 172 | 223 | 283 | 362 | 447 | 548 | 659 | 869 | 1037 | 1218 | 1418 | 1650 |
133 | - | - | - | 126 | 162 | 211 | 268 | 344 | 426 | 524 | 632 | 841 | 1005 | 1183 | 1380 | 1607 |
134 | - | - | - | 119 | 153 | 200 | 255 | 328 | 407 | 502 | 607 | 813 | 973 | 1148 | 1342 | 1565 |
135 | - | - | - | 112 | 144 | 189 | 242 | 312 | 388 | 480 | 582 | 786 | 943 | 1115 | 1305 | 1524 |
136 | - | - | - | 106 | 136 | 179 | 230 | 297 | 371 | 460 | 559 | 760 | 913 | 1082 | 1269 | 1484 |
137 | - | - | - | 100 | 128 | 169 | 218 | 283 | 354 | 440 | 536 | 735 | 885 | 1051 | 1234 | 1445 |
138 | - | - | - | 95 | 121 | 160 | 207 | 270 | 338 | 421 | 514 | 710 | 857 | 1020 | 1199 | 1407 |
139 | - | - | - | 90 | 114 | 151 | 196 | 257 | 322 | 403 | 492 | 687 | 830 | 990 | 1166 | 1369 |
140 | - | - | - | 85 | 108 | 143 | 186 | 245 | 307 | 386 | 472 | 664 | 804 | 960 | 1133 | 1333 |
141 | - | - | - | 80 | 102 | 135 | 176 | 233 | 293 | 369 | 452 | 643 | 779 | 932 | 1102 | 1297 |
142 | - | - | - | 76 | 97 | 128 | 167 | 222 | 280 | 353 | 433 | 622 | 754 | 904 | 1071 | 1263 |
143 | - | - | - | 72 | 92 | 121 | 158 | 211 | 267 | 337 | 415 | 602 | 731 | 878 | 1041 | 1229 |
144 | - | - | - | 69 | 87 | 115 | 150 | 201 | 255 | 323 | 398 | 582 | 708 | 852 | 1012 | 1197 |
145 | - | - | - | 66 | 82 | 109 | 142 | 191 | 243 | 309 | 381 | 562 | 685 | 826 | 983 | 1165 |
146 | - | - | - | 63 | 77 | 103 | 135 | 181 | 231 | 295 | 364 | 543 | 663 | 801 | 954 | 1134 |
147 | - | - | - | 60 | 73 | 97 | 128 | 172 | 219 | 281 | 348 | 525 | 642 | 777 | 926 | 1103 |
148 | - | - | - | 57 | 69 | 92 | 121 | 163 | 209 | 268 | 333 | 507 | 621 | 753 | 899 | 1073 |
149 | - | - | - | 54 | 65 | 87 | 114 | 155 | 199 | 255 | 318 | 490 | 601 | 731 | 872 | 1043 |
150 | - | - | - | 51 | 62 | 82 | 108 | 147 | 189 | 243 | 304 | 473 | 581 | 709 | 847 | 1015 |
151 | - | - | - | 48 | 59 | 77 | 102 | 139 | 179 | 231 | 290 | 457 | 563 | 687 | 822 | 987 |
152 | - | - | - | 46 | 56 | 73 | 97 | 132 | 170 | 220 | 277 | 442 | 545 | 666 | 798 | 960 |
153 | - | - | - | 44 | 53 | 69 | 92 | 125 | 161 | 209 | 264 | 427 | 528 | 645 | 774 | 933 |
154 | - | - | - | 42 | 50 | 65 | 87 | 119 | 153 | 199 | 252 | 412 | 511 | 625 | 751 | 907 |
155 | - | - | - | 40 | 47 | 61 | 82 | 113 | 145 | 189 | 240 | 398 | 495 | 605 | 728 | 882 |
156 | - | - | - | 38 | 45 | 58 | 78 | 107 | 138 | 180 | 229 | 385 | 479 | 586 | 707 | 858 |
157 | - | - | - | 36 | 43 | 55 | 74 | 101 | 131 | 171 | 218 | 373 | 463 | 567 | 686 | 834 |
158 | - | - | - | 34 | 41 | 52 | 70 | 96 | 124 | 163 | 208 | 361 | 448 | 550 | 666 | 811 |
159 | - | - | - | 33 | 39 | 49 | 66 | 91 | 117 | 155 | 198 | 349 | 433 | 533 | 646 | 788 |
160 | - | - | - | 32 | 37 | 46 | 62 | 86 | 111 | 147 | 188 | 337 | 419 | 516 | 627 | 766 |
161 | - | - | - | 31 | 35 | 43 | 58 | 81 | 105 | 139 | 178 | 325 | 405 | 499 | 608 | 744 |
162 | - | - | - | 30 | 33 | 40 | 54 | 76 | 99 | 131 | 168 | 313 | 391 | 482 | 589 | 722 |
163 | - | - | - | 29 | 31 | 37 | 50 | 71 | 93 | 123 | 158 | 301 | 377 | 465 | 570 | 700 |
164 | - | - | - | 28 | 29 | 35 | 47 | 66 | 87 | 116 | 149 | 290 | 364 | 449 | 552 | 679 |
165 | - | - | - | 27 | 27 | 33 | 44 | 62 | 81 | 109 | 140 | 279 | 351 | 433 | 534 | 658 |
166 | - | - | - | 26 | 26 | 31 | 41 | 58 | 76 | 102 | 132 | 269 | 338 | 418 | 517 | 638 |
167 | - | - | - | 25 | 25 | 29 | 38 | 54 | 71 | 95 | 124 | 259 | 326 | 403 | 500 | 618 |
168 | - | - | - | 24 | 24 | 27 | 35 | 50 | 66 | 89 | 116 | 249 | 314 | 389 | 484 | 599 |
169 | - | - | - | 23 | 23 | 25 | 32 | 46 | 61 | 83 | 108 | 240 | 302 | 375 | 468 | 581 |
170 | - | - | - | 22 | 22 | 23 | 30 | 43 | 57 | 77 | 101 | 231 | 291 | 362 | 453 | 563 |
171 | - | - | - | 21 | 21 | 21 | 28 | 40 | 53 | 72 | 94 | 222 | 280 | 349 | 438 | 545 |
172 | - | - | - | 20 | 20 | 20 | 26 | 37 | 49 | 67 | 87 | 214 | 270 | 337 | 424 | 528 |
173 | - | - | - | 19 | 19 | 19 | 24 | 34 | 45 | 62 | 81 | 206 | 260 | 325 | 410 | 511 |
174 | - | - | - | 18 | 18 | 18 | 22 | 31 | 42 | 57 | 75 | 199 | 251 | 314 | 397 | 495 |
175 | - | - | - | 17 | 17 | 17 | 20 | 28 | 39 | 52 | 69 | 192 | 242 | 303 | 384 | 480 |
176 | - | - | - | 16 | 16 | 16 | 18 | 26 | 36 | 48 | 64 | 185 | 234 | 293 | 372 | 465 |
177 | - | - | - | 15 | 15 | 15 | 16 | 24 | 33 | 44 | 59 | 178 | 226 | 283 | 360 | 451 |
178 | - | - | - | 14 | 14 | 14 | 14 | 22 | 30 | 40 | 54 | 171 | 218 | 273 | 348 | 437 |
179 | - | - | - | 13 | 13 | 13 | 13 | 20 | 27 | 36 | 49 | 165 | 210 | 263 | 336 | 423 |
180 | - | - | - | 12 | 12 | 12 | 12 | 18 | 24 | 32 | 44 | 159 | 202 | 254 | 325 | 410 |
181 | - | - | - | 11 | 11 | 11 | 11 | 16 | 21 | 28 | 39 | 153 | 195 | 245 | 314 | 397 |
182 | - | - | - | 10 | 10 | 10 | 10 | 14 | 19 | 25 | 35 | 148 | 188 | 236 | 303 | 384 |
183 | - | - | - | 9 | 9 | 9 | 9 | 12 | 17 | 22 | 31 | 143 | 181 | 227 | 293 | 372 |
184 | - | - | - | 8 | 8 | 8 | 8 | 10 | 15 | 19 | 27 | 138 | 174 | 219 | 283 | 360 |
185 | - | - | - | 7 | 7 | 7 | 7 | 8 | 13 | 16 | 23 | 133 | 168 | 211 | 273 | 348 |
186 | - | - | - | 6 | 6 | 6 | 6 | 6 | 11 | 13 | 19 | 128 | 162 | 204 | 264 | 337 |
187 | - | - | - | 5 | 5 | 5 | 5 | 5 | 9 | 10 | 15 | 123 | 156 | 197 | 255 | 326 |
188 | - | - | - | 4 | 4 | 4 | 4 | 4 | 7 | 8 | 12 | 119 | 150 | 190 | 246 | 315 |
189 | - | - | - | 3 | 3 | 3 | 3 | 3 | 5 | 6 | 9 | 115 | 144 | 183 | 237 | 305 |
190 | - | - | - | 2 | 2 | 2 | 2 | 2 | 3 | 4 | 6 | 111 | 139 | 177 | 229 | 295 |
191 | - | - | - | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | 107 | 134 | 171 | 221 | 285 |
192 | - | - | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 103 | 129 | 165 | 213 | 275 |
193 | - | - | - | - | - | - | - | - | - | - | - | 99 | 124 | 159 | 205 | 265 |
194 | - | - | - | - | - | - | - | - | - | - | - | 95 | 119 | 153 | 197 | 255 |
195 | - | - | - | - | - | - | - | - | - | - | - | 91 | 114 | 147 | 189 | 245 |
196 | - | - | - | - | - | - | - | - | - | - | - | 87 | 109 | 141 | 181 | 236 |
197 | - | - | - | - | - | - | - | - | - | - | - | 83 | 104 | 135 | 174 | 227 |
198 | - | - | - | - | - | - | - | - | - | - | - | 80 | 100 | 130 | 167 | 219 |
199 | - | - | - | - | - | - | - | - | - | - | - | 77 | 96 | 125 | 160 | 211 |
200 | - | - | - | - | - | - | - | - | - | - | - | 74 | 92 | 120 | 154 | 203 |
201 | - | - | - | - | - | - | - | - | - | - | - | 71 | 88 | 115 | 148 | 195 |
202 | - | - | - | - | - | - | - | - | - | - | - | 68 | 84 | 110 | 142 | 188 |
203 | - | - | - | - | - | - | - | - | - | - | - | 65 | 80 | 105 | 136 | 181 |
204 | - | - | - | - | - | - | - | - | - | - | - | 63 | 77 | 101 | 131 | 174 |
205 | - | - | - | - | - | - | - | - | - | - | - | 61 | 74 | 97 | 126 | 167 |
206 | - | - | - | - | - | - | - | - | - | - | - | 59 | 71 | 93 | 121 | 161 |
207 | - | - | - | - | - | - | - | - | - | - | - | 57 | 68 | 89 | 116 | 155 |
208 | - | - | - | - | - | - | - | - | - | - | - | 55 | 65 | 85 | 111 | 149 |
209 | - | - | - | - | - | - | - | - | - | - | - | 53 | 62 | 81 | 106 | 143 |
210 | - | - | - | - | - | - | - | - | - | - | - | 51 | 59 | 77 | 101 | 137 |
211 | - | - | - | - | - | - | - | - | - | - | - | 49 | 56 | 74 | 97 | 131 |
212 | - | - | - | - | - | - | - | - | - | - | - | 47 | 54 | 71 | 93 | 126 |
213 | - | - | - | - | - | - | - | - | - | - | - | 45 | 52 | 68 | 89 | 121 |
214 | - | - | - | - | - | - | - | - | - | - | - | 43 | 50 | 65 | 85 | 116 |
215 | - | - | - | - | - | - | - | - | - | - | - | 41 | 48 | 62 | 81 | 111 |
216 | - | - | - | - | - | - | - | - | - | - | - | 40 | 46 | 59 | 77 | 106 |
217 | - | - | - | - | - | - | - | - | - | - | - | 39 | 44 | 56 | 73 | 101 |
218 | - | - | - | - | - | - | - | - | - | - | - | 38 | 42 | 53 | 70 | 97 |
219 | - | - | - | - | - | - | - | - | - | - | - | 37 | 40 | 51 | 67 | 93 |
220 | - | - | - | - | - | - | - | - | - | - | - | 36 | 38 | 49 | 64 | 89 |
221 | - | - | - | - | - | - | - | - | - | - | - | 35 | 36 | 47 | 61 | 85 |
222 | - | - | - | - | - | - | - | - | - | - | - | 34 | 34 | 45 | 58 | 81 |
223 | - | - | - | - | - | - | - | - | - | - | - | 33 | 33 | 43 | 55 | 77 |
224 | - | - | - | - | - | - | - | - | - | - | - | 32 | 32 | 41 | 52 | 73 |
225 | - | - | - | - | - | - | - | - | - | - | - | 31 | 31 | 39 | 49 | 69 |
226 | - | - | - | - | - | - | - | - | - | - | - | 30 | 30 | 37 | 46 | 65 |
227 | - | - | - | - | - | - | - | - | - | - | - | 29 | 29 | 35 | 43 | 61 |
228 | - | - | - | - | - | - | - | - | - | - | - | 28 | 28 | 33 | 40 | 58 |
229 | - | - | - | - | - | - | - | - | - | - | - | 27 | 27 | 31 | 37 | 55 |
230 | - | - | - | - | - | - | - | - | - | - | - | 26 | 26 | 29 | 35 | 52 |
231 | - | - | - | - | - | - | - | - | - | - | - | 25 | 25 | 27 | 33 | 49 |
232 | - | - | - | - | - | - | - | - | - | - | - | 24 | 24 | 25 | 31 | 46 |
233 | - | - | - | - | - | - | - | - | - | - | - | 23 | 23 | 23 | 29 | 43 |
234 | - | - | - | - | - | - | - | - | - | - | - | 22 | 22 | 22 | 27 | 40 |
235 | - | - | - | - | - | - | - | - | - | - | - | 21 | 21 | 21 | 25 | 37 |
236 | - | - | - | - | - | - | - | - | - | - | - | 20 | 20 | 20 | 23 | 34 |
237 | - | - | - | - | - | - | - | - | - | - | - | 19 | 19 | 19 | 21 | 32 |
238 | - | - | - | - | - | - | - | - | - | - | - | 18 | 18 | 18 | 19 | 30 |
239 | - | - | - | - | - | - | - | - | - | - | - | 17 | 17 | 17 | 17 | 28 |
240 | - | - | - | - | - | - | - | - | - | - | - | 16 | 16 | 16 | 16 | 26 |
241 | - | - | - | - | - | - | - | - | - | - | - | 15 | 15 | 15 | 15 | 24 |
242 | - | - | - | - | - | - | - | - | - | - | - | 14 | 14 | 14 | 14 | 22 |
243 | - | - | - | - | - | - | - | - | - | - | - | 13 | 13 | 13 | 13 | 20 |
244 | - | - | - | - | - | - | - | - | - | - | - | 12 | 12 | 12 | 12 | 18 |
245 | - | - | - | - | - | - | - | - | - | - | - | 11 | 11 | 11 | 11 | 16 |
246 | - | - | - | - | - | - | - | - | - | - | - | 10 | 10 | 10 | 10 | 14 |
247 | - | - | - | - | - | - | - | - | - | - | - | 9 | 9 | 9 | 9 | 12 |
248 | - | - | - | - | - | - | - | - | - | - | - | 8 | 8 | 8 | 8 | 10 |
249 | - | - | - | - | - | - | - | - | - | - | - | 7 | 7 | 7 | 7 | 8 |
250 | - | - | - | - | - | - | - | - | - | - | - | 6 | 6 | 6 | 6 | 6 |
251 | - | - | - | - | - | - | - | - | - | - | - | 5 | 5 | 5 | 5 | 5 |
252 | - | - | - | - | - | - | - | - | - | - | - | 4 | 4 | 4 | 4 | 4 |
253 | - | - | - | - | - | - | - | - | - | - | - | 3 | 3 | 3 | 3 | 3 |
254 | - | - | - | - | - | - | - | - | - | - | - | 2 | 2 | 2 | 2 | 2 |
255 | - | - | - | - | - | - | - | - | - | - | - | 1 | 1 | 1 | 1 | 1 |
256 | - | - | - | - | - | - | - | - | - | - | - | 0 | 0 | 0 | 0 | 0 |
6.6.2.4 Кодирование остаточных LSB и концевых частей
LSB и концевые части передаются способом чередования (то есть если msb [i]! = tail_code, передаем Isb [i], иначе tail [i]) для всех остатков в подблоке.
LSB передаются непосредственно, используя k битов, в то время как концевые части кодируются, используя коды Райса с параметром s, как описано в 6.6.1.
6.7 Объединенное кодирование пар каналов
Объединенное кодирование пар каналов идентично объединенному кодированию стереопары. Таким образом, используем термины "левый канал" и "правый канал", чтобы сослаться на два канала любой пары каналов, независимо от того, переносит ли она подлинный сигнал стерео или два других канала многоканального сигнала.
Когда декодируемый блок, который обычно представлял левый канал (L) или правый канал (R), содержит разностный сигнал объединенного стерео (D = R - L, обозначенный js_block), исходные данные канала должны быть явно восстановлены. Если первый канал содержит разностный сигнал, левый канал был заменен и может быть восстановлен, используя L = R - D для всех выборок этого блока. Если второй канал содержит разностный сигнал, правый канал был заменен, и восстанавливается, используя R = D + L для всех выборок. Если block_switching включено, это относится к любой паре синхронизируемых блоков пары каналов, то есть любой блок может содержать разностный сигнал или исходный сигнал канала. С точки зрения прогноза разностные сигналы обрабатываются как нормальные сигналы. Если фильтр прогноза использует выборки из предыдущего блока, то они должны быть разностными значениями тех же самых двух каналов в этом предыдущем блоке. То же самое применяется к инверсному фильтру прогноза декодера.
6.8 Многоканальное кодирование (МСС)
Многоканальное кодирование использует адаптивно взвешенное межканальное вычитание, чтобы далее уменьшить амплитуды остатков прогноза.
6.8.1 Декодирование и восстановление одиночных каналов
Наборы информации о межканальной зависимости, включая master_channel_index, weighting_factor и time_difference_flag, декодируются для каждого канала. Числами итераций управляет stop_flag. Кроме того имеется бит js_switch, который активирует простое кодирование входных сигналов объединенного стерео вместо многоканального кодирования остаточных сигналов прогноза LPC, даже когда используется режим межканальной корреляции.
Если флаг time_difference_flag является нулем, выполняется синфазное взвешенное дополнение с тремя ответвлениями, как показано в следующем псевдокоде.
d: целое число для остаточного сигнала
MCCgain: величина усиления
Если time_difference_flag равен единице, выполняется взвешенное дополнение с шестью ответвлениями с декодированным параметром временного различия TDL, как показано в следующем псевдокоде.
d: целое число для остаточного сигнала
MCCgain: величина усиления
TDL: величина задержки временного различия:
Диапазон TDL зависит от частоты дискретизации, как показано в таблице 41. Имеется бит знака для TDL, чтобы поддерживать и положительные и отрицательные различия относительно сигнала кодирования. Чтобы избежать конфликтов с синфазным взвешиванием, TDL должно быть больше 3 или меньше -3.
Таблица 41 - Диапазон задержки
Диапазон поиска | Начало | Конец |
Частота <96 кГц | 3 | 31+3 |
Частота | 3 | 63+3 |
Частота | 3 | 127+3 |
Значение усиления
Таблица 42 - Код Райса факторов межканального взвешивания
Индекс фактора взвеши- | Для фактора взвешивания [1] | Для других факторов | Индекс фактора взвеши- | Для фактора взвешивания [1] | Для других факторов | ||
0 | 111111001 | 11111111111111100 | 204 | 16 | 1010 | 01 | 0 |
1 | 111111000 | 1111111111111100 | 192 | 17 | 1011 | 101 | -12 |
2 | 11111001 | 111111111111100 | 179 | 18 | 11010 | 1101 | -25 |
3 | 11111000 | 11111111111100 | 166 | 19 | 11011 | 11101 | -38 |
4 | 1111001 | 1111111111100 | 153 | 20 | 111010 | 111101 | -51 |
5 | 1111000 | 111111111100 | 140 | 21 | 111011 | 1111101 | -64 |
6 | 111001 | 11111111100 | 128 | 22 | 1111010 | 11111101 | -76 |
7 | 111000 | 1111111100 | 115 | 23 | 1111011 | 111111101 | -89 |
8 | 11001 | 111111100 | 102 | 24 | 11111010 | 1111111101 | -102 |
9 | 11000 | 11111100 | 89 | 25 | 11111011 | 11111111101 | -115 |
10 | 1001 | 1111100 | 76 | 26 | 111111010 | 111111111101 | -128 |
11 | 1000 | 111100 | 64 | 27 | 111111011 | 1111111111101 | -140 |
12 | 001 | 11100 | 51 | 28 | 1111111010 | 11111111111101 | -153 |
13 | 000 | 1100 | 38 | 29 | 1111111011 | 111111111111101 | -166 |
14 | 010 | 100 | 25 | 30 | 11111111010 | 1111111111111101 | -179 |
15 | 011 | 00 | 12 | 31 | 11111111011 | 11111111111111101 | -192 |
6.8.2 Последовательное декодирование для многоканальных сигналов
Последовательность остаточных выборок прогноза в одном канале и одном блоке обрабатывается как вектор,
Если stop_flag включено, никакая межканальная информация для этого канала не следует. Если stop_flag выключено, межканальная информация следует, и это позволено неоднократно. Таким образом синтаксису разрешено иметь многократные этапы межканальной информации. Число этапов должно быть общим для всех каналов. Если master_channel_index идентично номеру канала на всех дальнейших этапах, что означает, что взвешенное вычитание более не активируется, элементы синтаксиса для дальнейших этапов пропускаются для этого канала. В результате stop_flag устанавливается в конце эффективного набора информации.
Для того чтобы восстановить остаточные сигналы из многоступенчатой межканальной информации, процесс должен запуститься с правого набора информации. Промежуточный вектор остатка в i-м канале и k-м этапе,
где
Пример потока битов для пяти каналов и трех этапов итерации показан в таблице 43. У канала 0 есть три элемента синтаксиса, соответствующие этапам. Реконструкцию следует выполнять с последнего этапа, то есть третьего этапа. У третьего этапа имеется только stop_flag, поэтому работа начинается со второго этапа обращением к
На втором этапе у канала 0 как основной канал есть канал 4 с коэффициентами взвешивания
На первом этапе у канала 0 как основной канал служит канал 2 с коэффициентами взвешивания
Таблица 43 - Пример потока битов для межканальной информации для 5 каналов и 3 этапов
Этап 1 | ||||||
N канала | stop_flag (S) | master_channel | time_difference_flag (T) | Коэффициент взвешивания (W) | time_difference_value (L) | |
0 | 0 | 2 | 0 | 13-10-15 | - | |
1 | 0 | 4 | 0 | 13-11-12 | - | |
2 | 0 | 1 | 1 | 16-15-16-13-12-14 | 5 | |
3 | 1 | - | - | - | - | |
4 | 1 | - | - | - | - | |
Этап 2 | ||||||
N канала | stop_flag (S) | master_channel | time_difference_flag (T) | Коэффициент взвешивания (W) | time_difference_value (L) | |
0 | 0 | 4 | 0 | 14-12-15 | - | |
1 | 1 | - | - | - | - | |
2 | 1 | - | - | - | - | |
3 | - | - | - | - | - | |
4 | - | - | - | - | - | |
Этап 3 | ||||||
N канала | stop_flag (S) | master_channel | time_difference_flag (T) | Коэффициент взвешивания (W) | time_difference_value (L) | |
0 | 1 | - | - | - | - | |
1 | - | - | - | - | - | |
2 | - | - | - | - | - | |
3 | - | - | - | - | - | |
4 | - | - | - | - | - |
Мы можем восстановить вектор только тогда, когда вектор основного канала уже восстановлен на этом этапе.
6.9 Расширение для данных с плавающей точкой
В дополнение к целочисленным аудиосигналам MPEG-4 ALS также поддерживает сжатие аудиосигналов без потерь в 32-разрядном формате с плавающей точкой IEEE.
6.9.1 Кодер для данных с плавающей точкой
Если входной сигнал является 32-битовым с плавающей точкой, входные значения разлагаются на три части: предполагаемый общий множитель A, усеченная целочисленная последовательность сомножителя Y и разностный сигнал Z. Та же самая схема сжатия как для нормального целочисленного ввода применяется для усеченной и нормализованной целочисленной последовательности сомножителя. Когда предполагаемый общий множитель А равняется 1,0, извлекается и упаковывается только необходимый код длины мантиссы для последовательности различия. Необходимая длина слова уникально определяется значением соответствующего целого числа. 23 или меньше битов сигнала мантиссы-различия Z кодируются, используя модуль сжатия Masked-LZ, кроме тех случаев, когда Y равняется 0. Если целое число Y равняется 0, все 32 бита данных х кодируются с модулем отдельно. Во всех случаях для усеченной целочисленной последовательности Y используется модуль сжатия ALS.
6.9.2 Декодер для данных с плавающей точкой
В случае данных с плавающей точкой восстанавливается целочисленная последовательность сомножителя Y, и множитель А умножается, чтобы получить последовательность с плавающей точкой (Y*A). Для операции округления умножения используется округляющийся режим "round to nearest, to even when tie". Последовательность различия декодируется модулем распаковки Masked-LZ и преобразовывается в последовательность формата с плавающей точкой Z. Часть А и часть В декодируются отдельно и выравниваются для реконструкции. Если множитель A равняется 1,0, последовательность различия декодируется, используя информацию о длине слова, которая определяется из значения соответствующей целочисленной величины. Дополнительные биты более, чем необходимая длина в битах, отключаются (выбрасываются), так как они - фиктивные биты, добавленные кодером. Обе последовательности, (Y*A) и Z, суммируются, чтобы генерировать выходную последовательность с плавающей точкой.
6.9.3 Декодирование потока битов для данных с плавающей точкой
В случае данных с плавающей точкой необходимо декодировать последовательность различий так же, как целочисленный поток битов. Можно воспользоваться тем, что граница слова каждой выборки различия уникально определяется абсолютным значением связанного усеченного целого числа. На заключительном этапе процесса декодирования обе последовательности от целого числа и мантиссы различия суммируются, чтобы восстановить последовательность в формате с плавающей точкой.
6.9.3.1 Декодирование размера данных элемента различия
В процессе, названном frame_data, декодируется num_bytes_diff_float. Следующие байты num_bytes_diff_float являются сжатыми данными различия.
6.9.3.2 Декодирование элемента различия
6.9.3.2.1 Инициализация переменных
В первом фрейме или фреймах произвольного доступа некоторые переменные должны быть инициализированы следующим образом.
Iast_acf_mantissa [c] устанавливается в 0. Iast_shift_value [c] устанавливается в 0.
В FlushDict () флаг freeze_flag устанавливается в 0, code_bits устанавливается в 9, bump_code устанавливается в 511, next_code устанавливается в 258.
Таблица 44 - Начальные значения
Переменная | Начальное значение | Описание |
last_acf_mantissa[c] | 0 | Это означает общий множитель 1,0 |
last_shift_value[c] | 0 | |
freeze_flag | 0 | Инициализировано в FlushDict(). |
code_bits | 9 | Инициализировано в FlushDict(). |
bump_code | 511 | Инициализировано в FlushDict(). |
next_code | 258 | Инициализировано в FlushDict(). |
6.9.3.2.2 Параметры нормализации
Перед декодированием разностного сигнала параметры нормализации должны декодироваться следующим способом.
Во-первых, декодируется use_acd. Если use_acf не 0, для каждого канала декодируется acf_flag [c]. Если acf_flag [с] не 0, декодируется acf_mantissa [с]. Если acf_flag [с] равняется 0, то же самое значение last_acf_mantissa [с] устанавливается в acf_mantissa [с]. Когда use_acf равняется 0, last_acf_mantissa [с], и acf_mantissa [с] устанавливаются в 0. Это означает, что общий множитель инициализируется в 1,0.
Кроме того, для каждого канала декодируются highest_byte [с], partA_flag [с] и shift_amp [с]. Когда partA_flag [с] равно 0, значения всех выборок в части А являются всеми нулями, или нет никакой выборки, для которой соответствующее усеченное целое число равняется 0. Если shift_amp [с] равняется 0, значение last_shift_value [с] копируется в shift_value [с]. Иначе shift_value [с] декодируется из потока битов. Заключительная выходная последовательность с плавающей точкой, восстановленная из усеченного целого числа, денормализовывается добавлением shift_value [с] к экспоненте выходных данных. В конце концов last_acf_mantissa [с] и last_shift_value [с] обновляются текущими величинами acf_mantissa [с] и shift_value [с].
6.9.3.2.3 Различия мантиссы (когда acf_mantissa [с] равняется 0)
Если acf_mantissa [с] равняется 0, мантисса различия восстанавливается следующим способом.
Последовательность различий во фрейме упаковывается. У каждой выборки имеется уникальная длина слова фактической информации, где длина определяется значением соответствующего целого числа. Каждое значение различия мантиссы D[c][n] восстанавливается следующим образом.
Поток битов для восстановления значения различия разделяется на две части (часть А и часть В). Часть А содержит выборки, необходимые для кодирования всех 32 битов. Это выборки, для которых соответствующее усеченное целое число у равняется 0. Если усеченное целочисленное значение является нулем, получаются исходные данные с плавающей точкой.
Если partA_flag [с] равняется 0, все значения в части А являются нулями или в части А нет никаких выборок. Когда partA_flag [с] не является нулем, в части А есть выборки и должен быть считан compressed_flag. Если compressed_flag [с] равняется 0, все потоки битов упаковываются несжатыми. Если compressed_flag [с] равняется 1, выборки части А сжимаются, используя схему сжатия Masked-LZ. В этом случае распаковка Masked-LZ применяется для потока битов в части А.
Часть В содержит выборки, для которых соответствующее усеченное целое число у не равно 0. Перед декодированием потока битов в части В должно быть считано compressed_flag [с] для части В. Если compressed_flag [с] равняется 0, поток битов упаковывается несжатым. Если compressed_flag [с] равняется 1, выборки части В сжимаются, используя схему сжатия Masked-LZ. В этом случае для потока битов в части В применяется распаковка Masked-LZ.
Необходимые биты этих выборок различаются от 0 до 23 битов в зависимости от highest_byte [с], acf_mantissa [с] и соответствующего усеченного целого числа у.
Самая высокая длина различия в битах nbits[c][n], которая будет кодироваться, определяется следующим образом:
nbits[c][n]= min (word_length[c][n], highest_byte*8),
где word_length[с][n] показано в таблице 45,
"highest_byte [с]" обозначает наибольшую длину байта всех значений различия мантиссы во фрейме. "highest_byte [с]" равно 0, если у исходных данных с плавающей точкой имеется точность 16-битового целого числа.
Таблица 45 - Необходимая длина слова для различия мантиссы (когда acf_mantissa[c] равняется 0)
Состояние acf_mantissa [с] | Диапазон абсолютного целого значения |х| | word_length |
acf_mantissa [с]==0 | |х| = 0 | 32 |
(общий множитель равен 1,0) |
| 23 - n |
6.9.3.2.4 Различия мантиссы (когда acf_mantissa [с] не равно 0)
Если acf_mantiisa [с] не 0, мантисса различия восстанавливается следующим способом.
Последовательность различий во фрейме упаковывается. У каждой выборки есть уникальная длина слова фактической информации, где длина определяется значением соответствующего целого числа. Каждое значение различия мантиссы D[c][n] восстанавливается следующим образом.
Поток битов для реконструкции значений различия разделяется на две части (часть А и часть В). Часть А содержит выборки, необходимые для кодирования всех 32 битов. Это выборки, для которых соответствующее усеченное целое число у равняется 0. Если усеченное целочисленное значение является нулем, получаются исходные данные с плавающей точкой.
Если partA_flag [с] равняется 0, все значения в части А являются нулями или в части А нет никаких выборок. Когда partA_flag [с] не является нулем, в части А есть выборки, и compressed_flag должен быть считан. Если compressed_flag [с] равняется 0, все потоки битов упаковываются несжатые. Если compressed_flag [с] равняется 1, выборки части А сжимаются, используя схему сжатия Masked-LZ. В этом случае для потока битов в части А применяется распаковка Masked-LZ.
Часть В содержит выборки, для которых соответствующее усеченное целое число у не равно 0. compressed_flag [с] для части В должно быть считано до декодирования потока битов в части В. Если compressed_flag [с] равняется 0, поток битов упаковывается несжатым. Если compressed_flag [с] равняется 1, выборки части В сжимаются, используя схему сжатия Masked-LZ. В этом случае для потока битов в части В применяется распаковка Masked-LZ. Необходимые биты этих выборок различаются от 0 до 23 битов в зависимости от highest_byte [с], acf_mantissa [с] и соответствующего усеченного целого числа у.
Наибольшая длина в битах различия nbits [с] [n], которое будет кодировано, определяется следующим образом
nbits[c][n]= min (word_length[c][n], highest_byte[c]*8),
где word_length [с] [n] показано в таблице 46.
"highest_byte [с]" обозначает наибольшую длину байта всех значений мантиссы различия во фрейме. "highest_byte [с]" равно 0, если у исходных данных с плавающей точкой имеется точность 16-битного целого числа.
Таблица 46 - Необходимая длина слова для различия мантиссы (когда acf_mantissa [c] не равно 0)
Состояние acf_mantissa [c] | Диапазон абсолютного целого значения |у| | word_length |
acf_mantissa [c]==0 | |у| = 0 | 32 |
(общий множитель не равен 1,0) | |y|! = 0 | 23 |
6.9.3.2.5 Распаковка Masked-LZ
Сжатие Masked-LZ является видом, основанном на словаре схемы сжатия.
Это весьма подобно другим разновидностям сжатия Lempel-Ziv, таким как схема сжатия LZW, то есть существует словарь строк, которые встретились ранее. Ищется самая длинная строка соответствия входных символов, используя строку, сохраненную в словаре.
Диапазон code_bits меняется от 9 до 14 битов, так как индекс словаря кодируется как 9-15-битовый в зависимости от числа записей, сохраненных в словаре. Для синхронизации словаря в кодере и декодере используются коды Bump и код Flush (таблица 47). bump_code сначала устанавливается в 511 и увеличивается в зависимости от записей, хранящихся в словаре.
Декодер читает (code_bits) биты из потока битов и получают string_code. Когда string_code является FLUSH_CODE или MAX_CODE, словарь и переменные, связанные со словарем, должны быть повторно инициализированы начальными значениями (таблица 44). Когда string_code является FREEZE_CODE, декодер прекращает добавлять новые записи в словарь, пока он не встречается с фреймом произвольного доступа или не получает FLUSH_CODE.
Таблица 47 - Специальные индексные коды замаскированных LZ
Диапазон string_code | Коды специального индекса | Величина |
9<= code_bits <= 15 | FLUSH CODE | 256 |
(0<= stringCode <32768) | FREEZE_CODE | 257 |
FIRST_CODE | 258 | |
BUMP_CODE | (2 | |
MAX_CODE | 2 |
Алгоритм для распаковки Masked-LZ дается ниже.
Примечание - Функция inputCode() читает число битов "code_bits" из закодированного потока битов и возвращает string_code. Функция decodeString () берет string_code в качестве входного значения и возвращает декодированную строку символов, связанную с string_code, путем поиска в словаре, число символов в декодируемой строке и код первого символа строки charCode. Функция setNewEntryToDict() берет last_string_code и charCode и устанавливает их в свободную запись словаря, представленную как next_code. Функция FlushDict() очищает все записи словаря и инициализирует связанные значения словаря. В вышеупомянутом псевдокоде "dec_buf" является буфером для сохранения декодируемых символов, a "nchars" является числом символов, которые должны декодироваться. В FlushDict() "code_bits" устанавливается в 9, "bump_code" устанавливается в 511 и "freeze_flag" устанавливается в 0.
После того, как входные символы декодируются из string_code, эти символы преобразовываются в значения различия мантиссы, D[c][n].
Если nbits [с][n], которое является размером слова символов, используемых в модуле Masked-LZ, не кратно 8, это означает, что на стороне кодера были добавлены фиктивные биты.
Дополнительные биты более, чем nbits[c][n], вырезаются (выбрасываются), используя следующий алгоритм:
Примечание - "int_zero" является истиной, если соответствующее усеченное целое число равно 0. "nbits [с][n]" является необходимой длиной слова для различия мантиссы. "dec_buf [ ]" является буфером для сохранения декодируемых символов.
6.9.3.3 Реконструкция данных с плавающей точкой
6.9.3.3.1 Реконструкция данных с плавающей точкой (когда acf_mantissa [с] равно 0)
Усеченные целочисленные значения преобразовываются в 32-разрядные данные с плавающей запятой F[c][n] согласно определению 32-разрядного формата с плавающей точкой IEEE, с нормализацией с точки зрения максимального целочисленного значения (2
F[c][n] = (float) (truncated_integer_value)*2
Поле экспоненты F[c][n] является shift_value[c], если shift_amp[c] равно 1.
Если целое число "0", кодированные данные с плавающей точкой используются как для окончательного результата. Иначе восстановленное значение различия мантиссы D[c][n] добавляется к мантиссе данных с плавающей точкой F[c][n], преобразованных из целочисленного значения. Нет никакой необходимости изменять ни знак, ни поле экспоненты F[c][n].
6.9.3.3.2 Реконструкция данных с плавающей точкой (когда acf_mantissa[с] не равно 0)
Усеченные целочисленные значения преобразовываются в 32-разрядные данные с плавающей точкой F[c][n] согласно определению 32-битового формата с плавающей точкой IEEE с нормализацией с точки зрения максимального целочисленного значения (2
F[c][n] = (float) (truncated_integer_value)*2
Полем экспоненты F[с][n] является shift_value [с], если shift_amp [с] равно 1.
Если целое число является "0", кодированные данные с плавающей точкой используются как для окончательного выхода. Иначе восстановленное значение различия мантиссы D[c][n] добавляется к мантиссе данных с плавающей точкой F[c][n], которая преобразовывается из целочисленного значения и умножается на общий множитель.
6.9.3.3.3 Умножение на общий сомножитель
После преобразования общий множитель А восстанавливается из acf_mantissa [с] и умножается на F[c][n], а результат устанавливается в F[c][n]. Вычислительная процедура умножения имеет следующий вид.
Шаг 1: Установка бита знака:
Знак результата является таким же как знак F[c][n].
Шаг 2: Умножение мантиссы:
(acf_mantissa [с] | 0x0800000) умножается на (биты мантиссы F[c][n] | 0x0800000) в 64-битовом целочисленном регистре.
Шаг 3: Нормализация:
Результат 64-битового целочисленного умножения нормализуется до точности 23 бита.
Поскольку 1,0
Следовательно, может понадобиться нормализация путем смещения на один бит вправо и приращения экспоненты.
Шаг 4: Округление;
Режим округления "округление до ближайшего, до четного, когда привязка" применяется к округлению нормализованной мантиссы результата.
6.9.3.3.4 Добавление значения различия мантиссы
После умножения восстановленное значение различия мантиссы D[c][n] добавляется к данным с плавающей точкой F[c][n], и результат устанавливается в F[c][n]. Вычислительная процедура дополнения следующая.
Шаг 1: Добавление мантиссы:
(D[c][n]), добавляется к (биты мантиссы F[c][n] | 0x0800000) в 32-разрядном целочисленном регистре.
Шаг 2: Нормализация:
Результат 32-битового целочисленного дополнения нормализуется до 23-битовой точности.
Поскольку (D[c][n])*2
Следовательно, может понадобиться нормализация смещением на один бит вправо и наращиванием экспоненты.
Шаг 4: Усечение:
Округление для этого дополнения не требуется, потому что всякий раз, когда происходит смещение, LSB получающейся мантиссы равняется 0.
Библиография
[1] | ИСО/МЭК 14496-3:2009 | Информационные технологии. Кодирование аудиовизуальных объектов. Часть 3. Аудио (Information technology - Coding of audio-visual objects - Part 3: Audio) |
УДК 621.396:006.354 | ОКС 33.170 |
Ключевые слова: звуковое вещание, электрические параметры, каналы и тракты, технологии MPEG-кодирования, синтетический звук, масштабирование, защита от ошибок, поток битов расширения, психоакустическая модель |
Электронный текст документа
и сверен по:
, 2020