Статус документа
Статус документа

ГОСТ Р 53556.4-2013 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. Часть III (MPEG-4 AUDIO). Основные методы кодирования звуковых сигналов (GA): усовершенствованное звуковое кодирование (AAC), взвешивающее векторное квантование (TwinVQ), побитовое арифметическое кодирование (BSAC)

     6.3 Бесшумное кодирование

     

6.3.1 Описание инструмента


Бесшумное кодирование используется, чтобы дополнительно уменьшить избыточность масштабных коэффициентов и квантованный спектр каждого звукового канала.

global_gain кодируется как 8-битововое целое число без знака. Первый масштабный коэффициент ассоциированный с квантованным спектром дифференцированно кодируется относительно значения global_gain, а затем кодируется по Хаффману, используя сборник кодов масштабного коэффициента. Остающиеся масштабные коэффициенты дифференцированно кодируются относительно предыдущего масштабного коэффициента и затем кодируются по Хаффману, используя сборник кодов масштабного коэффициента.

Бесшумное кодирование квантованного спектра делится на два подразделения спектральных коэффициентов. Первое является подразделением полос масштабного коэффициента, которые содержат кратное 4 количество квантованных спектральных коэффициентов.

Второе подразделение, которое зависит от квантованных спектральных данных, является подразделением полос масштабного коэффициента на разделы формы. Значение раздела состоит в том, что квантованный спектр в пределах раздела представляется, используя единственный сборник кодов Хаффмана, выбранным из комплекта одиннадцати возможных сборников кодов. Длина раздела и связанного с ним сборника кодов Хафмана должна быть передана как дополнительная информация в дополнение к кодированному по Хаффману спектру раздела. Длина раздела дается в полосах масштабного коэффициента, а не в полосах окна масштабного коэффициента. Чтобы максимизировать соответствие статистики квантованного спектра этим сборникам кодов Хаффмана, разрешается столь же большое число разделов как число полос масштабного коэффициента. Максимальный размер раздела равен max_sfb полос масштабного коэффициента.

Как обозначено в таблице 151, спектральные сборники кодов Хаффмана могут представлять n-кортежи коэффициентов со знаком или без знака. Для сборников кодов без знака биты знака для каждого ненулевого коэффициента в n-кортеже следуют непосредственно за соответствующей кодовой комбинацией.

У бесшумного кодирования есть два способа представить большие квантованные спектры. Один способ состоит в том, чтобы отправить флаг перехода из сборника кодов Хаффмана переходов (ESC), который сигнализирует, что биты, следующие сразу после этой кодовой комбинации, плюс дополнительные биты знака являются escape-последовательностью, которая кодирует значения, большие чем те, которые представлены сборником кодов Хаффмана ESC. Вторым способом является импульсный метод перехода, в котором коэффициенты относительно большой амплитуды могут быть заменены коэффициентами с меньшими амплитудами, чтобы позволить использование таблиц кода Хаффмана с более высокой эффективностью кодирования. Эта замена корректируется отправкой позиции спектрального коэффициента и различий по амплитуде как дополнительной информации. Информация о частоте представляется комбинацией номера полосы масштабного коэффициента, чтобы указать на базовую частоту, и смещения в этой полосе масштабного коэффициента.

6.3.2 Определения

sect_cb [g]i]

Сборник кодов спектр Хаффмана, используемый для раздела i в группе g.

sect_len_incr

Используется для того, чтобы вычислить длину раздела, измеряет число полос масштабного коэффициента с начала раздела. Длина sect_len_incr составляет 3 бита, если window_sequence является EIGHT_SHORT_SEQUENCE и 5 битов в другом случае.

global_gain

Глобальное усиление квантованного спектра, отправленное как целочисленное значение без знака.

hcod_sf []

Кодовая комбинация Хаффмана из таблицы кодов Хаффмана, используемая для кодирования масштабных коэффициентов.

hcod [sect_cb [g] [i]] [w] [x] [y] [z]

Кодовая комбинация Хаффмана из сборника кодов sect_cb [g] [i], которая кодирует следующие 4 кортежа (w, х, у, z) спектральных коэффициентов, где w, х, у z являются квантованными спектральными коэффициентами. В пределах n-кортежа w, х, у z упорядочиваются так, чтобы x_quant [win] [sfb] [sfb] [bin] = w, x_quant [group] [win] [sfb] [bin+1] = x, x_quant [group] [win] [sfb] [bin+2] - у и x_quant [group] [win] [sfb] [bin+3] = z. n -кортежи продвигаются от низкой до высокой частоты в пределах текущего раздела.

hcod [sect_cb [g] [i]] [y] [z]

Кодовая комбинация Хаффмана из сборника кодов sect_cb [g] [i], которая кодирует следующий 2-кортеж (у, z) спектральных коэффициентов, где y, z - квантованные спектральные коэффициенты. В пределах n-кортежа у, z упорядочиваются так, чтобы x_quant [group] [win] [sfb] [bin] = у и x_quant [group] [win] [sfb] [bin+1] = z. n-кортежи прогрессируют от низкой до высокой частоты в пределах текущего раздела.

quad_sign_bits

Биты знака для ненулевых коэффициентов в спектральном 4-кортеже. '1' указывает отрицательный коэффициент, '0' - положительный. Биты, ассоциированные с коэффициентами более низкой частоты, отправляются первыми.

pair_sign_bits

Биты знака для ненулевых коэффициентов в спектральном 2-кортеже. '1' указывает отрицательный коэффициент, '0' - положительный. Биты, ассоциированные с коэффициентами более низкой частоты, отправляются первыми.

hcod_esc_y

escape-последовательность для квантованного спектрального коэффициента у 2-кортежа (у, z), ассоциированная с предшествовавшей кодовой комбинацией Хаффмана.

hcod_esc_z

escape-последовательность для квантованного спектрального коэффициента z 2-кортежа (у, z), ассоциированная с предшествовавшей кодовой комбинацией Хаффмана.

pulse_data_present

1 бит, указывающий, используется ли импульсный переход (1) или нет (0). Отметим, что pulse_data_present должно быть 0, если window_sequence = EIGHT_SHORT_SEQUENCE.

number_pulse

2 бита, указывающие, сколько используется импульсных переходов. Число импульсных переходов лежит в пределах от 1 до 4.

pulse_start_sfb

6 битов, указывающих индекс самой низкой полосы масштабного коэффициента, где достигается импульсный переход.

pulse_offset [i]

5 битов, указывающих смещение.

pulse_amp [i]

4 бита, указывающие на величину импульса без знака.

sect_start [g] [i]

Смещение к первой полосе масштабного коэффициента в разделе i группы g.

sect_end [g] [i]

Смещение на единицу более высокой чем последняя полосе масштабного коэффициента в разделе i группы g.

num_sec [g]

Число разделов в группе g.

escape_flag

Значение 16 в сборнике кодов Хаффмана ESC.

escape_prefix

Разрядная последовательность N единиц.

escape_separator

Один нулевой бит.

escape_word

N+4 разрядное целочисленное слово без знака, сначала msb.

escape_sequence

Последовательность escape_prefix, escape_separator и escape_word

escape_code

2^ (N+4) + escape_word

x_quant [g] [win] [sfb] [bin]

Декодированное по Хаффману значение для группы g, окна win, полосы масштабного коэффициента sfb, коэффициента bin.

spec[w] [k]

Спектр с устраненным чередованием w в диапазоне от 0 до num_windows-1 и k в диапазе от 0 до swb_offset [num_swb]-1.


Инструмент бесшумного кодирования требует этих констант (см. таблицу 56).

ZERO_HCB

0

FIRST_PAIR_HCB

5

ESC_HCB

11

QUAD_LEN

4

PAIR_LEN

2

NOISE_HCB

13

INTENSITY_HCB2

14

INTENSITY_HCB

15

ESC_FLAG

16

     

    6.3.3 Процесс декодирования


4-кортежи или 2-кортежи квантованных спектральных коэффициентов являются кодированными по Хаффману и передаются начиная с коэффициента самой низкой частоты и продвигаясь до коэффициента самой высокой частоты. Для случая нескольких окон на блок (EIGHT_SHORT_SEQUENCE) сгруппированный и чередующийся набор спектральных коэффициентов обрабатывается как единственный набор коэффициентов, которые следуют от низких до высоких. Набор коэффициентов, возможно, должен быть дечередован после того, как они декодируются. Коэффициенты сохраняются в массиве x_quant [g][win] [sfb] [bin] и порядок передачи кодовых комбинаций Хаффмана таков, что, когда они декодируются в порядке получения и сохраняются в массиве, bin является наиболее быстро увеличивающимся индексом, и g является наиболее медленно увеличивающимся индексом. Для кодовых комбинаций, связанных со спектральными 4-кортежами, порядок декодирования является w, х, у, z; для кодовых комбинаций, связанных со спектральными двойными кортежами, порядком декодирования является у, z. Набор коэффициентов делится на разделы, и информация о разделении передается начиная с самого низкого раздела частоты и продвигаясь до самого высокого раздела частоты. Спектральная информация для разделов, которые кодируются с "нулевым" сборником кодов, не отправляется, поскольку эта спектральная информация является нулем. Точно также не отправляется спектральная информация для разделов, кодированных со сборниками кодов "интенсивности". Спектральной информацией для всех полос масштабного коэффициента при max_sfb и выше, для которых нет никаких данных о разделе, является нулем.

Есть единственный сборник кодов дифференциального масштабного коэффициента, который представляет диапазон значений, как показано в таблице 150. Сборник кодов дифференциального масштабного коэффициента показан в таблице А.1. Имеется одиннадцать сборников кодов Хаффмана для спектральных данных, как показано в таблице 151. Сборники кодов показаны в таблицах А.2-А.12. Существуют четыре других сборника кодов выше и вне фактических кодовых книг Хаффмана, а именно "нулевой" сборник кодов, указывающий, что ни масштабные коэффициенты, ни квантованные данные не будут переданы, и сборники кодов "интенсивности", указывающие, что этот отдельный канал является частью пары каналов, и что вместо данных, которые обычно были бы масштабными коэффициентами, даются данные управления для стереоинтенсивности. Точно также сборник кодов "замена шума" указывает, что спектральные коэффициенты получаются из случайных чисел, а не путем квантования спектральных значений, и что вместо данных, которые обычно были бы спектральными коэффициентами, даются данные энергии шума. В этих случаях никакие квантованные спектральные данные не передаются. Индекс 12 сборника кодов резервируется.

Спектральные сборники кодов Хаффмана кодируют 2-ые или 4-ые кортежи квантованных спектральных коэффициентов без знака или со знаком, как показано в таблице 151. Эта таблица также показывает самое большое абсолютное значение (LAV), которое может быть закодировано каждым сборником кодов, и определяет булев массив переменной помощника unsigned_cb [], который является 1, если сборник кодов без знака, и 0, если со знаком.

Результатом декодирования по Хаффману каждой кодовой комбинации дифференциального масштабного коэффициента является индекс кодовой комбинации, приведенный в первом столбце таблицы А.1. Это преобразовывается в требуемый дифференциальный масштабный коэффициент, добавляя index_offset к индексу. Index_offset имеет значение -60, как показано в таблице 150. Аналогично результатом декодирования по Хаффману каждого n-кортежа спектра является индекс кодовой комбинации, приведенный в первом столбце таблицы А.2 через таблицу А.12. Этот индекс преобразовывается в спектральные значения n-кортежа, как определено в следующем псевдо С-коде:

unsigned

Булево значение unsigned_cb [i], приведенное во второй графе таблицы 151.

dim

Размерность сборника кодов, приведенная во второй графе таблицы 151.

lav

LAV, приведенный в четвертой графе таблицы 151.

idx

Индекс кодовой комбинации.


if (unsigned) {

mod = lav + 1;
     
     off = 0;
     
     }
     
     else {
     
     mod = 2*lav + 1;
     
     off = lav;
     
     }
     
     if (dim == 4) {
     
     w = INT(idx/(mod*mod*mod)) - off;
     
     idx -= (w+off)*(mod*mod*mod);
     
     x = INT(idx/(mod*mod)) - off;
     
     idx -= (x+off)*(mod*mod);


у = INT(idx/mod) - off;
     
     idx -= (y+off)*mod;
     
     z = idx - off;
     
     }
     
     else {