50
- Таблицы частотных полос
Речевой декодер использует ту же самую схему для определения частотного группирования частичных полосовых отсчетов QMF, что используется в AAC + SBR. Однако не используется ни переменная частота перехода между базовым кодеком и SBR, ни адаптивное частотное разрешение. Таким образом, для кодирования огибающих требуется лишь одна таблица частотных полос. Существует два различных случая:
- sbr_header_flag = 1.
Функционирование почти идентично случаю AAC + SBR. Начальные и конечные каналы получаются из bs_start_freq и bs_stop_freq, приведенных в таблицах 35 и 36 соответственно (см. 5.6.2.1.2) .
Таблица эталонных полос частот вычисляется в соответствии с диаграммами, приведенными в MPEG-4 Audio, пункт «Таблица эталонных полос частот», принимая k0, k2, bs_start_freq и bs_stop_freq в качестве параметров. Здесь вместо temp2 = {1,0; 1,3} используется temp2 = {1,0; 1,5}. Таблица огибающих полос частот получается из fTa bleLow, которые получаются из fMaster, как указано в MPEG-4 Audio, пункт «Расчетные таблицы частотных полос». Таблица уровня шума также рассчитывается в соответствии с описанием указанного случая, причем в качестве входного параметра используются bs_noise_bands.
- sbr_header_flag = 0.
Число полос, а также начало и конец полос QMF однозначно задаются таблицами К.1 — К.4. Таким образом, выражения для numBandsO и numBandsl в MPEG-4 Audio, подраздел «Таблица эталонных полос частот» подставляются в соответствии с правилом:
(k2/k0) > 2,2449 неверно:
numBandsO = num_shape_bands (numBands1: N/A);
(k2/k0) > 2,2449 верно:
numBandsO = NINT(num_shape_bands ■ (1/(1 + log(k2/k1)/(log(2) ■ 1,5)))) numBands1 = num_shape_bands — numBandsO.
Далее исполнение диаграммы согласно MPEG-4 Audio, рисунок "Диаграмма расчета fMaster, когда bs_freq_scale > 0" дает fjableLow непосредственно, т. е. преобразование fMaster в fjableHigh и в fjableLow
пропускается. Таблица уровня шума получается из fTableLow в соответствии с MPEG-4 Audio, подраздел "Расчетные таблицы частотных полос", с тем отличием, что используется NQ = num_noise_bands.
В обоих вышеприведенных случаях число огибающих частотных полос num_shape_bands и полос шума num_noise_bands используются для последующего декодирования фреймов данных SBR, sbr_speech_data().
- Ч астотно-временная сетка
В отличие от протокола AAC + SBR версия речевого кодека не имеет переменных границ фреймов. В терминах классов фреймов, определенных в MPEG-4 Au dio, подраздел «Генерация временной/частотной сетки» соответствует постоянному использованию bs_frame_class = FIXFIX. Один фрейм состоит из 20 частичных полосовых отсчетов QMF, которые в этом контексте соответствуют 20 таймслотам. Кроме того, не поддерживается адаптивное переключение частотного и временного разрешения.
Временные границы огибающей (в таймслотах) определяются следующим выражением
Временные границы огибающей контролируются параметром bs_num_level. Если bs_num_levelустановлен в меньшее значение, заданный вектор формы применим к более чем одной огибающей. Это поясняется далее в 5.6.2.2.4.
Аналогично временные границы уровня шума (в таймслотах) определяются выражением
[0,20] для bs_num_noise = {0,1},
tQ = - [0,10,20] для bs_num_noise=2,
[0,5,10,15,20] для bs_num_noise=4.