ГОСТ Р 54711-2011
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Звуковое вещание цифровое
КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ
MPEG-1 ЧАСТЬ III (MPEG-1 AUDIO)
Digital sound broadcasting. Coding of sound broadcasting signals with redundancy reduction for transfer on digital communication channels. MPEG-1 part III (MPEG-1 audio)
ОКС 33.170
Дата введения 2013-07-01
Предисловие
1 РАЗРАБОТАН Санкт-Петербургским филиалом Центрального научно-исследовательского института связи "Ленинградское отделение" (ФГУП ЛО ЦНИИС)
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 480 "Связь"
3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ приказом Федерального агентства по техническому регулированию и метрологии от 13 декабря 2011 г. N 872-ст
4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта ИСО/МЭК 11172-3:1993* "Информационные технологии. Кодирование движущихся изображений и сопутствующего звука для цифровых носителей при скоростях до 1,5 Мбит/с. Часть 3. Аудио" (ISO/IEC 11172-3:1993 "Information technology - Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s - Part 3: Audio") [1]
5 ВВЕДЕН ВПЕРВЫЕ
Правила применения настоящего стандарта установлены в ГОСТ Р 1.0-2012 (раздел 8). Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте национального органа Российской Федерации по стандартизации в сети Интернет (gost.ru)
1 Область применения
Настоящий стандарт определяет кодированное представление высококачественного звукового сигнала на цифровых носителях и метод его восстановления и относится к сигналам с частотами дискретизации 32; 44,1 и 48 кГц.
Вход кодера и выход декодера совместимы с существующими стандартами ИКМ, такими как ГОСТ 28376-89, ГОСТ Р 50712-94.
Стандарт предназначен для регулирования отношений между оператором и пользователем в процессе установления соединения, в части выполнения технических требований к электрическим параметрам, определяющим качество каналов и трактов звукового вещания с полосой передаваемых частот до 20000 Гц.
Настоящий стандарт используется при проектировании, вводе в эксплуатацию и техническом обслуживании каналов и трактов звукового вещания, организуемых в наземных и спутниковых линиях связи (ГОСТ Р 52742-2007 и ГОСТ Р 53537-2009).
Действие настоящего стандарта распространяется на услуги местной, внутризоновой, междугородной и международной сети звукового вещания, независимо от используемой сетевой технологии, что способствует обеспечению целостности сетей звукового вещания, устойчивости работы сети, выполнению норм на основные электрические параметры при разработке и проектировании каналообразующей аппаратуры звукового вещания.
Показатели, определенные настоящим стандартом, являются базовыми для профессиональной и бытовой аппаратуры - проигрывателей компакт-дисков, усилителей сигналов звуковой частоты и другого оборудования с высоким качеством звука.
2 Нормативные ссылки
В настоящем стандарте использованы нормативные ссылки на следующие стандарты:
ГОСТ Р 52742-2007 Каналы и тракты звукового вещания. Типовые структуры. Основные параметры качества. Методы измерений
ГОСТ Р 53537-2009 Звуковое вещание. Основные электрические параметры каналов и трактов студийного качества (с полосой частот 20...20000 Гц)
ГОСТ Р 28376-89* Компакт-диск. Параметры и размеры
ГОСТ Р 50712-94 Соединительные линии и аппаратные звукового вещания. Технические характеристики. Методы измерений
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодно издаваемому информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по соответствующим выпускам ежемесячно издаваемого информационного указателя за текущий год. Если ссылочный стандарт заменен (изменен), то при пользовании настоящим стандартом следует руководствоваться замененным (измененным) стандартом. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения, символы и сокращения
3.1 Термины и определения
В настоящем стандарте применены следующие термины и сокращения с соответствующими определениями:
3.1.1 аудиобуфер: Буфер в декодере, предназначенный для хранения сжатых аудиоданных.
3.1.2 аудиопоследовательность: Непрерывная последовательность аудио фреймов, в которых следующие параметры не меняются:
- ID;
- Уровень;
- частота дискретизации;
- для уровней I и II индекс скорости передачи.
3.1.3 барк: Единица измерения ширины критических полос. Переход к шкале барков от шкалы звуковых частот.
3.1.4 блок доступа к аудиоданным: Для Уровней I и II блок доступа к аудиоданным определяется как самая меньшая часть кодированного потока битов, которая может декодироваться отдельно, в ней под результатом декодирования понимается полностью восстановленный звук. Для Уровня III блок доступа к аудиоданным является частью потока битов, который декодируется с использованием ранее полученной основной информации.
3.1.5 блочное компандирование: Нормирование цифрового представления звукового сигнала в пределах определенного периода времени.
3.1.6 быстрое преобразование Фурье (БПФ): Быстрый алгоритм расчета коэффициентов преобразования Фурье.
3.1.7 гибридный набор фильтров: Последовательная комбинация набора полосовых фильтров и МДКП.
3.1.8 гранула, Уровень II: Набор из трех последовательных отсчетов каждой из 32 субполос, которые объединяются перед квантованием, что соответствует 96 отсчетам ИКМ.
3.1.9 гранула, Уровень III: 576 частотных линий.
3.1.10 декодер: Устройство, в котором реализуется процесс декодирования.
3.1.11 декодирование: Процесс, выполняемый в соответствии с настоящим стандартом, при котором считываемые кодированные данные преобразуются в отсчеты звукового сигнала.
3.1.12 дополнение бит (байт): Биты стаффинга, кодовые комбинации, которые могут быть добавлены в поток сжатых данных и затем отброшены в процессе декодирования. Их назначение в согласовании потока со скоростью передачи.
3.1.13 дискретизация: Дискретизация, выполняемая в соответствии с теоремой Котельникова - Найквиста.
3.1.14 заполнение нулями: Способ скорректировать среднюю длину звукового фрейма в соответствии с продолжительностью выборки ИКМ-отсчетов за счет дополнения нулями.
3.1.15 запрещенный: Термин "запрещенный" относится к символам кодовой последовательности, которые никогда не должны использоваться во избежание совпадения с синхрословами.
3.1.16 зарезервированный: Термин "зарезервированный" указывает на то, что значение может использоваться в будущем для определенных расширений.
3.1.17 звуковое вещание (ЗВ): Передача звуковой информации общего назначения широкому кругу территориально рассредоточенных слушателей.
3.1.18 зеркальная составляющая: Зеркально отраженная составляющая спектра, возникающая в результате элайзинга.
3.1.19 индекс масштабного коэффициента: Числовой код для масштабного коэффициента.
3.1.20 канал: Цифровая среда, которая хранит или транспортирует поток данного стандарта.
3.1.21 канал звукового вещания (КЗВ): Канал, образованный в цифровых или аналоговых системах передачи.
3.1.22 код Хаффмана: Вид энтропийного кодирования.
3.1.23 кодер: Устройство, в котором реализуется процесс кодирования.
3.1.24 кодирование: Процесс, не определенный в данном стандарте, при котором звуковые отсчеты считываются и преобразуются в кодированный поток битов, как определено в стандарте.
3.1.25 кодирование с переменной длиной слова (VLC): Обратимая процедура кодирования, в результате которой более короткие кодовые комбинации присваиваются наиболее частым событиям и более длительные кодовые комбинации - менее частым событиям.
3.1.26 кодирование Joint Stereo: Метод устранения стереофонической избыточности.
3.1.27 кодированный звуковой поток: Кодированное представление звукового сигнала согласно настоящему стандарту.
3.1.28 коэффициент МДКП: Амплитуда определенной косинусной базисной функции.
3.1.29 критическая полоса: Психоакустическая величина в частотной области, которая соответствует частотной избирательности человеческого уха. Эта избирательность выражается в Барках.
3.1.30 маскирование: Свойство слуховой системы человека, исключающее прием звукового сигнала в присутствии другого звукового сигнала.
3.1.31 масштабный коэффициент: Величина, на которую делится набор значений перед квантованием.
3.1.32 модифицированное дискретное косинусное преобразование (МДКП): Преобразование Фурье, основанное на IV типе косинусного преобразования (ДКП-IV) с дополнительным свойством наложения.
3.1.33 набор фильтров: Набор полосовых фильтров, перекрывающих весь диапазон звуковых частот.
3.1.34 набор фильтров анализа: Набор фильтров в кодере, с помощью которого ИКМ-отсчеты широкополосного звукового сигнала преобразуются в ряд прореженных отсчетов на выходе каждого фильтра.
3.1.35 набор фильтров синтеза: Набор фильтров в декодере, который восстанавливает ИКМ-отсчеты звукового сигнала из субполосных отсчетов.
3.1.36 нетональный компонент: Шумоподобный компонент звукового сигнала.
3.1.37 нижний предел: Самая низкая субполоса, в которой используется кодирование стерео.
3.1.38 обратное модифицированное дискретное косинусное преобразование (ОМДКП): Преобразование, обратное МДКП.
3.1.39 окно Ханна: Оконная функция, которая применяется к выборке отсчетов звукового сигнала перед преобразованием Фурье.
3.1.40 переквантование: Декодирование кодированных субполосных отсчетов для восстановления исходных квантованных значений.
3.1.41 побайтное выравнивание: Бит потока данных обладает побайтным выравниванием, если его позиция кратна 8 с начала потока.
3.1.42 полифазный набор фильтров: Набор фильтров с равной шириной полос пропускания.
3.1.43 полоса масштабного коэффициента: Ряд частотных линий в Уровне III, для которых используется один масштабный коэффициент.
3.1.44 порог маскирования: Функция частоты и времени, определяющая порог, ниже которого звуковой сигнал не может быть воспринят слуховой системой человека.
3.1.45 пост-коррекция: Фильтрация, применяемая к звуковому сигналу после хранения или передачи для предотвращения линейных искажений, вызванных пред-коррекцией.
3.1.46 пред-коррекция: Фильтрация, применяемая к звуковому сигналу перед хранением или передачей для улучшения отношения сигнал-шум на высоких частотах.
3.1.47 преобразование: Преобразование звукового сигнала из временной области в частотную путем субполосной фильтрации и/или МДКП.
3.1.48 программа: Совокупность передач, составленных по определенному плану.
3.1.49 психоакустическая модель: Математическая модель маскирующих свойств слуховой системы человека.
3.1.50 распределение битов: Распределение битов между полосами в соответствии с результатами психоакустического расчета.
3.1.51 распределение шумов квантования: Распределение шумов квантования между частотными полосами в соответствии с результатами психоакустического расчета.
3.1.52 режим двойного канала: Режим, при котором два звуковых канала с независимым содержанием программы (например двуязычный) кодируются в пределах одного потока битов. Процесс кодирования аналогичен используемому в режиме стерео.
3.1.53 режим stereo: Режим кодирования, при котором два звуковых канала, формирующих стереопару (левый и правый каналы), кодируются в пределах одного потока битов. Процесс кодирования аналогичен процессу в режиме двойного канала.
3.1.54 режим intensity stereo: Метод устранения избыточности в стереофонических звуковых программах, основанный на сохранении на высоких частотах только огибающей энергетического спектра сигналов правого и левого каналов.
3.1.55 режим joint stereo: Режим алгоритма кодирования звуковых сигналов, использующий кодирование joint stereo.
3.1.56 режим MS stereo: Метод устранения избыточности в стереофонических звуковых программах, основанный на кодировании суммарного и разностного сигналов вместо сигналов левого и правого каналов.
3.1.57 свободный формат: Передача данных со скоростью, отличной от скоростей передачи определенных в стандарте, меньшей, чем максимальная допустимая скорость передачи для каждого уровня.
3.1.58 сжатие: Сокращение разрядности элементов данных.
3.1.59 синхрослово: 12-разрядная комбинация в потоке битов, которая идентифицирует начало кадра.
3.1.60 скорость передачи: Скорость, с которой сжатый поток данных передается от носителя к входу декодера.
3.1.61 слот: Элементарная часть потока битов. В Уровне I слот равен четырем байтам, в Уровнях II и III - одному байту.
3.1.62 служебная информация: Информация, передаваемая в потоке, необходимая для управления декодером.
3.1.63 соединительная линия (СЛ): Канал ограниченной протяженности между различными аппаратными, а также между аппаратной и передатчиком.
3.1.64 субполоса: Часть звукового диапазона.
3.1.65 субполосные отсчеты: Прореженные отсчеты на выходе набора субполосных фильтров кодера звуковых сигналов называют субполосными отсчетами. Из 384 временных отсчетов на входе набора фильтров образуется по 12 отсчетов на выходе каждой из 32 субполос.
3.1.66 субполосный набор фильтров: Ряд полосных фильтров, покрывающих весь диапазон звуковых частот. В данном стандарте под субполосным набором фильтров понимается полифазный набор.
3.1.67 тональный компонент: Компонент звукового сигнала, близкий к синусоиде.
3.1.68 тройка: Три последовательных субполосных отсчета одной субполосы.
3.1.69 уровень: Один из уровней в иерархии кодирования звуковой системы, определенный в [1].
3.1.70 фрейм: Часть ИКМ звукового сигнала из элемента доступа.
3.1.71 функция маскирования: Функция, описывающая распределение маскирования в частотной области.
3.1.72 циклический избыточный код (cyclic redundancy check; CRC): Код, используемый в методе обнаружения ошибок в передаваемом сообщении, заключающемся в сравнении остатков от деления блоков кодовой последовательности на фиксированный делитель, производимого на передающей и приемной сторонах.
3.1.73 элемент доступа: В случае сжатых звуковых данных элемент доступа представляет собой звуковые данные.
3.1.74 энтропийное кодирование: Кодирование без потерь с переменной длиной кодового слова в целях уменьшения статистической избыточности цифрового сигнала.
3.2 Символы и сокращения
3.2.1 Арифметические операторы
Математические операторы, используемые в настоящем стандарте, аналогичны используемым в языке программирования С. Однако целочисленное деление с усечением и округление определены особым образом. Побитные операторы определяются с учетом представления чисел в дополнительном коде. Нумерация и счетчики циклов обычно начинаются с нуля.
+ Сложение.
- Вычитание (как бинарный оператор) или отрицание (как унарный оператор).
++ Инкремент.
- - Декремент.
* Умножение.
^ Возведение в степень.
/ Целочисленное деление с округлением к меньшему по модулю целому. Например, 7/4 и -7/4 округляются до единицы, а -7/4 и 7/-4 округляются до минус одного.
// Целочисленное деление с округлением к ближайшему целому числу. Полуцелые числа округляются в сторону ближайшего большего по модулю числа, если не указано другое. Например, 3//2 округляется до двух, а -3//2 округляется до минус двух.
DIV | Целочисленное разделение с округлением результата в сторону . | |
| | | Абсолютное значение. | , когда 0; |
|
| 0, когда 0; |
|
| , когда 0. |
% | Деление с остатком. Операция определена только для положительных чисел. |
NINT( ) | Округление до ближайшего целого. Возвращает самое близкое к вещественному аргументу целочисленное значение. Полуцелые числа округляются в сторону от нуля. |
sin | Синус. |
cos | Косинус. |
ехр | Экспонента. |
Квадратный корень. | |
Ig | Логарифм по основанию 10. |
In | Натуральный логарифм. |
Логарифм по основанию 2. |
3.2.2 Логические операторы
|| | Логическое ИЛИ. |
&& | Логическое И. |
! | Логическое НЕ. |
3.2.3 Операторы сравнения
> | Больше. |
> = | Больше или равно. |
< | Меньше. |
<= | Меньше или равно. |
== | Равно. |
! = | Не равно. |
max [,...,] | Максимальное значение. |
min [,...,] | Минимальное значение. |
3.2.4 Побитные операторы
Использование побитных операций подразумевает представление чисел в дополнительном коде.
& | Подбитное И. |
| | Подбитное ИЛИ. |
>> | Сдвиг вправо. |
<< | Сдвиг влево. |
3.2.5 Оператор присвоения
= | Оператор присвоения. |
3.2.6 Мнемоники
Следующие мнемоники подлежат определению для описания различных типов данных, используемых в кодированном потоке битов.
bslbf | Битовая строка, младший бит слева в соответствии с настоящим стандартом. Битовые строки пишутся как строка единиц и нулей внутри одинарных кавычек, например ’1000 0001’. Пробелы внутри битовой строки вводятся для удобства чтения и не имеют никакого значения. |
ch | Канал. Если ch имеет значение 0, это соответствует левому каналу стереопары или первому из двух независимых каналов. |
nch | Количество каналов: равно 1 для single_channel mode, 2 - в других режимах. |
gr | Гранула 3 * 32 субполосных отсчета в Уровне II звукового сигнала, 18 * 32 субполосных отсчета в Уровне III. |
main_data | Часть потока битов, которая содержит масштабные коэффициенты, кодированные методом Хаффмана данные и дополнительную информацию. |
main_data_beg | Указатель на начало main_data внутри фрейма. Равен позиции конца main_data предыдущего фрейма плюс один бит. Вычисляется из main_data_end значения предыдущего фрейма. |
part2_length | Количество main_data бит, используемых для масштабных коэффициентов. |
rpchof | Коэффициенты остатка от деления на порождающий полином, сначала следует коэффициент высшего порядка. |
sb | Субполоса. |
sblimit | Номер самой низкой субполосы, для которой не были выделены биты. |
scfsi | Информация о выборе масштабного коэффициента. |
switch_point_l | Номер полосы масштабных коэффициентов (полоса "длинного" блока), с которой используется переключение окон. |
switch_point_s | Номер полосы масштабных коэффициентов (полоса "короткого" блока), с которой используется переключение окон. |
uimsbf | Целое число без знака, старший бит первый. |
vlclbf | Код с переменной длиной слова, левый бит первый, где "левый" относится к порядку, в котором пишутся коды с переменной длиной. |
window | Номер текущего временного интервала в случае block_type == 2 , 0 window 2 . |
В многобайтовых словах старший байт является первым.
3.2.7 Константы
3.3 Метод описания синтаксиса потока битов
Поток битов, полученный декодером, описывается в подразделе 5.1. Каждый элемент данных описывается именем, длиной в битах, мнемоникой типа и порядком передачи.
Действие, вызванное декодируемым элементом данных в потоке битов, зависит от значения этого элемента данных и элементов данных, декодируемых ранее. Декодирование элементов данных и определение параметров состояния, используемых в их декодировании, описываются в подразделе 5.2.
В этом синтаксисе используется принятое в языке С соглашение о том, что переменная или выражение, возвращающие ненулевое значение, эквивалентны результату "истина".
Для выражения условия присутствия элементов данных используются следующие конструкции:
Если "истина", то группа элементов данных появляется в потоке данных. Это повторяется, пока условие не "ложь". | |
Элемент данных всегда существует, по крайней мере один раз. | |
Элемент данных повторяется при условии "истина". | |
Если условие "истина", то первая группа элементов данных появляется затем в потоке данных. | |
Если условие "истина" не сохраняется, то вторая группа элементов данных появляется затем в потоке данных. | |
Является инициализирующим выражением цикла.
Обычно оно определяет начальное состояние счетчика.
Является условием, определяющим проверку перед каждой итерацией цикла. Цикл завершается, когда условие "не истина".
expr3 является выражением, которое выполняется в конце каждой итерации цикла, обычно оно инкрементирует счетчик. |
Следует обратить внимание на наиболее распространенные варианты использования этой конструкции:
Группа элементов данных появляется n раз. Условия в пределах группы элементов данных могут зависеть от значения переменной управления циклом i, которая обнуляется при первом появлении, увеличивается на 1 при втором появлении и т.д. |
Как отмечено, группа элементов данных может содержать вложенные условные конструкции. Для компактности скобки { } могут быть опущены, когда следует только один элемент данных.
data_element [ ] | Является массивом данных.
Количество элементов массива зависит от контекста. |
data_element [n] | Является (n+1)-м элементом массива данных. |
data_element [m][n] | Является элементом (m+1)-й строки (n+1)-го столбца двухмерного массива данных. |
data_element [l][m][n] | Является (I+1), (m+1), (n+1)-м элементом трехмерного массива данных. |
data_element [m…n] | Биты массива data_element с m по n включительно. |
Знание самого синтаксиса потока битов в 5.3 не следует считать достаточным для декодирования. В частности, это лишь определяет корректный и свободный от ошибок входной поток битов. Реальные декодеры для того, чтобы правильно начать декодирование, должны иметь средства обнаружения стартовых последовательностей.
bytealigned( ) | Возвращает 1, если текущая позиция находится на границе байта, так что следующий бит потока будет первым битом нового байта. В противном случае функция возвращает 0. |
nextbits( ) | Реализует сравнение строки битов со строкой битов на входе декодера. |
next_start_code( ) | Удаляет все нулевые биты и биты стаффинга и определяет положение следующего синхрослова. |
Эта функция проверяет, является ли текущая позиция побайтно выровненной. Иначе присутствуют нулевые биты стаффинга. Это означает, что перед синхрословом может присутствовать любое количество нулевых байтов. В связи с этим синхрослово всегда является побайтно выровненным и ему может предшествовать любое число нулевых битов стаффинга.
4. Структура цифровой обработки звуковых сигналов
4.1 Кодирование
Кодер обрабатывает цифровой звуковой сигнал и создает поток сжатых данных для хранения. Алгоритм кодера не подлежит стандартизации и может использовать различные способы оценки слухового маскирования, квантования и масштабирования. Однако формат данных на выходе кодера должен соответствовать спецификациям раздела 5 в целях корректного использования в звуковых приложениях.
Рисунок 1 - Общая структура кодера
Рисунок 1 иллюстрирует структуру кодера звуковых сигналов. Отсчеты звукового сигнала поступают на вход кодера. В блоке частотно-временного преобразования сигнал разделяется на полосы с децимацией субполосных отсчетов. Отсчеты на выходе блока частотно-временного преобразования могут быть названы субполосными отсчетами (как на Уровне I или II, см. ниже) или коэффициентами частотно-временного преобразования (как на Уровне III). Психоакустическая модель создает ряд данных, позволяющих управлять квантованием и кодированием. Эти данные различаются в зависимости от фактической реализации кодера. Один из возможных вариантов состоит в использовании оценки порога маскирования для управления квантованием. Блок квантования и кодирования производит символы кода из отсчетов на выходе блока частотно-временного преобразования. Этот блок также может зависеть от конкретного кодера. Блок формирования кадра добавляет данные текущего блока к выходным данным других блоков, а также другую информацию (например данные для коррекции ошибок) в случае необходимости.
Существует четыре различных режима работы кодера: моно; два канала (два независимых звуковых сигнала, кодированные в пределах одного потока битов); стерео (левые и правые сигналы стереопары, кодированной в пределах одного потока битов); и joint stereo (левые и правые сигналы стереопары, кодированной в пределах одного потока битов с устранением пространственной избыточности).
4.2 Уровни
Уровень I
В этом уровне используется:
- частотно-временное преобразование на основе разделения входного сигнала на 32 поддиапазона;
- фиксированная длина кодируемой выборки, психоакустическая модель, управляющая процессом адаптивного распределения битов и квантованием на основе блочного компандирования;
- формирование потока данных.
Минимальное теоретическое время задержки при кодировании/декодировании для Уровня I составляет приблизительно 19 мс.
Уровень II
В этом уровне используется дополнительное кодирование информации о распределении битов, масштабирующих коэффициентов и отсчетов. Применяются различные размеры выборок. Минимальное теоретическое время задержки при кодировании/декодировании для Уровня II составляет приблизительно 35 мс.
Уровень III
В этом уровне используется гибридный набор фильтров с повышенной разрешающей способностью по частоте. Добавлены неравномерное квантование, адаптивное разделение сигнала на кадры и энтропийное кодирование. Минимальное теоретическое время задержки при кодировании/декодировании для Уровня III составляет приблизительно 59 мс.
Joint Stereo может быть добавлено как дополнительная функция к любому из уровней.
4.3 Хранение
Различные потоки кодированного видео, кодированного звукового сигнала, данных синхронизации, системных данных и дополнительных данных могут быть сохранены вместе на носителе. Процесс редактирования звуковых сигналов упростится при наличии адресации.
Использование данных может подразумевать удаленный доступ. При этом взаимодействие должно осуществляться через устройство управления, отличное от самого декодера. Это устройство управления должно воспринимать пользовательские команды, считывать и интерпретировать информацию о структуре базы данных, считывать информацию с носителей, демультиплексировать информацию, отличную от звуковой, и передавать аудиоданные к аудиодекодеру с требуемой скоростью считывания.
4.4 Декодирование
Декодер принимает сжатые аудиоданные согласно 5.1, декодирует элементы данных согласно 5.2 и использует информацию для вывода цифрового звукового сигнала согласно 5.3.
Рисунок 2 - Общая структура декодера
Рисунок 2 иллюстрирует базовую структуру декодера звуковых сигналов. Данные поступают в декодер и подлежат проверке на наличие ошибок, если при кодировании это было предусмотрено (см. 5.2.4). Затем они распаковываются для восстановления различных частей информации. Блок реконструкции восстанавливает квантованные коэффициенты преобразования. С помощью обратного частотно-временного преобразования эти коэффициенты преобразуются в ИКМ-отсчеты.
5 Технические требования
5.1 Спецификация кодированного звукового потока
5.1.1 Звуковая последовательность
5.1.2 Звуковой фрейм
5.1.3 Заголовок
5.1.4 Проверка на ошибки
5.1.5 Данные звукового сигнала/Уровень I
5.1.6 Данные звукового сигнала. Уровень II
Окончание таблицы 5.1.6
5.1.7 Данные звукового сигнала. Уровень III
Окончание таблицы 5.1.7
Ниже определяется структура основного потока битов данных. Поле main_data в audio_data( ) содержит байты основных данных. Однако из-за свойств кодов Хаффмана, используемых на Уровне III, основные данные кадра обычно не следуют непосредственно за заголовком и служебной информацией об этом кадре. Данные main_data начинаются в потоке битов перед заголовком фрейма при отрицательном смещении, заданном значением main_data_beg.
Окончание таблицы
Окончание таблицы
5.1.8 Дополнительные данные
5.2 Семантика потока звуковых сигналов
5.2.1 Общая последовательность данных звуковых сигналов
Фрейм:
- Уровни I и II: | Часть потока битов, декодируемая с использованием данных, которые содержатся только в ней самой. Уровень I содержит информацию о 384 отсчетах.
Уровень II - о 1152 отсчетах. Начинается с синхрослова и заканчивается непосредственно перед следующим синхрословом. Состоит из целого числа слотов (четыре байта на Уровне I, один байт на Уровне II). |
- Уровень III: | Часть потока битов, декодируемая с использованием ранее полученной основной информации. На Уровне III она содержит информацию о 1152 отсчетах.
Несмотря на то что расстояние между соседними синхрословами равно целому числу слотов (один байт на Уровне III), аудиоданные одного фрейма обычно не содержатся между двумя соседними синхрословами. |
5.2.2 Звуковой фрейм
header - Часть потока битов, содержащая синхронизацию и информацию о состоянии.
error_check - Часть потока битов, содержащая информацию для обнаружения ошибок.
audio_data - Часть потока битов, содержащая информацию об отсчетах звукового сигнала.
ancillary_data - Часть потока битов, которая может использоваться для дополнительных данных.
5.2.3 Заголовок
Первые 32 бита (четыре байта) являются заголовком, который одинаков для всех уровней.
syncword - Синхрослово, битовая строка ’1111 1111 1111 1111’.
ID - Идентификатор алгоритма. Равен ’1’ для ISO/IEC11172-3 Аудио, значение ’0’ зарезервировано. layer - 2 бита, определяющие используемый уровень:
Уровень |
|
’11’ | Уровень I |
’10’ | Уровень II |
’01’ | Уровень III |
’00’ | Зарезервировано |
При смене уровня допустим сброс декодера.
protection_bit - Бит, определяющий дополнение нулями, для упрощения обнаружения и устранения ошибок. Равен 1, если дополнение отсутствует, 0 - если таковое присутствует.
bitrate_index указывает на полную скорость передачи независимо от режима (стерео, joint_stereo, dual_channel, single_channel):
bitrate_index | Скорость передачи, кбит/с | ||
| Уровень I | Уровень II | Уровень III |
’0000’ | Свободный | Свободный | Свободный |
’0001’ | 32 | 32 | 32 |
’0010’ | 64 | 48 | 40 |
’0011’ | 96 | 56 | 48 |
’0100’ | 128 | 64 | 56 |
’0101’ | 160 | 80 | 64 |
’0110’ | 192 | 96 | 80 |
’0111’ | 224 | 112 | 96 |
’1000’ | 256 | 128 | 112 |
’1001’ | 288 | 160 | 128 |
’1010’ | 320 | 192 | 160 |
’1011* | 352 | 224 | 192 |
’1100’ | 384 | 256 | 224 |
’1101’ | 416 | 320 | 256 |
’1110’ | 448 | 384 | 320 |
’1111’ | Запрещено | Запрещено | Запрещено |
Для обеспечения минимально возможной задержки декодер не обязан поддерживать плавное изменение скорости передачи на Уровне I или II. Уровень III поддерживает переменную скорость передачи с переключением bitrate_index. Переключать bitrate_index можно либо для оптимизации требования хранения данных на цифровом носителе, либо для интерполяции произвольной средней скорости передачи данных путем переключения между соседними значениями в таблице скорости передачи. Однако при использовании свободного формата скорость передачи должна быть фиксированной. Декодер, работая в свободном режиме, не обязан поддерживать скорости передачи выше 448 кбит/с, 384 кбит/с и 320 кбит/с на Уровнях I, II и III соответственно.
Для Уровня II разрешены не все возможные комбинации скорости передачи и режима (см. следующую таблицу):
Скорость передачи, кбит/с | Разрешенные режимы |
Свободный формат | Все режимы |
32 | Single_channel |
48 | Single_channel |
56 | Single_channel |
64 | Все режимы |
80 | Single_channel |
96 | Все режимы |
112 | Все режимы |
128 | Все режимы |
160 | Все режимы |
192 | Все режимы |
224 | Стерео, intensity_stereo, dual_channel |
256 | Стерео, intensity_stereo, dual_channel |
320 | Стерео, intensity_stereo, dual_channel |
384 | Стерео, intensity_stereo, dual_channel |
sampling_frequency - Устанавливает частоту дискретизации, согласно данным следующей таблицы:
Частота дискретизации | Частота, кГц |
’00’ | 44,1 |
’01’ | 48 |
’10’ | 32 |
’11’ | Зарезервировано |
При смене частоты дискретизации возможен сброс звукового декодера.
padding_bit - Если этот бит равен ’1’, фрейм содержит дополнительный слот для подстройки средней скорости передачи к частоте дискретизации, иначе - бит равен ’0’. Дополнение нулями необходимо при частоте дискретизации 44,1 кГц. Дополнение нулями может также требоваться в свободном формате.
Дополнение нулями должно быть применено к потоку битов так, чтобы суммарная длина кодированных фреймов, после определенного количества аудиофреймов не отклонялась более чем на +0, минус 1 слот от следующего вычисленного значения:
Следующий метод может использоваться для определения необходимости дополнения нулями:
для 1-го аудиофрейма:
rest = 0;
padding = нет;
для каждого последующего аудиофрейма:
private_bit - Бит для личного пользования.
mode - Определяет режим согласно следующей таблице. На Уровнях I и II режим joint_stereo является intensity_stereo, а на Уровне III, это - intensity_stereo и/или ms_stereo.
mode | Режим |
’00’ | Стерео |
’01’ | joint_stereo (intensity_stereo и/или ms_stereo) |
’10’ | dual_channel |
’11’ | Моно |
На Уровне I во всех режимах кроме joint_stereo, значение bound равно 32. На Уровне II во всех режимах, кроме joint_stereo, значение bound равно sblimit. В режиме joint_stereo bound определяется по mode_extension.
mode_extension - Эти биты используются в режиме joint_stereo. На Уровнях I и II они указывают, какие субполосы находятся в режиме intensity_stereo. Все другие субполосы кодируются в режиме стерео:
mode_extension | Субполосы |
’00’ | Субполосы 4-31 в intensity_stereo, bound=4 |
’01’ | Субполосы 8-31 в intensity_stereo, bound=8 |
’10’ | Субполосы 12-31 в intensity_stereo, bound=12 |
’11’ | Субполосы 16-31 в intensity_stereo, bound=16 |
На Уровне III эти биты указывают тип применяемого метода joint_stereo. Частотные диапазоны, для которых применяются режимы intensity_stereo и ms_stereo, неявны в алгоритме:
mode_extension | intensity_stereo | ms_stereo |
’00’ | Выкл | Выкл |
’01’ | Вкл | Выкл |
’10’ | Выкл | Вкл |
’11’ | Вкл | Вкл |
Следует отметить, что режим stereo используется, если биты режима указывают на stereo или, что эквивалентно, если биты режима указывают на использование режима joint_stereo при mode_extension показывающем, что режимы intensity_stereo и ms_stereo выключены.
copyright - Если этот бит равен ’0’, не защищен авторским правом, ’1’ - авторские права защищены.
original/copy - Этот бит равен ’0’, если поток битов является копией, ’1’, если это оригинал.
emphasis - Указывает на тип частотной коррекции, который должен использоваться:
emphasis | Частотная коррекция |
’00’ | Нет |
’01’ | 50/15 мкс |
’10’ | Зарезервировано |
’11’ | CCITT J.17 |
5.2.4 Проверка на ошибки
crc_check - 16-битный код проверки четности используется для дополнительного обнаружения ошибок в кодированном потоке битов.
5.2.5 Звуковые данные. Уровень I
allocation [ch][sb] - Указывает количество битов, отведенных для кодирования отсчетов субполосы sb канала ch. Для субполос в режиме intensity_stereo в потоке содержится только один элемент распределения битов:
allocation [ch] [sb] | Бит на отсчет |
0 | 0 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
8 | 9 |
9 | 10 |
10 | 11 |
11 | 12 |
12 | 13 |
13 | 14 |
14 | 15 |
15 | Запрещено |
Код ’0000’ означает, что отсчеты субполосы не передаются.
scalefactor [ch] [sb] - Определяет коэффициент, на который должны быть умножены квантованные отсчеты субполосы sb канала ch. Шесть битов образуют беззнаковое целое, соответствующее номеру в таблице Б.1 "Масштабные коэффициенты. Уровни I и II".
sample[ch] [sb] [s] - Переквантованный отсчет s субполосы sb канала ch. Для субполос в режиме intensity_stereo кодированное представление допустимо для обоих каналов.
5.2.6 Звуковые данные. Уровень II
allocation [ch] [sb] - Содержит информацию о квантователях, используемых для отсчетов субполосы sb в канале ch, о том, была ли использована группировка трех последовательных отсчетов и о количестве битов, используемых для кодирования отсчетов. Значение и длина этого поля зависят от номера субполосы, скорости передачи и частоты дискретизации. Биты в этом поле образуют беззнаковое целое, соответствующее номеру в таблице Б.2а, данные которой определяют количество уровней квантования. Для субполос в режиме intensity_stereo поток битов содержит только один элемент данных выделения на субполосу.
scfsi [ch] [sb] - Содержит информацию о выборе масштабных коэффициентов, передаваемых для субполосы sb в канале ch, и о том, для каких частей фрейма они действительны. Фрейм делится на три равные части по 12 отсчетов в каждой субполосе:
scfsi[sb] | Масштабные коэффициенты |
’00’ | Передаются три коэффициента, для частей 0, 1, 2 соответственно |
’01’ | Передаются два коэффициента, первый для частей 0 и 1, второй для части 2 |
’10’ | Передается один коэффициент для всех трех частей |
’11’ | Передаются два коэффициента, первый для части 0, второй для частей 1 и 2 |
scalefactor [ch [sb] [р] - Указывает на коэффициент, на который должны быть умножены квантованные отсчеты субполосы sb в канале ch части фрейма р. Шесть битов составляют беззнаковое целое, соответствующее номеру в таблице Б.1 "Масштабные коэффициенты. Уровни I и II".
grouping [ch] [sb] - Функция, которая определяет использование группировки при кодировании отсчетов субполосы sb канала ch. Под группировкой понимается использование одного кодового слова вместо трех при кодировании трех последовательных отсчетов (тройки) текущей субполосы sb канала ch текущей гранулы gr. Grouping[ch][sb] возвращает истину, если в текущей таблице распределения битов (см. таблицу Б.2а) значение на пересечении строки sb и столбца allocation[sb] равно 3, 5 или 9. В противном случае функция возвращает ложь. Для субполос в режиме intensity_stereo группировка допустима для обоих каналов.
samplecode [ch] [sb] [gr] - Кодированное представление трех последовательных отсчетов субполосы sb канала ch гранулы gr. Для субполос в режиме intensity_stereo кодированное представление samplecode допустимо для обоих каналов.
sample [ch] [sb] [s] - Кодированное представление отсчета s субполосы sb канала ch. Для субполос в режиме intensity_stereo кодированное представление выборки допустимо для каналов.
5.2.7 Звуковые данные. Уровень III
main_data_begin - Значение main_data_begin используется для определения позиции первого бита основных данных фрейма. Значение main_data_begin указывает позицию как отрицательное смещение в байтах от первого байта синхронизации. Байты заголовка и дополнительной информации не учитываются. Например, если main_data_begin = 0, то основные данные начинаются после дополнительной информации.
private_bits - Биты для частного пользования. Количество private_bits зависит от числа каналов. Выделение битов для private_bits используется для увеличения общего количество битов дополнительной информации.
scfsi [ch] [scfsi_band] - На Уровне III информация о выборе масштабных коэффициентов аналогична информации для Уровня II. Основным различием является использование переменной scfsi_band для применения scfsi к группам масштабных коэффициентов вместо единичных коэффициентов. Использование масштабных коэффициентов для гранул определяется scfsi:
scfsi [scfsi_band] | Масштабные коэффициенты |
’0’ | Коэффициенты передаются для каждой гранулы |
’1’ | Коэффициенты, переданные для гранулы 0, также верны для гранулы 1 |
Если используются короткие окна, т.е. block_type == 2 для одной из гранул, то scfsi всегда равен 0 для этого фрейма.
scfsi_band Управляет информацией о выборе масштабных коэффициентов для групп масштабных коэффициентов (scfsi_bands):
scfsi_band | Полосы масштабных коэффициентов (см. таблицу Б.8) |
0 | 0, 1, 2, 3, 4, 5 |
1 | 6, 7, 8, 9, 10 |
2 | 11 ... 15 |
3 | 16 ... 20 |
part2_3_length [gr] [ch] - Это значение содержит число битов main_data, используемых для масштабных коэффициентов и данных кода Хаффмана. Поскольку размер дополнительных данных всегда постоянный, то это значение может использоваться для определения позиции начала основной информации для следующей гранулы или положения дополнительной информации (если она присутствует). Следует обратить внимание на то, что аудиофреймы одного канала содержат 17 байтов дополнительной информации, а аудиофреймы стереоканала содержат 32 байта дополнительной информации.
big_values [gr] [ch] - Спектральные значения каждой гранулы кодируются с использованием различных таблиц Хаффмана. Весь частотный диапазон от нуля до частоты Найквиста делится на несколько областей, которые затем кодируются при помощи различных таблиц. Разделение на области выполняется в соответствии с максимумами квантованных значений с учетом того, что значения на верхних частотах, как ожидается, будут иметь небольшие амплитуды или вообще не будут кодироваться. Начиная с верхних частот подсчитывается количество пар квантованных значений, равных нулю. Это число называют zero. Затем подсчитывается количество четверок квантованных значений с абсолютным значением, не превышающим 1 (то есть требующих только 3 возможных уровня квантования). Это число называют count1. В результате получается четное число. Наконец, число пар значений в нижней области спектра, вблизи нуля оси частот называется big_values. Максимальное абсолютное значение в этом диапазоне равно 8191. На следующем рисунке показано описываемое разделение:
global_gain [gr] [ch] - Информация о размере шага квантования передается в global_gain. Используется логарифмическое квантование.
scalefac_compress [gr] [ch] - Определяет число битов, используемых для передачи масштабных коэффициентов согласно следующей таблице:
scalefac_compress [gr] | slen1 | slen2 |
0 | 0 | 0 |
1 | 0 | 1 |
2 | 0 | 2 |
3 | 0 | 3 |
4 | 3 | 0 |
5 | 1 | 1 |
6 | 1 | 2 |
7 | 1 | 3 |
8 | 2 | 1 |
9 | 2 | 2 |
10 | 2 | 3 |
11 | 3 | 1 |
12 | 3 | 2 |
13 | 3 | 3 |
14 | 4 | 2 |
15 | 4 | 3 |
Значения slen1 и slen2 определяют следующее:
если block_type == 0, 1 или 3:
slen1 -длина масштабных коэффициентов для полос от 0 до 10;
slen2 - длина масштабных коэффициентов для полос 11-20;
если block_type == 2 и mixed_block_flag == 0:
slen1 - длина масштабных коэффициентов для полос от 0 до 5;
slen2 - длина масштабных коэффициентов для полос 6-11;
если block_type == 2 и mixed_block_flag == 1:
slen1 - длина масштабных коэффициентов для полос от 0 до 7 (длинное окно) и 3-5 (короткое окно);
slen2 - длина масштабных коэффициентов для полос 6-11 (короткое окно).
Примечание - Полосы 0-7 из таблицы полос с длинным окном. Полосы 3-11 из таблицы полос с коротким окном. Эта комбинация разделов непрерывна и охватывает весь спектр частот.
window_switching_flag [gr] [ch] - Указывает на то, что в блоке используется окно, отличное от нормального (тип 0).
Если флаг window_switching_flag установлен, то ряд других переменных устанавливается по умолчанию:
region0_count = 7 (в случае block_type == 1 или block_type == 3 или block_type == 2 и mixed_block_flag);
region0_count = 8 (в случае block_type == 2 и не mixed_block_flag);
regionl_count = 36 Таким образом, все оставшиеся значения области big_value содержатся в области 1.
Если флаг window_switching_flag не установлен, то значение block_type равно нулю.
block_type [gr] [ch] - Указывает на тип окна для гранулы (см. описание набора фильтров, Уровень III):
block_type [gr] | Тип окна |
0 | Зарезервировано |
1 | Начальный блок |
2 | 3 коротких окна |
3 | Конечный блок |
Block_type и mixed_block_flag содержат информацию об объединении значений в блоке и о длине и количестве преобразований. Если window_switching_flag == 1, то mixed_block_flag указывает, кодируются ли нижние субполосы полифазных фильтров с использованием нормального типа окна.
В случае длинных блоков (block_type не равно 2 или, для нижних субполос, block_type равно 2 при установленном флаге mixed_block_flag) ОМДКП образует 36 выходных значений для каждых 18 входных. Значения на выходе взвешиваются в окне в зависимости от block_type, и первая половина складывается со второй половиной предыдущего блока. Получающийся вектор значений одной полосы подается на вход блока полифазных фильтров синтеза.
В случае коротких блоков (для верхних субполос с block_type равен 2 при установленном флаге mixed_block_flag или для всех субполос с block_type равен 2 при сброшенном флаге mixed_block_flag) три преобразования выполняются, образуя 12 выходных значений каждое. Эти три вектора выходных значений взвешиваются в окне и складываются друг с другом. Добавление шести нулей к обоим концам результирующего вектора дает вектор длины 36, который обрабатывается как выход длинного преобразования.
mixed_block_flag [gr] [ch] - Указывает, что для нижних частот используется тип окна, который отличен от используемого на высоких частотах. Если mixed_block_flag равен 0, то все блоки преобразуются в соответствии с block_type [gr] [ch]. Если mixed_block_flag равен 1, то частотные линии, соответствующие двум самым нижним субполосам полифазного набора фильтров, преобразуются с нормальным окном (block_type==0), в то время как оставшиеся 30 субполос преобразуются с block_type [gr] [ch].
table_select [gr] [ch] [region] - Различные кодовые таблицы Хаффмана используются в зависимости от максимального квантованного значения и локальной статистики сигнала.
region0_count [gr] [ch] - Дальнейшее разделение спектра используется для улучшения производительности кодера Хаффмана. Делению подлежит область big_values. Цель этого деления состоит в том, чтобы получить лучшую устойчивость к ошибкам и лучшую эффективность кодирования. Используются три области - 0, 1 и 2. Каждая область кодируется с помощью отдельной таблицы Хаффмана в зависимости от максимального квантованного значения и статистических свойств сигнала.
Значения region0_count и regionl_count используются для указания на границы областей. Границы области выравниваются по полосам масштабных коэффициентов.
Поле region0_count содержит значение на единицу меньшее, чем количество полос масштабных коэффициентов в области 0. В случае коротких блоков каждая полоса масштабирующего коэффициента считается три раза, по разу на каждое короткое окно так, что region0_count, равное 8, указывает, что область 1 начинается с полосы номер 3.
Если block_type=2 и mixed_biock_flag=0, общее количество полос масштабных коэффициентов для гранулы в этом случае равно 12*3=36. Если block_type=2 и mixed_block_flag=1, количество полос равно 8+9*3=35. Если block_type!=2, количество полос масштабных коэффициентов равно 21.
region1_count [gr] [ch] - На единицу меньше числа полос масштабных коэффициентов в области 1. Если block_type = 2, то полосы масштабных коэффициентов, представляющие различные временные интервалы, считаются отдельно.
preflag [gr] [ch] - Флаг дополнительного усиления ВЧ квантованных значений. Если preflag установлен, значения таблицы добавляются к масштабным коэффициентам (см. таблицу Б.6). Это эквивалентно умножению повторно квантованных масштабных коэффициентов на табличные значения. Если block_type=2 ("короткие" блоки), preflag никогда не используется.
scalefac_scale [gr] | scalefac_multiplier |
0 | 0,5 |
1 | 1 |
countltable_select [gr] [ch] - Этот флаг определяет одну из двух возможных таблиц Хаффмана для области тетрад квантованных значений с величиной, не превышающей 1:
countltable_select [gr] | Таблица Хаффмана |
0 | Таблица Б.7 (А) |
1 | Таблица Б.7 (Б) |
scalefac_1 [gr] [ch] [sfb], scalefac_s [gr] [ch] [sfb] [window], is_pos [sfb] - Масштабные коэффициенты используются, чтобы окрасить шумы квантования. Правильная окраска шумов квантования позволяет полностью их маскировать. В отличие от Уровней I и II на Уровне III масштабные коэффициенты не несут информации о локальных максимумах квантованного сигнала. На Уровне III масштабные коэффициенты используются в декодере, чтобы получить коэффициенты, на которые будут разделены группы значений. В случае Уровня III группы расширяются на несколько спектральных линий. Эти группы называют полосами масштабных коэффициентов и они выбираются так, чтобы приблизить критические полосы настолько близко, насколько возможно.
Из таблицы scalefac_compress видно, что масштабные коэффициенты 0 ... 10 находятся в диапазоне от 0 до 15 (максимальная длина 4 бита) и масштабные коэффициенты 11... 21 - в диапазоне от 0 до 7 (максимальная длина 3 бита).
Если включен режим intensity_stereo (modebit_extension), масштабные коэффициенты части zero_ part разностного (правого) канала используются в качестве позиций intensity_stereo, is_pos [sfb]. is_pos [sfb] является позицией intensity_stereo для полосы sfb.
Разделение спектра на полосы масштабных коэффициентов фиксировано для каждой возможной длины блока и частоты дискретизации и сохранено в таблицах в кодере и декодере. Масштабным коэффициентом для спектральных линий выше самой высокой линии в таблицах является нуль, то есть фактический коэффициент равен 1,0.
Значения масштабных коэффициентов квантуются логарифмически. Шаг квантования устанавливается в scalefac_scale.
huffmancodebits( ) - Данные, закодированные с помощью кода Хаффмана.
Синтаксис huffmancodebits( ) показывает, как кодируются квантованные значения. В пределах участка big_values пары квантованных значений с абсолютным значением меньше 15 кодируются напрямую с использованием кода Хаффмана. Коды выбираются из таблиц Хаффмана с 0 по 31 в Б.7. Всегда кодируются пары значений (x, y). Если квантованные значения имеют амплитуду, большую или равную 15, то они кодируются раздельно. Если одно или оба значения пары отличны от нуля, один или два знаковых бита должны быть добавлены к кодовой комбинации.
Таблицы Хаффмана для big_values раздела состоят из трех параметров:
hcod [|x|] [|y|] | элемент таблицы значений кода Хаффмана для значений x, y. |
hlen [|x|] [|y|] | элемент таблицы длин кода Хаффмана для значений x, y. |
linbits | длина linbitsx или linbitsy, если они кодируются. |
Синтаксис для huffmancodebits содержит следующие поля и параметры:
signv | знак v (0 если положительный, 1, если отрицательный). |
signw | знак w (0 если положительный, 1, если отрицательный). |
signx | знак х (0 если положительный, 1, если отрицательный). |
signy | знак у (0 если положительный, 1, если отрицательный). |
linbilsx Используется для кодирования значения х, большего или равного 15. Это поле кодируется, только если |х| в hcod равен 15. Если linbits равно нулю, то есть никакие биты не были фактически кодированы при |х|==15, то значение linbitsx приравнивается к нулю.
linbitsy | To же самое, что и linbitsx, но для у. |
is[1] | Квантованное значение спектральной линии номер 1. |
Поля linbitsx или linbitsy используются только при кодировании значений, больших или равных 15. Эти поля интерпретируются как целые числа без знака и добавляются к 15, чтобы получить кодированное значение. Поля linbitsx и linbitsy никогда не используются, если выбрана таблица для блоков с максимальным квантованным значением меньше 15. Следует обратить внимание на то, что значение 15 все еще может быть закодировано таблицей Хаффмана, для которой linbits является нулем. В этом случае поля linbitsx или linbitsy не кодируются, так как linbits является нулем.
В пределах раздела count1 кодируются тетрады значений с амплитудой, меньшей или равной единице. Значения кодируются с использованием кодов Хаффмана из таблиц (А) или (Б) в таблицах Б.7. Снова для каждого ненулевого значения добавляется бит знака после символа кода Хаффмана.
Таблицы Хаффмана для раздела count1включают следующие параметры:
hcod [|v|] [|w|] [|x|] [|y|] | - Элемент таблицы значений кода Хаффмана для значений v, w, x, у. |
hlen [|v|] [|w|] [|x|] [|y|] | - Элемент таблицы длин кода Хаффмана для значений v, w, x, у. |
Таблица кода Хаффмана В не является настоящим 4-мерным кодом, потому что она создается из тривиального кода: 0 кодируется с 1, и 1 кодируется с 0.
Квантованные значения выше раздела count1 являются нулями, таким образом, они не кодируются.
Параметр count1 используется здесь для указания на число кодов Хаффмана в count1 области. Однако, в отличие от раздела bigvalues, число значений в разделе count1 не кодируется явным образом. Конец раздела count1 известен только тогда, когда все биты гранулы (определяемые part2_3_length) были исчерпаны и значение count1 становится точно известным после декодирования области count1.
Порядок следования данных кода Хаффмана зависит от block_type гранулы. Если block_type равен 0, 1 или 3, данные кода Хаффмана упорядочиваются по нарастанию частоты.
Если block _type=2 (короткие блоки), данные Хаффмана организуются в том же самом порядке, что и значения масштабных коэффициентов для гранулы. Данные Хаффмана даются для последовательных полос масштабных коэффициентов начиная с полосы 0. В пределах каждой полосы данные соответствуют последовательным временным окнам начиная с окна 0 и заканчивая окном 2. В пределах каждого окна квантованные значения располагаются в порядке увеличения частоты.
5.2.8 Дополнительные данные
Ancillary_bit - Бит, определяемый пользователем.
Количество дополнительных битов (no_of_ancillary_bits) равно доступному числу битов в аудиофрейме минус число битов заголовка, проверочных битов и аудиоданных. На Уровнях I и II no_of_ancillary_bits соответствует расстоянию между концом аудиоданных и началом следующего заголовка. На Уровне III no_of_ancillary_bits соответствует расстоянию между концом Huffman_code_bits и позицией в потоке, на которую ссылается указатель следующего фрейма main_data_begin.
5.3 Процесс декодирования данных звука
5.3.1 Общие сведения
Для Уровня I верно следующее равенство:
для Уровней II и III:
Биты режима должны быть считаны из потока, и если их значение равно ’01’, то также должны быть считаны биты mode_extension. Биты mode_extension, установленные в bound, указывают тем самым на субполосы, кодированные в режиме joint_stereo.
Если бит защиты в заголовке равен ’0’, проверочное слово CRC находится в потоке битов сразу после заголовка. В качестве метода обнаружения ошибок используется CRC 16 с порождающим полиномом
5.3.2 Уровень I
После части декодирования, общей для всех уровней, считывается информация о распределении битов для всех субполос и масштабные коэффициенты для субполос с ненулевым распределением битов. Блок-схема алгоритма декодера дана на рисунке А.1.
5.3.2.1 Переквантование субполосных отсчетов
Из информации о распределении битов известно число битов nb, которое должно быть считано из субполосных отсчетов. После того как биты одного отсчета были считаны из потока, первый бит инвертируется. Полученное таким образом число можно рассматривать как дробное число (меньше единицы) в дополнительном коде, где MSB представляет значение минус один. Переквантование выполняется по формуле
5.3.2.2 Субполосный фильтр синтеза
5.3.3 Уровень II
5.3.3.1 Декодирование информации о распределении битов
Уровень II является более эффективным, однако на нем используется более сложная схема кодирования по сравнению с Уровнем I. Блок-схема декодера, приведенная на рисунке А.1, применяется к Уровням I и II. Первым шагом является декодирование, общее для всех трех уровней (см. 5.3.1).
Для различных комбинаций скорости передачи и частоты дискретизации применяются различные таблицы распределения битов (таблица Б.2). Скорости передачи в заголовках таблицы даются на канал. Если используется режим, отличный от single_channel, значение скорости передачи должно быть разделено на два для получения скорости передачи на канал. Декодирование информации о распределении битов выполняется в три шага. Первый шаг заключается в чтении nbal (2, 3 или 4) бит информации для одной субполосы. Значение nbal дается во втором столбце таблицы Б.2. Эти биты должны интерпретироваться как беззнаковое целое. На втором шаге это число и номер субполосы используются как индексы таблицы для определения табличного значения, соответствующего количеству уровней квантования nlevels, которое применялось при квантовании отсчетов субполосы. На третьем шаге по таблице Б.4 определяется число битов, использованное для кодирования квантованных отсчетов, коэффициенты квантования и наличие группировки для трех последовательных отсчетов субполосы. Из таблиц распределения битов становится видно, что для некоторых самых верхних субполос никогда не будут выделены биты. Номер субполосы, выше которой включительно не будут выделяться биты, присваивается идентификатору sblimit.
5.3.3.2 Декодирование информации о выборе масштабных коэффициентов
36 отсчетов одной субполосы в пределах фрейма делятся на три равные части по 12 отсчетов. У каждой части может быть свой масштабный коэффициент. Количество масштабных коэффициентов, которое должно быть считано из потока битов, зависит от scfsi[sb].
Информация о выборе масштабных коэффициентов scfsi[sb] считывается из потока битов для субполос с ненулевым выделением битов. Если scfsi[sb] равно ’00’, то передаются три масштабных коэффициента для частей 0, 1, 2 соответственно. Если scfsi[sb] равно ’01’, то передаются два масштабных коэффициента, первый - для частей 0 и 1, второй - для части 2. Если scfsi[sb] равно ’10’, передается один масштабный коэффициент для всех трех частей. Если scfsi[sb] равно ’11’, передаются два масштабных коэффициента, первый - для части 0, второй - для частей 1 и 2.
5.3.3.3 Декодирование масштабных коэффициентов
Кодированные значения масштабных коэффициентов для каждой субполосы с ненулевым выделением битов считываются из потока битов. Количество кодированных масштабных коэффициентов и часть субполосных отсчетов, к которым они относятся, определяются с помощью scfsi[sb]. 6 битов кодированного значения масштабного коэффициента интерпретируются как беззнаковое целое, соответствующее номеру в таблице Б.1. Из этой таблицы определяется масштабный коэффициент, на который соответствующие субполосные отсчеты должны быть умножены после переквантования.
5.3.3.4 Переквантование субполосных отсчетов
где nlevels - количество шагов (см. таблицу Б.2).
Первый бит каждого из трех кодовых слов должен быть инвертирован, и полученные значения должны быть интерпретированы как дробные значения в дополнительном коде, где MSB представляет значение минус один. Переквантование выполняется с помощью линейного выражения:
5.3.3.5 Субполосный фильтр синтеза
5.3.4 Уровень III
5.3.4.1 Декодирование
Дополнительная разрешающая способность по частоте обеспечивается с помощью гибридного набора фильтров. Каждая полоса при помощи МДКП разделяется на 18 частотных линий. Длина окна МДКП составляет 36 отсчетов. Для контроля временных артефактов (пре-эхо) используется адаптивное переключение окон. Имеется возможность выбора частоты, выше которой используются короткие блоки, обеспечивающие лучшее разрешение по времени. Части сигнала ниже этой частоты в зависимости от mixed_block_flag кодируются с лучшей разрешающей способностью по частоте, части сигнала, лежащие выше, кодируются с лучшим разрешением по времени.
Частотные составляющие квантуются по нелинейной шкале и кодируются методом Хаффмана. Кодер Хаффмана использует одну из 18 различных кодовых таблиц (см. таблицу Б.7). Для повышения эффективности кодера Хаффмана и уменьшения пре-эха используется буфер. Размер входного буфера равен размеру одного фрейма при скорости передачи 160 кбит/с на канал на Уровне III. Применяется метод кратковременного буфера, называемый "резервуар битов", так как последний использует переменную скорость передачи с максимальным интегральным смещением от средней скорости передачи.
Каждый фрейм содержит данные 2 гранул. Данные во фрейме организованы следующим образом.
Заголовок и часть аудиоданных составляют служебную информацию:
- указатель main_data_begin;
- служебная информация об обеих гранулах (scfsi);
- служебная информация о грануле 1;
- служебная информация о грануле 2.
Основные данные (указатель main_data_begin определяет отрицательное смещение относительно позиции первого байта заголовка):
- масштабные коэффициенты и коды Хаффмана для гранулы 1;
- масштабные коэффициенты и коды Хаффмана для гранулы 2;
- дополнительные данные.
Сначала выполняется синхронизация декодера с входным потоком битов так же, как и на других уровнях. Данные заголовка (первые 32 бита, включая синхрослово) считываются также, как и на других уровнях. Информация о частоте дискретизации используется для выбора соответствующей таблицы полос масштабных коэффициентов (см. приложение Б.8).
5.3.4.2 Служебная информация
Служебная информация должна быть извлечена из потока битов и сохранена для использования при декодировании соответствующего фрейма. Информация о выборе таблицы используется для выбора таблицы декодера Хаффмана и числа битов ESC (linbits) согласно таблице Б.7.
5.3.4.3 Начало main_data
Биты main_data (масштабные коэффициенты, кодированные методом Хаффмана данные и дополнительная информация) не обязательно должны следовать сразу же за битами служебной информации. Это показано на рисунках А.7а и А.7б. Начало main_data определяется при помощи указателя main_data_begin в текущем фрейме. Основные данные распределяются так, чтобы они находились во входном буфере в момент поступления в него заголовка следующего фрейма. Декодер должен пропустить заголовок и служебную информацию при декодировании main_data. Их позиции определяются из bitrate_index и padding_bit. Длина заголовка всегда составляет 4 байта, длина служебных данных составляет 17 байтов в режиме single_channel и 32 байта в других режимах. Основные данные могут охватывать более чем один блок заголовка и служебной информации (см. рисунок А.7б).
5.3.4.4 Буфер
Для расчета максимального количества битов, используемых для одной гранулы, применяется следующее правило.
Размер буфера составляет 7680 битов. Это значение максимально на каждой скорости передачи. При максимально возможной для Уровня III скорости передачи (320 кбит/с на канал) и частоте дискретизации 48 кГц средняя длина фрейма составляет (320000/48000)*1152=7680 битов. Следовательно, фреймы должны иметь постоянную длину на этой скорости передачи и частоте дискретизации. На скорости 64 кбит/с (128 кбит/с стерео) средняя длина гранулы составляет (64000/48000)*576=768 битов при частоте дискретизации 48 кГц. Это означает, что максимальное отклонение (кратковременный буфер), допустимое при скорости 64 кбит/с, равно 7680-4*768 = 4608 битам. Фактическое отклонение равно числу байтов, обозначенных указателем смещения main_data_begin. Фактическое максимальное отклонение 2^9*8 бит=4096 битов. Для промежуточных скоростей передачи задержка и размер буфера могут быть вычислены соответственно. Обмен буфером между левым и правым каналами в стереопотоке битов позволяется без ограничений. Из-за ограничения на размер буфера main_data_begin всегда устанавливается в 0 в случае bitrate_index = 14, то есть скорости передачи данных 320 кбит/с на один канал стерео. В этом случае все данные распределяются между соседними заголовками.
При частотах дискретизации ниже 48 кГц размер буфера должен быть ограничен так, чтобы его действительное значение было достаточным, как в случае с буфером, определенным выше для 48 кГц.
5.3.4.5 Масштабные коэффициенты
Масштабные коэффициенты декодируются в соответствии с slen1 и slen2, которые в свою очередь определяются непосредственно из значений scalefac_compress. Декодированные значения могут использоваться в таблице или для непосредственного вычисления коэффициентов для каждой полосы. При декодировании второй гранулы необходимо учитывать scfsi. Для полос, в которых соответствующий scfsi равен 1, масштабные коэффициенты первой гранулы также используются и для второй гранулы, поэтому они не передаются для нее.
Число битов, отводимых для кодирования масштабных коэффициентов, называется part2_length и вычисляется следующим образом:
для block_type == 0, 1 или 3 (длинные блоки),
part2_length = 11*slen1 +10*slen2;
для block_type = 2 (короткие блоки) и mixed_block_flag = 0,
part2_length = 18*slen1 +18*slen2;
для block_type = 2 (короткие блоки) и mixed_block_flag = 1,
part2_length = 17*slen1 + 18*slen2.
Эти формулы действительны, если gr = 0 или gr = 1 и scfsi [ch] [scfsi_band] = 0 для всех scfsi_bands, то есть информация о выборе масштабных коэффициентов не используется.
5.3.4.6 Декодирование кода Хаффмана
Вся необходимая информация, включая таблицу декодирования дерева кода Хаффмана, может быть получена из таблицы Б.7. Сначала декодируются данные big_values по таблицам с номером table_select [gr] [ch] [region]. Частотные линии в областях 0, 1 и 2 декодируются в парах до восстановления количества пар big_values. Оставшиеся биты кода Хаффмана декодируются с помощью таблицы из count1table_select [gr] [ch]. Декодирование выполняется до тех пор, пока все биты кода Хаффмана не оказываются восстановленными или пока квантованные значения, соответствующие 576 частотным линиям, не оказываются декодированными. Если количество битов кода Хаффмана превышает необходимое для декодирования 576 значений, то эти биты расцениваются как биты стаффинга и отбрасываются. Переменная count1 определяется с помощью count1table_select как число тетрад декодируемых значений.
5.3.4.7 Переквантователь
Для длинных блоков
Значение pretab[cb] дано в таблице Б.6 со значениями предкоррекции. Постоянная 210 необходима для корректного масштабирования и является системной константой. Набор фильтров синтеза реализуется согласно формулам, данным ниже. Диапазон выходных значений декодера (ИКМ-отсчетов) от -1,0 до +1,0.
5.3.4.8 Реорганизация
Если используются короткие блоки (block_type=2), то повторно масштабируемые данные xr [scf_band][window][freq_line] должны быть реорганизованы в порядке следования субполос xr [subband][window][freq_line] для выполнения ОМДКП.
5.3.5 Обработка стереосигналов
После переквантования, восстановленные значения перед поступлением в набор фильтров синтеза обрабатываются для режимов ms_stereo или/и instensity_stereo. В режиме ms_stereo оба канала гранулы должны иметь одинаковый block_type.
5.3.5.1 Режим ms_ stereo
Этот переключатель режима (расположенный в заголовке mode_extension) позволяет переключаться между "независимым стерео" и ms_stereo. Если ms_stereo включен, но intensity_stereo не доступен, то весь спектр декодируется в ms_stereo. Если и ms_stereo и intensity_stereo включены, то верхняя граница, до которой полосы масштабных коэффициентов декодируются в ms_stereo, получается из zero_part разностного (правого) канала. В этом случае полоса, в которой присутствует последняя ненулевая частотная линия, является последней полосой, к которой применяются уравнения ms_stereo. Выше этой границы может использоваться режим intensity_stereo, если он был включен в заголовке. Часть zero_part разностного канала является частью спектра от bigvalues * 2 + count1 * 4 до частоты Найквиста.
5.3.5.2 Матрица MS
5.3.5.3 Режим intensity_stereo
Для каждой полосы (sb), кодированной в intenstiy_stereo, выполняются следующие шаги:
2) если (is_ possb = 7), следующие шаги не выполняются (недопустимый is_pos);
5.3.6 Набор фильтров синтеза
На рисунке А.4 показана блок-схема, включающая в себя набор фильтров синтеза. Частотные линии предварительно обрабатываются по схеме устранения элайзинга (см. блок-схемы на рисунке А.5 и таблицу Б.9 для коэффициентов) и поступают в матрицу ОМДКП по 18 значений в один блок преобразования. Первая половина выходных значений складывается с сохраненными значениями последнего блока. Эти значения являются новыми выходными значениями и входными значениями для полифазного набора фильтров. Вторая половина выходных значений сохраняется для перекрытия с данными следующей гранулы. Для каждой четной субполосы полифазного набора фильтров каждое четное входное значение умножается на минус один, чтобы устранить частотную инверсию в полифазном наборе фильтров.
5.3.6.1 Устранение элайзинга
Для "длинных" гранул (block_type!= 2) данные, поступающие на вход набора фильтров синтеза, перед ОМДКП подлежат устранению элайзинга. Следующий псевдокод описывает процедуру устранения элайзинга:
Индексы массивов хаr[ ] и хr [ ] указывают на частотные линии в грануле, расположенные в порядке возрастания частоты, причем нуль является индексом самой нижней частотной линии, а 575 - самой верхней.
Устранение элайзинга не применяется для гранул с block_type = 2 (короткий блок).
5.3.6.2 ОМДКП
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.