ГОСТ Р 53556.3-2012
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Звуковое вещание цифровое
КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ
Часть 3
(MPEG-4 AUDIO)
Кодирование речевых сигналов с использованием линейного предсказания - CELP
Sound broadcasting digital. Coding of signals of sound broadcasting with reduction of redundancy for transfer on digital communication channels. Part 3 (MPEG-4 audio). Code excited linear prediction
ОКС 33.170
Дата введения 2013-09-01
Предисловие
1 РАЗРАБОТАН Санкт-Петербургским филиалом Центрального научно-исследовательского института связи "Ленинградское отделение" (ФГУП ЛО ЦНИИС)
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 480 "Связь"
3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 20 ноября 2012 г. N 942-ст
4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта ИСО/МЭК 14496-3:2009* "Информационные технологии. Кодирование аудиовизуальных объектов. Часть 3. Аудио" (ISO/IEC 14496-3:2009 "Information technology - Coding of audio-visual objects - Part 3: Audio", NEQ)
5 ВВЕДЕН ВПЕРВЫЕ
6 ПЕРЕИЗДАНИЕ. Август 2020 г.
Правила применения настоящего стандарта установлены в статье 26 Федерального закона от 29 июня 2015 г. N 162-ФЗ "О стандартизации в Российской Федерации". Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
1 Область применения
1.1 Общее описание декодера CELP
Здесь дается краткий обзор декодера CELP (Code Excited Linear Prediction (Линейное предсказание с кодированием)).
Декодер CELP прежде всего состоит из генератора возбуждения и фильтра синтеза. Дополнительно декодеры СЕLP часто включают в свой состав постфильтр. У генератора возбуждения имеется адаптивная книга шифров для моделирования периодических компонент, фиксированные книги шифров для моделирования случайных компонент и декодер усиления, чтобы представлять уровень речевого сигнала. Индексы для книг шифров и коэффициентов усиления предоставляются кодером. Индексы книги шифров (индекс задержки шага для адаптивной книги шифров и индекс формы для фиксированной книги шифров) и индексы усиления (коэффициенты усиления адаптивной и фиксированной книг шифров) используются, чтобы генерировать сигнал возбуждения. Затем он фильтруется фильтром линейного прогнозирующего синтеза (фильтр синтеза LP). Коэффициенты фильтра реконструируются, используя индексы LPC, затем интерполируются коэффициентами фильтра последовательных фреймов анализа. И наконец, опционно может быть применен постфильтр, чтобы улучшить качество речи.
1.2 Функциональные возможности MPEG-4 CELP
MPEG-4 CELP представляет собой универсальный алгоритм кодирования с новыми функциональными возможностями. Обычные кодеры CELP предлагают сжатие при одной битовой скорости и оптимизированы для определенных приложений. Сжатие является одной из функций, предоставленных CELP MPEG-4, позволяющей использовать один базовый кодер для различных приложений. Это обеспечивает масштабируемость по битовой скорости и полосе пропускания, а также возможность генерировать потоки бит с произвольной битовой скоростью. Кодер CELP MPEG-4 поддерживает две частоты дискретизации, а именно 8 и 16 кГц. Соответствующие полосы пропускания равны 100-3400 Гц для частоты дискретизации 8 кГц и 50-7000 Гц для частоты дискретизации 16 кГц. Кроме того, заново приняты сжатие молчание и переупорядочение эластичного потока бит ошибок.
1.2.1 Конфигурация кодера CELP MPEG-4
Чтобы генерировать сигнал возбуждения, могут использоваться два различных инструмента. Это инструмент Multi-Pulse Excitation (Мультиимпульсное возбуждение) (МРЕ) или инструмент Regular-Pulse Excitation (Возбуждение регулярным импульсом) (RPE). МРЕ используется для дискретизации речи на частотах 8 кГц или 16 кГц. RPE используется только для дискретизации на частоте 16 кГц. Два возможных режима кодирования сведены в таблице 1.
Таблица 1 - Режимы кодирования в кодере CELP MPEG-4
|
|
|
Режим кодирования | Инструмент возбуждения | Частота дискретизации |
I | RPE | 16 кГц |
II | МРЕ | 8,16 кГц |
1.2.2 Особенности кодера CELP MPEG-4
Кодер CELP MPEG-4 предлагает следующие функциональные возможности в зависимости от режима кодирования (см. таблицу 2).
Таблица 2 - Функциональные возможности кодера CELP MPEG-4
|
|
Режим кодирования | Функциональность |
I | Несколько битовых скоростей, управление FineRate |
II | Несколько битовых скоростей, масштабируемость битовой скорости, масштабируемость полосы пропускания, управление FineRate |
Для обоих режимов кодирования доступны сжатие молчания и переупорядочение эластичного потока бит ошибок.
Доступные битовые скорости зависят от режима кодирования и частоты дискретизации. Поддерживаются следующие фиксированные битовые скорости (см. таблицы 3, 4).
Таблица 3 - Фиксированные битовые скорости для режима I кодера
|
Битовые скорости для частоты дискретизации 16 кГц, бит/с |
14400, 16000, 18667, 22533 |
Таблица 4 - Фиксированные битовые скорости для режима II кодера
|
|
Битовые скорости для частоты дискретизации 8 кГц, бит/с | Битовые скорости для частоты дискретизации 16 кГц, бит/с
|
3850, 4250, 4650, 4900, 5200, 5500, 5700, 6000, 6200, 6300, 6600, 6900, 7100, 7300, 7700, 8300, 8700, 9100, 9500, 9900, 10300, 10500, 10700, 11000, 11400, 11800, 12000, 12200 | 10900, 11500, 12100, 12700, 13300, 13900, 14300, 14700, 15900, 17100, 17900, 18700, 19500, 20300, 21100, 13600, 14200, 14800, 15400, 16000, 16600, 17000, 17400, 18600, 19800, 20600, 21400, 22200, 23000, 23800 |
Во время неактивных фреймов используется инструмент сжатия тишины и кодер CELP работает на битовых скоростях, показанных в таблице 5. Битовая скорость зависит от режима кодирования, частоты дискретизации и длины фрейма.
Таблица 5 - Битовые скорости для инструмента сжатия тишины
|
|
|
|
|
|
|
Режим кодирования | Частота взятия выборок, кГц | Масштабируемость ширины полосы | Длина фрейма | Битовая скорость, бит/с | ||
|
|
|
| TX_fIag | HD-SID | LR-SID |
I (RPE) | 16 | - | 15 | 133 | 2533 | 400 |
|
|
| 10 | 200 | 3800 | 600 |
II (МРЕ) | 8 | On, Off | 40 | 50 | 525 | 150 |
|
|
| 30 | 67 | 700 | 200 |
|
|
| 20 | 100 | 1050 | 300 |
|
|
| 10 | 200 | 2100 | 600 |
| 16 | Off | 20 | 100 | 1900 | 300 |
|
|
| 10 | 200 | 3800 | 600 |
|
| On | 40 | 50 | 1050 | 150 |
|
|
| 30 | 67 | 1400 | 200 |
|
|
| 20 | 100 | 2100 | 300 |
|
|
| 10 | 200 | 4200 | 600 |
Управление скоростью: обеспечивает управление битовой скоростью малыми шажками (давая возможность работать на варьируемой битовой скорости). Это достигается только за счет управления скоростью передачи параметров LPC, используя комбинации двух элементов потока бит interpolation_flag и флажок LPC_present. Для изменения отношения фреймов LPC к общему числу фреймов между 50% и 100% можно использовать управление FineRate. Это позволяет уменьшить битовую скорость относительно битовой скорости привязки, как определено в семантике.
Масштабируемость битовой скорости обеспечивается добавлением уровней расширения. Уровни расширения могут быть добавлены с шагом 2000 бит/с для сигналов, дискретизированных с частотой 8 кГц или 4000 бит/с для сигналов, дискретизированных на 16 кГц. С любой битовой скоростью, выбранной из таблицы 4, можно объединить максимум три уровня расширения.
Масштабируемость полосы пропускания с охватом обеих частот дискретизации достигнута включением инструмента расширения полосы пропускания в кодере CELP. Это инструмент расширения, поддерживаемый в Режиме II, который может быть добавлен, если требуется масштабирование с переходом от частоты дискретизации 8 кГц к частоте дискретизации 16 кГц. Полный кодер с масштабируемостью полосы пропускания состоит из основного кодера CELP для частоты дискретизации 8 кГц и инструмента расширения полосы пропускания для обеспечения одного уровня масштабируемости. Основной кодер CELP для частоты дискретизации 8 кГц может включить несколько уровней. Кодер частоты дискретизации 8 кГц с этим инструментом отличается от кодера частоты дискретизации 16 кГц. Обе конфигурации (кодер частоты дискретизации 8 кГц с масштабируемостью полосы пропускания и кодер частоты дискретизации 16 кГц) предлагают большую ясность и естественность декодированной речи, чем дает один только кодер 8 кГц, потому что они разворачивают полосу пропускания до 7 кГц. Дополнительная битовая скорость, требующаяся для инструмента масштабируемости полосы пропускания, может быть выбрана из четырех дискретных шагов для каждой битовой скорости основного уровня, как показано в таблице 6.
Таблица 6 - Битовые скорости для режима масштабируемой полосы пропускания
|
|
Битовая скорость основного уровня, бит/с | Дополнительная битовая скорость, бит/с |
3850-4650 | +9200, +10400, +11600, +12400 |
4900-5500 | +9467, +10667, +11867, +12667 |
5700-10700 | +10000, +11200, +12400, +13200 |
11000-12200 | +11600, +12800, +14000, +14800 |
Инструмент сжатия тишины может использоваться, чтобы уменьшить битовую скорость для входных сигналов с небольшой голосовой активностью. В течение таких неактивных периодов декодер заменяет регулярный сигнал возбуждения искусственно сгенерированным шумом. Для периодов голосовой активности всегда используется регулярный процесс синтеза речи. Инструмент сжатия тишины доступен, когда используется тип объекта ER-CELP.
Переупорядочение эластичного потока бит ошибок позволяет эффективно использовать усовершенствованные техники кодирования канала как неравномерная защита от ошибок (UEP). Основная идея состоит в том, чтобы перестроить контент звукового фрейма в зависимости от его чувствительности к ошибкам в одном или более случаях, принадлежащих различным категориям чувствительности к ошибкам (ESC). Эта перестановка воздействует на данные поэлементно или даже поразрядно. Фрейм эластичного потока бит ошибок строится, связывая эти случаи. Эти функциональные возможности доступны, когда используется тип объекта ER-CELP.
1.2.3 Алгоритмическая задержка режимов CELP MPEG-4
Алгоритмическая задержка кодера CELP исходит из длины фрейма и длины дополнительного предвидения. Длина фрейма зависит от режима кодирования и битовой скорости. Длина предвидения, которая является информативным параметром, также зависит от режима кодирования. Задержки, представленные ниже, применимы к режимам, где управление FineRate Control выключено (см. таблицы 7, 8, 9). Когда управление FineRate Control включено, вносится дополнительная задержка на один фрейм. Масштабируемость полосы пропускания в кодере режима II требует дополнительного предвидения на 5 мс из-за субдискретизации.
В случае, если сжатие тишины используется, алгоритмическая задержка такая же, как без сжатия тишины, поскольку используются такая же длина фрейма и такая же дистанция дополнительного упреждающего просмотра.
Таблица 7 - Задержка и длина фрейма для кодера режима I частоты дискретизации 16 кГц
|
|
|
Битовая скорость для режима I, бит/с | Задержка, мс | Длина фрейма, мс |
14400 | 26,25 | 15 |
16000 | 18,75 | 10 |
18667 | 26,56 | 15 |
22533 | 26,75 | 15 |
Таблица 8 - Задержка и длина фрейма для кодера режима II частоты дискретизации 8 кГц
|
|
|
Битовая скорость для режима II, бит/с | Задержка, мс | Длина фрейма, мс |
3850, 4250, 4650 | 45 | 40 |
4900, 5200, 5500, 6200 | 35 | 30 |
5700, 6000, 6300, 6600, 6900, 7100, 7300, 7700, 8300, 8700, 9100, 9500, 9900, 10300, 10500, 10700 | 25 | 20 |
11000, 11400, 11800, 12000, 12200 | 15 | 10 |
Таблица 9 - Задержка и длина фрейма для кодера режима II частоты дискретизации
|
|
|
Битовая скорость для режима II, бит/с | Задержка, мс | Длина фрейма, мс |
10900, 11500, 12100, 12700, 13300, 13900, 14300, 14700, 15900, 17100, 17900, 18700, 19500, 20300, 21100 | 25 | 20 |
13600, 14200, 14800, 15400, 16000, 16600, 17000, 17400, 18600, 19800, 20600, 21400, 22200, 23000, 23800 | 15 | 10 |
2 Термины и определения
Термины и определения в соответствии с ГОСТ Р 53556.0-2009
3 Синтаксис потока бит
3.1 Тип объекта CELP
3.1.1 Синтаксис заголовка
CelpSpecificConfig ()
Для типа объекта CELP требуется следующий CelpSpecificConfig () (см. таблицы 10, 11, 12)
Таблица 10 - Синтаксис CelpSpecificConfig ()
|
Окончание таблицы 10
|
Таблица 11 - Синтаксис CelpHeader ()
|
Таблица 12 - Синтаксис CelpBWSenhHeader ()
|
3.1.2 Синтаксис фрейма
Передача потоков бит CELP
Каждый уровень потока бит аудио CELP MPEG-4 передается в элементарном потоке. В sIPacketPayload должны быть включены следующие динамические данные для Аудио CELP:
Базовый уровень CELP - полезная нагрузка модуля доступа
slPacketPayload
{
CelpBaseFrame ();
}
Уровень расширения CELP - полезная нагрузка модуля доступа
Чтобы анализировать и декодировать уровень расширения CELP, требуется информация, декодированная из базового уровня CELP. Для масштабируемого режима битовой скорости должны быть включены следующие данные для уровня расширения CELP:
slPacketPayload
{
CelpBRSenhFrame ();
}
Для масштабируемого режима полосы пропускания должны быть включены следующие данные для уровня расширения CELP:
slPacketPayload
{
CelpBWSenhFrame ();
}
В случае, если масштабирование битовой скорости и масштабирование полосы пропускания используются одновременно, сначала должны быть переданы все уровни расширения битовой скорости, а затем уровень масштабируемости полосы пропускания (см. таблицы 13, 14, 15, 16, 17, 18, 19, 20)
Таблица 13 - Синтаксис CelpBaseFrame ()
|
Таблица 14 - Синтаксис CelpBRSenhFrame ()
|
Таблица 15 - Синтаксис CelpBWSenhFrame ()
|
3.1.2.1 Синтаксис LPC
Таблица 16 - Синтаксис Celp_LPC ()
|
Окончание таблицы 16
|
Таблица 17 - Синтаксис LSP_VQ ()
|
Таблица 18 - Синтаксис NarrowBand_LSP ()
|
Таблица 19 - Синтаксис BandScalable_LSP ()
|
Таблица 20 - Синтаксис WideBand_LSP ()
|
Окончание таблицы 20
|
3.1.2.2 Синтаксис возбуждения (см. таблицы 21, 22)
Таблица 21 - Синтаксис RPE_frame ()
|
Таблица 22 - Синтаксис MPE_frame ()
|
3.2 Тип объекта ER-CELP
3.2.1 Синтаксис заголовка
ErrorResilientCelpSpecificConfig ()
Для типа объекта ER-CELP требуется следующий ErrorResilientCelpSpecificConfig () (см. таблицы 23, 24).
Таблица 23 - Синтаксис ErrorResilientCelpSpecificConfig ()
|
Окончание таблицы 23
|
Таблица 24 - Синтаксис ER_SC_CelpHeader ()
|
3.2.2 Синтаксис фрейма
Чтобы описать чувствительность к ошибке в символе элементов потока бит, введены категории чувствительности к ошибкам (ESC). Чтобы описать отдельные биты элементов, используется следующая система обозначений.
Усиление, х - у
Следующий синтаксис является заменой для CelpBaseFrame. Синтаксис для уровня расширения для масштабируемости битовой скорости и полосы пропускания не затронут.
Передача потоков бит CELP
Данные полезной нагрузки для объекта CELP ER передаются как полезная нагрузка sIPacketPayload в базовом уровне и опционном уровне расширения Elementary Stream (элементарный поток).
Базовый уровень эластичного CELP ошибок - полезная нагрузка модуля доступа
slPacketPayload
{
ER_SC_CelpBaseFrame ();
}
Уровень расширения эластичного CELP ошибок - полезная нагрузка модуля доступа.
Чтобы анализировать и декодировать уровни расширения эластичного CELP ошибок, требуется декодированная информация из базового уровня эластичного CELP ошибок. Для режима масштабируемой битовой скорости должны быть включены следующие данные для уровней расширения эластичного CELP ошибок:
slPacketPayload
{
ER_SC_CelpBRSenhFrame ();
}
Для режима масштабируемой полосы пропускания должны быть включены следующие данные для уровня расширения эластичного CELP ошибок:
slPacketPayload
{
ER_SC_CelpBWSenhFrame ();
}
3.2.2.1 Базовый уровень CELP (см. таблицы 25, 26, 27)
Таблица 25 - Синтаксис ER_SC_CelpBaseFrame ()
|
Таблица 26 - Синтаксис SC_VoiceActivity_ESC0 ()
|
Таблица 27 - Синтаксис ER_CelpBaseFrame ()
|
Окончание таблицы 27
|
3.2.2.1.1 Синтаксис узкополосного МРЕ (см. таблицы 28, 29, 30, 31, 32)
Таблица 28 - Синтаксис MPE_NarrowBand_ESC0 ()
|
Таблица 29 - Синтаксис MPE_NarrowBand_ESC1 ()
|
Таблица 30 - Синтаксис MPE_NarrowBand_ESC2 ()
|
Таблица 31 - Синтаксис MPE_NarrowBand_ESC3 ()
|
Таблица 32 - Синтаксис MPE_NarrowBand_ESC4 ()
|
Окончание таблицы 32
|
3.2.2.1.2 Широкополосный синтаксис МРЕ (см. таблицы 33, 34, 35, 36, 37)
Таблица 33 - Синтаксис MPE_WideBand_ESC0 ()
|
Таблица 34 - Синтаксис MPE_WideBand_ESC1 ()
|
Окончание таблицы 34
|
Таблица 35 - Синтаксис MPE_WideBand_ESC2 ()
|
Таблица 36 - Синтаксис MPE_WideBand_ESC3 ()
|
Окончание таблицы 36
|
Таблица 37 - Синтаксис MPE_WideBand_ESC4 ()
|
3.2.2.1.3 Широкополосный синтаксис RPE (см. таблицы 38, 39, 40, 41, 42)
Таблица 38 - Синтаксис RPE_WideBand_ESC0 ()
|
Окончание таблицы 38
|
Таблица 39 - Синтаксис RPE_WideBand_ESC1 ()
|
Таблица 40 - Синтаксис RPE_WideBand_ESC2 ()
|
Окончание таблицы 40
|
Таблица 41 - Синтаксис RPE_WideBand_ESC3 ()
|
Таблица 42 - Синтаксис RPE_WideBand_ESC4 ()
|
3.2.2.2 Уровни расширения CELP (см. таблицы 43, 44)
Таблица 43 - Синтаксис ER_SC_CelpBRSenhFrame ()
|
Таблица 44 - Синтаксис ER_SC_CelpBWSenhFrame ()
|
3.2.2.3 Элементы синтаксиса для неактивных фреймов (см. таблицы 45, 46, 47, 48, 49)
Таблица 45 - Синтаксис SID_LSP_VQ_ESC0 ()
|
Таблица 46 - Синтаксис SID_NarrowBand_LSP ()
|
Таблица 47 - Синтаксис SID_BandScalable_LSP ()
|
Таблица 48 - Синтаксис SID_WideBand_LSP ()
|
Таблица 49 - Синтаксис SID_Frame_ESC0 ()
|
4 Семантики
Здесь описана семантика синтаксических элементов.
4.1 Семантики заголовка
isBaseLayer - однобитовый идентификатор, показывающий является ли соответствующий уровень базовым (1), либо уровнем расширения масштабируемой полосы пропускания или масштабируемой битовой скорости (0).
isBWSLayer - однобитовый идентификатор, показывающий является ли соответствующий уровень уровнем расширения масштабируемой полосы пропускания (1) или уровнем расширения масштабируемой битовой скорости (0).
CELP-BRS-id - двухбитовый идентификатор, показывающий порядок уровней расширения масштабируемой битовой скорости, где у первого уровня расширения значение ’1’. Значение ’0’ не должно использоваться.
ExcitationMode - однобитовый идентификатор, показывающий используется ли инструмент Multi-Pulse Excitation или инструмент Regular-Pulse Excitation (см. таблицу 50).
Таблица 50 - Описание режима ExcitationMode
|
|
|
Режим возбуждения | ID возбуждения | Описание |
0 | МРЕ | Инструмент МРЕ используется |
1 | RPE | Инструмент RPE используется |
SampleRateMode - однобитовый идентификатор, показывающий частоту дискретизации. Поддерживаются две частоты дискретизации (см. таблицу 51).
Таблица 51 - Описание режима SampleRateMode
|
|
|
Режим SampleRateMode | Идентификатор SampleRatelD | Описание |
0 | 8 кГц | 8 кГц Частота дискретизации |
1 | 16 кГц | 16 кГц Частота дискретизации |
FineRateControl - однобитовый флажок, показывающий, запущено ли точное управление скоростью очень мелкими шагами или заблокировано (см. таблицу 52).
Таблица 52 - Описание FineRateControl
|
|
|
Точное управление скоростью FineRateControl | Идентификатор управления скоростью RateControllD | Описание |
0 | OFF | Точное управление скоростью отключено |
1 | ON | Точное управление скоростью запущено |
Управление FineRate Control позволяет уменьшать битовую скорость относительно ее битовой скорости привязки. Когда параметры LPC передаются в каждом фрейме, будет получена битовая скорость привязки. Самая низкая возможная битовая скорость для каждой конфигурации может быть получена, передавая параметры LPC в 50% фреймов.
SilenceCompression - однобитовый идентификатор, показывающий, используется ли Silence Compression или нет.
|
|
|
SilenceCompression | SilenceCompressionID | Описание |
0 | SC_OFF | SilenceCompression отключено |
1 | SC_ON | SilenceCompression задействовано |
RPE_Configuration - это 3-битовый идентификатор, который конфигурирует кодер MPEG-4 CELP, используя инструмент Regular-Pulse Excitation. Этот параметр непосредственно определяет набор разрешенных битовых скоростей (таблица 53) и число подфреймов во фрейме CELP (таблица 54).
Таблица 53 - Назначение скорости для кодера режима I на 16 кГц
|
|
|
|
RPE_Configuration | Фиксированная битовая скорость
Точная регулировка скорости выключена, бит/с | Минимальная битовая скорость
Точная регулировка скорости включена, 50% LPC, бит/с | Максимальная битовая скорость
Точная регулировка скорости включена, 100% LPC, бит/с |
0 | 14400 | 13000 | 14533 |
1 | 16000 | 13900 | 16200 |
2 | 18667 | 17267 | 18800 |
3 | 22533 | 21133 | 22667 |
4...7 | Зарезервировано |
|
Таблица 54 - Определение nrof_subframes для кодера режима I на 16 кГц
|
|
RPE_Configuration | Nrof_subframes |
0 | 6 |
1 | 4 |
2 | 8 |
3 | 10 |
4...7 | Зарезервировано |
MPE_Configuration - это 5-битовое поле, которое конфигурирует кодер MPEG-4 CELP, используя инструмент Multi-Pulse Excitation. Этот параметр определяет переменные nrof_subframes и nrof_subframes_bws. Этот параметр также определяет число битов для shape_positions[i], shape_signs[i], shape_enh_positions[i][j] и shape_enh_signs[i][j].
nrof_subframes - вспомогательный параметр, определяющий число подфреймов во фрейме CELP, и использующийся, чтобы сообщить, сколько раз должны быть прочитаны параметры возбуждения. Для инструмента Regular-Pulse Excitation, работающего при частоте дискретизации 16 кГц, эта переменная зависит от RPE_Configuration следующим образом.
Для инструмента Multi-Pulse Excitation это получают из MPE_Configuration в зависимости от частоты дискретизации (см. таблицы 55, 56).
Таблица 55 - Определение nrof_subframes для кодера режима II на 8 кГц
|
|
MPE_Configuration | nrof_subframes |
0, 1, 2 | 4 |
3, 4, 5 | 3 |
6...12 | 2 |
13...21 | 4 |
22...26 | 2 |
27 | 4 |
28...31 | Зарезервировано |
Таблица 56 - Определение nrof_subframes для кодера режима II на 16 кГц
|
|
MPE_Configuration | nrof_subframes |
0......6 | 4 |
8...15 | 8 |
16...22 | 2 |
24...31 | 4 |
7, 23 | Зарезервировано |
NumEnhLayers - это двухбитовое поле, определяющее число уровней расширения, которые используются (см. таблицу 57).
Таблица 57 - Определение nrof_enh_layers
|
|
NumEnhLayers | nrof_enh_layers |
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
BandwidthScalabilityMode - это однобитовый идентификатор, который указывает, запущена ли масштабируемость полосы пропускания. Этот режим имеет силу только, когда ExcitationMode = МРЕ (см. таблицу 58).
Таблица 58 - Описание режима BandwidthScalabilityMode
|
|
|
BandwidthScalabilityMode | ScalablelD | Описание |
0 | OFF | Масштабируемость полосы отключена |
1 | ON | Масштабируемость полосы задействована |
BWS_Configuration - это двухбитовое поле, которое конфигурирует инструмент расширения полосы пропускания. Этот идентификатор имеет силу только, когда BandwidthScalabilityMode = ON. Этот параметр определяет число битов для shape_bws_positions [i], shape_bws_signs [i].
nrof_subframes_bws - этот параметр, который является вспомогательной переменной, показывает число подфреймов в инструменте расширения полосы пропускания, и его получают из MPE_Configuration (см. таблицу 59).
Таблица 59 - Определение nrof_subframes_bws
|
|
MPE_Configuration | nrof_subframes_bws |
0, 1, 2, 3 | 8 |
3, 4, 5 | 6 |
6...12 | 4 |
13...21 | 4 |
22...26 | 2 |
27 | Не имеет силы |
28, 31 | Зарезервировано |
4.2 Семантика фрейма
interpolation_flag - это однобитовый флажок. Когда он установлен, параметры LPC для текущего фрейма должны быть получены, используя интерполяцию (см. таблицу 60).
Таблица 60 - Описание флажка interpolation_flag
|
|
|
interpolation_flag | InterpolationID | Описание |
0 | OFF | Коэффициенты LPC фрейма не должны интерполироваться |
1 | ON | Коэффициенты LPC фрейма должны быть найдены путем интерполяции |
LPC_Present - этот бит указывает, присоединены ли параметры LPC к текущему фрейму. Эти параметры LPC относятся или к текущему фрейму или следующему фрейму (см. таблицу 61).
Таблица 61 - Описание LPC_Present
|
|
|
LPC_Present | LPCID | Описание |
0 | NO | Фрейм не содержит данные LPC |
1 | YES | Фрейм содержит данные LPC |
Вместе interpolation_flag и флажок LPC_Present описывают, как параметры LPC должны быть получены (см. таблицу 62).
Таблица 62 - Процесс декодирования LPC, описанный interpolation_flag и флажком LPC_Present flag
|
|
|
interpolation_flag | LPC_Present | Описание |
1 | 1 | Параметры LPC текущего фрейма должны быть извлечены, используя интерполяцию. Текущий фрейм несет параметры LPC, принадлежащие следующему фрейму |
1 | 0 | ЗАРЕЗЕРВИРОВАНО |
0 | 1 | Параметры LPC текущего фрейма присутствуют в текущем фрейме |
0 | 0 | Параметры LPC предыдущего фрейма должны использоваться в текущем фрейме |
Ipc_indices [ ] - это мультибитовые поля, представляющие коэффициенты LPC. Они содержат информацию необходимую, чтобы извлечь коэффициенты LSP. Точная процедура извлечения описана в процессе декодирования.
shape_delay [subframe] - это битовое поле представляет адаптивную задержку книги шифров. Декодирование этого поля зависит от ExcitationMode и SampleRateMode (см. таблицу 63).
Таблица 63 - Число битов для shape_delay [ ]
|
|
|
ExcitationMode | SampleRateMode | shape_delay [ ], биты |
RPE | 16 кГц | 8 |
МРЕ | 8 кГц | 8 |
МРЕ | 16 кГц | 9 |
shape_index [subframe] - этот индекс содержит информацию, необходимую чтобы извлечь фиксированное вложение книги шифров из книги шифров регулярного импульса. Число битов, занимаемых этим полем, зависит от битовой скорости (полученной из RPE_configuration) (см. таблицу 64).
Таблица 64 - Число битов для shape_index [ ]
|
|
RPE_Configuration | Число битов, представляющих shape_index [ ] |
0 | 11 |
1 | 11 |
2 | 12 |
3 | 12 |
4...7 | Зарезервировано |
gain_indices [0] [subframe] - эти битовые поля определяют адаптивное усиление книги шифров в инструменте RPE, используя 6 битов. Это читается из потока бит для каждого подфрейма.
gain_indices [1] [subframe] - эти битовые поля определяют фиксированное усиление книги шифров в инструменте RPE. Это читается из потока бит для каждого подфрейма. Число читаемых битов для представления этой области зависит от номера подфрейма. Для первого подфрейма это 5 битов, в то время как для остальных подфреймов это 3 бита.
gain_index [subframe] - это 6 или 7-битовое поле представляет усиления для адаптивной книги шифров и мультиимпульсного возбуждения для частоты дискретизации 8 кГц или 16 кГц соответственно.
gain_enh_index [subframe] - это 4-битовое поле представляет усиление для мультиимпульсного возбуждения расширения в кодере CELP на 8 кГц.
gain_bws_index [subframe] - это 11-битовое поле представляет усиления для адаптивной книги шифров и двух возбуждений мультиимпульса в инструменте расширения полосы пропускания.
signal_mode - это 2-битовое поле представляет тип сигнала. Эта информация используется в инструменте МРЕ. Книги шифров усиления переключаются в зависимости от этой информации (см. таблицу 65).
Таблица 65 - Описание signal_mode
|
|
signal_mode | Описание |
0 | Неголосовой |
1, 2, 3 | Голосовой |
rmc_index - этот параметр указывает среднеквадратический уровень фрейма. Эта информация используется только в инструменте МРЕ.
shape_positions [subframe], shape_signs [subframe] - эти битовые поля представляют позиции импульсов и знаки импульсов для мультиимпульсного возбуждения. Длина битового поля зависит от MPE_Configurations (см. таблицы 66, 67).
Таблица 66* - Определения shape_positions[ ] и shape_signs[ ] для дискретизированной на 8 кГц речи
|
|
|
MPE_Configuration | shape_positions[ ], (битов) | shape_signs[ ], (битов) |
0 | 14 | 3 |
1 | 17 | 4 |
2 | 20 | 5 |
3 | 20 | 5 |
4 | 22 | 6 |
5 | 24 | 7 |
6 | 22 | 6 |
7 | 24 | 7 |
8 | 26 | 8 |
9 | 28 | 9 |
10 | 30 | 10 |
11 | 31 | 11 |
12 | 32 | 12 |
13 | 13 | 4 |
14 | 15 | 5 |
15 | 16 | 6 |
16 | 17 | 7 |
17 | 18 | 8 |
18 | 19 | 9 |
19 | 20 | 10 |
20 | 20 | 11 |
17* | 18 | 8 |
18* | 19 | 9 |
19* | 20 | 10 |
20* | 20 | 11 |
21 | 20 | 12 |
22 | 18 | 8 |
23 | 19 | 9 |
24 | 20 | 10 |
25 | 20 | 11 |
26 | 20 | 12 |
27 | 19 | 6 |
28... 31 | Зарезервировано |
Таблица 67 - Определения shape_positions[ ] и shape_signs[ ] для дискретизированной на 16 кГц речи
|
|
|
MPE_Configuration | shape_positions[ ] (битов) | shape_signs[ ] (битов) |
0, 16 | 20 | 5 |
1, 17 | 22 | 6 |
2, 18 | 24 | 7 |
3, 19 | 26 | 8 |
4, 20 | 28 | 9 |
5, 21 | 30 | 10 |
6, 22 | 31 | 11 |
7, 23 | Зарезервировано | Зарезервировано |
8, 24 | 11 | 3 |
9, 25 | 13 | 4 |
10, 26 | 15 | 5 |
11, 27 | 16 | 6 |
12, 28 | 17 | 7 |
13, 29 | 18 | 8 |
14, 30 | 19 | 9 |
15, 31 | 20 | 10 |
shape_enh_positions[subframe][ ], shape_enh_signs[subframe][ ] - эти битовые поля представляют позиции импульсов, и знаки импульсов для мультиимпульсного возбуждения в каждом уровне расширения. Длина битового поля зависит от MPE_Configuration (см. таблицы 68, 69).
Таблица 68 - Определение shape_enh_positions[ ][ ] и shape_enh_signs[ ][ ] для дискретизированной на 8 кГц речи
|
|
|
МРЕ_Configuration | shape_enh_positions[ ][ ], (битов) | shape_enh_signs[ ][ ], (битов) |
0...12 | 12 | 4 |
13...26 | 4 | 2 |
27 | Не имеет силы | |
28...31 | Зарезервировано |
Таблица 69 - Определение shape_enh_positions[ ][ ] и shape_enh_signs[ ][ ] для дискретизированной на 16 кГц речи
|
|
|
МРЕ_Configuration | shape_enh_positions[ ][ ], (битов) | shape_enh_signs[ ][ ], (битов) |
0...6, 16...22 | 12 | 4 |
8...15, 24...31 | 4 | 2 |
7, 23 | Зарезервировано |
shape_bws_delay[subframe] - это 3-битовое поле используется в декодировании адаптивной книги шифров для инструмента расширения полосы пропускания. Это значение указывает задержку, отличающуюся от задержки, описанной в shape_delay[ ].
shape_bws_positions[subframe], shape_bws_signs [subframe] - эти поля представляют позиции импульсов и знаки импульсов для мультиимпульсного возбуждения в инструменте расширения полосы пропускания. Длина битового поля зависит от BWS_Configuration (см. таблицу 70).
Таблица 70 - Определение shape_bws_positions [ ] и shape_bws_signs [ ]
|
|
|
BWS_Configuration | shape_bws_positions[ ], (битов) | shape_bws_signs[ ], (битов) |
0 | 22 | 6 |
1 | 26 | 8 |
2 | 30 | 10 |
3 | 32 | 12 |
TX_flag - двухбитовая область, указывающая режим передачи (см. таблицу 71).
Таблица 71 - Определение TX_flag
|
|
TX_fIag | Режим передачи |
0 | Неактивный фрейм. Энергия фрейма или индексы LPC не передаются |
1 | Активный фрейм |
2 | Неактивный фрейм. Энергия фрейма или индексы LPC передаются |
3 | Неактивный фрейм. Передается только энергия фрейма, индексы LPC не передаются |
SID_rmc_index - 6-битовое поле, указывающее энергию фрейма.
SID_Ipc_indices - это мультибитовые поля, представляющие коэффициенты LРС для неактивных фреймов LPC (TX_flag=2). Они содержат информацию, необходимую для извлечения коэффициентов LSP. Семантики потока бит для SID_Ipc_indices показаны в таблице 72.
Таблица 72 - Семантики потока бит для SID_Ipc_indices
|
|
|
|
|
Режим кодирования | Частота дискретизации [кГц] | Масштабируемость полосы | Параметр | Описание |
I | 16 | Off | SID_lpc_indices[0] | 0-4 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[1] | 5-9 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[2] | 10-14 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[3] | 15-19 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[4] | 0-4 LSPs of the 2 nd stage VQ |
|
|
| SID_lpc_indices[5] | 5-9 LSPs of the 2 nd stage VQ |
II | 8 | On, Off | SID_lpc_indices[0] | 0-4 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[1] | 5-9 LSPs of the 1 st stage VQ |
|
|
| SID_lpc_indices[2] | 0-4 LSPs of the 2 nd stage VQ |
| 16 | On | SID_lpc_indices[3] | 0-9 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[4] | 10-19 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[5] | 0-4 LSPs of 2 nd stage VQ |
|
|
| SID_lpc_indices[6] | 5-9 LSPs of 2 nd stage VQ |
|
| Off | SID_lpc_indices[0] | 0-4 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[1] | 5-9 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[2] | 10-14 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[3] | 15-19 LSPs of 1 st stage VQ |
|
|
| SID_lpc_indices[4] | 0-4 LSPs of 2 nd stage VQ |
|
|
| SID_lpc_indices[5] | 5-9 LSPs of 2 nd stage VQ |
5 Инструменты декодера MPEG-4 CELP
Здесь дается краткое описание функциональных возможностей, определение параметра и процессов декодирования инструментов, поддержанных ядром MPEG-4 CELP. Описание каждого инструмента включает три части и дополнительную часть, содержащую таблицы, используемые инструментом:
1 Описание инструмента: короткое описание функциональных возможностей инструмента дается вместе с его интерфейсом.
2 Определения: здесь описаны параметры ввода и вывода, так же как элементы справки инструмента. Каждый элемент дается полужирным шрифтом или курсивным. Полужирные названия указывают, что элемент читается из потока битов, курсивные названия указывают вспомогательные элементы. Если элементы уже используются другим инструментом, дается ссылка на предыдущее определение.
3 Процесс декодирования: процесс декодирования объяснен здесь подробно при помощи математических уравнений и кода pseudo-C.
4 Таблицы: эта дополнительная четвертая часть содержит таблицы, которые используются инструментом.
5.1 Введение в набор инструментов декодера CELP MPEG-4
Декодер MPEG-4 CELP работает при частоте дискретизации 8 или 16 кГц. Один или несколько индивидуальных блоков сгруппированы, формируя инструменты, доступные для декодирования MPEG-4 CELP. Поддерживаются следующие инструменты:
Демультиплексор потока бит CELP
Декодер CELP LPC и интерполятор
Узкополосный инструмент декодирования LSP-VQ
Широкополосный инструмент декодирования LSP-VQ
Инструмент декодирования LSP-VQ с масшабируемой полосой пропускания
Генератор возбуждения CELP
Инструмент генерации возбуждения регулярным импульсом
Инструмент генерации мультиимпульсного возбуждения
Инструмент генерации мультиимпульсного возбуждения масштабируемой битовой скорости
Инструмент генерации мультиимпульсного возбуждения масштабируемой полосы пропускания
Фильтр синтеза CELP LPC
Постпроцессор CELP (информативный инструмент)
Декодирование выполняется на основе фрейма, и каждый фрейм разделен на подфреймы. Фрейм в потоке бит демультиплексируется модулем демультиплексора потока бит CELP. Параметры, которые извлечены из потока бит, являются информацией заголовка, кодами, представляющими коэффициенты LPC фрейма и параметрами возбуждения для каждого подфрейма. Эти коды декодируются и интерполируются для каждого подфрейма модулем декодера и интерполятора CELP LPC. Для каждого подфрейма используются параметры возбуждения, чтобы генерировать сигнал возбуждения, используя модуль генератора возбуждения CELP. Модуль фильтра синтеза CELP LPC восстанавливает речевой сигнал на основании подфрейма, исходя из интерполированных коэффициентов LPC и сгенерированного сигнала возбуждения. Расширение синтезируемого сигнала получено дополнительным модулем постпроцессора CELP.
Чтобы реализовать масштабируемость битовой скорости, для генерации сигнала возбуждения используется инструмент генерации мультиимпульсного возбуждения масштабируемой битовой скорости (МРЕ). Инструмент генерации МРЕ масштабируемой битовой скорости реализуется путем добавления инструмента декодирования возбуждения расширения к инструменту генерации МРЕ, чтобы повысить качество сигнала возбуждения.
Декодер CELP масштабируемой полосы пропускания реализуется с использованием как инструмента LSP-VQ масштабируемой полосы пропускания, так и инструмента генерации МРЕ масштабируемой битовой скорости. Эти инструменты масштабирования используются, чтобы расширить полосу пропускания декодированного сигнала от 3,4 кГц до 7 кГц.
5.2 Конфигурация масштабируемого AAC/CELP
Когда декодер узкополосного CELP используется как "основной кодер" в масштабируемой конфигурации AAC/CELP (см. часть T/F) для масштабируемости большого шага, постфильтр выключен. В случае, если декодер узкополосного CELP работает как основной декодер в масштабируемой конфигурации, этот декодер может декодировать объект аудио CELP при частоте дискретизации, отличающейся от 8 кГц. Частота дискретизации объекта аудио CELP определяется samplingFrequencylndex в AudioSpecificlnfo (см. подраздел 1). Флажок SampleRateMode в заголовке CELP, управляющий работой декодера, должен указывать 8 кГц. В случае, если samplingFrequencylndex указывает, что частота дискретизации отличается от 8000 Гц, битовая скорость, длина фрейма и задержка изменяются соответственно.
5.3 Переменные помощи
Хотя каждый инструмент имеет описание переменных, которые он использует, в этом подпункте приводятся обычно используемые многими инструментами переменные.
frame_size: Это поле указывает число отсчетов во фрейме. Декодер выводит фрейм с frame_size отсчетов.
nrof_subframes: Фрейм состоит из ряда подфреймов. Число подфреймов определено в этом поле.
sbfrm_size: Подфрейм состоит из ряда отсчетов, количество которых обозначено этим полем. Число отсчетов во фрейме всегда должно быть равным сумме количеств отсчетов в подфреймах. Соответственно всегда должно соблюдаться следующее соотношение
frame_size = nrof_subframes * sbfrm_size.
Эти три параметра зависят от настройки параметров режима кодирования и битовой скорости, как указано в таблице 73 для режима I, таблице 74 и таблице 75 для режима II.
Таблица 73 - Конфигурация кодера CELP (режим I) для частоты дискретизации 16 кГц
|
|
|
|
RPE_Configuration | Frame_size (#samples) | nrof_subframes | sbfrm_size (#samples) |
0 | 240 | 6 | 40 |
1 | 160 | 4 | 40 |
2 | 240 | 8 | 30 |
3 | 240 | 10 | 24 |
4...7 | Зарезервировано |
|
Таблица 74 - Конфигурация кодера CELP (режим II) для частоты дискретизации 8 кГц
|
|
|
|
MPE_Configuration | Frame_size (#samples) | nrof_subframes | sbfrm_size (#samples) |
0, 1, 2 | 320 | 4 | 80 |
3, 4, 5 | 240 | 3 | 80 |
6...12 | 160 | 2 | 80 |
13...21 | 160 | 4 | 40 |
22...26 | 80 | 2 | 40 |
27 | 240 | 4 | 60 |
28...31 | Зарезервировано |
|
Таблица 75 - Конфигурация кодера CELP (режим II) для частоты дискретизации 16 кГц
|
|
|
|
MPE_Configuration | Frame_size (#samples) | nrof_subframes | sbfrm_size (#samples) |
0, ..., 6 | 320 | 4 | 80 |
8, ..., 15 | 320 | 8 | 40 |
16, ..., 22 | 160 | 2 | 80 |
24, ..., 31 | 160 | 4 | 40 |
7, 23 | Зарезервировано |
|
Ipc_order: Это поле указывает число коэффициентов, используемых для линейного предсказания. Значение этого поля равно 20 для частоты дискретизации 16 кГц и 10 для 8 кГц.
num_lpc_indices. Этот параметр определяет число индексов, содержащих информацию LPC, которая должна читаться из потока бит. Оно не равно порядку LPC. num_lpc_indices равно 5 в режиме 8 кГц и дополнительно 6 для инструмента расширения полосы пропускания. Для частоты дискретизации 16 кГц в векторном квантователе это значение равно 10.
5.4 Элементы потока бит для набора инструментов MPEG-4 CELP
Описания всех переменных потока бит перечислены в разделе 4.
5.5 Демультиплексор потока бит CELP
5.5.1 Описание инструмента
Инструмент демультиплексора потока бит CELP извлекает фрейм CELP из полученного потока бит.
5.5.2 Определения
Все элементы потока бит и связанные переменные справки были определены в разделе 4.
5.5.3 Процесс декодирования
Декодирование элементов потока бит производится в соответствии с синтаксисом, описанным в разделе 3.
5.6 Декодер CELP LPC и интерполятор
У декодера CELP LPC и интерполятора есть две функции:
1 Восстанавливать коэффициенты LPC из Ipc_indices [ ].
2 Интерполировать восстановленные коэффициенты LPC для каждого подфрейма.
В зависимости от режима квантования lpc_indices[ ] содержат информацию, необходимую чтобы восстановить коэффициенты LSP. Есть три типа процессов декодирования, а именно, процесс декодирования узкополосного LSP, процесс декодирования широкополосного LSP, и процесс декодирования LSP c масштабируемой полосой пропускания. Выходы этого процесса являются коэффициентами фильтра, названные коэффициентами LPC или параметрами, которые могут использоваться в фильтре прямой формы (см. таблицу 76).
Таблица 76 - Инструменты декодирования LPC
|
|
|
Режим кодирования | Частота дискретизации | Инструмент |
Mode I | 16 кГц | Wideband LSP-VQ |
Mode II | 8 кГц | Narrowband LSP-VQ |
| 16 кГц | Wideband LSP-VQ |
| 8/16 кГц (BWS) | Bandwidth Scalable (BWS) LSP-VQ |
5.6.1 Инструмент декодирования узкополосного LSP-VQ
5.6.1.1 Описание инструмента
Инструмент декодирования узкополосного LSP имеет двухступенчатую структуру VQ. Квантованные LSPs воспроизводятся добавлением декодированных в первой и во второй стадиях LSPs. Во второй стадии есть два процесса декодирования, с или без межфреймового предсказания, процесс декодирования выбирается согласно флажку Ipc_indices. Затем декодированные LSPs интерполируются и преобразуются в коэффициенты LPC.
5.6.1.2 Определения
Вход
Ipc_indices [ ]: Размерность этого массива num_lpc_indices содержит упакованные индексы lрс.
Выход
int_Qlpc_coefficients[ ]: Этот массив содержит коэффициенты LPC для каждого подфрейма. Коэффициенты LPC декодированы и интерполированы, как описано в процессе декодирования. Коэффициенты LPC расположены в стеке один за другим в блоках Ipc_order. Таким образом размерность массива равна Ipc_order* nrof_subframes.
Конфигурация
Ipc_order: Это поле указывает порядок используемого LPC.
num_lpc_indices: Это поле содержит ряд упакованных кодов LPC. Для узкополосного LSP, num_lpc_indices процесса декодирования установлен 5.
nrof_subframes: Это поле содержит ряд подфреймов.
Элементы справки, используемые в процессе декодирования узкополосного LSP:
|
|
lsp_tbl[ ][ ][ ] | таблицы поиска для первой стадии процесса декодирования |
d_tbl[ ][ ][ ] | таблицы поиска для второй стадии процесса декодирования VQ без межфреймового предсказания |
pd_tbl[ ][ ][ ] | таблицы поиска для второй стадии процесса декодирования VQ с межфреймовым предсказанием |
dim[ ][ ] | размерности для квантования расщепленного вектора |
sign | знак вектора кода для второй стадии процесса декодирования |
idx | распакованный индекс для второй стадии процесса декодирования |
lsp_first[ ], | LSPs, декодированные на первой стадии процесса декодирования |
lsp_previous[ ] | LSPs, декодированные в предыдущем фрейме |
lsp_predict[ ] | LSPs, предсказанные из lsp_previous[ ] и lsp_first[ ] |
lsp_current[ ] | LSPs, декодированные в текущем фрейме |
lsp_subframe[ ][ ] | LSPs, интерполированные в каждом подфрейме |
ratio_predict | коэффициент для предсказания lsp_predict[ ] |
ratio_sub | коэффициент интерполяции для вычисления lsp_subframe[ ][ ] |
min_gap | минимальное расстояние между соседними LSPs |
Convert2lpc () | функция для преобразования LSPs в LPCs |
5.6.1.3 Процесс декодирования
Процесс декодирования LSP для восстановления коэффициентов интерполированного LPC для каждого подфрейма описан ниже.
5.6.1.3.1 Преобразование индексов в LSPs
LSPs текущего фрейма (lsp_current[ ]), которые кодируются разбиением и двухступенчатым векторным квантованием, декодируются двухступенчатым процессом декодирования. Размерность каждого вектора описана в таблице 77 и таблице 78. lpc_indices[0],[1] и lpc_indices[2],[3] представляют индексы для первой и второй стадии, соответственно.
Таблица 77 - Размерность вектора первой стадии LSP
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[0][i] |
0 | 5 |
1 | 5 |
Таблица 78 - Размерность вектора второй стадии LSP
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[1][i] |
0 | 5 |
1 | 5 |
В первой стадии вектор LSP первой стадии Isp_first[ ] декодируется путем просмотра таблицы lsp_tbl[ ][ ][ ].
for(i = 0; i < dim[0][0]; i++)
{
lsp_first[i] = lsp_tbl[0][lpc_indices[0]][i];
}
for(i = 0; i < dim[0][1]; i++)
{
lsp_first[dim[0][0]+i] = lsp_tbl[1][lpc_indices[1]][i];
}
Во второй стадии есть два типа процессов декодирования, а именно, процесс декодирования VQ без межфреймового предсказания и VQ - с межфреймовым предсказанием. lpc_indices[4] указывает, какой процесс должен быть выбран (см. таблицу 79).
Таблица 79 - Процесс декодирования для второй стадии
|
|
Индекс LPC: Ipc_indices [4] | Процесс декодирования |
0 | VQ без межфреймового предсказания |
1 | VQ с межфреймовым предсказанием |
Процесс декодирования VQ без межфреймового предсказания
Чтобы получить LSPs текущего фрейма lsp_current[ ], декодированные векторы во второй стадии добавляются к декодированному вектору LSP первой стадии lsp_first[ ]. МСВ для lpc_indices[ ] представляет знак декодированного вектора, а остающиеся биты представляют индекс для таблицы d_tbl[ ][ ][ ].
sign = lpc_indices[2] >> 6;
idx = lpc_indices[2] & 0x3f;
if (sign==0)
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current[i] = lsp_first[i] + d_tbl[0][idx][i];
}
}
else
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current[i] = lsp_first[i] - d_tbl[0][idx][i];
}
}
sign = lpc_indices[3] >> 5; idx = lpc_indices[3] & 0x1f; if (sign==0)
{
for(i = 0; i < dim[1][1]; i++)
{
lsp_current[dim[1][0]+i] = lsp_first[dim[1][0]+i] + d_tbl[1][idx][i];
}
}
else
{
for(i = 0; i < dim[1][1]; i++)
{
lsp_current[dim[1][0]+i] = lsp_first[dim[1][0]+i] - d_tbl[1][idx][i];
}
}
Процесс декодирования VQ с межфреймовым предсказанием
Чтобы получить LSPs текущего фрейма lsp_current[ ], декодированные векторы второй стадии добавляются к вектору LSP - - lsp_predict[ ], которые предсказаны из декодированных LSPs предыдущего фрейма ISP_previous[ ] и декодированного вектора LSP первой стадии Isp_first [ ]. Таким же образом как процесс декодирования VQ без межфреймового предсказания, LSP для lpc_indices[ ] представляет знак декодированного вектора, а остающиеся биты представляют индекс для таблицы pd_tbl[ ][ ][ ].
|
5.6.1.3.2 Стабилизация LSPs
Декодированные LSPs Isp_current[ ] стабилизируются, чтобы гарантировать стабильность фильтра синтеза LPC, который получен из декодированных LSPs. Декодированные LSPs упорядочиваются в порядке возрастания, имея расстояние между соседними коэффициентами, по крайней мере, min_gap.
|
5.6.1.3.3 Интерполяция LSPs
Декодированные LSPs lsp_current[ ] линейно интерполируются в каждом подфрейме, используя LSPs предыдущего фрейма lsp_previous[ ].
|
5.6.1.3.4 Преобразование LSP в LPC
Интерполированные LSPs преобразуются в LPCs, используя вспомогательную функцию Convert2lpc().
|
|
5.6.1.3.5 Сохранение коэффициентов
После вычисления коэффициентов LPC, текущие LSPs должны быть сохранены в памяти, так как они используются для интерполяции в следующем фрейме.
|
Сохраненные lsp_previous[ ] LSPs должны быть инициализированы как описано ниже, когда инициализируется весь декодер.
|
5.6.2 Инструмент декодирования широкополосного LSP-VQ
5.6.2.1 Описание инструмента
Процесс декодирования широкополосного LSP основан на процессе декодирования узкополосного LSP. Процесс декодирования широкополосного LSP состоит из двух блоков декодирования LSP, соединенных параллельно. Каждый из блоков декодирования идентичен процессу декодирования узкополосного LSP и декодирует нижнюю и верхнюю части LSPs соответственно. Декодированные LSPs объединяются и выводятся как один набор параметров.
5.6.2.2 Определения
Вход
lpc_indices[ ]: Размерность этого массива - num_lpc_indices, он содержит упакованные индексы lрс.
Выход
int_Qlpc_coefficients[ ]: Этот массив содержит коэффициенты LPC для каждого подфрейма. Коэффициенты LPC декодированы и интерполированы, как описано в процессе декодирования. Коэффициенты LPC расположены в стеке один за другим в блоках Ipc_order. Таким образом, размерность массива равна Ipc_order*nrof_subframes.
Конфигурация
Ipc_order: Это поле указывает порядок используемого LPC.
num_lpc_indices: Это поле содержит число кодов упакованного LPC. Для процесса декодирования широкополосного LSP num_lpc_indices устанавливается 10.
nrof_subframes: Это поле содержит число подфреймов.
Элементы справки, используемые в процессе декодирования широкополосного LSP:
|
|
lsp_tbl[ ][ ][ ] | таблицы поиска для первой стадии процесса декодирования |
d_tbl[ ][ ][ ] | таблицы поиска для второй стадии процесса декодирования VQ без межфреймового предсказания |
pd_tbl[ ][ ][ ] | таблицы поиска для второй стадии процесса декодирования VQ с межфреймовым предсказанием |
dim[ ][ ] | размерности для квантования расщепленного вектора |
sign | знак кодового вектора для второй стадии процесса декодирования |
idx | распакованный индекс для второй стадии процесса декодирования |
Isp_first[ ] | LSPs, декодированные на первой стадии процесса декодирования |
lsp_previous[ ] | LSPs, декодированные в предыдущем фрейме |
lsp_predict[ ] | LSPs, предсказанные из lsp_previous[ ] и lsp_first[ ] |
lsp_current[ ] | LSPs, декодированные в текущем фрейме |
lsp_current_lower[ ] | нижняя часть текущих LSPs |
lsp_current_upper[ ] | верхняя часть текущих LSPs |
lsp_subframe[ ][ ] | LSPs, интерполированные в каждом подфрейме |
ratio_predict | коэффициент для предсказания lsp_predict[ ] |
ratio_sub | коэффициент интерполяции для вычисления lsp_subframe[ ][ ] |
min_gap | минимальное расстояние между смежными LSPs |
Convert2lpc() | функция для преобразования LSPs в LPCs |
5.6.2.3 Процесс декодирования
Процесс декодирования LSP для поиска интерполированных коэффициентов LРС для каждого подфрейма описан ниже.
5.6.2.3.1 Преобразование индексов в LSPs
Используя тот же способ, что и в процессе декодирования узкополосного LSP, декодируются двухступенчатым процессом декодирования LSPs текущего фрейма (lsp_current[ ]), которые закодированы разбиением и двухступенчатым векторным квантованием.
Сначала декодируется нижняя часть текущих LSPs lsp_current_lower[ ]. Размерность каждого вектора описана в таблице 80 и таблице 81. Ipc_indices [0], [1] и lpc_indices[2],[3] представляют индексы для первой и второй стадии, соответственно.
Таблица 80 - Размерность вектора LSP первой стадии
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[0][i] |
0 | 5 |
1 | 5 |
Таблица 81 - Размерность вектора LSP второй стадии
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[1][i] |
0 | 5 |
1 | 5 |
В первой стадии вектор LSP первой стадии lsp_first[ ] декодируется путем просмотра таблицы lsp_tbl[ ][ ][ ].
for (i = 0; i < dim[0][0]; i++)
{
lsp_first[i] = lsp_tbl[0][lpc_indices[0]][i];
}
for (i = 0; i < dim[0][1]; i++)
{
lsp_first[dim[0][0]+i] =
lsp_tbl[1][lpc_indices[1]][i];
}
Во второй стадии Ipc_indices [4] указывает, какой процесс должен быть выбран (см. таблицу 82).
Таблица 82 - Процесс декодирования для второй стадии
|
|
Индекс LPC: Ipc_indices [4] | Процесс декодирования |
0 | VQ без межфреймового предсказания |
1 | VQ с межфреймовым предсказанием |
Процесс декодирования VQ без межфреймового предсказания
Чтобы получить LSPs текущего фрейма lsp_current_lower[ ], декодированные векторы второй стадии добавляются к декодированному вектору LSP, lsp_first_lower[ ]. MCB lpc_indices[ ] представляет знак декодированного вектора, а остальные биты представляют индекс для таблицы d_tbl[ ][ ][ ].
sign = lpc_indices[2] >> 6;
idx = lpc_indices[2] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_lower[i] = lsp_first[i] + d_tbl[0][idx][i];
}
}
else
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_lower[i] = lsp_first[i] - d_tbl[0][idx][i];
}
}
sign = lpc_indices[3] >> 6;
idx = lpc_indices[3] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_lower[dim[1][0]+i] = lsp_first[dim[1][0]+i] + d_tbl[1][idx][i];
}
}
else
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_lower[dim[1][0]+i] = lsp_first[dim[1][0]+i] - d_tbl[1][idx][i];
}
}
Процесс декодирования VQ с межфреймовым предсказанием
Чтобы получить LSPs текущего фрейма lsp_current_lower[ ], к вектору LSP lsp_predict[ ] добавляются декодированные векторы второй стадии, которые предсказаны из декодированных LSPs предыдущего фрейма lsp_previous[ ] и декодированного вектора LSP первой стадии lsp_first[ ]. Таким же образом как в процессе декодирования VQ без межфреймового предсказания, МСВ lpc_indices[ ] представляет знак декодированного вектора, а остающиеся биты представляют индекс для таблицы pd_tbl[ ][ ][ ].
for (i = 0; i < lpc_order/2; i++)
{
lsp_predict[i]=(1-ratio_predict)*lsp_first[i] + ratio_predict*lsp_previous[i];
}
где ratio_predict = 0.5
sign = lpc_indices[2] >> 6;
idx = lpc_indices[2] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_lower[i] = lsp_predict[i] + pd_tbl[0][idx][i];
}
}
else
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_lower[i] = lsp_predict[i] - pd_tbl[0][idx][i];
}
}
sign = lpc_indices[3] >> 6;
idx = lpc_indices[3] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_lower[dim[1][0]+i]=lsp_predict[dim[1][0]+i]+pd_ tbl[1][idx][i];
}
}
else
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_lower[dim[1][0]+i]=lsp_predict[dim[1][0]+i]-pd_tbl[1][idx][i];
}
}
Затем, декодируется верхняя часть текущих LSPs тем же способом как в процессе декодирования нижней части. Размерность каждого вектора описана в таблице 83 и таблице 84. lpc_indices[5], [6] и lpc_indices[7], [8] представляют индексы для первой и второй стадии соответственно.
Таблица 83 - Размерность вектора LSP первой стадии
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[0][i] |
0 | 5 |
1 | 5 |
Таблица 84 - Размерность вектора LSP второй стадии
|
|
Индекс вектора разбиения: i | Размерность вектора: dim[1][i] |
0 | 5 |
1 | 5 |
For (i = 0; i < dim[0][0]; i++)
{
lsp_first[i] = lsp_tbl[0][lpc_indices[5]][i];
}
for (i = 0; i < dim[0][1]; i++)
{
lsp_first[dim[0][0]+i] =
lsp_tbl[1][lpc_indices[6]][i];
}
Во второй стадии Ipc_indices [9] указывает, какой процесс должен быть выбран (см. таблицу 85).
Таблица 85 - Процесс декодирования для второй стадии
|
|
Индекс LPC: Ipc_indices [9] | Процесс декодирования |
0 | VQ без межфреймового предсказания |
1 | VQ с межфреймовым предсказанием |
Процесс декодирования VQ без межфреймового предсказания
sign = lpc_indices[7] >> 6;
idx = lpc_indices[7] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_upper[i] = lsp_first[i] + d_tbl[0][idx][i];
}
}
Else
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_upper[i] = lsp_first[i] - d_tbl[0][idx][i];
}
}
sign = lpc_indices[8] >> 4;
idx = lpc_indices[8] & 0x0f;
if (sign == 0)
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_upper[dim[1][0]+i] = lsp_first[dim[1][0]+i] + d_tbl[1][idx][i];
}
}
Else
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_upper[dim[1][0]+i] = lsp_first[dim[1][0]+i] - d_tbl[1][idx][i];
}
}
Процесс декодирования VQ с межфреймовым предсказанием
for (i = 0; i < lpc_order/2; i++)
{
Isp_predict[i]=(1-
ratio_predict)*lsp_first[i]+ratio_predict*lsp_previous [lpc_order/2+i];
}
где ratio_predict = 0.5
sign = lpc_indices[7] >> 6;
idx = lpc_indices[7] & 0x3f;
if (sign == 0)
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_upper[i] = lsp_predict[i] + pd_tbi[0][idx][i];
}
}
else
{
for (i = 0; i < dim[1][0]; i++)
{
lsp_current_upper[i] = lsp_predict[i] - pd_tbi[0][idx][i];
}
}
sign = lpc_indices[8] >> 4;
idx = lpc_indices[8] & 0x0f;
if (sign == 0)
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_upper[dim[1][0]+i] = lsp_predict[dim[1][0]+i] +
pd_tbl[1][idx][i];
}
}
else
{
for (i = 0; i < dim[1][1]; i++)
{
lsp_current_upper[dim[1][0]+i] = lsp_predict[dim[1][0]+i] -
pd_tbl[1][idx][i];
}
}
Наконец декодированные LSPs lsp_current_lower[ ] и Isp_current_upper[ ] объединяются и сохраняются в массиве lsp_current[ ].
for (i = 0; i < lpc_order/2; i++)
{
lsp_current[i] = lsp_current_lower[i];
}
for (i = 0; i < lpc_order/2; i++)
{
lsp_current[lpc_order/2 + i] = lsp_current_upper[i];
}
5.6.2.4 Стабилизация LSPs
Декодированные LSPs lsp_current[ ] стабилизируются, чтобы гарантировать стабильность фильтра синтеза LPC, который получен из декодированных LSPs. Декодированные LSPs упорядочены в порядке возрастания, имея расстояние между смежными коэффициентами, по крайней мере, min_gap.
for (i = 0; i < lpc_order; i++)
{
if (lsp_current[i] < min_gap)
{
Isp_current[i] = min_gap;
}
}
for (i = 0; i < lpc_order - 1; i++)
{
if (lsp_current[i+1]-lsp_current[i] < min_gap)
{
lsp_current[i+1] = lsp_current[i]+min_gap;
}
}
for (i = 0; i < lpc_order; i++)
{
if (lsp_current[i] > 1-min_gap)
{
lsp_current[i] = 1-min_gap;
}
}
for (i = lpc_order - 1; i > 0; i - -)
{
if (lsp_current[i]-lsp_current[i-1] < min_gap)
{
lsp_current[i-1] = lsp_current[i]-min_gap;
}
}
где lpc_order = 20 и min_gap = 1.0/256.0
5.6.2.5 Интерполяция LSPs
Декодированные LSPs Isp_current[ ] интерполированы линейно в каждом подфрейме, используя LSPs предыдущего фрейма lsp_previous[ ].
for (n = 0; n < nrof_subframes; n++)
{
ratio_sub=(n+1)/nrof_subframes
for (i = 0; i < lpc_order; i++)
{
lsp_subframe[n][i] = ((1-
ratio_sub)*lsp_previous[i]+ratio_sub*lsp_current[i]));
}
}
5.6.2.6 Преобразование LSP в LPC
Интерполированные LSPs преобразуются в LPCs с использованием вспомогательной функции Convert2lpc().
for (n = 0; n < nrof_subframes; n++)
{
Convert2lpc (lpc_order, lsp_subframe[n],
int_Qlpc_coefficients + n*lpc_order]);
}
5.6.2.7 Сохранение коэффициентов
После вычисления коэффициентов LPC текущие LSPs должны быть сохранены в памяти, так как они используются для интерполяции в следующем фрейме.
for (i = 0; i < lpc_order; i++)
{
lsp_previous[i] = lsp_current[i];
}
Сохраненные LSPs lsp_previous[ ] должны быть инициализированы как описано ниже, когда инициализируется весь декодер.
for (i = 0; i < lpc_order; i++)
{
lsp_previous[i] = (i+1) / (lpc_order+1);
}
5.6.3 Инструмент декодирования масштабируемого по полосе пропускания LSP-VQ
5.6.3.1 Описание инструмента
Инструмент декодирования масштабируемого по полосе пропускания LSP-VQ используется, чтобы добавить масштабируемость полосы пропускания к кодеру режима II. В инструменте декодирования масштабируемого по полосе пропускания LSP-VQ декодирующий инструмент, инструмент расширения полосы пропускания соединен с инструментом декодирования узкополосного LSP-VQ. Коэффициенты LPC для каждого подфрейма восстанавливаются путем поиска lpc_indices[ ] и преобразовывая декодированные LSPs в узкополосном режиме.
5.6.3.2 Определения
Вход
Ipc_indices [ ]: Размерность этого массива равна num_lpc_indices, содержит упакованные индексы Ipc.
Isp_current [ ]: Этот массив содержит декодированные параметры LSP, которые нормализованы в диапазоне от нуля до PI, в инструменте декодирования узкополосного LSP. Эти параметры получены как промежуточные параметры в процессе декодирования узкополосного LSP, описанном в 5.6.1 и переданным в инструмент декодирования масштабируемого по полосе пропускания LSP.
Выход
int_QIpc_coefficients[ ]: Этот массив содержит коэффициенты LPC для каждого подфрейма. Коэффициенты LPC декодируются и интерполируются, как описано в процессе декодирования. Коэффициенты LPC расположены в стеке один за другим в блоках Ipc_order. Таким образом, размерность массива - Ipc_order* nrof_subframes.
Конфигурация
Ipc_order: Это поле указывает порядок используемого LPC.
num_lpc_indices: Это поле содержит число кодов упакованного LPC. Для процесса декодирования LSP с масштабируемой полосой пропускания num_lpc_indices устанавливается в 11.
nrof_subframes: Это поле содержит число подфреймов.
nrof_subframes_bws: Этот параметр, который является переменной справки, представляет число подфреймов в инструменте расширения полосы пропускания.
Следующие элементы справки используются в процедуре декодирования
|
|
lsp_bws_tbl[ ][ ][ ][ ] | таблицы поиска для процесса декодирования LSP с масштабируемой полосой пропускания |
lsp_bws_bu[ ][ ] | буфер, содержащий остаток предсказания LSP |
bws_ma_prdct[ ][ ] | коэффициенты для предсказания скользящего среднего значения |
bws_nw_prdct[ ] | коэффициенты предсказания для преобразования для LSPs из узкополосных в широкополосные |
Isp_current[] | декодированные LSPs в узкополосном кодере CELP |
Isp_bws_current[] | декодированные LSPs в текущем фрейме в инструменте расширения полосы пропускания |
Isp_bws_previous[ ] | декодированные LSPs в предыдущем фрейме в инструменте расширения полосы пропускания |
Ipc_order_bws | порядок LPC в инструменте расширения полосы пропускания (=20). Это удвоенный Ipc_order в узкополосном CELP. |
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.