ГОСТ Р 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
Фиксированное значение = 1095521024 = 0x414С5300 (Hex) |
samp_freq | 32 | Частота дискретизации, Гц |
samples | 32 | Число выборок (на канал)
Если samples = 0xFFFFFFFF (Hex), число выборок не определяется |
channels | 16 | Число каналов - 1 (0 - моно, 1 - стерео, ...) |
file_type | 3 | 000 - неизвестно/неотработанный файл;
001 - волновой файл;
010 - файл aiff;
011 - файл bwf,
(другие значения зарезервированы) |
resolution | 3 | 000 - 8-бит;
001 - 16-бит;
010 - 24-бит;
011 - 32-бит;
(другие значения зарезервированы) |
floating | 1 | 1 - 32-битовый с плавающей точкой IEEE, 0 - целый |
msb_first | 1 | Исходный порядок байта входных аудиоданных:
0 - младший значащий байт первый (прямой порядок)
1 - старший значащий байт первый (обратный порядок)
если resolution = 0 (8-битовые данные), msb_first = 0 указывает данные без знака (0...255), тогда как msb_first = 1 указывает данные со знаком (-128...127) |
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)
00 - не хранится |
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 | Число уровней коммутации блока:
00 - коммутация блока отсутствует
01 - вплоть до 3 уровней
10 - 4 уровня
11 - 5 уровней |
mc_coding | 1 | Расширенное межканальное кодирование: 1 - вкл, 0 - выкл, если каналы - 0 (моно), mc_coding - 0 |
sb_part | 1 | Расчленение субблока для кодирования энтропии остатка, если bgmc_mode = 0:
0 - расчленение отсутствует, бит ec_sub bit в block_data отсутствует
1 - расчленение 1:4, один бит ec_sub bit в block_data, если bgmc_mode = 1:
0 - расчленение 1:4, один бит ec_sub в block_data
1 - расчленение 1:2, 4:8, два бита ec_sub в block_data |
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 | Размер заголовка исходного аудиофайла в байтах
Если header_size = 0xFFFFFFFF (Hex), поле orig_header[] отсутствует, но исходный заголовок может быть сохранен в другом месте, например в метаданных файла MPEG-4 |
trailer_size | 32 | Размер концевика исходного аудиофайла в байтах
Если trailer_size = 0xFFFFFFFF (Hex), поле orig_trailer[] отсутствует, но исходный заголовок может быть сохранен в другом месте, например в метаданных файла MPEG-4 |
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_size = 0xFFFFFFFF (Hex), поле aux_data[] отсутствует, но вспомогательные данные могут быть сохранены в другом месте, например, в метаданных файла MPEG-4 |
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 | Информация о переключении блока.
Если block_switching = 0, поле bs_info не передается, иначе количество битов зависит от величины block_switching:
block_switching =1: 8 битов;
block_switching = 2: 16 битов;
block_switching = 3: 32 бита |
js_switch | 1 | Если js_switch = 1, выбирается Joint Stereo (разница каналов), даже если задействовано MCC (mc_coding) |
num_bytes_diff_float | 32 | Присутствует, только когда floating = 1: Число байтов для diff_float_data |
5.1.3 block_data
Блочные данные определяют тип блока (нормальный, постоянный, тишина) и в основном содержат индексы кода, порядок прогнозирующего устройства, коэффициенты прогнозирующего устройства и кодированные остаточные значения. Синтаксис block_data определяется в таблице 3, его элементы описываются в таблице 11.
Таблица 11 - Элементы block_data
|
|
|
Поле | Количество битов | Описание/Значения |
block_type | 1 | 1 - нормальный блок
0 - нуль / постоянный блок |
const_block | 1 | Только если block_type = 0:
1 - постоянный блок
0 - нулевой блок (тишина) |
js_block | 1 | Блок содержит разностный сигнал объединенного стерео |
const_val | 8, 16, 24, 32 | Постоянная величина выборки этого блока |
ec_sub | 0..2 | Число субблоков для кодирования энтропии.
Количество битов = bgmc_mode + sb_part
Если количество битов - 0: 1 субблок.
Если количество битов - 1:
0 - 1 субблок;
1 - 4 субблока.
Если количество битов = 2:
00 - 1 субблок;
01 - 2 субблока;
10 - 4 субблока;
11 - 8 субблоков |
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, на которое были сдвинуты вправо значения выборок этого блока:
0000 - 1 позиция
…
1111 - 16 позиций |
opt_order | 1...10 | Порядок прогнозатора для этого блока (длиной NB):
#Bits = min{ceil(log2(max_order+1));
max[ceil(log2((NB>>3)-1)), 1]}.
Количество битов ограничено как максимальным порядком (max_order), так и длиной блока NB |
LTPlag | 8, 9, 10 | Величины задержки LTP
Freg<96000, диапазон - 0..255, битов - 8
96000 Freg <192000, диапазон - 0..511, битов - 9 Freg 192000 диапазон - 0..1023, битов - 10 |
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 - Продолжение описания межканальных связей
1 - Прекращение описания |
master_channel_index | 1..16 | Индекс мастер-канала.
#Bits = ceil[log2(channels+1)],
где channels+1 является количеством каналов |
time_difference_flag | 1 | 0 - Трехотводный без задержки разновременности,
1 - Шестиотводный с задержкой разновременности |
weighting factor | Изменяется | Индексы коэффициента межканального взвешивания |
time_difference_sign | 1 | 0 - Положительный, 1 - отрицательный. "Положительный" означает, что эталонный канал задержан относительно канала кодирования |
time_difference_value | 5, 6, 7 | Канал кодирования.
Абсолютное значение задержки разницы времени
Freq<96000, диапазон - 3..34, битов - 5
96000 Freq <192000, диапазон - 3..66, битов - 6 Freq 192000 диапазон - 3..130, битов - 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
mono_frame - 1: CPE кодировано с моно RLS |
ext_mode | 1 | Параметры прогнозатора RLS-LMS обновляются в блоке расширения.
1 = = блок расширения
0 = = блок без расширения |
extension_bits | 3 | Тип параметров RLS-LMS, переносимых в блоке расширения:
extension&01 - порядки прогнозаторов RLS-LMS;
extension&02 - RLS_lambda и RLS_lambda_ra; extension&04 - LMS_mu и LMS_stepsize |
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] присутствует
0 - acf_flag[c] отсутствует |
acf_flag[c] | 1 | 1 - acf_mantissa[c] присутствует
0 - acf_mantissa[c] отсутствует |
acf_mantissa[c] | 23 | Полные данные о мантиссе общего множителя |
highest_byte[c] | 2 | Старшие ненулевые байты мантиссы во фрейме |
partA_flag[c] | 1 | 1 - в PartA существуют выборки
0 - в PartA не существует выборок или все они нулевые |
shift_amp[c] | 1 | 1 - shift_value[c] присутствует 0 - 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 - Выборки упакованы 2 - Выборки распакованы |
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 блоков.
Таблица 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 и используются инверсным фильтром прогноза для вычисления сигнала реконструкции без потерь. Вычислительная работа декодера зависит от порядка прогнозирующего устройства, выбранного кодером.
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.