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

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

    6.2 Масштабные коэффициенты

     

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


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

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

В этом инструменте масштабные коэффициенты применяются к инверсно квантованным коэффициентам, чтобы восстановить спектральные значения.

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

     

6.2.2.1 Элементы данных

global gain

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

scale factor data ()

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

hcod_sf []

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

     

6.2.2.2 Элементы справки

dpcm_sf [g] [sfb]

Дифференциально кодированный масштабный коэффициент группы g, полоса масштабного коэффициента sfb.

x_rescal []

Повторно масштабированные спектральные коэффициенты.

sf [g] [sfb]

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

get_scale_factor_gain ()

Функция, которая возвращает значение усиления, соответствующее масштабному коэффициенту.

        

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

          

6.2.3.1 Полосы масштабного коэффициента

Масштабные коэффициенты используются, чтобы сформировать шум квантования в спектральном домене. С этой целью спектр делится на несколько полос масштабного коэффициента. У каждой полосы масштабного коэффициента есть масштабный коэффициент, который представляет определенное значение усиления, которое должно быть применено ко всем спектральным коэффициентам в этой полосе масштабного коэффициента. В случае EIGHT_SHORT_SEQUENCE полоса масштабного коэффициента может содержать несколько полос окна масштабного коэффициента последующего SHORT_WINDOWs.

6.2.3.2 Декодирование масштабных коэффициентов

Для всех масштабных коэффициентов разница с предыдущим значением кодируется, используя книгу кодов Хаффмана. Стартовое значение дается как 8 битов РСМ в элементе данных global_gain. Масштабный коэффициент не передается для полос масштабного коэффициента, которые кодируются с помощью кодовой книги Хаффмана ZERO_HCB. Если кодовая книга Хаффмана для полосы масштабного коэффициента кодируется с применением INTENSITY_HCB или INTENSITY_HCB2, масштабный коэффициент используется для стерео-интенсивности. В этом случае обычный масштабный коэффициент не существует (но инициализируется обнуляясь, чтобы иметь действующий доступ в массив).

Следующий псевдокод описывает, как декодировать масштабные коэффициенты sf [g] [sfb]:

last_sf = global_gain;
     
     for (g =
0; g < num_window_groups; g++) {
     
     for (sfb =
0; sfb < max sfb; sfb++) {
     
     if (sfb_cb[g][sfb] != ZERO_HCB && sfb_cb[g][sfb] != INTENSITY_HCB
     
     && sfb_cb[g][sfb] != INTENSITY_HCB
2) {
     
     dpcm_sf = decode_huffman() - index_offset;
     
     sf[g][sfb] = dpcm_sf + last_sf;
     
     last_sf = sf[g][sfb];


}

else {
     
     sf[g][sfb] = 0;
     
     }
     
     }
     
     }


Масштабные коэффициенты sf [g] [sfb] должны быть в пределах диапазона от нуля до 255, оба включительно.

В случае устойчивого к ошибкам кодирования масштабного коэффициента вместо кода Хаффмана использовался RVLC. Процесс декодирования слов RVLC является тем же самым как для кодовых комбинаций Хаффмана, только должна использоваться другая кодовая книга. Этот сборник кодов использует симметричные кодовые комбинации. Благодаря этому возможно обнаружить ошибки, поскольку асимметричные кодовые комбинации недопустимы. Кроме того, декодирование может быть запущено на обеих сторонах. Чтобы позволить обратное декодирование, доступно дополнительное значение в пределах полезной нагрузки потока битов, которое содержит последнее значение масштабного коэффициента. В случае интенсивности доступна дополнительная кодовая комбинация, которая позволяет обратное декодирование. В случае PNS по той же самой причине доступно дополнительное значение DPCM.

В случае sf_escapes_present == 1, в качестве ESC_FLAG используется декодированное значение ±7. Это сигнализирует, что существует значение escape (переход), которое должно быть добавлено к +7 или вычтено из -7, чтобы найти фактическое значение масштабного коэффициента. Это значение escape является закодированным по Хаффману.