ГОСТ Р 28376-89 Компакт-диск. Параметры и размеры
ГОСТ Р 50712-94 Соединительные линии и аппаратные звукового вещания. Технические характеристики. Методы измерений
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодно издаваемому информационному указателю "Национальные стандарты", который опубликован по состоянию на 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.1 Арифметические операторы
Математические операторы, используемые в настоящем стандарте, аналогичны используемым в языке программирования C. Однако целочисленное деление с усечением и округление определены особым образом. Побитные операторы определяются с учетом представления чисел в дополнительном коде. Нумерация и счетчики циклов обычно начинаются с нуля.
3.2.2 Логические операторы
3.2.3 Операторы сравнения
3.2.4 Побитные операторы
Использование побитных операций подразумевает представление чисел в дополнительном коде.
3.2.5 Оператор присвоения
3.2.6 Мнемоники
Следующие мнемоники подлежат определению для описания различных типов данных, используемых в кодированном потоке битов.
В многобайтовых словах старший байт является первым.
3.2.7 Константы
e 2,71828182845...
Поток битов, полученный декодером, описывается в подразделе 5.1. Каждый элемент данных описывается именем, длиной в битах, мнемоникой типа и порядком передачи.
Действие, вызванное декодируемым элементом данных в потоке битов, зависит от значения этого элемента данных и элементов данных, декодируемых ранее. Декодирование элементов данных и определение параметров состояния, используемых в их декодировании, описываются в подразделе 5.2.
В этом синтаксисе используется принятое в языке C соглашение о том, что переменная или выражение, возвращающие ненулевое значение, эквивалентны результату "истина".
Для выражения условия присутствия элементов данных используются следующие конструкции:
Следует обратить внимание на наиболее распространенные варианты использования этой конструкции:
Как отмечено, группа элементов данных может содержать вложенные условные конструкции. Для компактности скобки {} могут быть опущены, когда следует только один элемент данных.
Знание самого синтаксиса потока битов в 5.3 не следует считать достаточным для декодирования. В частности, это лишь определяет корректный и свободный от ошибок входной поток битов. Реальные декодеры для того, чтобы правильно начать декодирование, должны иметь средства обнаружения стартовых последовательностей.
Эта функция проверяет, является ли текущая позиция побайтно выровненной. Иначе присутствуют нулевые биты стаффинга. Это означает, что перед синхрословом может присутствовать любое количество нулевых байтов. В связи с этим синхрослово всегда является побайтно выровненным и ему может предшествовать любое число нулевых битов стаффинга.
Кодер обрабатывает цифровой звуковой сигнал и создает поток сжатых данных для хранения. Алгоритм кодера не подлежит стандартизации и может использовать различные способы оценки слухового маскирования, квантования и масштабирования. Однако формат данных на выходе кодера должен соответствовать спецификациям раздела 5 в целях корректного использования в звуковых приложениях.
![]() Рисунок 1 иллюстрирует структуру кодера звуковых сигналов. Отсчеты звукового сигнала поступают на вход кодера. В блоке частотно-временного преобразования сигнал разделяется на полосы с децимацией субполосных отсчетов. Отсчеты на выходе блока частотно-временного преобразования могут быть названы субполосными отсчетами (как на Уровне I или II, см. ниже) или коэффициентами частотно-временного преобразования (как на Уровне III). Психоакустическая модель создает ряд данных, позволяющих управлять квантованием и кодированием. Эти данные различаются в зависимости от фактической реализации кодера. Один из возможных вариантов состоит в использовании оценки порога маскирования для управления квантованием. Блок квантования и кодирования производит символы кода из отсчетов на выходе блока частотно-временного преобразования. Этот блок также может зависеть от конкретного кодера. Блок формирования кадра добавляет данные текущего блока к выходным данным других блоков, а также другую информацию (например данные для коррекции ошибок) в случае необходимости.
Существует четыре различных режима работы кодера: моно; два канала (два независимых звуковых сигнала, кодированные в пределах одного потока битов); стерео (левые и правые сигналы стереопары, кодированной в пределах одного потока битов); и joint stereo (левые и правые сигналы стереопары, кодированной в пределах одного потока битов с устранением пространственной избыточности).
В зависимости от приложения могут использоваться различные уровни системы кодирования с увеличивающейся сложностью кодера и производительностью. Декодер звукового сигнала Уровня N должен декодировать данные, которые были закодированы в Уровне N и во всех уровнях ниже N.
Уровень I
В этом уровне используется:
- частотно-временное преобразование на основе разделения входного сигнала на 32 поддиапазона;
- фиксированная длина кодируемой выборки, психоакустическая модель, управляющая процессом адаптивного распределения битов и квантованием на основе блочного компандирования;
- формирование потока данных.
Минимальное теоретическое время задержки при кодировании/декодировании для Уровня I составляет приблизительно 19 мс.
Уровень II
В этом уровне используется дополнительное кодирование информации о распределении битов, масштабирующих коэффициентов и отсчетов. Применяются различные размеры выборок. Минимальное теоретическое время задержки при кодировании/декодировании для Уровня II составляет приблизительно 35 мс.
Уровень III
В этом уровне используется гибридный набор фильтров с повышенной разрешающей способностью по частоте. Добавлены неравномерное квантование, адаптивное разделение сигнала на кадры и энтропийное кодирование. Минимальное теоретическое время задержки при кодировании/декодировании для Уровня III составляет приблизительно 59 мс.
Joint Stereo может быть добавлено как дополнительная функция к любому из уровней.
Различные потоки кодированного видео, кодированного звукового сигнала, данных синхронизации, системных данных и дополнительных данных могут быть сохранены вместе на носителе. Процесс редактирования звуковых сигналов упростится при наличии адресации.
Использование данных может подразумевать удаленный доступ. При этом взаимодействие должно осуществляться через устройство управления, отличное от самого декодера. Это устройство управления должно воспринимать пользовательские команды, считывать и интерпретировать информацию о структуре базы данных, считывать информацию с носителей, демультиплексировать информацию, отличную от звуковой, и передавать аудиоданные к аудиодекодеру с требуемой скоростью считывания.
Декодер принимает сжатые аудиоданные согласно 5.1, декодирует элементы данных согласно 5.2 и использует информацию для вывода цифрового звукового сигнала согласно 5.3.
![]() Рисунок 2 иллюстрирует базовую структуру декодера звуковых сигналов. Данные поступают в декодер и подлежат проверке на наличие ошибок, если при кодировании это было предусмотрено (см. 5.2.4). Затем они распаковываются для восстановления различных частей информации. Блок реконструкции восстанавливает квантованные коэффициенты преобразования. С помощью обратного частотно-временного преобразования эти коэффициенты преобразуются в ИКМ-отсчеты.
Ниже определяется структура основного потока битов данных. Поле main_data в audio_data() содержит байты основных данных. Однако из-за свойств кодов Хаффмана, используемых на Уровне III, основные данные кадра обычно не следуют непосредственно за заголовком и служебной информацией об этом кадре. Данные main_data начинаются в потоке битов перед заголовком фрейма при отрицательном смещении, заданном значением main_data_beg.
header - Часть потока битов, содержащая синхронизацию и информацию о состоянии.
error_check - Часть потока битов, содержащая информацию для обнаружения ошибок.
audio_data - Часть потока битов, содержащая информацию об отсчетах звукового сигнала.
ancillary_data - Часть потока битов, которая может использоваться для дополнительных данных.
Первые 32 бита (четыре байта) являются заголовком, который одинаков для всех уровней.
syncword - Синхрослово, битовая строка '1111 1111 1111 1111'.
ID - Идентификатор алгоритма. Равен '1' для ISO/IEC 11172-3 Аудио, значение '0' зарезервировано. layer - 2 бита, определяющие используемый уровень:
При смене уровня допустим сброс декодера.
protection_bit - Бит, определяющий дополнение нулями, для упрощения обнаружения и устранения ошибок. Равен 1, если дополнение отсутствует, 0 - если таковое присутствует.
bitrate_index - Четыре бита, определяет скорость передачи. При равенстве всех битов нулю устанавливается "свободный формат", при котором используется фиксированная скорость передачи, не указанная в списке. "Фиксированная" означает, что фрейм содержит или N, или N+1 слотов в зависимости от значения дополнительного бита. bitrate_index является индексом таблицы, которая отличается для различных уровней.
bitrate_index указывает на полную скорость передачи независимо от режима (стерео, joint_stereo, dual_channel, single_channel):
Для обеспечения минимально возможной задержки декодер не обязан поддерживать плавное изменение скорости передачи на Уровне I или II. Уровень III поддерживает переменную скорость передачи с переключением bitrate_index. Переключать bitrate_index можно либо для оптимизации требования хранения данных на цифровом носителе, либо для интерполяции произвольной средней скорости передачи данных путем переключения между соседними значениями в таблице скорости передачи. Однако при использовании свободного формата скорость передачи должна быть фиксированной. Декодер, работая в свободном режиме, не обязан поддерживать скорости передачи выше 448 кбит/с, 384 кбит/с и 320 кбит/с на Уровнях I, II и III соответственно.
Для Уровня II разрешены не все возможные комбинации скорости передачи и режима (см. следующую таблицу):
sampling_frequency - Устанавливает частоту дискретизации, согласно данным следующей таблицы:
При смене частоты дискретизации возможен сброс звукового декодера.
padding_bit - Если этот бит равен '1', фрейм содержит дополнительный слот для подстройки средней скорости передачи к частоте дискретизации, иначе - бит равен '0'. Дополнение нулями необходимо при частоте дискретизации 44,1 кГц. Дополнение нулями может также требоваться в свободном формате.
Дополнение нулями должно быть применено к потоку битов так, чтобы суммарная длина кодированных фреймов, после определенного количества аудиофреймов не отклонялась более чем на +0, минус 1 слот от следующего вычисленного значения:
,где frame_size = 384 для Уровня I и 1152 для Уровня II или III.
Следующий метод может использоваться для определения необходимости дополнения нулями:
для 1-го аудиофрейма:
rest = 0;
padding = нет;
для каждого последующего аудиофрейма:
private_bit - Бит для личного пользования.
mode - Определяет режим согласно следующей таблице. На Уровнях I и II режим joint_stereo является intensity_stereo, а на Уровне III, это - intensity_stereo и/или ms_stereo.
На Уровне I во всех режимах кроме joint_stereo, значение bound равно 32. На Уровне II во всех режимах, кроме joint_stereo, значение bound равно sblimit. В режиме joint_stereo bound определяется по mode_extension.
mode_extension - Эти биты используются в режиме joint_stereo. На Уровнях I и II они указывают, какие субполосы находятся в режиме intensity_stereo. Все другие субполосы кодируются в режиме стерео:
На Уровне III эти биты указывают тип применяемого метода joint_stereo. Частотные диапазоны, для которых применяются режимы intensity_stereo и ms_stereo, неявны в алгоритме:
Следует отметить, что режим stereo используется, если биты режима указывают на stereo или, что эквивалентно, если биты режима указывают на использование режима joint_stereo при mode_extension показывающем, что режимы intensity_stereo и ms_stereo выключены.
copyright - Если этот бит равен '0', не защищен авторским правом, '1' - авторские права защищены.
original/copy - Этот бит равен '0', если поток битов является копией, '1', если это оригинал.
emphasis - Указывает на тип частотной коррекции, который должен использоваться:
crc_check - 16-битный код проверки четности используется для дополнительного обнаружения ошибок в кодированном потоке битов.
allocation [cb][sb] - Указывает количество битов, отведенных для кодирования отсчетов субполосы sb канала ch. Для субполос в режиме intensity_stereo в потоке содержится только один элемент распределения битов:
Код '0000' означает, что отсчеты субполосы не передаются.
scalefactor [ch] [sb] - Определяет коэффициент, на который должны быть умножены квантованные отсчеты субполосы sb канала ch. Шесть битов образуют беззнаковое целое, соответствующее номеру в таблице Б.1 "Масштабные коэффициенты. Уровни I и II".
sample[ch] [sb] [s] - Переквантованный отсчет s субполосы sb канала ch. Для субполос в режиме intensity_stereo кодированное представление допустимо для обоих каналов.
allocation [ch] [sb] - Содержит информацию о квантователях, используемых для отсчетов субполосы sb в канале ch, о том, была ли использована группировка трех последовательных отсчетов и о количестве битов, используемых для кодирования отсчетов. Значение и длина этого поля зависят от номера субполосы, скорости передачи и частоты дискретизации. Биты в этом поле образуют беззнаковое целое, соответствующее номеру в таблице Б.2а, данные которой определяют количество уровней квантования. Для субполос в режиме intensity_stereo поток битов содержит только один элемент данных выделения на субполосу.
scfsi [ch] [sb] - Содержит информацию о выборе масштабных коэффициентов, передаваемых для субполосы sb в канале ch, и о том, для каких частей фрейма они действительны. Фрейм делится на три равные части по 12 отсчетов в каждой субполосе:
scalefactor [ch [sb] [p] - Указывает на коэффициент, на который должны быть умножены квантованные отсчеты субполосы sb в канале ch части фрейма p. Шесть битов составляют беззнаковое целое, соответствующее номеру в таблице Б.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 кодированное представление выборки допустимо для каналов.
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:
Если используются короткие окна, т.е. block_type == 2 для одной из гранул, то scfsi всегда равен 0 для этого фрейма.
scfsi_band Управляет информацией о выборе масштабных коэффициентов для групп масштабных коэффициентов (scfsi_bands):
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] - Определяет число битов, используемых для передачи масштабных коэффициентов согласно следующей таблице:
Значения 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);
region1_count = 36 Таким образом, все оставшиеся значения области big_value содержатся в области 1.
Если флаг window_switching_flag не установлен, то значение block_type равно нулю.
block_type [gr] [ch] - Указывает на тип окна для гранулы (см. описание набора фильтров, Уровень III):
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] - Различные кодовые таблицы Хаффмана используются в зависимости от максимального квантованного значения и локальной статистики сигнала.
subblock_gain [gr] [ch] [window] - Указывает изменение усиления (квантование с коэффициентом 4) текущего субблока по отношению к глобальному усилению одного субблока. Используется только с типом блока 2 (короткие окна). Значения субблока должны быть разделены в декодере на 4(subblock-gain[window]).
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_block_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] [ch] - Масштабные коэффициенты логарифмически квантуются с размером шага 2 или
count/table_select [gr] [ch] - Этот флаг определяет одну из двух возможных таблиц Хаффмана для области тетрад квантованных значений с величиной, не превышающей 1:
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 раздела состоят из трех параметров:
Синтаксис для huffmancodebits содержит следующие поля и параметры:
Поля linbitsx или linbitsy используются только при кодировании значений, больших или равных 15. Эти поля интерпретируются как целые числа без знака и добавляются к 15, чтобы получить кодированное значение. Поля linbitsx и linbitsy никогда не используются, если выбрана таблица для блоков с максимальным квантованным значением меньше 15. Следует обратить внимание на то, что значение 15 все еще может быть закодировано таблицей Хаффмана, для которой linbits является нулем. В этом случае поля linbitsx или linbitsy не кодируются, так как linbits является нулем.
В пределах раздела count1 кодируются тетрады значений с амплитудой, меньшей или равной единице. Значения кодируются с использованием кодов Хаффмана из таблиц (А) или (Б) в таблицах Б.7. Снова для каждого ненулевого значения добавляется бит знака после символа кода Хаффмана.
Таблицы Хаффмана для раздела count1 включают следующие параметры:
Таблица кода Хаффмана В не является настоящим 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. В пределах каждого окна квантованные значения располагаются в порядке увеличения частоты.Ancillary_bit - Бит, определяемый пользователем.
Количество дополнительных битов (no_of_ancillary_bits) равно доступному числу битов в аудиофрейме минус число битов заголовка, проверочных битов и аудиоданных. На Уровнях I и II no_of_ancillary_bits соответствует расстоянию между концом аудиоданных и началом следующего заголовка. На Уровне III no_of_ancillary_bits соответствует расстоянию между концом Huffman_code_bits и позицией в потоке, на которую ссылается указатель следующего фрейма main_data_begin.
Первым действием является синхронизация декодера с входным потоком битов. Для этого выполняется обнаружение в потоке 12-битного синхрослова. В некоторых приложениях поля ID, уровень и protection status заранее известны, и, таким образом, первые 16 битов заголовка должны быть расценены как 16-битная синхропоследовательность, делая тем самым синхронизацию более надежной. Позиция соседних синхрослов может быть вычислена из информации, предоставленной семью битами после protection_bit: поток битов подразделяется на слоты. Расстояние между началами двух соседних синхрослов составляет N или N + 1 слотов. Значение N зависит от уровня.
Для Уровня I верно следующее равенство:
;для Уровней II и III:
.Если результат не является целым числом, то он округляется и требуется дополнение. В этом случае число слотов во фрейме будет меняться в пределах N и N + 1. Бит пэддинга устанавливается в '0', если число слотов равно N, и в '1' в противном случае. Знание точной позиции синхрослов значительно облегчает синхронизацию.
Если индекс скорости передачи равен '0000', точная скорость передачи не обозначается. N может быть определено из расстояния между соседними синхрословами и значением бита пэддинга.
Биты режима должны быть считаны из потока, и если их значение равно '01', то также должны быть считаны биты mode_extension. Биты mode_extension, установленные в bound, указывают тем самым на субполосы, кодированные в режиме joint_stereo.
Если бит защиты в заголовке равен '0', проверочное слово CRC находится в потоке битов сразу после заголовка. В качестве метода обнаружения ошибок используется CRC 16 с порождающим полиномом
G(X) = X16 + X15 + X2 + 1.
Начальное состояние сдвигового регистра '1111 1111 1111 1111'. Затем все биты, включенные в проверку CRC, поступают в блок, показанный на рисунке А.9. После введения каждого бита сдвиговый регистр смещается на один бит. После последней операции сдвига выходы b15 ... b0 составляют слово, которое сравнивается со словом проверки CRC. Если эти слова неидентичны, ошибка передачи произошла в защищенном поле потока битов. Во избежание раздражающих искажений рекомендуется использование методов маскировки ошибок, таких как заглушение текущего фрейма или повторение предыдущего фрейма.
После части декодирования, общей для всех уровней, считывается информация о распределении битов для всех субполос и масштабные коэффициенты для субполос с ненулевым распределением битов. Блок-схема алгоритма декодера дана на рисунке А.1.
5.3.2.1 Переквантование субполосных отсчетов
Из информации о распределении битов известно число битов nb, которое должно быть считано из субполосных отсчетов. После того как биты одного отсчета были считаны из потока, первый бит инвертируется. Полученное таким образом число можно рассматривать как дробное число (меньше единицы) в дополнительном коде, где MSB представляет значение минус один. Переквантование выполняется по формуле
,где s" - переквантованное значение;
nb - количество битов, выделеное на кодирование отсчетов субполосы;
Отсчеты субполос, которые находятся в режиме intensity_stereo, должны быть скопированы в оба канала. Переквантованные значения должны повторно масштабироваться. Коэффициенты даны в таблице Б.1. Повторно масштабируемое значение s' вычисляется как
s' = factor * s",
где factor - масштабный коэффициент.
5.3.2.2 Субполосный фильтр синтеза
Если на субполосу не было выделено ни одного бита, то отсчеты этой полосы заменяются нулями. Каждый раз, после определения отсчетов всех 32 субполос одного канала, полученные отсчеты поступают на субполосный фильтр синтеза для получения 32 последовательных звуковых отсчетов. На рисунке А.2 показан процесс реконструкции. Коэффициенты Nik для операции матрицирования задаются формулой
.Значения оконной функции Di содержатся в таблице Б.3 "Коэффициенты Di окна синтеза". Коэффициенты были получены численной оптимизацией. Один фрейм содержит 12 * 32 = 384 отсчетов субполосы, которые в результате фильтрации преобразуются в 384 звуковых отсчета.
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 Переквантование субполосных отсчетов
Далее производится считывание кодированных отсчетов. Как следует из 5.1.6, кодированные отсчеты объединены по тройкам, так что одно кодовое слово соответствует трем последовательным отсчетам. В таблице Б.4 показано, сколько битов необходимо считать из потока для получения одной тройки в каждой полосе, а также состоит ли текущий код из трех последовательных отдельных кодов, соответствующих трем отсчетам, или одного объединенного кода для трех отсчетов (группировка). В последнем случае должна быть выполнена процедура разбиения группы (degrouping). Объединенный код должен быть расценен как беззнаковое целое C. Следующий алгоритм образует три отдельных кодовых слова s[0], s[1], s[2].
где nlevels - количество шагов (см. таблицу Б.2).
Первый бит каждого из трех кодовых слов должен быть инвертирован, и полученные значения должны быть интерпретированы как дробные значения в дополнительном коде, где MSB представляет значение минус один. Переквантование выполняется с помощью линейного выражения:
,где s" - переквантованное значение;
Значения констант C и D даются в таблице Б.4. Переквантованные значения должны повторно масштабироваться. Масштабные коэффициенты даны в таблице Б.1. Повторно масштабируемые значения s' вычисляются как
s' = factor * s",
где factor - масштабный коэффициент.
5.3.3.5 Субполосный фильтр синтеза
Если на субполосу не было выделено ни одного бита, то отсчеты этой полосы заменяются нулями. Каждый раз, после определения отсчетов всех 32 субполос одного канала, отсчеты поступают на субполосный фильтр синтеза для получения 32 последовательных звуковых отсчетов. На рисунке А.2 показан процесс реконструкции. Коэффициенты Nik для операции матрицирования задаются формулой
.Значения оконной функции Di содержатся в таблице Б.3. Один фрейм содержит 36 * 32 = 1152 отсчета субполосы, которые в результате фильтрации преобразуются в 1152 звуковых отсчета.
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. Фактическое максимальное отклонение
. Для промежуточных скоростей передачи задержка и размер буфера могут быть вычислены соответственно. Обмен буфером между левым и правым каналами в стереопотоке битов позволяется без ограничений. Из-за ограничения на размер буфера 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 Переквантователь
При квантовании используется неравномерная шкала с power law. Для каждого выходного значения декодера Хаффмана is вычисляется |is|4/3. Это может быть сделано при помощи таблицы или непосредственным вычислением.
Весь процесс обработки, от декодируемых значений Хаффмана до входных значений набора фильтров синтеза, описывается одной формулой. В ней содержатся все необходимые масштабные коэффициенты. Выходные данные восстанавливаются из переквантованных значений. Общее усиление и значения усиления субблоков влияют на все значения в пределах одного
окна (в случае block_type=2). Масштабные коэффициенты и префлаг корректируют усиление в пределах каждой полосы масштабных коэффициентов. Ниже приведено уравнение переквантования для коротких блоков. Декодированное i-е значение кода Хаффмана обозначено как isi; входные отсчеты i набора фильтров синтеза обозначены xri:![]() Для длинных блоков
![]() Значение 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] для выполнения ОМДКП.
После переквантования, восстановленные значения перед поступлением в набор фильтров синтеза обрабатываются для режимов 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
В режиме ms_stereo значения нормализованных среднего/бокового каналов Mi/Si передаются вместо значений левого/правого каналов Li/Ri. Таким образом, Li/Ri восстанавливаются по формуле
.Значения Mi поступают в левый канал, а значения Si - в правый.
Если окна переключаются, то каналы M и S должны переключаться синхронно.
5.3.5.3 Режим intensity_stereo
Этот переключатель режима (расположенный в заголовке mode_extension) позволяет переключаться между "нормальным стерео" и intensity_stereo. На Уровне III, intensity_stereo реализуется не путем использования пары масштабных коэффициентов s, как на Уровнях I и II, а через определение амплитуды (как обычно, по масштабным коэффициентам правого канала) и позиции стерео is_possb[sfb]. Значение is_possb[sfb] передается вместо масштабных коэффициентов правого канала. Позиция стерео используется для получения сигналов левого и правого каналов согласно формулам, приведенным ниже. Нижняя граница полос масштабных коэффициентов, декодируемых в режиме intensity_stereo, получается из zero_part правого канала. Выше этой границы декодирование intensity_stereo применяется на основе масштабных коэффициентов правого канала как позиций intensity_stereo. Позиция intensity_stereo 7 в одной полосе указывает, что эта полоса не декодируется как intensity_stereo.
![]() Для каждой полосы (sb), кодированной в intenstiy_stereo, выполняются следующие шаги:
1) позиция стереоинтенсивности s_possb считывается из масштабного коэффициента правого канала;
2) если (is_possb = 7), следующие шаги не выполняются (недопустимый is_pos);
3)
;4)
для всех индексов i в пределах текущей полосы sb;5)
для всех индексов i в пределах текущей полосы sb.На рисунке А.4 показана блок-схема, включающая в себя набор фильтров синтеза. Частотные линии предварительно обрабатываются по схеме устранения элайзинга (см. блок-схемы на рисунке А.5 и таблицу Б.9 для коэффициентов) и поступают в матрицу ОМДКП по 18 значений в один блок преобразования. Первая половина выходных значений складывается с сохраненными значениями последнего блока. Эти значения являются новыми выходными значениями и входными значениями для полифазного набора фильтров. Вторая половина выходных значений сохраняется для перекрытия с данными следующей гранулы. Для каждой четной субполосы полифазного набора фильтров каждое четное входное значение умножается на минус один, чтобы устранить частотную инверсию в полифазном наборе фильтров.
5.3.6.1 Устранение элайзинга
Для "длинных" гранул (block_type!= 2) данные, поступающие на вход набора фильтров синтеза, перед ОМДКП подлежат устранению элайзинга. Следующий псевдокод описывает процедуру устранения элайзинга:
Индексы массивов xar[] и xr[] указывают на частотные линии в грануле, расположенные в порядке возрастания частоты, причем нуль является индексом самой нижней частотной линии, а 575 - самой верхней.
Устранение элайзинга не применяется для гранул с block_type = 2 (короткий блок).
5.3.6.2 ОМДКП
В следующем выражении n - количество отсчетов в окне (для коротких блоков n = 12, для длинных блоков n = 36). В случае блока типа short каждый из трех коротких блоков преобразуется отдельно, n/2 значений Xk преобразуется в n значений xi. Аналитическое выражение для ОМДКП:
5.3.6.3 Окна
В зависимости от типа блока block_type используются окна различной формы:
а) block_type=0 (нормальное окно)
б) block_type=1 (стартовый блок)
![]() в) block_type=3 (столовый блок)
![]() г) block_type=2 (короткий блок)
каждый из трех коротких блоков отдельно берется в окне
Взятые в окне короткие блоки должны быть перекрыты и сложены
![]() 5.3.6.4 Перекрытие и сложение с предыдущим блоком
Первая половина блока из 36 значений перекрывается со второй половиной предыдущего блока. Вторая половина текущего блока сохраняется для использования в следующем блоке:
5.3.6.5 Компенсация инверсии частоты в полифазном наборе фильтров
Выход блока перекрытия и сложения состоит из 18 временных отсчетов каждой из 32 полифазных субполос. Если временные отсчеты обозначены от 0 до 17, где нулевой отсчет - самый ранний во времени, и субполосы обозначены от 0 до 31, где нулевая субполоса - самая нижняя, то каждый нечетный временной отсчет каждого нечетной субполосы умножается на минус 1 перед поступлением в полифазный набор фильтров.
(обязательное)
СХЕМЫ
![]() ![]() ![]() Рисунок А.3 - Блок-схема алгоритма декодера. Уровень III
![]() В каждом блоке ОМДКП вычисляются 18 выходных значений y0 ... y17 по 18 входным значениям спектральных коэффициентов. Для всех субполос, кроме первой, каждый нечетный выходной отсчет должен быть умножен на минус 1.
![]() Уровень III
![]() Рисунок А.6 - "Бабочка" устранения элайзинга в декодере.
Уровень III
![]() ![]() --------------------------------
<*> main_data_begin 4 = 0: основные данные следуют непосредственно за служебной информацией фрейма 4. Это нижний предел для main_data_begin; main_data не может начинаться после этой точки. Следует обратить внимание на то, что байты данных, используемые полями синхро и side info, не учитываются указателем main_data_begin.
нагрузкой в main info 3 и небольшой нагрузкой
в main info 2. Уровень III.
![]() Рисунок А.8 - Гранулы фрейма с block_type = 0 в первой
грануле и block_type = 2 во второй грануле. Уровень III
![]() (обязательное)
ТАБЛИЦЫ
Таблица Б.1
Таблицы Б.2
Таблица Б.2а
Таблица Б.2б
Допустимые уровни квантования в субполосах
Таблица Б.2в
Допустимые уровни квантования в субполосах
Таблица Б.2г
Допустимые уровни квантования в субполосах
Таблица Б.3
Таблица Б.4
Таблица Б.5
Число защищенных битов audio_data
Таблица Б.6
Таблицы Б.7
Таблица 0 кода Хаффмана
linbits=0
Таблица 1 кода Хаффмана
linbits=0
Таблица 2 кода Хаффмана
linbits=0
Таблица 3 кода Хаффмана
linbits=0
Таблица 4 кода Хаффмана
Не используется.
Таблица 5 кода Хаффмана
linbits=0
Таблица 6 кода Хаффмана
linbits=0
Таблица 7 кода Хаффмана
linbits=0
Таблица 8 кода Хаффмана
linbits=0
Окончание таблицы 8
Таблица 9 кода Хаффмана
linbits=0
Таблица 10 кода Хаффмана
linbits=0
Таблица 11 кода Хаффмана
linbits=0
Окончание таблицы 11
Таблица 12 кода Хаффмана
linbits=0
Окончание таблицы 12
Таблица 13 кода Хаффмана
linbits=0
Продолжение таблицы 13
Продолжение таблицы 13
Продолжение таблицы 13
Окончание таблицы 13
Таблица 14 кода Хаффмана
Не используется.
Таблица 15 кода Хаффмана
linbits=0
Продолжение таблицы 15
Продолжение таблицы 15
Продолжение таблицы 15
Окончание таблицы 15
linbits=1
Продолжение таблицы 16
Продолжение таблицы 16
Окончание таблицы 16
Таблица 17 кода Хаффмана см. таблицу 16, но linbits=2
Таблица 18 кода Хаффмана см. таблицу 16, но linbits=3
Таблица 19 кода Хаффмана см. таблицу 16, но linbits=4
Таблица 20 кода Хаффмана см. таблицу 16, но linbits=6
Таблица 21 кода Хаффмана см. таблицу 16, но linbits=8
Таблица 22 кода Хаффмана см. таблицу 16, но linbits=10
Таблица 23 кода Хаффмана см. таблицу 16, но linbits=13
linbits=4
Продолжение таблицы 24
Продолжение таблицы 24
Окончание таблицы 24
Таблица 25 кода Хаффмана см. таблицу 24, но linbits=5
Таблица 26 Кода Хаффмана см. таблицу 24, но linbits=6
Таблица 27 Кода Хаффмана см. таблицу 24, но linbits=7
Таблица 28 Кода Хаффмана см. таблицу 24, но linbits=8
Таблица 29 Кода Хаффмана см. таблицу 24, но linbits=9
Таблица 30 Кода Хаффмана см. таблицу 24, но linbits=11
Таблица 31 Кода Хаффмана см. таблицу 24, но linbits=13
Таблицы Б.8
В этих таблицах указана ширина каждой полосы масштабных коэффициентов. Всего используется 21 полоса для каждой частоты дискретизации при "длинных" окнах (тип 0, 1 или 3) и 12 полос при "коротких" окнах.
Таблица Б.8а
Частота дискретизации 32 кГц
Длинные блоки
Короткие блоки
Таблица Б.8б
Частота дискретизации 44,1 кГц
Длинные блоки
Короткие блоки
Таблица Б.8в
Частота дискретизации 48 кГц
Длинные блоки
Короткие блоки
Таблица Б.9
Коэффициенты "бабочки" csi и cai вычисляются по формулам
.(обязательное)
ПРОЦЕСС КОДИРОВАНИЯ
В данном приложении для каждого слоя приводится пример кодера с соответствующими блок-схемами. В кратком введении дается общая идея кодирования.
В.1.1.1 Введение
Алгоритм, приведенный в данном стандарте, является психоакустическим алгоритмом. На рисунке В.1 показаны основные блоки психоакустического алгоритма.
![]() Рисунок В.1 - Блок-схема кодера
Четыре основные части психоакустического кодера описаны ниже.
В.1.1.1.1 Набор фильтров
Набор фильтров реализует частотно-временное преобразование. В алгоритме ISO/IEC 1117203 (MPEG Audio) используются два разных набора фильтров: полифазный набор и гибридный полифазный/МДКП набор. Каждый набор реализует определенное частотно-временное преобразование. Для данных наборов фильтров количество отсчетов в частотной области равно количеству отсчетов во временной области. Наборы фильтров обеспечивают основное частотное разделение в кодере и реконструкцию сигнала в декодере. Отсчеты на выходе наборов фильтров подлежат квантованию.
В.1.1.1.2 Психоакустическая модель
В блоке психоакустической модели вычисляется минимально заметный уровень шумов в каждой полосе набора фильтров. Этот уровень шумов используется при распределении битов или шума при определении фактических квантователей и уровней квантования. Есть две психоакустические модели, приведенные в приложении Г. В то время как обе они могут использоваться с любым уровнем ISO/IEC 1117203 (MPEG Audio), на практике Модель 1 используется для Уровней I и II, а Модель 2 - для Уровня III. В обеих психоакустических моделях выходом является отношение сигнал-маска (SMR) для каждой полосы (Уровни I и II) или группы полос (Уровень III).
В.1.1.1.3 Распределение битов или шумов
Блок распределения анализирует выходные отсчеты набора фильтров и SMR психоакустической модели и распределяет биты (Уровни I и II) или шумы (Уровень III), чтобы одновременно удовлетворить и требование по скорости передачи и требования маскирования. На низких скоростях передачи эти методы нацелены на то, чтобы потратить биты на минимизацию искажений при невозможности удовлетворить психоакустические требования.
В.1.1.1.4 Блок форматирования потока битов
В блоке форматирования потока битов квантованные отсчеты набора фильтров вместе с данными о распределении битов (Уровни I и II) или шумов (Уровень III) и другой служебной информацией кодируются и форматируются определенным образом. В случае Уровня III дополнительно используется код Хаффмана.
В.1.1.2 Набор фильтров
На Уровнях I и II используется набор фильтров с 32 субполосами. В каждой субполосе 12 или 36 отсчетов группируются для обработки. На Уровне III набор фильтров обладает сигнально-зависимой разрешающей способностью с 6 x 32 или 18 x 32 частотными линиями. Если есть 6 x 32 частотных полосы, группа из трех последовательных значений каждой частоты квантуется отдельно.
В.1.1.3 Метод распределения битов или шумов
В этом приложении описываются два различных способа управления скоростью передачи, На Уровнях I и II используется распределение битов, то есть определенное количество битов отводится каждому отсчету (или группе отсчетов) в каждой субполосе. На Уровне III используется распределение шумов, при котором квантователи изменяются по определенному закону, и управляемым параметром фактически является внесенный шум. В обоих случаях результатом являются набор параметров квантования и квантованные выходные отсчеты, которые подаются на блок формирования потока битов.
В.1.1.4 Формирование потока битов
Блок формирования потока битов зависит от выбранного уровня. На Уровнях I и II для каждого субполосного отсчета используется фиксированная ИКМ, за исключением возможности группировки квантуемых отсчетов на Уровне II. На Уровне III используется код Хаффмана с переменной длиной кодового слова для более эффективного кодирования за счет дополнительной сложности.
Алгоритмы кодирования обеспечивают частотную характеристику вплоть до постоянной составляющей. Однако, если это не является обязательным требованием, рекомендуется включение фильтра верхних частот на входе кодера. Частота среза должна быть в диапазоне 2 - 10 Гц.
Использование такого фильтра верхних частот устраняет неоправданно высокие затраты на кодирование самой низкой субполосы и увеличивает общее качество звука.
Субполосный фильтр анализа используется для разделения широкополосного сигнала с частотой дискретизации Fs на 32 одинаковых по ширине полосы с частотами дискретизации Fs/32. Блок-схема этого процесса с соответствующими формулами дана на рисунке В.4. Субполосная фильтрация включает в себя следующие шаги:
- ввод новых 32 звуковых отсчетов;
- создание вектора входных отсчетов X из 512 элементов, сдвиг на 32 отсчета, при этом новые отсчеты оказываются на позициях 0 - 31;
- вектор X поэлементно умножается на оконную функцию Ci. Коэффициенты оконной функции даны в таблице В.1;
- вычисляются 64 значения Yi согласно формуле, данной в блок-схеме на рис. В4;
- вычисляются 32 субполосных отсчета Si путем матрицирования;
- коэффициенты матрицы могут быть вычислены по следующей формуле:
.Таблица В.1
Два примера психоакустических моделей даны в приложении Г.
В.1.5.1.1 Введение
В этом пункте описывается возможный метод кодирования на Уровне I. Описание дается со ссылкой на рисунок В.5.
В.1.5.1.2 Психоакустическая модель
Психоакустические параметры могут быть рассчитаны либо с психоакустической моделью 1, описанной в пункте Г.1, либо с психоакустической моделью 2, описанной в пункте Г.2. Сдвиг блока БПФ равняется 384 отсчетам. Любая модель позволяет определить отношение сигнал-маска в каждой субполосе.
В.1.5.1.3 Субполосная фильтрация
Субполосная фильтрация описывается в пункте В.1.3.
В.1.5.1.4 Расчет масштабных коэффициентов
Расчет масштабных коэффициентов в каждой субполосе выполняется для каждых 12 субполосных отсчетов. Определяется максимум абсолютных значений этих 12 отсчетов. Ближайшее большее, чем этот максимум, значение из таблицы Б.1 используется в качестве масштабного коэффициента.
В.1.5.1.5 Кодирование масштабных коэффициентов
Номер в таблице Б.1 кодируется 6 битами, MSB сначала. Масштабный коэффициент передается, только если на субполосу было выделено ненулевое число битов.
В.1.5.1.6 Распределение битов
Перед подстройкой фиксированной скорости передачи должно быть определено число битов, доступных для кодирования отсчетов и масштабных коэффициентов. Это число может быть получено путем вычитания из общего количества битов cb количества битов заголовка bhdr (32 бита), битов CRC bcrc, если оно используется (16 бит), информации о распределении бит bbal, и количества битов, требуемых для передачи дополнительных данных banc:
adb = cb - (bhdr + bcrc + bbal + banc).
Полученное количество битов может использоваться для кодирования субполосных отсчетов и масштабных коэффициентов. В основу процедуры распределения заложен принцип минимизации общего отношения шум-маска для всего кадра с ограничением на то, что число используемых битов не должно превышать число битов, доступных для этого кадра.
Процедура выделения выполняется итеративно, причем на каждом шаге число уровней приоритетных субполосных отсчетов увеличивается.
Сначала вычисляется отношение маска-шум MNR для каждой субполосы, путем вычитания из отношения сигнал-шум SNR отношения сигнал-маска SMR:
MNR = SNR - SMR.
Отношение сигнал-шум может быть найдено из таблицы В.2. Отношение сигнал-маска является выходом психоакустической модели.
Далее на каждую субполосу и масштабный коэффициент выделяется ноль битов. Число битов для кодирования отсчетов bspl и число битов для кодирования масштабных коэффициентов bscf обнуляются. Затем запускается итеративная процедура, каждый цикл которой содержит следующие шаги:
- среди всех субполос определяется субполоса с минимальным MNR;
- точность квантования субполосы с минимальным MNR повышается путем увеличения отведенного числа битов на следующее большее значение;
- определяется новое значение MNR в этой субполосе;
- обновляется значение bspl в соответствии с выделенным количеством битов. Если ненулевое число битов выделяется для субполосы впервые, то bscf должен быть увеличен на 6 битов;
- затем вычисляется adb по формуле:
adb = cb - (bhdr + bcrc + bbal + bscf + bspl + banc).
Итеративная процедура повторяется до тех пор пока adb не станет меньше любого возможного увеличения bspl и bscf в пределах одного цикла.
В.1.5.1.7 Квантование и кодирование субполосных отсчетов
Применяется равномерное квантование с симметрией относительно нуля. Это предотвращает получение различных результатов квантования при незначительном изменении значений вблизи нуля. Каждый из субполосных отсчетов нормализуется путем деления его значения на масштабный коэффициент для получения X и квантуется согласно следующему алгоритму:
- вычислить AX + B;
- оставить N старших значащих битов;
- инвертировать старший бит.
A и B могут быть взяты из таблицы B.3. N соответствует количеству битов, необходимому для кодирования количества шагов. Инверсия старшего значащего бита (MSB) нужна во избежание получения запрещенной комбинации из всех единиц, используемой для синхронизации.
В.1.5.1.8 Кодирование информации о распределении битов
4-разрядные коды используются для информации о распределении битов.
В.1.5.1.9 Дополнительные данные
Стандарт "Аудио" предполагает использование ряда битов дополнительных данных переменной длины для включения в поток аудиоданных и передачи вместе с ним. Наличие дополнительных данных сокращает количество битов, доступных для аудио, что может привести к ухудшению качества звука.
Наличие последовательности битов дополнительных данных, идентичных синхрослову, может препятствовать синхронизации. Эта проблема наиболее вероятна при использования свободного формата.
В.1.5.1.10 Форматирование
Кодированные субполосные данные передаются по фреймам. Число слотов во фрейме меняется в зависимости от частоты дискретизации (FS) и скорости передачи. Каждый фрейм содержит информацию о 384 отсчетах исходного входного сигнала, таким образом, частота следования фреймов составляет FS/384.
Фрейм может содержать аудиоданные одного или двух каналов.
Длина слота на Уровне I составляет 32 бита. Число слотов во фрейме может быть вычислено по формуле
![]() Если результат не является целым числом, то он должен быть округлен. Для получения целого значения требуется пэддинг. Это означает, что число слотов может варьироваться между N и N + 1.
Формат фрейма Уровня I дан на рисунке В.2.
![]() Рисунок В.2 - Формат фрейма. Уровень I
Таблица В.2
Таблица В.3
В.1.5.2.1 Введение
В этом пункте описывается возможный метод кодирования на Уровне II. Описание дается со ссылкой на рисунок В.5.
В.1.5.2.2 Психоакустическая модель
Психоакустические параметры могут быть рассчитаны либо с психоакустической моделью 1, описанной в пункте Г.1, либо с психоакустической моделью 2, описанной в пункте Г.2. Сдвиг блока БПФ равен 1152 отсчетам. При использовании психоакустической модели 2 расчет осуществляется дважды со сдвигом на 576 отсчетов и из двух результатов выбирается один с наибольшим отношением сигнал-маска. Любая модель позволяет определить отношение сигнал-маска в каждой субполосе.
В.1.5.2.3 Субполосная фильтрация
Субполосная фильтрация описывается в пункте В.1.3.
В.1.5.2.4 Расчет масштабных коэффициентов
Расчет масштабных коэффициентов в каждой субполосе выполняется для каждых 12 субполосных отсчетов. Определяется максимум абсолютных значений этих 12 отсчетов. Ближайшее большее, чем этот максимум, значение из таблицы Б.1 используется в качестве масштабного коэффициента.
В.1.5.2.5 Кодирование масштабных коэффициентов
Кадр соответствует 36 субполосным отсчетам и поэтому содержит три масштабных коэффициента на одну субполосу. Пусть scf соответствует номеру в таблице Б.1. Определяются разности dscf1 и dscf2 между номерами соседних масштабных коэффициентов scf1, scf2 и scf3:
dscf1 = scf1 - scf2,
dscf2 = scf2 - scf3.
Класс каждой разности определяется следующим образом:
Пара разностных классов указывает на соответствующее значение в таблице В.4 и дает три масштабных коэффициента, которые фактически используются. "1", "2" и "3" означают соответственно первый, второй и третий масштабный коэффициент в пределах кадра, "4" означает максимум из трех масштабных коэффициентов. Если после корректировки два или три масштабных коэффициента оказываются одинаковыми, то не требуется передача их всех для определенной субполосы в пределах одного фрейма. Информацию, описывающую количество и позицию масштабных коэффициентов в каждой субполосе, называют информацией о выборе масштабных коэффициентов.
В.1.5.2.6 Кодирование информации о выборе масштабного коэффициента
Информация о выборе масштабного коэффициента scalefactor selection information (scfsi) кодируется соответствующей комбинацией из двух битов, которая дается в таблице В.4. Значения scfsi передаются только для тех субполос, которые получат ненулевое количество битов.
В.1.5.2.7 Распределение битов
Перед корректировкой фиксированной скорости передачи должно быть определено количество битов adb, доступных для кодирования отсчетов и масштабных коэффициентов.
Это число может быть получено путем вычитания из общего количества битов cb количества битов заголовка bhdr (32 бита), битов CRC bcrc, если оно используется (16 битов), битов распределения bbal и количества битов, требуемых для передачи дополнительных данных banc:
adb = cb - (bhdr + bcrc + bbal + banc).
Полученное количество битов может использоваться для кодирования субполосных отсчетов и масштабных коэффициентов. В основу процедуры распределения заложен принцип минимизации общего отношения шум-маска для всего фрейма с ограничением на то, что число используемых битов не должно превышать число битов, доступных для этого фрейма. Количество уровней квантования, которое может быть использовано для кодирования субполосных отсчетов, дано в таблице Б.2. Возможное количество битов, выделенных на один отсчет, может быть найдено в таблице Б.4.
Процедура выделения выполняется итеративно, причем на каждом шаге число уровней приоритетных субполосных отсчетов увеличивается.
Сначала вычисляется отношение маска-шум MNR для каждой субполосы путем вычитания из отношения сигнал-шум SNR отношения сигнал-маска SMR:
MNR = SNR - SMR.
Отношение сигнал-шум может быть найдено из таблицы В.5. Отношение сигнал-маска является выходом психоакустической модели.
Далее на каждую субполосу и масштабный коэффициент выделяется ноль битов. Число битов для кодирования отсчетов bspl и число битов для кодирования масштабных коэффициентов bscf обнуляются. Затем запускается итеративная процедура, каждый цикл которой содержит следующие шаги:
- среди всех субполос определяется субполоса с минимальным MNR.
- точность квантования субполосы с минимальным MNR повышается путем выбора следующего большего значения в таблице Б.2;
- определяется новое значение MNR в этой субполосе.
- обновляется значение bspl в соответствии с выделенным количеством битов. Если ненулевое число битов выделяется для субполосы впервые, то bscf должен быть увеличен на 6 битов. Затем вычисляется adb по формуле:
adb = cb - (bhdr + bcrc + bbal + bscf + bspl + banc).
Итеративная процедура повторяется до тех пор, пока adb не станет меньше любого возможного увеличения bspl и bscf в пределах одного цикла.
В.1.5.2.8 Квантование и кодирование субполосных отсчетов
Каждый из 12 субполосных отсчетов подлежит нормализации путем деления на масштабный коэффициент для получения значения X и затем квантуется по следующему правилу:
- вычислить A * X + B;
- оставить N старших значащих битов;
- инвертировать старший бит.
A и B могут быть взяты из таблицы В.6. N соответствует количеству битов, необходимому для кодирования количества шагов. Инверсия старшего значащего бита (MSB) нужна во избежание получения запрещенной комбинации из всех единиц, используемой для синхронизации.
Для заданного числа шагов квантования в таблице Б 4 указывается, будет ли использоваться группировка. Если группировка не требуется, три субполосных отсчета кодируются отдельными кодовыми комбинациями.
Если группировка требуется, три последовательных субполосных отсчета кодируются одной кодовой комбинацией. В этом случае для данной тройки передается только одно значение vm (MSB сначала). Соотношение между кодированным значением vm (m = 3, 5, 9) и тремя последовательными субполосными отсчетами x, y, z
В.1.5.2.9 Кодирование информации о распределении битов
В целях повышения эффективности кодирования для каждой субполосы разрешен только определенный набор квантователей. В результате передается только номер nbal в соответствующей таблице Б.2, MSB первым.
В.1.5.2.10 Дополнительные данные
Стандарт звуковых сигналов предполагает использование ряда битов дополнительных данных переменной длины для включения в поток аудиоданных и передачи вместе с ним. Наличие дополнительных данных сокращает количество битов, доступных для аудио, что может привести к ухудшению качества звука.
Наличие последовательности битов дополнительных данных, идентичных синхрослову, может препятствовать синхронизации. Эта проблема наиболее вероятна при использовании свободного формата.
В.1.5.2.11 Форматирование
Формат фрейма Уровня II дан на рисунке В.3.
![]() Рисунок В.3 - Формат фрейма. Уровень II
Различия по сравнению с Уровнем I:
- длина слота равняется 8 битам;
- используется новый блок scfsi, содержащий информацию о выборе масштабных коэффициентов;
- информация о распределении бит, масштабные коэффициенты и отсчеты подвергаются дальнейшему кодированию.
Таблица В.4
Таблица В.5
Таблица В.6
![]() ![]() В.1.5.3.1 Введение
В этом пункте описывается возможный метод кодирования на Уровне III. Основной алгоритм соответствует общей блок-схеме психоакустического кодера. Основные блоки описываются более подробно ниже.
В.1.5.3.2 Психоакустическая модель
Расчет психоакустических параметров может быть сделан либо с использованием психоакустической модели 1, описанной в таблице Г.1, либо с использованием психоакустической модели 2, описанной в Г.2. Психоакустический расчет выполняется дважды на блок, со сдвигом в 576 отсчетов. Отношение сигнал-маска рассчитывается для каждой полосы масштабных коэффициентов. Описание модификаций в психоакустической модели 2 для использования с Уровнем III дается ниже.
Модель вычисляется дважды, параллельно. Один расчет выполняется со сдвигом iblen 192 отсчетов (для использования с короткими блоками), другой - со сдвигом в 576 отсчета. Для сдвига в 192 отсчета размер блока БПФ изменяется на 256 с соответствующим изменением всех параметров.
1. Изменения при вычислении неопределенности:
Изменено вычисление энтропийного расстояния в психоакустической модели 2.
2. Расчет энтропии:
Энтропия cw вычисляется для первых 206 линий спектра, для других линий спектра энтропия устанавливается равной 0,4.
Энтропия для первых 6 линий вычисляется из длинного БПФ (длина окна = 1024, shiftlen = 576). Для линий спектра с 6 до 205 энтропия вычисляется из короткого БПФ (длина окна = 256, shiftlen = 192):
![]() где cw_1 - энтропия, вычисленная из длинного БПФ; cw_s - неопределенность, вычисленная из короткого БПФ второго из трех коротких блоков в пределах одной гранулы.
3. Заменена функции маскировки:
ifj >= i tmpy = 3,0(j - i)
else tmpy = 1,5(j - i)
Используются значения функции маскировки, превышающие 10-6. Все другие значения обнуляются.
4. Параметры, используемые для преобразования энтропии.
conv1 = -0,299
conv2 = -0,43
5. Параметр NMT (тон, маскирующий шум) устанавливается равным 6,0 дБ для всех участков, используемых при расчете порога. Параметр TMN (шум, маскирующий тон) устанавливается равным 29,0 дБ для всех участков, используемых при расчете порога. Значения minval даны в таблицах В.7.
6. Психоакустическая энтропия pe оценивается на основе отношения thr/eb, где thr - порог маскирования, eb - энергия:
,где cbwidth - ширина порогового участка (см. таблицы В7); k - номер раздела.
7. Контроль пре-эха
Следующие константы используются для контроля пре-эха:
rpelev = 2
rpelev2 = 16
8. Порог не распространяется по линиям БПФ. Пороговые разделы преобразуются непосредственно в полосы масштабных коэффициентов. Первый раздел, который добавляется к полосе масштабных коэффициентов, взвешивается в окне w1, последний - в окне w2 (см. таблицы В.8). Таблица содержит также число разделов (cbw), преобразуемых в одну полосу масштабных коэффициентов (исключая первый и последний разделы).
Параметры bo и Ш даны в таблицах В.8. Они используются для преобразования пороговых разделов в полосы масштабных коэффициентов.
9. Для коротких блоков используется упрощенная версия вычисления порога (с постоянным отношением сигнал-шум). Константы SNR даны в таблицах В.7.
Таблицы В.7
Таблица В.7а
Частота дискретизации 48 кГц, длинные блоки
Таблица В.7б
Частота дискретизации 44,1 кГц, длинные блоки
Таблица В.7в
Частота дискретизации 32 кГц, длинные блоки
Таблица В.7г
Частота дискретизации 48 кГц, короткие блоки
Таблица В.7д
Частота дискретизации 44,1 кГц, короткие блоки
Таблица В.7е
Частота дискретизации 32 кГц, короткие блоки
Таблицы В.8
в полосы масштабных коэффициентов
Таблица В.8а
Частота дискретизации 48 кГц, длинные блоки
Таблица В.8б
Частота дискретизации 44,1 кГц, длинные блоки
Таблица В.8в
Частота дискретизации 32 кГц, длинные блоки
Таблица В.8г
Частота дискретизации 48 кГц, короткие блоки
Таблица В.8д
Частота дискретизации 44,1 кГц, короткие блоки
Таблица В.8е
Частота дискретизации 32 кГц, короткие блоки
![]() Рисунок В.6а - Блок-схема психоакустической модели 2.
Уровень III: вычисление порога маскирования
![]() Рисунок В.6б - Блок-схема психоакустической модели 2.
Уровень III: вычисление порога маскирования (часть 1)
![]() Рисунок В.6в - Блок-схема психоакустической модели 2.
Уровень III: вычисление порога маскирования (часть 2)
![]() Рисунок В.6.г - Блок-схема психоакустической модели 2.
Уровень III: вычисление порога маскирования
для коротких блоков
10. Решение о переключении окна
Решение о переключении набора фильтров на короткие окна принимается на основе порога маскирования, вычисленного из оценки психоакустической энтропии (pe). Переключение происходит, если pe превышает значение 1800. Если это условие выполняется, запускается последовательность из стартового (block_type=1), короткого (block_type=2), короткого и стопового (block_type=3) блоков. На рисунке В.7 показаны возможные состояния логики переключения окон.
![]() Рисунок В.7 - Граф переключения окон
В.1.5.3.3 Гибридный набор фильтров анализа
Субполосная фильтрация с помощью полифазного набора фильтров описывается в пункте В.1.3. Данные с выхода субполосного фильтра поступают на блок МДКП. В зависимости от данных на выходе психоакустической модели (переменные blocksplit_flag и block_type) выбирается тип окна (нормальное, стартовое, короткое, стоповое) и тип преобразования.
18 последовательных выходных значений одной гранулы и 18 выходных значений предыдущей гранулы объединяются в один блок из 36 отсчетов.
Тип блока "нормальный"
![]() Тип блока "стартовый"
![]() Тип блока "стоповый"
![]() Тип блока "короткий"
Блок из 36 отсчетов делится на три перекрывающихся блока:
![]() Каждый из трех блоков отдельно умножается на окно:
![]() МДКП:
В следующем выражении n - количество взвешиваемых в окне отсчетов. Для коротких блоков n = 12, для длинных блоков n = 36. Аналитическое выражение для МДКП:
![]() Анти-элайзинговая "бабочка" в кодере:
Процедура устранения элайзинга в кодере аналогична той, которая выполняется в декодере. "Бабочка", которая используется в кодере, показана на рисунке В.8. Коэффициенты cai и csi приведены в таблице Б.9.
![]() Рисунок В.8 - "Бабочка" в кодере
В.1.5.3.4 Расчет среднего количества доступных битов
Среднее количество битов на гранулу определяется длиной кадра. Скорость передачи 64 кбит/с используется для примера. При скорости передачи 64 кбит/с при 48 000 отсчетах в секунду
(64 000 * (1152/48000) битов на кадр)/(2 гранулы на кадр) = 768 битов на гранулу.
Поскольку заголовок занимает 32 бита и служебная информация занимает 17 байтов (136 битов) в single_channel режиме, то среднее количество доступных битов для main_data для гранулы равно
mean_bits = 768 битов на гранулу - (32 + 136 битов на кадр)/(2 гранулы на кадр) = 684 бита на гранулу.
Резервуар битов может обеспечить дополнительные биты, которые могут использоваться для гранулы. Количество дополнительных битов определяется внутри цикла.
В.1.5.3.5 Квантование и кодирование коэффициентов преобразования
Коэффициенты преобразования квантуются и кодируются внутри двух вложенных итеративных циклов. Пункт В.1.5.4 содержит подробное описание этих итеративных циклов.
В.1.5.3.6 Дополнительные данные
Стандарт аудио предусматривает биты для включения и передачи дополнительных данных переменной длины в аудиопотоке. Наличие дополнительных данных сокращает количество битов, доступных для аудио, что может привести к ухудшению качества звука.
Присутствие в дополнительных данных последовательности битов, совпадающих с синхропоследовательностью, может препятствовать синхронизации. Эта проблема наиболее вероятна при использовании свободного формата.
В.1.5.3.7 Форматирование
Форматирование кодовых слов Хаффмана описывается ниже.
Слова кода Хаффмана следуют друг за другом от нижних до верхних частот. В итеративных циклах следующие переменные должны быть вычислены для использования при кодировании Хаффмана:
Данные помещаются в поток битов согласно синтаксису кода Хаффмана.
Фактический блок кода Хаффмана для big_values части описывается на псевдоязыке высокого уровня:
for номер области от 0 до 2
if table_select для этой области равен 0, то все значения в области нулевые
else
if table_select для этой области > 15
используется ESC-таблица: поиск значения linbits, связанного с используемой таблицей
for i от начала до конца области, счет по парам
x = is(i), y = is(i +1)
if x > 14
linbitsx = x - 15, x = 15
end if
signx = sign(x), x = abs(x)
if y > 14
linbitsy = y - 15, y = 15
end if
signy = sign(y), y = abs(y)
искать кодовую комбинацию = hcod([x] [y]) в таблице table_select
записать hcod([x] [y]), начиная с крайнего левого бита, количество битов hlen([x] [y])
if x > 14
записать linbitsx в поток битов, количество битов linbits
end if
if x! = 0
записать signx в поток битов
end if
if y > 14
записать linbitsy в поток битов, количество битов linbits
end if
if y! = 0
записать signy в поток битов
end if
end do
else
ESC-комбинации не используются в этой области:
for i от начала области до конца области, счет по парам
x = is(i), y = is(i +1)
signx = sign(x), x = abs(x)
signy = sign(y), y = abs(y)
искать кодовую комбинацию = hcod([x] [y]) в таблице table_seletct
записать hcod([x] [y]), начиная с крайнего левого бита, количество битов hlen([x] [y])
if x! = 0
записать signx в поток битов
end if
if y! = 0
записать signy в поток битов
end if
end do
end if
end if
end for
Возможный вариант использования private_bits в качестве счетчика фреймов.
В.1.5.4.1 Введение
Описание цикла Уровня III подразделяется на три уровня. Верхний уровень вызывают программой фреймового цикла. Эта подпрограмма вызывает подпрограмму "внешний итеративный цикл", который вызывает подпрограмму "внутренний итеративный цикл". Для каждого уровня ниже показана соответствующая блок-схема (Рисунки В.9а, В.9б, В.9в).
Внутри цикла входной вектор коэффициентов преобразования квантуется в итеративном процессе в соответствии с несколькими требованиями. Во внутреннем цикле квантуется входной вектор, и увеличивается размер шага квантователя до тех пор, пока выходной вектор не может быть кодирован с доступным числом битов. После завершения внутреннего цикла во внешнем цикле проверяются искажения в каждой полосе масштабных коэффициентов, и если допустимый уровень искажений превышен, то происходит усиление полосы масштабных коэффициентов и снова вызывается внутренний цикл.
На вход цикла Уровня III поступают:
а) вектор амплитуд коэффициентов преобразования xr (0... 575);
б) xmin(sb) - вектор допустимых уровней искажений в полосах масштабных коэффициентов:
xmin = ration(sb) * en (sb)lbw(sb);
в) window_switching_flag - вместе с mixed_block_flag и block_type определяет количество полос масштабных коэффициентов;
г) mean_bits - (биты, доступные для кодирования методом Хаффмана и кодирования масштабных коэффициентов);
д) more_bits - количество битов в дополнение к среднему числу битов, требуемых из психоакустической энтропии для гранулы:
more_bits = 3,1 * pe - среднее число битов.
На выходе цикла Уровня III имеются:
а) вектор квантованных значений ix (0... 575);
б) scalefac_l(sb) или scalefac_s(sb) в зависимости от window_switching_flag, block_type и mixed_block_flag;
в) global_gain (информация о размере шага квантователя):
global_gain = qquant + system_constant;
system_constant включает все операции масштабирования кодера и смещение для достижения корректного вывода процесса декодирования, описанного в основной части;
г) число неиспользованных битов, доступных для дальнейшего использования;
д) preflag (предкоррекция в циклах вкл/выкл);
е) информация о коде Хаффмана:
- big_values (число пар Хафмана, исключая "count1");
- count1table_select (таблица значений кода Хаффмана, по модулю <= 1 в верхней части спектра);
- table_select [0... 2] (таблица областей кода Хаффмана);
- region0_count, region1_count (используется для расчета границ между областями);
- part2_3_length.
В.1.5.4.2 Предварительные шаги
В.1.5.4.2.1 Сброс всех переменных цикла
Масштабные коэффициенты разделов scalefac_l[sb] или scalefac_s[sb] обнуляются.
Счетчик qquant размера шага квантователя сбрасывается в ноль.
Preflag сбрасывается в ноль.
Scalefac_scale сбрасывается в ноль.
Начальное значение quantanf устанавливается следующим образом:
quantanf = system_const * ln(sfm),
где sfm - мера пологости спектра, и quantanf зависит от программной реализации кодера.
Мера пологости спектра sfm
.Значение system_const выбирается так, чтобы для всех сигналов первая итерация внутреннего цикла возвращала суммарное количество битов, превышающее требуемое. Этим обеспечивается получение после первого внутреннего цикла результата, при котором используется столько доступных битов, сколько возможно. Для продолжительности вычисления желательно минимизировать число итераций путем адаптирования значения quantanf к скорости передачи и сигнальной статистике.
В.1.5.4.2.2 Управление резервуаром битов
Если для кодирования одной гранулы требуется количество битов меньшее, чем mean_bits, то оставшиеся биты сохраняются в резервуаре. Если биты сохраняются для фрейма, значение main_data_end соответственно увеличивается (см. рисунок А.7а).
Количество битов, доступными для main_data (называемое max_bits), получается из фактической оценки порога (pe на основе психоакустического расчета), среднего количества битов (mean_bits) и фактического содержимого резервуара. Число байтов в резервуаре указывается main_data_end.
Правила для управления резервуаром битов:
- если количество байтов, доступных во внутреннем итеративном цикле, не используется для кодирования методом Хаффмана или другим main_data, то оно добавляется к резервуару битов;
- если резервуар битов более чем на 80% превышает максимальный допустимый объем резервуара, все байты, превышающие этот объем, делаются доступными для main_data (в дополнение к mean_bits);
- если more_bits больше чем 100 битов, то max(more_bits/8, 0,6 * main_data_end) байтов берутся из резервуара битов и делаются доступными для main_data (в дополнение к mean_bits);
- после того как вычисления внутри циклов были завершены, число байтов, не используемых для main_data, добавляется к резервуару битов;
- если после предыдущего шага число байтов в резервуаре превышает максимально допустимый объем, то к потоку добавляются биты стаффинга и содержимое резервуара битов соответственно корректируется.
В.1.5.4.2.3 Вычисление информации о выборе масштабных коэффициентов (scfsi)
В scfsi содержится информация о том, какие масштабные коэффициенты (сгруппированные в scfsi_bands) первой гранулы могут быть использованы для второй гранулы. Указанные масштабные коэффициенты не передаются и полученные за их счет биты могут использоваться для кодирования методом Хаффмана.
Чтобы определить использование scfsi, о каждой грануле должна храниться следующая информация:
а) тип блока;
б) суммарная энергия гранулы
,где n - количество спектральных значений;
в) энергия каждой полосы масштабных коэффициентов
,где lbl(sb) - номер первого коэффициента, принадлежащего полосе масштабного коэффициента sb;
bw(sb) - количество коэффициентов в полосе масштабного коэффициента sb;
г) допустимый уровень искажений для каждой полосы
xm(sb) = int{log2(xmin(i))},
xmin(sb) вычисляется с помощью психоакустической модели.
Масштабные коэффициенты первой гранулы передаются всегда. При кодировании второй гранулы сравнивается информация об этих двух гранулах. Существует четыре критерия возможности использования общего scfsi. Если один из четырех критериев не выполняется, scfsi отключается (scfsi устанавливается в 0 во всех scfsi_bands). Указанными критериями являются (индекс 0 соответствует первой грануле, индекс 1 - второй):
а) существование спектральных значений, отличных от нуля;
б) отсутствие в гранулах коротких блоков;
в) |en_tot0 - en_tot1| < en_totkrit;
г)
.Если scfsi не отключается после проверки этих условий, то используются еще два критерия для каждого scfsi_band, причем, для включения scfsi (то есть установки 1 в этой scfsi_band) оба эти условия должны быть выполнены:
а)
![]() б)
.Константы (с индексом krit) должны быть выбраны так, чтобы scfsi включался в случае близости значений энергии/искажений.
Рекомендованные значения:
en_totkrit = 10,
en_difkrit = 100,
en (scfsi_band)krit = 10 для каждой scfsi_band,
xm (scfsi_band)krit = 10 для каждой scfsi_band.
В.1.5.4.3 Внешний итеративный цикл (цикл управления искажениями)
Внешний итеративный цикл управляет шумами квантования, которые возникают из-за квантования частотных линий в пределах внутреннего итеративного цикла. Шум окрашивается путем умножения линий в пределах полос масштабных коэффициентов на масштабные коэффициенты перед квантованием. Следующий псевдокод иллюстрирует этот процесс:
do для каждой полосы масштабных коэффициентов;
do от нижнего до верхнего индекса i полосы
![]() end do
end do,
где scalefac - либо scalefac_1, либо scalefac_s.
На практике умножение выполняется с приращением путем увеличения масштабных коэффициентов, используемых в каждом цикле управления искажением. Это описывается ниже в В.1.5.4.3.5.
Цикл управления искажениями всегда начинается с scalefac_scale = 0. Если после нескольких итераций максимальная длина поле масштабных коэффициентов превышена, то scalefac_scale увеличивается до значения 1, тем самым достигается увеличение возможного динамического диапазона масштабных коэффициентов. В этом случае значения масштабных коэффициентов и частотных линий должны быть соответственно скорректированны.
В.1.5.4.3.1 Сохранение масштабных коэффициентов
Масштабные коэффициенты всех полос, scalefac_l(sb) или scalefac_s(sb), и размер шага квантователя qquant должны быть сохранены. Если вычисление внешнего цикла прервано без достижения надлежащего результата, эти значения вместе с квантованным спектром дают приближение и могут быть переданы.
В.1.5.4.3.2 Вызов внутреннего итеративного цикла
Для каждого внешнего итеративного цикла (цикл управления искажениями) вызывается внутренний итеративный цикл (цикл управления скоростью потока). Параметрами являются масштабированные значения в частотной области (выход гибридного набора фильтров) и количество битов, доступных в цикле управления скоростью. Результатом является количество используемых битов и квантованные частотные линии ix(i).
В.1.5.4.3.3 Расчет искажений в полосах масштабных коэффициентов
Для каждой полосы масштабных коэффициентов значение искажения рассчитывается по формуле
![]() где lb1(sb) - номер коэффициента, соответствующего самой низкой частоте полосы; bw(sb) - количество коэффициентов в этой полосе.
В.1.5.4.3.4 Предкоррекция
Опция "предкоррекция" (включаемая установкой preflag в значение 1) обеспечивает возможность усиления верхней части спектра в соответствии с таблицам предкоррекции.
if (preflag==|) {
ifqstep:= 2
xmin(j) = xmint(j)*ifqstep
for (i=lower limit of scalefactor band j; i <=upper limit of scalefactor band j; i++){
![]() }
}
Условие включения предкоррекции зависит от конкретной реализации. Например, предкоррекция может включаться, если во всех верхних четырех полосах масштабных коэффициентов искажения превышают порог после первого вызова внутреннего цикла.
Если кодируется вторая гранула и scfsi активно по крайней мере в одной scfsi_band, предкоррекция во второй грануле устанавливается такой же, как и для первой гранулы.
Все спектральные значения полос масштабных коэффициентов, в которых искажения превышают допустимое значение, усиливаются множителем ifqstep. Значение ifqstep передается в scalefac_scale.
if ((xmin - xfsf) of scalefactor band j < 0){
xmint(j) = xmint(j) * ifqstep
ifq(j) = ifq(j) + 1
for (i=lower limit of scalefactor band; i <=upper limit of scalefactor band; i++){
xr(i) = xr(i) * ifqstep
}
}
Если кодируется вторая гранула и scfsi активно по крайней мере в одной scfsi_band, должны быть сделаны следующие шаги:
а) ifqstep должен быть установлен как и в первой грануле;
б) если это первая итерация, то масштабные коэффициенты полос, для которых включен scfsi, должны быть взяты из первой гранулы. Соответствующие спектральные значения должны быть усилены:
if ((scfsi according to scalefactor band j == 1){
ifq(j) = ifq(j)first granule
for (i=lower limit of scalefactor band; i <=upper limit of scalefactor band; i++){
xr(i) = xr(i) * ifqstep
}
}
где scalefac либо scalefac_1(), либо scalefac_s();
в) если это не первая итерация, полосы, для которых scfsi включено, не должны быть усилены.
В.1.5.4.3.6 Условия для завершения обработки циклов
Обычно обработка циклов завершается, если больше нет ни одной полосы с искажениями, превышающими порог. Однако это не всегда достижимо. Тогда используют другие условия, позволяющие завершить внешний цикл, если:
а) все полосы масштабных коэффициентов уже усилены;
б) усиление по крайней мере в одной полосе превышает верхний предел, который определяется форматом передачи масштабных коэффициентов.
Верхним пределом являются масштабный коэффициент 15 для полос с 0 по 10 и масштабный коэффициент 7 для полос с 11 по 20. В случае block_type == 2 и mixed_block_flag == 0 верхний предел равен 15 для полос с 0 по 18. В случае block_type == 2 и mixed_block_flag == 1 верхний предел равен 15 для полос с 0 по 17. Для остальных верхний предел масштабных коэффициентов равен 7.
Выполнение цикла прекращается, и выходом является scalefac_1 (sb) или scalefac_s (sb) вывод. В случае реализации в реальном времени может присутствовать третье условие, которое завершает циклы при нехватке вычислительного времени.
В.1.5.4.4 Внутренний итеративный цикл (цикл управления скоростью)
Во внутреннем итеративном цикле выполняется квантование данных частотной области, которые затем подготавливаются к форматированию. Здесь происходит выбор таблицы, разделение диапазона big_values на области и выбор шага квантователя.
В.1.5.4.4.1 Квантование
Квантование вектора спектральных значений выполняется согласно уравнению:
.В.1.5.4.4.2 Проверка максимума квантованных значений
Существует предел по максимально допустимому квантованному значению. Этот предел устанавливается для ограничения размера таблицы при ее использовании для переквантования частотных линий. Предел задается в виде допустимых значений идентификатора длины linbits значений, отмеченных с помощью кода ESC. Поэтому перед подсчетом битов шаг квантователя увеличивается
qquanl = qquant + 1,
пока максимум квантованных значений находится в пределах диапазона самой большой кодовой таблицы Хаффмана.
В.1.5.4.4.3 Вычисление количества нулевых значений
Значению rzero присваивается количество пар спектральных коэффициентов в верхней части спектра, после квантования оказавшихся равными нулю.
В.1.5.4.4.4 Вычисление количества значений меньших или равных 1
Значению count1 присваивается количество четверок спектральных коэффициентов, после квантования оказавшихся равными нулю или единице, следующих за парами нулей rzero.
В.1.5.4.4.5 Подсчет битов, необходимых для кодирования значений меньших или равных 1
Для кодирования одной из четверок count1 используется одно слово кода Хаффмана. Имеется два различных кодовых словаря Хаффмана с соответствующими таблицами длины кода (таблицы Б.7). Количество битов, необходимых для кодирования всех count1 четверок, определяется формулой:
bitsum_count1 = min (bitsum_table0, bitsum_table1),
где count1table_0 используется, чтобы указать на таблицу A
![]() и count1table_1 используется, чтобы указать на таблицу B
![]() Count1table_0, так же как и count1table_1, должна включать биты, необходимые для кодирования знаковых битов.
Информация о том, какая таблица используется, передается в count1table_select, которая равна 0 для таблицы A или 1 для таблицы B.
В.1.5.4.4.6 Вызов подпрограммы SUBDIVIDE
Пары квантованных значений, не учтенные в count1 или rzero, называются bigvalues. Подпрограмма SUBDIVIDE разбивает полосы, соответствующие этим значениям на три группы. Последняя, обычно неполная, считается полной. Количество полос в первой и второй областях содержится в (region0_count+1) и (region1_count+1) соответственно. Число полос в третьей области может быть вычислено из bigvalues. Стратегия разделения зависит от реализации. Для примера, самое простое решение - треть всех полос масштабных коэффициентов отнести к первой области и четверть - к последней.
Подразделение блоков выполняется аналогично, однако в этом случае есть только две подобласти. Regionl_count устанавливается в значение по умолчанию. Это значение равно 8 в случае split_point=0 и 9 в случае split_point=I. Оба значения указывают на ту же самую абсолютную частоту.
В.1.5.4.4.7 Вычисление кодового словаря для каждой подобласти
Имеется 32 различные кодовых таблицы Хаффмана, которые доступны для кодирования пар квантованных значений. Они отличаются друг от друга максимальным значением, которое может быть кодировано и статистикой сигнала, для которой они оптимизированы. В таблицах содержатся только коды со значениями меньше 16. Для значений >= 16 используются две таблицы, где максимальное значение 15 является символом ESC. В этом случае значение 15 кодируется в дополнительном слове с использованием линейного ИКМ с длиной слова linbits.
Простой способ выбора таблицы состоит в том, чтобы использовать максимум квантованных значений подобласти. Таблицы одинакового размера оптимизируются для различной сигнальной статистики.
В.1.5.4.4.8 Подсчет битов, необходимых для кодирования значений в субобластях
Количество битов, необходимых для кодирования квантованных значений субобласти, определяется по формуле:
![]() где np(j) - число пар в подобласти;
fe(j) - номер первого квантованного значения в подобласти;
bitz - таблица с длиной кода Хаффмана;
Следует обратить внимание на то, что в таблицы длины кода Хаффмана должно быть включено количество битов, необходимое для кодирования знаковых битов.
![]() ![]() ![]() (обязательное)
Нет никакого принципиального различия в использовании психоакустической модели 1 в Уровне I или II.
Уровень I: процедура распределения битов выполняется для каждого блока из 12 субполосных или 384 входных ИКМ-отсчетов.
Уровень II: процедура распределения битов выполняется для трех блоков с общим количеством субполосных отсчетов, равным 36, соответствующих 3 * 384 (1152) входным ИКМ-отсчетам.
Распределение битов между 32 субполосами вычисляется на основе отношения сигнал-маска в этих субполосах. Поэтому для каждой субполосы необходимо определить максимальный уровень сигнала и минимальное значение порога маскирования. Минимальное значение порога маскирования определяется из БПФ входного ИКМ сигнала, сопровождаемого психоакустическим расчетом.
БПФ параллельно с субполосной фильтрацией компенсирует слабую частотную селективность набора полосовых фильтров в нижней части звукового диапазона. Этот метод обеспечивает как приемлемое временное разрешение для кодирования звукового сигнала (набор полифазных фильтров с оптимизированным окном для минимального пре-эха), так и приемлемое частотное разрешение для вычисления порогов маскирования. Определяются частоты и уровни интерференционных искажений. Это необходимо для того, чтобы вычислить минимальную скорость передачи для тех субполос, которые нуждаются в дополнительных битах, чтобы устранить заметность интерференционных искажений в декодере. Дополнительные сложности, вызванные необходимостью получения улучшенной разрешающей способности по частоте, необходимы только в кодере и не вызывают дополнительной задержки в кодере или усложнения его алгоритма.
Вычисление отношения сигнал-маска состоит из девяти шагов:
1 вычисление БПФ для частотного преобразования;
2 определение уровня звукового давления в каждой субполосе.
3 определение абсолютного порога слышимости;
4 обнаружение тональных (близких к синусоиде) и нетональных (близких к шуму) компонентов аудиосигнала;
5 прореживание маскеров в целях оставить только значащие;
6 вычисление индивидуальных порогов маскирования;
7 вычисление глобального порога маскирования;
8 определение минимального порога маскирования в каждой субполосе;
9 вычисление отношения сигнал-маска в каждой субполосе.
Предполагается, что частота дискретизации равна 48 кГц. Для двух других частот дискретизации все указанные значения частот должны быть пересчитаны соответствующим образом.
Шаг 1. Вычисления для частотного преобразования БПФ
Порог маскирования определяется путем оценки спектральной плотности мощности, которая вычисляется путем БПФ с 512 отсчетами для Уровня I или с 1024 отсчетами для Уровня II. На вход БПФ поступают непосредственно отсчеты входного ИКМ сигнала, умноженные на оконную функцию Ханна.
Для согласования по времени распределения битов и соответствующих субполосных отсчетов ИКМ отсчеты, поступающие на вход БПФ, должны быть задержаны.
1. Задержка набора субполосных фильтров анализа равна 256 отсчетам, что соответствует 5,3 мс на частоте дискретизации 48 кГц. Сдвиг окна на 256 отсчетов необходим для компенсации задержки набора субполосных фильтров анализа.
2. Окно Ханна должно быть выровнено относительно субполосных отсчетов кадра. Для Уровня I это приводит к дополнительному сдвигу окна на 64 отсчета. Для Уровня II требуется дополнительный сдвиг окна на минус 64 отсчета.
![]() - спектральная плотность мощности X(k)
,где s(l) - входной сигнал.
Нормализация к относительному уровню звукового давления 96 дБ должна быть такой, чтобы максимальное значение соответствовало 96 дБ.
Шаг 2. Определение уровня звукового давления в каждой полосе
Уровень звукового давления Lsb (дБ) в субполосе n вычисляется по формуле
Lsb(n) = max[X(k), 20 * lg(scfmax(n) * 32768) - 10],
где X(k) - уровень звукового давления спектральной линии с номером k, полученной с помощью БПФ и соответствующей максимальной амплитуде в субполосе n.
Переменная scfmax(n) является одним масштабным коэффициентом на Уровне I или максимумом из трех масштабных коэффициентов на Уровне II для субполосы n в пределах кадра. Наличие в выражении слагаемого -10 дБ корректирует различие между уровнем RMS и пиковым значением. Уровень звукового давления Lsb(n) вычисляется для каждой субполосы n.
Следующий альтернативный метод вычисления Lsb(n) рассчитан для лучшей производительности кодера, однако этот метод не был подвергнут формальному тесту качества звука.
Уровень звукового давления Lsb, дБ, в субполосе n вычисляется по формуле
Lsb(n) = max[Xspl(n), 20lg(scfmax(n)32768) - 10],
где
,где Xspl(n) - уровень звукового давления в полосе n.
Шаг 3. Учет абсолютного порога слышимости
Значения абсолютного порога слышимости LTq(k) приведены в таблицах Г.1а, Г.1б, Г.1в для Уровня I и Г.1г, Г.1д, Г.1е для Уровня II. Значения зависят от частоты дискретизации входного ИКМ сигнала и указаны для каждой спектральной линии. В зависимости от скорости передачи для абсолютного порога слышимости используется смещение, которое составляет минус 12 дБ для скоростей передачи >= 96 кбит/с и 0 дБ для скоростей передачи < 96 кбит/с на канал.
Шаг 4. Обнаружение тональных и нетональных компонентов аудиосигнала
Вид маскера влияет на порог маскирования. Поэтому следует различать тональные и нетональные маскеры. Для расчета глобального порога маскирования в спектре БПФ необходимо обнаружить тональные и нетональные маскеры.
Этот шаг начинается с определения локальных максимумов, из которых затем выделяются тональные маскеры (синусоиды) и вычисляются интенсивности нетональных маскеров в пределах критической полосы. Границы критических полос даны в таблицах Г.2а, Г.2б, Г.2в для Уровня I и Г.2г, Г.2д, Г.2е для Уровня II.
Ширина критических полос меняется в зависимости от центральной частоты с шириной примерно 0,1 кГц на НЧ и с примерно 4 кГц на ВЧ. Из психоакустических экспериментов известно, что у слуха разрешающая способность по частоте на НЧ лучше, чем в более высокой области. Чтобы определить, является ли локальный максимум тональным маскером, вокруг максимума исследуется частотный диапазон df.
Для создания списка спектральных линий X(k), являющихся тональными или нетональными маскерами, выполняются следующие три операции.
1 Маркировка локальных максимумов.
Спектральная линия X(k) маркируется как локальный максимум, если
X(k) > X(k - 1) и X(k) >= X(k + 1).
2 Создание списка тональных маскеров и вычисление уровня звукового давления.
Локальный максимум помещается в список тональных маскеров, если
X(k) - X(k + j) >= 7 дБ,
где j выбирается согласно
Если X(k) является тональным маскером, то указываются следующие параметры:
- номер спектральной линии k;
- уровень звукового давления
;- тональный флаг.
Затем все линии спектра в пределах исследованного частотного диапазона устанавливаются в
3 Создание списка нетональных маскеров и вычисление энергии.
Нетональные (шумовые) маскеры вычисляются из оставшихся спектральных линий. Чтобы вычислить нетональные маскеры из этих спектральных линий X(k) с помощью таблиц Г.2а, Г.2б, Г.2в для Уровня I и Г.2г, Г.2д, Г.2е для Уровня II определяются критические полосы z(k). На Уровне I 23 критических полосы используются для частоты дискретизации 32 кГц, 24 критических полосы - для 44,1 кГц и 25 критических полос - для 48 кГц. На Уровне II 24 критических полосы используются для частоты дискретизации 32 кГц и 26 критических полос используются для частот дискретизации 44,1 кГц и 48 кГц. В пределах каждой критической полосы энергии спектральных линий (оставшихся после того, как тональные маскеры были обнулеваны) суммируются для получения уровня звукового давления нетонального маскера Xnm(k), соответствующего рассматриваемой критической полосе.
Указываются следующие параметры:
- номер спектральной линии k, ближайшей к геометрическому среднему критической полосы;
- уровень звукового давления Xnm(k), дБ;
- нетональный флаг.
Шаг 5. Прореживание маскеров в целях оставить только значащие.
Прореживание является процедурой сокращения количества маскеров, используемых для вычисления глобального порога маскирования.
1. Тональные Xtm(k) или нетональные Xnm(k) маскеры используются для вычисления порога маскирования, только если:
Xtm(k) >= LTq(k) или Xnm(k) >= LTq(k).
В этом выражении LTq(k) является абсолютным порогом слышимости на частоте k. Эти значения даются в таблицах Г.1а, Г.1б, Г.1в для Уровня I и Г.1г, Г.1д, Г.1е для Уровня II.
2. Прореживание двух и более тональных маскеров в пределах 0,5 Барк: остается только маскер с наибольшим значением энергии, остальные маскеры удаляются из списка тональных маскеров. Для этой операции используется скользящее окно шириной 0,5 Барк.
Индекс j используется для указания на соответствующие тональные или нетональные маскеры объединенного прореженного списка.
Шаг 6. Вычисление индивидуальных порогов маскирования
Из исходных N/2 спектральных линий с индексом k только подмножество линий с индексом i используется для расчета глобального порога маскирования. Используемые линии даны в таблицах Г.1а, Г.1б, Г.1в для Уровня I и в таблицах Г.1г, Г.1д, Г.1е для Уровня II.
Уровень I
Из спектральных линий, соответствующих в частотной области первым шести субполосам, используются все линии. В области частот, соответствующей следующим шести субполосам, рассматривается каждая вторая спектральная линия. Наконец, в случае частот дискретизации 48 кГц и 44,1 кГц в области частот, соответствующей оставшимся субполосам, рассматривается каждая четвертая спектральная линия вплоть до 20 кГц. В случае частоты дискретизации 32 кГц в области частот, соответствующей оставшимся субполосам, рассматривается каждая четвертая спектральная линия вплоть до 15 кГц (см. также таблицы Г.1а, Г.1б, Г.1в для Уровня I).
Уровень II
Из спектральных линий, соответствующих в частотной области первым трем субполосам, используются все линии. В области частот, соответствующей следующим трем субполосам, рассматривается каждая вторая спектральная линия. В области частот, соответствующей следующим шести субполосам, рассматривается каждая четвертая спектральная линия. Наконец, в случае частот дискретизации 48 кГц и 44,1 кГц в области частот, соответствующей оставшимся субполосам, рассматривается каждая восьмая спектральная линия вплоть до 20 кГц. В случае частоты дискретизации 32 кГц в области частот, соответствующей оставшимся субполосам, рассматривается каждая восьмая спектральная линия вплоть до 15 кГц (см. также таблицы Г.1г, Г.1д, Г.1е для Уровня II).
Число линий n различно в зависимости от частот дискретизации и уровней:
Каждому тональному и нетональному маскеру присваивается ближайшее к спектральной линии X(k) значение индекса i, заданного в таблицах Г.1а, Г.1б, Г.1в для Уровня I и в таблицах Г.1г, Г.1д, Г.1е для Уровня II.
Индивидуальные пороги маскирования тональных и нетональных маскеров задаются следующим выражением:
LTtm[z(j),z(i)] = Xtm[z(j)] + avtm[z(j)] + vf[z(j),z(i)],
LTnm[z(j),z(i)] = Xnm[z(j)] + avnm[z(j)] + vf[z(j),z(i)],
где LTtm и LTnm - индивидуальные пороги маскирования в критической полосе z Барк маскера частоты zm, Барк (значения в дБ могут быть либо положительными, либо отрицательными);
Xtm[z(j)] - уровень звукового давления маскера с индексом j в соответствующей критической полосе z(j);
av - индекс маскирования;
vf - функция маскирования маскера Xtm[z(j)].
Индекс маскирования av различен для тональных и нетональных маскеров (avtm и avnm).
Для тональных маскеров
avtm = -1,525 - 0,275z(j) - 4,5 дБ,
для нетональных маскеров
avnm = -1,525 - 0,175z(j) - 0,5 дБ.
Функция маскирования vf имеет неодинаковые спады, которые зависят от расстояния в Барках до маскера:
dz = z(i) - z(j),
где i - номер спектральной линии, для которой вычисляется функция маскирования;
j - номер спектральной линии, соответствующей маскеру.
Частоты в Барках для z(j) и z(i) даны в таблицах Г.1а, Г.1б, Г.1в для Уровня I и в таблицах Г.1г, Г.1д, Г.1е для Уровня II.
Функция маскирования (в дБ), одинаковая для тональных и нетональных маскеров, задается выражениями:
где X[z(j)] - уровень звукового давления j-го маскера, в дБ.
По причинам сложности реализации маскирование больше не учитывается (LTtm и LTnm устанавливаются в
Шаг 7. Вычисление глобального порога маскирования LTg.
Глобальный порог маскирования LTg(i) для i-й спектральной линии складывается из верхних и нижних спадов индивидуальных порогов маскирования каждого из j тональных и нетональных маскеров и из абсолютного порога слышимости LTg(i). Это также задано в таблицах Г.1а, Г.1б, Г.1в для Уровня I и в таблицах Г.1г, Г.1д, Г.1е для Уровня II. Глобальный порог маскирования находится путем суммирования значений энергий, соответствующих индивидуальным порогам маскирования и абсолютному порогу слышимости:
.Общее количество тональных маскеров равно m, общее количество нетональных маскеров равно n. Для заданного i диапазон j может быть уменьшен до маскеров, находящихся в пределах от -8 до +3 Барк от i. За пределами этого диапазона LTtm и LTnm равны
Шаг 8. Определение минимального порога маскирования в каждой субполосе.
Минимальный уровень маскирования LTmin(n) в субполосе n определяется следующим выражением:
,где f(i) - частота i-й спектральной линии.
Значения f(i) сведены в таблицы Г.1а, Г.1б, Г.1в для Уровня I и в таблицы Г.1г, Г.1д, Г.1е для Уровня II. Минимальный уровень маскирования LTmin(n) вычисляется для каждой субполосы.
Шаг 9. Вычисление отношения сигнал-маска.
Отношение сигнал-маска (дБ) рассчитывается для каждой субполосы n по формуле
SMRsb(n) = Lsb(n) - LTmin(n).
Таблица Г.1а
для частоты дискретизации 32 кГц. Уровень I
Таблица Г.1б
для частоты дискретизации 44,1 кГц. Уровень I
Таблица Г.1в
для частоты дискретизации 48 кГц. Уровень I
Таблица Г.1г
для частоты дискретизации 32 кГц. Уровень II
Таблица Г.1д
для частоты дискретизации 44,1 кГц. Уровень II
Таблица Г.1е
для частоты дискретизации 48 кГц. Уровень II
Таблица Г.2а
Частота дискретизации 32 кГц. Уровень I
Таблица Г.2б
Частота дискретизации 44,1 кГц. Уровень I
Таблица Г.2в
Частота дискретизации 48 кГц. Уровень I
Таблица Г.2г
Частота дискретизации 32 кГц. Уровень II
Таблица Г.2д
Частота дискретизации 44,1 кГц. Уровень II
Таблица Г.2е
Частота дискретизации 48 кГц. Уровень II
Г.2.1 Общие сведения
Психоакустическая модель 2 - независимая психоакустическая модель, которая может быть скорректирована и адаптирована к любому уровню. В этом приложении дается общее описание психоакустической модели 2 и достаточная информация для ее реализации на Уровнях I и II. Психоакустическая модель Уровня III базируется на этой реализации. Модель адаптирована в соответствии с описанием кодера Уровня III.
Блок расчета порога маскирования имеет три входа:
1. Смещение окна анализа iblen, где 384 < iblen < 640. Параметр iblen должен оставаться постоянным на протяжении всего процесса расчета порога маскирования. Если необходимо вычислить пороги для двух различных смещений (как на Уровне III), то требуется два расчета, каждый с соответствующей фиксированной длиной смещения. В случае, когда iblen вне диапазона 384 - 640, необходимо вычисление психоакустических порогов с различными длинами окон и смещений. Есть два способа выполнить это:
а) использовать преобразование различной длины и пересчитать исходные коэффициенты для модели;
б) использовать ту же длину преобразования, но с существенно более коротким окном Хана, подходящим для данных и задаче.
Выбор оставляют за конкретной реализацией.
2. Новые iblen отсчетов сигнала, вместе с задержанными отсчетами (либо в наборе фильтров, либо в блоке психоакустического расчета) помещаются по центру окна анализа.
3. Для стандартных частот дискретизации предусмотрены соответствующие таблицы. Частота дискретизации, как и iblen, должна остаться постоянной на протяжении одной реализации расчета порога маскирования.
Выходом психоакустической модели 2 является вектор отношений сигнал-маска, SMRn, который адаптируется к уровням как описано ниже.
Перед реализацией модели массив данных БПФ, а также массивы r и f, должны быть обнулеваны.
На Уровне II значения психоакустических отношений должны быть вычислены дважды для каждого фрейма. Худший из двух вариантов используется при распределении битов, как показано в программной модели для Уровней I и II с психоакустической моделью 2.
Г.2.2 Комментарии к обозначениям
В течение процесса вычисления порога маскирования используются три индекса:
b - номер раздела, если при вычислении используется свертка или сумма, bb будет использоваться в качестве переменной суммирования, нумерация раздела начинается с 1;
n - номер частотной полосы, индекс 1 соответствует самой нижней полосе субполосного набора фильтров.
Г.2.3 Функция распределения маскирования
Несколько следующих позиций относятся к функции распределения маскирования. Она вычисляется по формуле
tmpx = 1,05(j - i),
где i - значение (в Барках), соответствующее полосе, для которой рассчитывается функция распределения;
j - расстояние (в Барках) до полосы, на которую оказывает влияние полоса i.
tmpx - временная переменная.
x = 8min((tmpx - 0,5)2 - 2(tmpx - 0,5),0)
где x - временная переменная;
min(a,b) - функция, возвращающая наименьшее значение из a и b.
![]() tmpy является еще одной временной переменной.
![]() Г.2.4 Порядок расчета порога
Следующие шаги необходимы для вычисления SMRn.
1. Восстановление 1024 отсчетов входного сигнала.
iblen новых отсчетов становятся доступными при каждом обращении к пороговому генератору. Пороговый генератор должен хранить 1024 отсчетов iblen и объединить эти отсчеты для точного восстановления 1024 последовательных отсчетов входного сигнала si, где i - индекс, 1 <= i <= 1024 текущего входного потока.
2. Вычисление комплексного спектра входного сигнала.
Во-первых, si взвешивается в окне Ханна длиной 1024, то есть
,Следует обратить внимание на то, что на Уровне III может использоваться более короткое окно, при активном переключении окон, с соответствующим центрированием, согласно описанию кодера Уровня III.
Во-вторых, вычисляется стандартное прямое БПФ swi.
В-третьих, определяются амплитудная
3. Вычисление предсказания r и f.
Предсказанные величины амплитуды,
; ,где t - текущий номер блока;
t - 1 - предыдущий блок;
t - 2 - блок, предшествующий предыдущему блоку.
4. Вычисление меры неопределенности
.Ценой ухудшения качества эта мера может быть вычислена только для частотных линий в нижней части спектра. Расчет должен быть выполнен от постоянной составляющей до, по крайней мере, 3 кГц и предпочтительно - 7 кГц. Ограничение верхнего предела ниже 5,5 кГц может значительно ухудшить субъективную оценку алгоритма сжатия. Значения
5. Вычисление энергии и неопределенности в разделах.
Энергия в каждом разделе eb:
![]() и взвешенная неопределенность cb:
.Разбиение на разделы обеспечивает разрешение, приблизительно равное одной линии БПФ или 1/3 критической полосы. На нижних частотах одна линия БПФ соответствует одному разделу. На верхних частотах большая часть линии объединяется в один раздел. Границы разделов для каждой из трех частот дискретизации указаны в таблице Г.3. Эти значения будут использоваться в процессе вычисления порога.
Для каждой частоты дискретизации существует значение bmax, соответствующее самому большому значению b.
6. Вычисление свертки энергий и неопределенности разделов с функцией распределения маскирования:
; .Поскольку ctb взвешивается с энергией сигнала, оно должно быть нормализовано к cbb.
![]() Одновременно, из-за отсутствия нормирования распространяющейся функции, должно быть нормализовано ecbb и вычислена нормализованная энергия enb.
enb = ecbb * rnormb
Коэффициент нормализации rnormb:
![]() 7. Преобразование cbb в индекс тональности tbb.
tbb = -0,299 - 0,43ln(cbb)
Каждый tbb лежит в диапазоне 0 < tbb < I.
8. Вычисление требуемого SNR в каждом разделе.
Необходимое отношение сигнал - шум, SNRb:
SNRb = max(minvalb,tbb * TMNb + (1 - tbb) * NMTb),
где max(a, b) - функция, возвращающая наибольшее значение из a и b;
TMNb - значение для тонального маскера (в дБ) в разделе;
NMTb - значение для шумового маскера (в дБ) в разделе, NMTb = 5,5 дБ для всех b.
9. Вычисление отношения мощностей.
Отношение мощностей bcb:
![]() 10. Вычисление фактического энергетического порога nbb.
nbb = enbbcb
11. Распространение порога по линиям БПФ,
![]() 12. Прибавление абсолютных порогов для получения прибавления энергетическому порогу слышимости,
![]() Значения absthr в дБ даны в таблицах Г.4 относительно уровня, соответствующего энергии БПФ синусоиды амплитудой +/- 1/2lsb. Значения в дБ должны быть преобразованы в энергию после нормирования коэффициентов БПФ.
13. Регулирование пре-эха
На Уровне III выполняется регулирование пре-эха. Фактический процесс регулирования описывается в части спецификации кодера для Уровня III. Этот шаг пропускается для Уровней I и II.
14. Вычисление отношения сигнал-маска SMRn.
Энергия в полосе epartn:
![]() Затем, если
, то уровень шума в полосе, npartn, вычисляется как![]() иначе
,где min(a, ..., z) - функция, возвращающая наименьшее положительное значение из a ... z.
Отношения, поступающие в кодер SMRn, вычисляются как
![]() Таблица Г.3а
Таблица Г.3б
Разделы для частоты дискретизации 44,1 кГц
Таблица Г.3в
Разделы для частоты дискретизации 48 кГц
Таблица Г.4а
для частоты дискретизации 32 кГц
Продолжение таблицы Г.4а
Таблица Г.4б
Значения абсолютного порога слышимости
для частоты дискретизации 44,1 кГц
Окончание таблицы Г.4б
Таблица Г.4в
Значения абсолютного порога слышимости
для частоты дискретизации 48 кГц
Окончание таблицы Г.4в
Таблица Г.5
Разделы для частоты дискретизации. Уровни I и II
(обязательное)
РАЗРЯДНАЯ ЧУВСТВИТЕЛЬНОСТЬ К ОШИБКАМ
Д.1 Общие сведения
В этом приложении приводится чувствительность отдельных битов к случайным ошибкам, если требуется защита от ошибок. Оценка чувствительности (от 0 до 5) приводится для каждого бита и отражает количество ухудшения вызванного одиночной ошибкой:
5 - катастрофическая;
4 - очень раздражающая;
3 - раздражающая;
2 - немного раздражающая;
1 - слышимая;
0 - нечувствительная.
Эти значения основываются не на результатах точных измерений, а, скорее, на знании кодека. Предполагается, что обнаружение ошибок не используется.
Некоторые поля потока битов не имеют фиксированной длины. Все биты этих полей оцениваются на чувствительность к ошибкам, даже если они не используются.
Для всех уровней предполагается, что самая высокая чувствительность к ошибкам у заголовка и проверочной информации.
Д.2 Уровни I и II
Д.3 Уровень III
Перестановка значений кода Хаффмана.
Для получения лучшей устойчивости к ошибкам в нижней части спектра значения кода Хаффмана могут передаваться не в их логическом порядке следования.
Если max_hlen - максимальная длина кодового слова Хаффмана по таблицам, которые используются для кодирования определенного блока, и n - число битов, используемых для кодирования данных блока (но не фрейма) методом Хаффмана, то int(n/max_hlen) слотов заполняются первыми словами кода начиная с нижних частот. Остальные кодовые комбинации помещаются в оставшееся место снова от нижних до высоких частот.
После чередования битов чувствительность бита k + i * int(n/max_hlen) уменьшается линейно от 3 до 0 с изменением k от 0 до int(n/max_hlen) - l, где i = 0,..., max_hlen - l, и n - число битов кода Хаффмана в одном блоке.
Это рекомендуемая практика для данных всех каналов Уровня III, где важна устойчивость к ошибкам.
(обязательное)
МАСКИРОВАНИЕ ОШИБОК
Дополнительной функцией кодированного потока битов является наличие CRC-кода, который обеспечивает обнаружение некоторых ошибок в процессе декодирования. Расстояние Хэмминга для этого кода с обнаружением ошибок d = 4, что позволяет обнаружить до 3 одиночных ошибочных битов или один ошибочный пакет длиной до 16 битов. Количество и позиция защищенных битов в пределах одного кодированного аудиофрейма обычно зависит от уровня, режима, скорости передачи данных и частоты дискретизации.
Это может быть использовано для управления стратегией маскирования ошибок в целях избежать серьезных ухудшений восстановленного сигнала из-за наличия ошибок в наиболее критичной части информации.
Для маскирования могут применяться известные методы, например метод информационной замены или отключение звука. Простой метод замены, при наличии ошибочного фрейма, заключается в замене его предыдущим (свободным от ошибок).
(обязательное)
КОДИРОВАНИЕ В РЕЖИМЕ joint stereo
Ж.1 Кодирование intensity stereo на Уровнях I и II
Дополнительный метод кодирования joint stereo, используемый на Уровнях I и II, является кодированием intensity stereo. Кодирование intensity stereo используется для повышения качества звучания и/или уменьшения скорости передачи стереофонических сигналов. Увеличение скорости передачи обычно составляет приблизительно 10 - 30 кбит/с. Это требует незначительного дополнительного усложнения декодера, увеличение сложности кодера невелико и не влияет на задержку в кодере и декодере.
Результаты психоакустических исследований показывают, что на высоких частотах (приблизительно выше 2 кГц) локализация стереофонического образа в пределах критической полосы определяется огибающей во времени, а не временной микроструктурой аудиосигнала.
Основная идея кодирования intensity stereo состоит в том, что для некоторых субполос передача ami заменяется на субполосные отсчеты, при этом передается только суммарный сигнал, но с масштабными коэффициентами для левого и правого каналов, что позволяет таким образом сохранить стереофонический образ.
Блок-схемы кодера стерео и декодера, включая режим intensity stereo, показаны на рисунках Ж.1 и Ж.2. Во-первых, оценка делается из необходимой скорости передачи для левого и правого каналов. Если требуемая скорость передачи превышает доступную скорость передачи, то требуемая скорость передачи может быть уменьшена за счет установки нескольких субполос в режим intensity stereo. В зависимости от требуемой скорости передачи субполосы 16 - 31, 12 - 31, 8 - 31 или 4 - 31 могут быть установлены в режим intensity stereo. Для квантования этих объединенных субполос используется большее из двух значений распределения битов для левого и правого каналов.
Левые и правые сигналы субполосы поддиапазонов в объединенном режиме стерео добавляются. Эти новые сигналы субполосы масштабируются обычным способом, но первоначально масштабные коэффициенты левых и правых сигналов субполосы передаются согласно синтаксису потока битов. Квантование общих субполосных отсчетов, кодирование общих выборок и кодирование общего распределения битов выполняются таким же образом, как и в независимом кодировании.
Ж.2 ms_stereo и intensity stereo кодирование на Уровне III
На Уровне III может использоваться комбинация ms_stereo режима (сумма/разность) и режим intensity stereo.
1. Переключение ms_stereo.
Режим ms_stereo включается, если условие
![]() истина. Значения rli и rri соответствуют энергиям спектральных линий БПФ левого и правого каналов, вычисленным в психоакустической модели.
2. Обработка ms_stereo:
- матрица MS.
В режиме Ms_stereo значения нормализованных среднего/бокового каналов Mi/Si передаются вместо значений левого/правого каналов Li/Ri.
![]() - ограничение ширины канала Si.
Все значения Si выше самой верхней полосы масштабного коэффициента обнуляются;
- разброс значений канала Si.
В каждой полосе масштабных коэффициентов sb обнуляются все пары малых значений (Si, Si + 1).
![]() Следующие пороговые коэффициенты разностного канала применяются к полосам масштабных коэффициентов для block_type! = 2 ("длинное" МДКП):
3. Обработка intensity stereo.
Вычисление позиции intensity stereo.
Для каждой полосы масштабных коэффициентов sb, которая кодируется в режиме intensity stereo, выполняются следующие шаги:
,где L_Energysb/R_Energysb обозначают сигнальные энергии левого/правого канала в пределах текущей полосы масштабных коэффициентов, и Li/Ri являются преобразованными значениями.
Li = Li + Ri для всех индексов i в пределах текущей полосы масштабных коэффициентов sb.
Ri = 0 для всех индексов i в пределах текущей полосы масштабных коэффициентов sb.
Позиция intensity stereo is_possb передается вместо масштабного коэффициента правого канала (всегда три бита, принимает значения от 0 до 6, 7 - недопустимое значение).
Полосы масштабных коэффициентов правого/разностного канала, содержащие только нули после кодирования, которые не принадлежат части intensity_stereo, должны быть переданы с масштабным коэффициентом '7' для отключения intensity stereo.
![]() ![]()
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/41/gost_82440.html
На правах рекламы:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||