6.8.1 Стерео М/С
6.8.1.1 Описание инструмента
Объединенное кодирование каналов M/S действует на парах каналов. Каналы чаще всего спариваются так, что у них есть симметричное представление относительно слушателя, такое как левый/правый или левое окружение/правое окружение. Первый канал в паре обозначается как "левый", а второй как "правый". На основе спектрального коэффициента вектор, сформированный сигналами левого и правого каналов, восстанавливается или де-матрицируется либо матрицей идентичности
,
или инверсной матрицей M/S
.
Решение, какую матрицу использовать, принимается по полосе масштабного коэффициента на основе полосы масштабного коэффициента, как обозначено флагами ms_used. Для аудиообъектных типов ААС Main, LC, SSR и LTP кодирование соединения каналов M/S может использоваться только, если common_window равен '1'. Для масштабируемого аудио объектного типа ААС всегда используются общие окна между этими двумя звуковыми каналами, так что кодирование M/S всегда бывает возможно.
6.8.1.2 Определения
ms_mask_present | Это двухбитовое поле указывает, что маска МС имеет вид: |
ms_used [g] [sfb] | Однобитовый флаг на полосу масштабного коэффициента, указывающий, что кодирование M/S используется в группе окон g и полосе масштабного коэффициента sfb. |
I_spec [] | Массив, содержащий спектр левого канала соответствующей пары каналов. |
r_spec [] | Массив, содержащий спектр правого канала соответствующей пары каналов. |
is_intensity (g, sfb) | Функция, возвращающая состояние интенсивности. |
is_noise (g, sfb) | Функция, возвращающая состояние шумовой замены. |
6.8.1.3 Процесс декодирования
Восстанавливает спектральные коэффициенты первого ("левого") и второго ("правого") каналов, как определено флагами ms_mask_present и ms_used [] [] следующим образом:
if (ms_mask_present> = 1) {
for (g = 0; g <num_window_groups; g ++) {
for (b = 0; b <window_group_length [g]; b ++) {
for (sfb = 0; sfb <max_sfb; sfb ++) {
if ((ms_used [g] [sfb] || ms_mask_present == 2) &&
! is_intensity (g, sfb) &&! is_noise (g, sfb)) {
for (i = 0; i <swb_offset [sfb+1]-swb_offset [sfb]; i ++) {
tmp = l_spec [g] [b] [sfb] [i] - r_spec [g] [b] [sfb] [i];
i_spec [g] [b] [sfb] [i] = i_spec [g] [b] [sfb] [i] +
r_spec [g] [b] [sfb] [i];
r_spec [g] [b] [sfb] [i] = tmp;}
}