143
квантования в пределах каждого окна преобразования. Это достигается в процессе фильтрации частей спектральных данных каждого канала.
Кодирование выполняется на основе окна. Следующие шаги выполняются, чтобы применить инструмент временного формирования шума к одному окну спектральных данных:
- Выбирается целевой частотный диапазон для инструмента TNS. Подходящий выбор состоит в том, чтобы покрыть частотный диапазон от 1,5 кГц до высшей полосы масштабных коэффициентов одним фильтром. Этот параметр (TNS_MAX_BANDS) зависит от профиля и частоты дискретизации, как обозначено в нормативной части.
- Далее кодирование с линейным предсказанием (LPC) выполняется для спектральных коэффициентов МДКП, соответствующих выбранному целевому частотному диапазону. Для лучшей устойчивости коэффициенты, соответствующие частотам ниже 2,5 кГц, могут быть исключены из этого процесса. Стандартные процедуры LPC могут использоваться для вычисления LPC, например алгоритм Левинсона-Дербина. Вычисление выполняется для максимального разрешенного порядка фильтра формирования шума (TNS_MAX_ORDER).
В результате вычисления LPC становится известен ожидаемый коэффициент усиления предсказания gp, так же как и коэффициенты отражения TNS_MAX_ORDER r[] (так называемые коэффициенты PARCOR).
Если усиление предсказания gp не превышает определенный порог t, временное формирование шума не используется. В этом случае бит tns_data_present устанавливается в '0', и обработка TNS заканчивается. Подходящее пороговое значение t = 1.4.
Если коэффициент усиления предсказания gp превышает порог t, временное ограничение шума используется.
На следующем шаге коэффициенты отражения квантуются, используя биты coef_res. Длина coef_res составляет 4 бита. Следующий псевдокод описывает преобразование коэффициентов отражения r [] в индексы index[], и обратное преобразование к квантованным коэффициентам отражения rq[].
iqfac = ((1 << (coef_res-1)) - 0.5) / (п/2.0);
iqfac_m = ((1 << (coef_res-1)) + 0.5) / (п/2.0);
/* Reflection coefficient quantization */
for (i = 0; i < TNS_MAX_ORDER; i++) { index[i] = NINT(arcsin( r[i]) * ((r[i] >= 0) ? iqfac : iqfac_m));
}
/* Inverse quantization */
for (i = 0; i < TNS_MAX_ORDER; i++) { rq[i] = sin( index[i] / ((index[i] >= 0) ? iqfac : iqfac_m));
}
где arcsin () соответствует функции арксинус.
Порядок используемого фильтра формирования шума определяется путем последовательного удаления всех коэффициентов отражения с "хвоста" массива коэффициентов отражения, с абсолютными значениями, меньшими чем порог p. Число оставшихся коэффициентов отражения является порядком фильтра формирования шума. Соответствующий порог для усечения p = 0,1.
Оставшиеся коэффициенты отражения rq[] преобразовываются в order+1 коэффициентов линейного предсказания a[].
Вычисленные коэффициенты LPC [] используются в качестве коэффициентов фильтра формирования шума в кодере. Этот КИХ-фильтр скользит по определенном целевому частотному диапазону по способу, который описывается в нормативной части для процесса декодирования (описание инструмента). Различие между фильтрацией при декодировании и кодировании заключается в том, что всеполосный (авторегрессивный) фильтр, используемый для декодирования, заменяется его инверсным всенулевым (усредняющим) фильтром, т.е. происходит замена уравнения фильтра декодера
y[n] = x[n] - a[1] *y[n-1 ] -... - a[order]*y[n - order]
инверсным уравнением
y[n] = x[n] + a[1] *x[n -1] +... + a[order]*x[n - order].
По умолчанию используется восходящее направление фильтрации.
Наконец, передается следующая служебная информация для временного формирования шума (таблица В.25).