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

ГОСТ Р 54713-2011 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. MPEG-2, часть VII: усовершенствованное кодирование звука (MPEG-2 AAC)

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


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

Существует единственная дифференциальная кодовая книга масштабных коэффициентов, которая представляет диапазон значений как показано в таблице 58. Дифференциальная кодовая книга масштабных коэффициентов дана в таблице А.1. Существует одиннадцать кодовых книг Хаффмана для спектральных данных, в соответствии с таблицей 59. Кодовые книги даны в таблицах А.2-А.12. Существует три других "кодовых книги" выше и вне фактических кодовых книг Хаффмана, в частности "нулевая" кодовая книга, указывающая, что ни масштабные коэффициенты, ни квантованные данные не будут переданы, и "интенсивностные" сборники кодов, указывающие, что этот отдельный канал является частью канальной пары, и что данные, которые обычно были бы в обычном случае масштабными коэффициентами, вместо этого являются данными для intensity stereo. В этом случае никакие квантованные спектральные данные не передаются. Кодовые книги 12 и 13 находятся в резерве.

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

Результатом декодирования Хаффмана каждого кодового слова является индекс кодового слова, приведенный в первой графе таблицы А.1. Этот результат преобразовывается в требуемый дифференциальный масштабный коэффициент путем добавления index_offset к индексу. Значение index_offset равно -60, как показано в таблице 58. Аналогично результатом декодирования Хаффмана каждой группы из n спектральных коэффициентов является индекс кодового слова, приведенный в первой графе таблиц А.2-А.12. Этот индекс преобразовывается в n спектральных значений в соответствии со следующим псевдо с-кодом: unsigned = булевое значение unsigned_cb [i], приведенное во второй графе таблицы 59.

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

                   

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

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

hcod [7] [у] [z]

была обнаружена, то сразу после нее в потоке битов следует

pair_sign_bits, которое является полем переменной длины от 0 до 2 битов. Это может быть обнаружено в потоке битов как

          

где one_sign_bit - следующий бит в потоке битов, а pair_sign_bits - объединение one_sign_bit полей.

Кодовая книга ESC является особым случаем. Она представляет значения от 0 до 16 включительно, однако кодирует фактически значения от 0 до 15, и значение 16 является флагом escape_flag, который сигнализирует присутствие hcod_esc_y или hcod_esc_z, любой из которых будет обозначен как escape_sequence. Этот escape_sequence разрешает кодирование квантованных спектральных элементов с LAV>15. Он состоит из escape_prefix из N единичных бит, escape_separator из одного нулевого бита, escape_word из (N+4) битов, представляющих беззнаковое целое. Декодированное значение escape_sequence равно 2 (N+4) + escape_word. Требуемый квантованный спектральный коэффициент получен, когда знак, определяемый pair_sign_bits, применен к значению escape_sequence. Другими словами, escape_sequence 00000 декодируется как 16, escape_sequence 01111 как 31, escape_sequence 1000000 как 32, один из 1011111 как 63, и т.д. Следует учесть, что ограничения в 10.3 диктуют, что длина escape_sequence всегда меньше, чем 22 бита. Для escape кодовых слов Хаффмана порядок элементов данных является кодовой комбинацией Хаффмана, сопровождаемой от 0 до 2 битов знака, сопровождаемых от 0 до 2 escape-последовательностями.

Когда pulse_data_present равен 1 (используется импульсный escape), один или несколько квантованных коэффициентов были заменены в кодере коэффициентами с меньшими амплитудами. Число замененных коэффициентов обозначается number_pulse. При восстановлении квантованных спектральных коэффициентов x_quant эта замена компенсируется путем добавления или вычитания pulse_amp из ранее декодированных коэффициентов, индексы частоты которых обозначаются pulse_start_sfb и pulse_offset. Следует учесть, что импульсный escape-метод недопустим для блока, window_sequence которого EIGHT_SHORT_SEQUENCE. Процесс декодирования определяется в следующем псевдо с-коде:

         

Несколько инструментов декодера (TNS, банк фильтров) получают доступ к спектральным коэффициентам без чередования, т.е. все спектральные коэффициенты упорядочиваются согласно номеру окна и частоте в пределах окна. Это обозначается указанием spec [w][k], вместо x_quant [g] [w] [sfb] [bin].

Следующий псевдо с-код указывает на соотношение между четырехмерной, с чередованием, структурой массива x_quant [] [] [] [] и двумерной, без чередования, структурой массива spec[] []. В последнем массиве первый индекс увеличивается по отдельным окнам в последовательности окон, и второй индекс увеличивается по спектральным коэффициентам, которые соответствуют каждому окну, внутри которого коэффициенты следуют линейно от низких частот к верхним.