ГОСТ Р 53556.7-2013 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. Часть III (MPEG-4 AUDIO). Параметрическое кодирование звуковых сигналов (HILN)

Обложка ГОСТ Р 53556.7-2013 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. Часть III (MPEG-4 AUDIO). Параметрическое кодирование звуковых сигналов (HILN)
Обозначение
ГОСТ Р 53556.7-2013
Наименование
Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. Часть III (MPEG-4 AUDIO). Параметрическое кодирование звуковых сигналов (HILN)
Статус
Действует
Дата введения
2014.01.09
Дата отмены
-
Заменен на
-
Код ОКС
33.170


ГОСТ Р 53556.7-2013



НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ

Звуковое вещание цифровое

КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ. ЧАСТЬ III (MPEG-4 AUDIO)

Параметрическое кодирование звуковых сигналов (HILN)

Sound broadcasting digital. Coding of signals of sound broadcasting with reduction of redundancy for transfer on digital communication channels. A part III (MPEG-4 audio). Parametric audio coding (HILN)



ОКС 33.170

Дата введения 2014-09-01

Предисловие

1 РАЗРАБОТАН Санкт-Петербургским филиалом Центрального научно-исследовательского института связи "Ленинградское отделение" (ФГУП ЛО ЦНИИС)

2 ВНЕСЕН Техническим комитетом по стандартизации ТК 480 "Связь"

3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 22 ноября 2013 г. ТК* 1704-ст

________________

* Текст документа соответствует оригиналу. - .

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 Область действия

Параметрическое аудиокодирование обеспечивает инструменты HILN, которые дополняют другие инструменты кодирования естественного аудио в области уровней очень низких битовых скоростей. Их внимание сосредоточено на представлении монофонических музыкальных сигналов с низкой и промежуточной сложностью контента в диапазоне 4-16 Кбит/с. HILN задействует высокую степень интерактивности путем неявной поддержки изменения скорости и шага во время воспроизведения с возможностью масштабируемости скорости передачи. Кроме того возможная комбинация с инструментами параметрического кодирования речи HVXC допускает очень эффективные схемы кодирования речи и музыкальных сигналов.

1.1 Технический обзор

Параметрическое аудиокодирование MPEG-4 использует метод HILN (Гармонические и отдельные линии плюс шум), чтобы кодировать такие аудиосигналы, как музыка на скоростях передачи 4 Кбит/с и выше, используя масштабируемое параметрическое представление аудиосигнала. HILN позволяет независимо изменять скорости и шаг во время декодирования. Кроме того HILN может быть объединено с параметрическим кодированием речи MPEG-4 (HVXC), чтобы сформировать интегрированный параметрический кодер, охватывающий более широкий диапазон сигналов и скоростей передачи.

Интегрированный параметрический кодер может работать в следующих режимах:

Таблица 1 - Режимы работы параметрического кодера

PARAmode

Описание

0

только HVXC

1

только HILN

2

переключение HVXC/HILN

3

смешанный HVXC/HILN

PARAmodes 0 и 1 представляют режимы фиксированных HVXC и HILN. PARAmode 2 разрешает автоматическое переключение между HVXC и HILN в зависимости от типа текущего входного сигнала. В PARAmode 3 декодеры HVXC и HILN могут использоваться одновременно, и их выходные сигналы добавляются (смешиваются) в параметрическом декодере.

В режимах "коммутируемые HVXC/HILN" и "смешанные HVXC/HILN" инструменты декодера HVXC и HILN работают альтернативно или одновременно согласно PARAswitchMode или PARAmixMode текущего фрейма. Чтобы получить надлежащее временное выравнивание выходных сигналов декодера HVXC и HILN прежде, чем они будут добавлены, буфер FIFO компенсирует разницу во времени между задержкой декодера HVXC и HILN.

Чтобы избежать трудных переходов на границах фрейма, когда декодеры HVXC или HILN включаются или выключаются, соответствующие выходные сигналы декодера появляются и спадают постепенно. Для декодера HVXC применяется линейное изменение 20 мс, когда он включается или выключается. Декодер HILN не требует дополнительного замирания из-за гладких окон синтеза, используемых в синтезаторе HILN. Необходимо только сбросить декодер HILN (numLine = 0), если текущий фрейм потока битов не содержит HILNframe ().

2 Термины и определения

В настоящем стандарте применены термины и сокращения с соответствующими определениями, используемые в ГОСТ Р 53556.0-2009.

3 Синтаксис потока битов

Естественный объект аудио MPEG-4, использующий параметрическое кодирование, передается в одном или нескольких элементарных потоках: поток базового уровня, поток дополнительного уровня улучшения и один или более дополнительных потоков уровня расширения.

Синтаксис потока битов описывается в коде pseudo-C.

Мнемоники LARH1, LARH2, LARH3, LARN1, LARN2, DIA, DIF, DHF, DFS указывают, что используется кодовая комбинация "vlclbf".

Мнемонический SDC указывает, что используется кодовая комбинация "vlclbf", которая декодируется HILN SubDivisionCode, используя параметры для SDCdecode (), как дано в описании синтаксиса потока битов.

3.1 Конфигурация декодера (ParametricSpecificConfig)

Информация о конфигурации декодера для параметрического кодирования передается в ParametricSpecificConfig () базового уровня и элементарном потоке уровня улучшения или расширения.

Параметрический базовый уровень - конфигурация

Параметрический кодер в немасштабируемом режиме или базовом уровне в масштабируемом режиме HILN используют ParametricSpecificConfig () с isBaseLayer == 1.

Параметрический уровень улучшения/расширения HILN - конфигурация

Чтобы использовать HILN в качестве ядра в режиме "масштабируемый T/F с ядром", в дополнение к базовому уровню HILN требуется уровень улучшения HILN. При работе с масштабируемой скоростью передачи HILN в дополнение к базовому уровню HILN разрешаются один или более уровней расширения HILN. Уровень улучшения и уровень расширения используют ParametricSpecificConfig () с isBaseLayer == 0.

Таблица 2 - Синтаксис ParametricSpecificConfig ()

Синтаксис

Количество битов

Мнемоника

ParametricSpecificConfig ()

{

isBaseLayer;

1

uimsbf

if (isBaseLayer) {

PARAconfig ();

}

else {

HILNenexConfig ();

}

}

3.1.1 Конфигурация параметрического декодера аудио

Таблица 3 - Синтаксис PARAconfig ()

Синтаксис

Количество битов

Мнемоника

PARAconfig ()

{

PARAmode;

2

uimsbf

if (PARAmode! = 1) {

ErHVXCconfig ();

}

if (PARAmode! = 0) {

HILNconfig ();

}

PARAextensionFlag;

1

uimsbf

if (PARAextensionFlag) {

/* to be defined in MPEG 4 Phase 3 */

}

}



Таблица 4 - PARAmode

PARAmode

Длина фрейма

Описание

0

20 мс (160 выборок)

только HVXC

1

см. 3.1.2 и 5.1.4.3.3

только HILN

2

40 мс (320 выборок)

переключение HVXC/HILN

3

40 мс (320 выборок)

смешивание HVXC/HILN

3.1.2 Конфигурация декодера HILN

Таблица 5 - Синтаксис HILNconfig

Синтаксис

Количество битов

Мнемоника

HILNconfig ()

{

HILNquantMode;

1

uimsbf

HILNmaxNumLine;

8

uimsbf

HILNsampleRateCode;

4

uimsbf

HILNframeLength;

12

uimsbf

HILNcontMode;

2

uimsbf

}



Таблица 6 - Синтаксис HILNenexConfig ()

Синтаксис

Количество битов

Мнемоника

HILNconfig ()

{

HILNenhaLayer

1

uimsbf

if (HILNenhaLayer) {

HILNenhaQuantMode

2

uimsbf

}

}



Таблица 7 - HILNsampleRateCode

HILNsampleRateCode

sampleRate

maxFlndex

0

96000

890

1

88200

876

2

64000

825

3

48000

779

4

44100

765

5

32000

714

6

24000

668

7

22050

654

8

16000

603

9

12000

557

10

11025

544

11

8000

492

12

7350

479

13

зарезервировано

зарезервировано

14

зарезервировано

зарезервировано

15

зарезервировано

зарезервировано



Таблица 8 - linebits

HILNmaxNumLine

0

1

2..3

4..7

8..15

16..31

32..63

64..127

128..255

linebits

0

1

2

3

4

5

6

7

8



Таблица 9 - HILNcontMode

HILNcontMode

Дополнительное продолжение линии декодером (см. подпункт 5.1.4.3.1)

0

гармонические линии <-> отдельные линии и линии гармоник <-> линии гармоник

1

режим 0 плюс отдельные линии <-> отдельные линии

2

дополнительное продолжение линий декодером отсутствует

3

(зарезервировано)

Число битов улучшения частоты (fEnhbits [i]) в HILNenhaFrame () вычисляется следующим образом:

отдельная линия:

fEnhbits [i] = max (0, fEnhbitsBase [ILFreqlndex [i]] + fEnhbitsMode [HILNenhaQuantMode])

линия гармоники:

fEnhbits [i] = max (0, fEnhbitsBase [harmFreqlndex] + fEnhbitsMode [HILNenhaQuantMode] + fEnhbitsHarm [i])

Таблица 10 - fEnhbitsBase

ILFreqlndex

harmFreqlndex

fEnhbitsBase

0..159

0..1243

0

160..269

1244..1511

1

270..380

1512..1779

2

381..491

1780..2047

3

492..602

4

603..713

5

714..890

6



Таблица 11 - fEnhbitsMode

HILNenhaQuantMode

0

1

2

3

fEnhbitsMode

-3

-2

-1

0



Таблица 12 - fEnhbitsHarm

i

0

1

2..3

4..7

8..9

fEnhbitsHarm [i]

0

1

2

3

4



Таблица 13 - Константы HILN

tmbits

4

atkbits

4

decbits

4

tmEnhbits

3

atkEnhbits

2

decEnhbits

2

phasebits

5

3.2 Фрейм потока битов (sIPacketPayload)

Динамические данные для параметрического кодирования передаются как пакетная полезная нагрузка SL в элементарном потоке базового уровня и дополнительного уровня улучшения или расширения.

Параметрический базовый уровень - полезная нагрузка устройства доступа.

Для параметрического кодера в немасштабируемом режиме или для базового уровня в масштабируемом режиме HILN определяется следующая полезная нагрузка фрейма потока битов:

sIPacketPayload {

PARAframe ();

}

Параметрический уровень улучшения/расширения HILN - полезная нагрузка устройства доступа.

Чтобы проанализировать и декодировать уровень улучшения HILN, запрашивается декодируемая информация из базового уровня HILN.

Чтобы проанализировать и декодировать уровень расширения HILN, запрашивается декодируемая информация из базового уровня HILN и возможного нижнего уровня расширения HILN. Синтаксис потока битов уровней расширения HILN описывается способом, который требует, чтобы фреймы базового потока битов HILN и расширения анализировались в надлежащем порядке:

1

HILNbasicFrame ()

фрейм базового потока битов

2

HILNextFrame (1)

фрейм 1-го потока битов расширения (если доступен фрейм базового потока битов)

3

HILNextFrame (2)

фрейм 2-го потока битов расширения (если доступны фреймы базового потока и 1-го потока битов расширения)

4

и т.д.

Для уровня улучшения и уровня расширения в масштабируемом режиме HILN определяется следующая полезная нагрузка фрейма потока битов:

sIPacketPayload {

HILNenexFrame ();

}

3.2.1 Фрейм параметрического потока битов аудио

Таблица 14 - Синтаксис PARAframe ()

Синтаксис

Количество битов

Мнемоника

PARAframe ()

{

if (PARAmode == 0) {

ErHVXCframe (HVXCrate);

}

else if (PARAmode == 1) {

HILNframe ();

}

else if (PARAmode == 2) {

switchFrame ();

}

else if (PARAmode == 3) {

mixFrame ();

}

}



Таблица 15 - Синтаксис switchFrame ()

Синтаксис

Количество битов

Мнемоника

switchFrame ()

{

PARAswitch Mode;

1

if (PARAswitchMode == 0) {

uimsbf

ErHVXCdoubleframe (HVXCrate);

}

else {

HILNframe ();

}

}

В каждом фрейме выбирается один из следующих PARAswitchModes:

Таблица 16 - PARAswitchMode

PARAswitchMode

Описание

0

только HVXC

1

только HILN



Таблица 17 - Синтаксис mixFrame ()

Синтаксис

Количество битов

Мнемоника

mixFrame ()

{

PARAmixMode;

2

uimsbf

if (PARAmixMode == 0) {

ErHVXCdoubleframe (HVXCrate);

}

else if (PARAmixMode == 1) {

ILNframe ();

ErHVXCdoubleframe (2000);

}

else if (PARAmixMode == 2) {

HILNframe ();

ErHVXCdoubleframe (4000);

}

else if (PARAmixMode == 3) {

HILNframe ();

}

}

В каждом фрейме выбирается один из следующих PARAmixModes:

Таблица 18 - PARAmixMode

PARAmixMode

Описание

0

только HVXC

1

HVXC 2 Кбит/с и HILN

2

HVXC 4 Кбит/с и HILN

3

только HILN



Таблица 19 - Синтаксис HVXCdoubleframe ()

Синтаксис

Количество битов

Мнемоника

ErHVXCdoubleframe (rate)

{

if (rate> = 3000) {

ErHVXCfixframe (4000);

ErHVXCfixframe (rate);

}

else {

ErHVXCfixframe (2000);

ErHVXCfixframe (rate);

}

}

3.2.2 Фрейм потока битов HILN

Таблица 20 - Синтаксис HILNframe ()

Синтаксис

Количество битов

Мнемоника

HILNframe ()

{

numLayer = 0;

HILNbasicFrameESC0 ();

HILNbasicFrameESC1 ();

HILNbasicFrameESC2 ();

HILNbasicFrameESC3 ();

HILNbasicFrameESC4 ();

layNumLine [0] = numLine;

layPrevNumLine [0] = prevNumLine;

for (k = 0; k <prevNumLine; k ++) {

layPrevLineContFlag [0] [k] = prevLineContFlag [k];

}

}



Таблица 21 - Синтаксис HILNbasicFrameESC0 ()

Синтаксис

Количество битов

Мнемоника

HILNbasicFrameESC0 ()

{

prevNumLine = numLine;

/* prevNumLine is set to the number of lines

*/

/* in the previous frame

*/

/* prevNumLine = 0 for the first bitstream frame

*/

numLine;

linebits

uimsbf

harm Flag;

1

uimsbf

noiseFlag;

1

uimsbf

envFlag;

1

uimsbf

phaseFlag;

1

uimsbf

maxAmpllndexCoded;

4

uimsbf

maxAmpllndex = 4*maxAmpllndexCoded;

if (harmFlag) {

HARMbasicParaESC0 ();

}

if (noiseFlag) {

NOISEbasicParaESC0 ();

}

}



Таблица 22 - Синтаксис HILNbasicFrameESC1 ()

Синтаксис

Количество битов

Мнемоника

HILNbasicFrameESC1 ()

{

if (harmFlag) {

HARMbasicParaESC1 ();

}

if (noiseFlag) {

NOISEbasicParaESC1 ();

}

INDIbasicParaESC1 ();

}



Таблица 23 - Синтаксис HILNbasicFrameESC2 ()

Синтаксис

Количество битов

Мнемоника

HILNbasicFrameESC2 ()

{

INDIbasicParaESC2 ();

}



Таблица 24 - Синтаксис HILNbasicFrameESC3 ()

Синтаксис

Количество битов

Мнемоника

HILNbasicFrameESC3 ()

{

if (envFlag) {

envTmax;

tmbits

uimsbf

envRatk;

atkbits

uimsbf

envRdec

decbits

uimsbf

}

if (harmFlag) {

HARMbasicParaESC3 ();

}

if (noiseFlag) {

NOISEbasicParaESC3 ();

}

INDIbasicParaESC3 ();

if (harmFlag) {

harmFreqStretch;

1..7

HFS

}

}



Таблица 25 - Синтаксис HILNbasicFrameESC4 ()

Синтаксис

Количество битов

Мнемоника

HILNbasicFrameESC4 ()

{

if (harmFlag) {

HARMbasicParaESC4 ();

}

if (noiseFlag) {

NOISEbasicParaESC4 ();

}

INDIbasicParaESC4 ();

}



Таблица 26 - Синтаксис HARMbasicParaESC0 ()

Синтаксис

Количество битов

Мнемоника

HARMbasicParaESC0 ()

{

prevHarmAmpllndex = harmAmpllndex;

prevHarmFreqlndex = harmFreqlndex;

harmContFlag;

1

uimsbf

harmEnvFlag;

1

uimsbf

if (! harmContFlag) {

harmAmplRel;

6

uimsbf

harmAmpllndex = maxAmpllndex + harmAmplRel;

harmFreqlndex;

11

uimsbf

}

}



Таблица 27 - Синтаксис HARMbasicParaESC1 ()

Синтаксис

Количество битов

Мнемоника

HARMbasicParaESC1 ()

{

numHarmParalndex;

4

uimsbf

numHarmPara = numHarmParaTable [numHarmParalndex];

пит Harm Linelndex;

5

uimsbf

numHarmLine = numHarmLineTable [numHarmLinelndex];

if (harmContFlag) {

contHarmAmpl

3..8

DIA

harmAmpllndex = prevHarmAmpllndex + contHarmAmpi;

contHarmFreq

2..9

DHF

harmFreqlndex = prevHarmFreqlndex + contHarmFreq;

}

for (i = 0; i <2; i ++) {

harmLAR [i];

4..19

LARH1

}

}



Таблица 28 - Синтаксис HARMbasicParaESC3 ()

Синтаксис

Количество битов

Мнемоника

HARMbasicParaESC3 ()

{

for (i = 2; i <min (7, numHarmPara); i ++) {

harmLAR [i];

3..18

LARH2

}

for (i = 7; i <numHarmPara; i ++) {

harmLAR [i];

2..17

LARH3

}

}



Таблица 29 - Синтаксис HARMbasicParaESC4 ()

Синтаксис

Количество битов

Мнемоника

HARMbasicParaESC4 ()

{

if (phaseFlag &&! harmContFlag) {

numHarmPhase;

6

uimsbf

}

else {

numHarmPhase = 0;

}

for (i = 0; i <numHarmPhase; i ++) {

harmPhase [i];

phasebits

uimsbf

harmPhaseAvail [i] = 1;

}

for (i = numHarmPhase; i <numHarmLine; i ++) {

harmPhaseAvail [i] = 0;

}

}



Таблица 30 - numHarmParaTable

i

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

numHarmParaTable [i]

2

3

4

5

6

7

8

9

11

13

15

17

19

21

23

25



Таблица 31 - numHarmLineTable

i

0

1

2

3

4

5

6

7

numHarmLineTable [i]

3

4

5

6

7

8

9

10

i

8

9

10

11

12

13

14

15

numHarmLineTable [i]

12

14

16

19

22

25

29

33

i

16

17

18

19

20

21

22

23

numHarmLineTable [i]

38

43

49

56

64

73

83

94

i

24

25

26

27

28

29

30

31

numHarmLineTable [i]

107

121

137

155

175

197

222

250



Таблица 32 - Синтаксис NOISEbasicParaESC0 ()

Синтаксис

Количество битов

Мнемоника

NOISEbasicParaESC0 ()

{

prevNoiseAmpllndex = noiseAmpllndex;

noiseContFlag;

1

uimsbf

noiseEnvFlag;

1

uimsbf

if (! noiseContFlag) {

noiseAmplRel;

6

uimsbf

noiseAmpllndex = maxAmpllndex + noiseAmplRel;

}

}



Таблица 33 - Синтаксис NOISEbasicParaESC1 ()

Синтаксис

Количество битов

Мнемоника

NOISEbasicParaESC1 ()

{

if (noiseContFlag) {

contNoiseAmpl;

3..8

DIA

noiseAmpllndex = prevNoiseAmpllndex +

contNoiseAmpl;

}

numNoiseParalndex;

4

uimsbf

numNoisePara = numNoiseParaTable [numNoiseParalndex];

for (i = 0; / <min (2, numNoisePara); i ++) {

noiseLAR [i];

2..17

LARN1

}

}



Таблица 34 - Синтаксис NOISEbasicParaESC3 ()

Синтаксис

Количество битов

Мнемоника

NOISEbasicParaESC3 ()

{

for (i = 2; i <numNoisePara; i ++) {

noiseLAR [i];

1..18

LARN2

}

}



Таблица 35 - Синтаксис NOISEbasicParaESC4 ()

Синтаксис

Количество битов

Мнемоника

NOISEbasicParaESC4 ()

{

if (noiseEnvFlag) {

noiseEnvTmax;

tmbits

uimsbf

noiseEnvRatk;

atkbits

uimsbf

noiseEnvRdec;

decbits

uimsbf

}

}



Таблица 36 - numNoiseParaTable

i

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

numNoiseParaTable [i]

1

2

3

4

5

6

7

9

11

13

15

17

19

21

23

25



Таблица 37 - Синтаксис INDIbasicParaESC1 ()

Синтаксис

Количество битов

Мнемоника

INDIbasicParaESC1 ()

{

for (k = 0; k <prevNumLine; k ++) {

prevLineContFlag [k];

1

uimsbf

}

i = 0;

for (k = 0; k <prevNumLine; k ++) {

if (prevLineContFlag [k]) {

linePred [i] = k;

lineContFlag [i ++] = 1;

}

}

while (i <numLine) {

lineContFlag [i ++] = 0;

}

}



Таблица 38 - Синтаксис INDIbasicParaESC2 ()

Синтаксис

Количество битов

Мнемоника

INDIbasicParaESC2 ()

{

lastNLFreq = 0;

for (i = 0; i <prevNumLine; 1 ++) {

prevlLFreqlndex [i] = ILFreqlndex [i];

prevlLAmplIndex [i] = ILAmpllndex [i];

}

for (i = 0; i <numLine; 1 ++) {

if (envFlag) {

lineEnvFlag [i];

1

uimsbf

}

}

for (i = 0; i <numLine; i ++) {

if (! lineContFlag [i]) {

if (numLine-1-i <7) {

ILFreqlnc [i];

0..14

SDC

/* SDCdecode (maxFindexlastNLFreq, */

/* sdclLFTable [numLine-1-i]) */

}

else {

ILFreqlnc [i];

0..14

SDC

/* SDCdecode (maxFindexlastNLFreq, */

/* sdclLFTable [7]) */

}

ILFreqlndex [i] = lastNLFreq + ILFreqlnc [i];

lastNLFreq = ILFreqlndex [i];

если (HILNquantMode) {

ILAmplRel [i];

/* SDCdecode (50, sdclLATable) */

4..10

SDC

ILAmpllndex [i] = maxAmpllndex + ILAmplRel [i];

}

else {

ILAmplRel [i];

3..9

SDC

/* SDCdecode (25, sdclLATable) */

ILAmpllndex [i] = maxAmpllndex +

2*ILAmplRel [i];

}

}

}

}



Таблица 39 - Синтаксис INDIbasicParaESC3 ()

Синтаксис

Количество битов

Мнемоника

INDIbasicParaESC3 ()

{

for (i = 0; i <numLine; i ++) {

if (lineContFlag [i]) {

DILFreq [i];

2..10

DIF

ILFreqlndex [i] = prevlLFreqlndex [linePred [i]] +

DILFreq [i];

DILAmpl[i];

3..8

DIA

ILAmpllndex [i] = prevlLAmpllndex [linePred [i]] +

DILAmpl[i];

}

}

}



Таблица 40 - Синтаксис INDIbasicParaESC4 ()

Синтаксис

Количество битов

Мнемоника

INDIbasicParaESC4 ()

{

if (phaseFlag) {

numLinePhase;

linebits

uimsbf

}

else {

numLinePhase = 0;

}

j = 0;

for (i = 0; i <numLine; i ++) {

if (! linePred [i] && j <numLinePhase) {

linePhase [i];

phasebits

uimsbf

linePhaseAvail [i] = 1;

j ++;

}

else {

linePhaseAvail [i] = 0;

}

}

}



Таблица 41 - Синтаксис HILNenexFrame ()

Синтаксис

Количество битов

Мнемоника

HILNenexFrame ()

{

HILNenhaLayer value in в ParametricSpecificConfig () */

/* thisElementary Stream must be used here! */

if (HILNenhaLayer) {

HILNenhaFrame ();

}

else {

numLayer ++;

HILNextFrame (numLayer);

}

}



Таблица 42 - Синтаксис HILNenhaFrame ()

Синтаксис

Количество битов

Мнемоника

HILNenhaFrame ()

{

if (en vFlag) {

envTmaxEnha;

tmEnhbits

uimsbf

envRatkEnha;

atkEnhbits

uimsbf

envRdecEnha;

decEnhbits

uimsbf

}

if (harmFlag) {

HARMenhaPara ();

}

INDIenhaPara ();

}



Таблица 43 - Синтаксис HARMenhaPara ()

Синтаксис

Количество битов

Мнемоника

HARMenhaPara ()

{

for (i = 0; i <min (numHarmLine, 10); i ++) {

harmFreqEnha [i];

fEnhbits [i]

uimsbf

harmPhase [I];

phasebits

uimsbf

}

}



Таблица 44 - Синтаксис INDIenhaPara ()

Синтаксис

Количество битов

Мнемоника

INDIenhaPara ()

{

for (i = 0; 1 <numLine; i ++) {

lineFreqEnha [i];

fEnhbits [i]

uimsbf

linePhase [i];

phasebits

uimsbf

}

}



Таблица 45 - Синтаксис HILNextFrame ()

Синтаксис

Количество битов

Мнемоника

HILNextFrame (numLayer)

{

layPrevNumLine [numLayer] = layNumLine [numLayer];

/* layPrevNumLine [numLayer] = 0 for the */

/* first bitstream frame */

addNumLine [numLayer];

linebits

uimsbf

if (phaseFlag) {

layNumLinePhase [numLayer];

linebits

uimsbf

}

layNumLine [numLayer] = layNumLine [numLayer-1] +

addNumLine [numLayer];

for (k = 0; к <layPrevNumLine [numLayer-1]; к ++) {

if (layPrevLineContFlag [numLayer-1] [k]) {

layPrevLineContFlag [numLayer] [k] = 1;

}

else {

layPrevLineContFlag [numLayer] [k];

1

uimsbf

}

}

for (k = layPrevNumLine [numLayer-1];

k <layPrevNumLine [numLayer]; k ++) {

layPrevLineContFlag [numLayer] [k];

1

uimsbf

}

i = layNumLine [numLayer-1];

for (k = 0; k <layPrevNumLine [numLayer-1]; k ++) {

if (! layPrevLineContFlag [numLayer-1] [k] &&

layPrevLineContFlag [numLayer] [k]) {

linePred [i] = k;

lineContFlag [i ++] = 1

}

}

for (k = layPrevNumLine [numLayer-1];

k <layPrevNumLine [numLayer]; k ++) {

if (layPrevLineContFlag [numLayer] [k]) {

linePred [I] = k;

lineContFlag [i ++] = 1;

}

}

while (i <layNumLine [numLayer]) {

lineContFlag [i ++] = 0;

}

INDIextPara (numLayer);

if (phaseFlag) {

INDIextPhasePara (numLayer);

}

}


Таблица 46 - Синтаксис INDIextPara ()

Синтаксис

Количество битов

Мнемоника

INDIextPara (numLayer)

{

lastNLFreq = 0;

for (i = layPrevNumLine [numLayer-1];

i <layPrevNumLine [numLayer]; i ++) {

prevlLFreqlndex [i] = ILFreqlndex [i];

prevlLAm pi Index [i] = ILAmpllndex [i];

}

for (i = layNumLine [numLayer-1];

i <layNumLine [numLayer]; i ++) {

if (envFlag) {

lineEnvFlag [i];

1

uimsbf

}

if (lineContFlag [i]) {

DILFreq [i];

2..10

DIF

ILFreqlndex [i] = prevlLFreqlndex [HnePred [i]] + DILFreq [i];

DILAmpl [i];

3..8

DIA

ILAmpllndex [i] = prevlLAmpllndex [HnePred [i]] +

DILAmpl [i];

}

else {

if (layNumLine [numLayer] - 1-i <7) {

ILFreqlnc [i];

0..14

SDC

/* SDCdecode (maxFindexlastNLFreq, */

/* sdclLFTable [layNumLine [numLayer] - 1-i]) */

}

else {

ILFreqlnc [i];

0..14

SDC

/* SDCdecode (maxFindexlastNLFreq, */

/* sdclLFTable [7]) */

}

ILFreqlndex [i] = lastNLFreq + ILFreqlnc [i];

lastNLFreq = ILFreqlndex [i];

if (HILNquantMode) {

ILAmplRel [i];

4..10

SDC

/* SDCdecode (50, sdclLATable) */

ILAmpllndex [i] = maxAmpllndex + ILAmplRel [i];

}

else {

ILAmplRel [i];

3..9

SDC

/* SDCdecode (25, sdclLATable) */

ILAmpllndex [i] = maxAmpllndex + 2*ILAmplRel [i];

}

}

}



Таблица 47 - Синтаксис INDIextPhasePara ()

Синтаксис

Количество битов

Мнемоника

INDIextPhasePara (numLayer)

{

j = 0;

for (i = layNumLine[numLayer-1]; i < layNumLine[numLayer];

i++; {

if (! linePred [i] && j < layNumLinePhase[numLayer]) {

linePhase [i];

phasebits

uimsbf

linePhaseAvail [i] = 1;

j++;

}

else {

linePhaseAvail [i] = 0;

}

}

}

3.2.3 Сборники кодов HILN

Таблица 48 - Код LARH1 (harmLAR [0..1])

Кодовая комбинация

harmLAR [i]

Кодовая комбинация

harmLAR [i]

1000000000000000100

-6,350

0100

0,050

1000000000000000101

-6,250

0101

0,150

1000000000000000110

-6,150

0110

0,250

1000000000000000111

-6,050

0111

0,350

100000000000000100

-5,950

00100

0,450

100000000000000101

-5,850

00101

0,550

100000000000000110

-5,750

00110

0,650

100000000000000111

-5,650

00111

0,750

10000000000000100

-5,550

000100

0,850

10000000000000101

-5,450

000101

0,950

10000000000000110

-5,350

000110

1,050

10000000000000111

-5,250

000111

1,150

1000000000000100

-5,150

0000100

1,250

1000000000000101

-5,050

0000101

1,350

1000000000000110

-4,950

0000110

1,450

1000000000000111

-4,850

0000111

1,550

100000000000100

-4,750

00000100

1,650

100000000000101

-4,650

00000101

1,750

100000000000110

-4,550

00000110

1,850

100000000000111

-4,450

00000111

1,950

10000000000100

-4,350

000000100

2,050

10000000000101

-4,250

000000101

2,150

10000000000110

-4,150

000000110

2,250

10000000000111

-4,050

000000111

2,350


Окончание таблицы 48

Кодовая комбинация

harmLAR [i]

Кодовая комбинация

harmLAR [i]

1000000000100

-3,950

0000000100

2,450

1000000000101

-3,850

0000000101

2,550

1000000000110

-3,750

0000000110

2,650

1000000000111

-3,650

0000000111

2,750

100000000100

-3,550

00000000100

2,850

100000000101

-3,450

00000000101

2,950

100000000110

-3,350

00000000110

3,050

100000000111

-3,250

00000000111

3,150

10000000100

-3,150

000000000100

3,250

10000000101

-3,050

000000000101

3,350

10000000110

-2,950

000000000110

3,450

10000000111

-2,850

000000000111

3,550

1000000100

-2,750

0000000000100

3,650

1000000101

-2,650

0000000000101

3,750

1000000110

-2,550

0000000000110

3,850

1000000111

-2,450

0000000000111

3,950

100000100

-2,350

00000000000100

4,050

100000101

-2,250

00000000000101

4,150

100000110

-2,150

00000000000110

4,250

100000111

-2,050

00000000000111

4,350

10000100

-1,950

000000000000100

4,450

10000101

-1,850

000000000000101

4,550

10000110

-1,750

000000000000110

4,650

10000111

-1,650

000000000000111

4,750

1000100

-1,550

0000000000000100

4,850

1000101

-1,450

0000000000000101

4,950

1000110

-1,350

0000000000000110

5,050

1000111

-1,250

0000000000000111

5,150

100100

-1,150

00000000000000100

5,250

100101

-1,050

00000000000000101

5,350

100110

-0,950

00000000000000110

5,450

100111

-0,850

00000000000000111

5,550

10100

-0,750

000000000000000100

5,650

10101

-0,650

000000000000000101

5,750

10110

-0,550

000000000000000110

5,850

10111

-0,450

000000000000000111

5,950

1100

-0,350

0000000000000000100

6,050

1101

-0,250

0000000000000000101

6,150

1110

-0,150

0000000000000000110

6,250

1111

-0,050

0000000000000000111

6,350


Таблица 49 - Код LARH2 (harmLAR [2..6])

Кодовая комбинация

harmLAR[.]

Кодовая комбинация

harmLAR[.]

100000000000000010

-4,725

010

0,075

100000000000000011

-4,575

011

0,225

10000000000000010

-4,425

0010

0,375

10000000000000011

-4,275

0011

0,525

1000000000000010

-4,125

00010

0,675

1000000000000011

-3,975

00011

0,825

100000000000010

-3,825

000010

0,975

100000000000011

-3,675

000011

1,125

10000000000010

-3,525

0000010

1,275

10000000000011

-3,375

0000011

1,425

1000000000010

-3,225

00000010

1,575

1000000000011

-3,075

00000011

1,725

100000000010

-2,925

000000010

1,875

100000000011

-2,775

000000011

2,025

10000000010

-2,625

0000000010

2,175

10000000011

-2,475

0000000011

2,325

1000000010

-2,325

00000000010

2,475

1000000011

-2,175

00000000011

2,625

100000010

-2,025

000000000010

2,775

100000011

-1,875

000000000011

2,925

10000010

-1,725

0000000000010

3,075

10000011

-1,575

0000000000011

3,225

1000010

-1,425

00000000000010

3,375

1000011

-1,275

00000000000011

3,525

100010

-1,125

000000000000010

3,675

100011

-0,975

000000000000011

3,825

10010

-0,825

0000000000000010

3,975

10011

-0,675

0000000000000011

4,125

1010

-0,525

00000000000000010

4,275

1011

-0,375

00000000000000011

4,425

110

-0,225

000000000000000010

4,575

111

-0,075

000000000000000011

4,725



Таблица 50 - Код LARH3 (harmLAR [7..24])

Кодовая комбинация

harmLAR[.]

Кодовая комбинация

harmLAR[.]

10000000000000001

-2,325

01

0,075

1000000000000001

-2,175

001

0,225

100000000000001

-2,025

0001

0,375

10000000000001

-1,875

00001

0,525

1000000000001

-1,725

000001

0,675

100000000001

-1,575

0000001

0,825


Окончание таблицы 50

Кодовая комбинация

harmLAR[.]

Кодовая комбинация

harmLAR[.]

10000000001

-1,425

00000001

0,975

1000000001

-1,275

000000001

1,125

100000001

-1,125

0000000001

1,275

10000001

-0,975

00000000001

1,425

1000001

-0,825

000000000001

1,575

100001

-0,675

0000000000001

1,725

10001

-0,525

00000000000001

1,875

1001

-0,375

000000000000001

2,025

101

-0,225

0000000000000001

2,175

11

-0,075

00000000000000001

2,325


Таблица 51 - Код LARN1 (noiseLAR [0, 1])

Кодовая комбинация

noiseLAR[.]

Кодовая комбинация

noiseLAR[.]

10000000000000001

-4,65

01

0,15

1000000000000001

-4,35

001

0,45

100000000000001

-4,05

0001

0,75

10000000000001

-3,75

00001

1,05

1000000000001

-3,45

000001

1,35

100000000001

-3,15

0000001

1,65

10000000001

-2,85

00000001

1,95

1000000001

-2,55

000000001

2,25

100000001

-2,25

0000000001

2,55

10000001

-1,95

00000000001

2,85

1000001

-1,65

000000000001

3,15

100001

-1,35

0000000000001

3,45

10001

-1,05

00000000000001

3,75

1001

-0,75

000000000000001

4,05

101

-0,45

0000000000000001

4,35

11

-0,15

00000000000000001

4,65


Таблица 52 - Код LARN2 (noiseLAR [2..24])

Кодовая комбинация

noiseLAR[.]

Кодовая комбинация

noiseLAR[.]

110000000000000001

-6,35

101

0,35

11000000000000001

-5,95

1001

0,75

1100000000000001

-5,55

10001

1,15

110000000000001

-5,15

100001

1,55

11000000000001

-4,75

1000001

1,95

1100000000001

-4,35

10000001

2,35

110000000001

-3,95

100000001

2,75

11000000001

-3,55

1000000001

3,15

1100000001

-3,15

10000000001

3,55


Окончание таблицы 52

Кодовая комбинация

noiseLAR[.]

Кодовая комбинация

noiseLAR[.]

110000001

-2,75

100000000001

3,95

11000001

-2,35

1000000000001

4,35

1100001

-1,95

10000000000001

4,75

110001

-1,55

100000000000001

5,15

11001

-1,15

1000000000000001

5,55

1101

-0,75

10000000000000001

5,95

111

-0,35

100000000000000001

6,35

0

0,00

Таблица 53 - Код DIA

Кодовая комбинация

Значение

Кодовая комбинация

Значение

111 1 1111

-25

001

1

111 1 1110

-24

011 0

2

111 1 1101

-23

100 0

3

111 1 xxxx

-y

101 0 0

4

111 1 0001

-11

101 0 1

5

111 1 0000

-10

110 0 00

6

110 1 11

-9

110 0 01

7

110 1 10

-8

110 0 10

8

110 1 01

-7

110 0 11

9

110 1 00

-6

111 0 0000

10

101 1 1

-5

111 0 0001

11

101 1 0

-4

111 0 xxxx

у

100 1

-3

111 0 1101

23

011 1

-2

111 0 1110

24

010

-1

111 0 1111

25

000

0



Таблица 54 - Код DIF

Кодовая комбинация

Значение

Кодовая комбинация

Значение

11 11 1 11111

-42

01 0

1

11 11 1 11110

-41

10 0 0

2

11 11 1 11101

-40

10 0 1

3

11 11 1 xxxxx

-y

11 00 0

4

11 11 1 00001

-12

11 01 0 0

5

11 11 1 00000

-11

11 01 0 1

6

11 10 1 11

-10

11 10 0 00

7

11 10 1 10

-9

11 10 0 01

8

11 10 1 01

-8

11 10 0 10

9

11 10 1 00

-7

11 10 0 11

10

11 01 1 1

-6

11 11 0 00000

11


Окончание таблицы 54

Кодовая комбинация

Значение

Кодовая комбинация

Значение

11 01 1 0

-5

11 11 0 00001

12

11 00 1

-4

11 11 0 xxxxx

y

10 1 1

-3

11 11 0 11101

40

10 1 0

-2

11 11 0 11110

41

01 1

-1

11 11 0 11111

42

00

0


Таблица 55 - Код DHF

Кодовая комбинация

Значение

Кодовая комбинация

Значение

11 1 111111

-69

01 0

1

11 1 111110

-68

10 0 00

2

11 1 111101

-67

10 0 01

3

11 1 xxxxxx

-y

10 0 10

4

11 1 000001

-7

10 0 11

5

11 1 000000

-6

11 0 000000

6

10 1 11

-5

11 0 000001

7

10 1 10

-4

11 0 xxxxxx

y

10 1 01

-3

11 0 111101

67

10 1 00

-2

11 0 111110

68

01 1

-1

11 0 111111

69

00

0



Таблица 56 - Код HFS

Кодовая комбинация

Значение

Кодовая комбинация

Значение

1 1 1 1111

-17

1 0 0

1

1 1 1 1110

-16

1 0 1 0000

2

1 1 1 1101

-15

1 0 1 0001

3

1 1 1 xxxx

-у

1 0 1 xxxx

у

1 1 1 0001

-3

1 0 1 1101

15

1 1 1 0000

-2

1 0 1 1110

16

1 1 0

-1

1 0 1 1111

17

0

0

Примечания к таблицам 53-56 - Группировка битов в пределах кодовой комбинации (например, "1 1 1 1111") обеспечивается только для лучшей удобочитаемости. Кодовые комбинации, не перечисленные явно в сборниках кодов (например, "1 1 1 хххх"), определяются постепенным увеличением неявной части кодовой комбинации "хххх" (uimsbf) и величины "у" соответствующего значения. Во всех случаях кодовые комбинации и значения для двух самых маленьких и трех самых больших величин перечисляются явно.

3.2.4 HILN SubDivisionCode (SDC)

Код SubDivisionCode (SDC) является алгоритмически сгенерированным кодом изменяемой длины, основанным на данной таблице и данном числе различных кодовых комбинаций.

Идея этой схемы кодирования заключается в разделении функции плотности вероятности на две части, которые представляют равную вероятность. Один бит передается, чтобы определять расположение части, значение которой будет кодировано. Это разделение повторяется, пока ширина части не единица, и затем ее позиция равна позиции кодируемого значения. Позиции границ извлекаются из таблицы 32 квантованных значений с фиксированной точкой. Помимо этой таблицы (параметр "tab") также необходимо число различных кодовых комбинаций (параметр "k").

Следующая функция С SDCDecode (k, tab) вместе с этими 9 таблицами sdclLATable [32] и sdclLFTable [8] [32] описывает декодирование. Функция GetBit () возвращает следующий бит в потоке.

int sdclLATable [32] = {

0, 13, 27, 41, 54, 68, 82, 96, 110, 124, 138, 152, 166, 180, 195, 210, 225, 240, 255, 271, 288, 305, 323, 342,361,383, 406, 431, 460, 494, 538, 602

};

int sdclLFTable [8] [32] = {

{

0, 53, 87, 118, 150, 181, 212, 243, 275, 306, 337, 368, 399, 431, 462, 493, 524, 555, 587, 618, 649, 680, 711, 743, 774, 805, 836, 867, 899, 930, 961, 992},

{

0, 34, 53, 71, 89, 106, 123, 141, 159, 177, 195, 214, 234, 254, 274, 296, 317, 340, 363, 387, 412, 438, 465, 494, 524, 556, 591, 629, 670, 718, 774, 847},

{

0, 26, 41, 54, 66, 78, 91, 103, 116, 128, 142, 155, 169, 184, 199, 214, 231, 247, 265, 284, 303, 324, 346, 369, 394, 422, 452, 485, 524, 570, 627, 709},

{

0, 23, 35, 45, 55, 65, 75, 85, 96, 106, 117, 128, 139, 151, 164, 177, 190, 204, 219, 235, 252, 270, 290, 311, 334, 360, 389, 422, 461, 508, 571, 665},

{

0, 20, 30, 39, 48, 56, 64, 73, 81, 90, 99, 108, 118, 127, 138, 149, 160, 172, 185, 198, 213, 228, 245, 263, 284, 306, 332, 362, 398, 444, 507, 608},

{

0, 18, 27, 35, 43, 50, 57, 65, 72, 79, 87, 95, 104, 112, 121, 131, 141, 151, 162, 174, 187, 201, 216, 233, 251, 272, 296, 324, 357, 401, 460, 558},

{

0, 16, 24, 31, 38, 45, 51, 57, 64, 70, 77, 84, 91, 99, 107, 115, 123, 132, 142, 152, 163, 175, 188, 203, 219, 237, 257, 282, 311, 349, 403, 493},

{

0, 12, 19, 25, 30, 35, 41, 46, 51, 56, 62, 67, 73, 79, 85, 92, 99, 106, 114, 122, 132, 142, 153, 165, 179, 195, 213, 236, 264, 301, 355, 452}

};

int SDCDecode (int k, int * tab)

{

{int *pp;

int g, dp, min, max;

min = 0;

max = k-1;

pp = tab+16;

dp = 16;

while (min ! = max);

{

If (dp) g = (k * (* pp)) >> 10; else g = (max + min) >> 1;

dp >> = 1;

if (GetBit() = = 0) {pp - = dp; max = g;} else {pp+ = dp; min = g + 1;}

}

return max;

}

4 Семантика потока битов

4.1 Конфигурация декодера (ParametricSpecificConfig)

Элементы потока битов:

isBaseLayer

Одноразрядный идентификатор, представляющий, является ли соответствующий уровень базовым уровнем (1) или уровнем улучшения или расширения (0).

4.1.1 Конфигурация параметрического декодера аудио

Элементы потока битов:

PARAmode

2-битовое поле, указывающее режим работы параметрического кодера.

PARAextensionFlag

Флаг, указывающий на присутствие данных MPEG-4 версии 3 (для будущего использования).

4.1.2 Конфигурация декодера HILN

Элементы потока битов:

HILNquantMode

1-битовое поле, указывающее на режим квантователя с отдельной линией.

HILNmaxNumLine

8-битовое поле, указывающее максимальное количество отдельных линий в фрейме потока битов. Это также определяет размер поля linebits.

HILNsampleRateCode

4-битовое поле, указывающее частоту дискретизации, используемую для декодирования параметра HILN.

HILNframeLength

12-битовое поле, указывающее длину фрейма HILN, в выборках при частоте дискретизации, указанной HILNsampleRateCode.

HILNcontMode

2-битовое поле, указывающее режим продолжения дополнительной линии декодера.

HILNenhaLayer

Флаг, указывающий, содержит ли этот поток Elementaru Stream уровень улучшения или уровень расширения.

HILNenhaQuantMode

2-битовое поле, указывающее режим квантователя с улучшением частоты.

4.2 Фрейм потока битов (sIPacketPayload)

4.2.1 Фрейм параметрического потока битов аудио

Элементы потока битов:

PARAswitchMode

Флаг, указывающий, какой инструмент кодирования используется в текущем фрейме потока битов с переключением HVXC/HILN.

PARAmixMode

2-битовое поле, указывающее, какие инструменты кодирования используются в текущем фрейме потока битов со смешиванием HVXC/HILN.

4.2.2 Фрейм потока битов HILN

Элементы потока битов:

numLine

Поле, указывающее число отдельных линий в текущем фрейме.

harmFlag

Флаг, указывающий на присутствие данных гармонических линий в текущем фрейме.

noiseFlag

Флаг, указывающий на присутствие данных шумовых компонентов в текущем фрейме.

phaseFlag

Флаг, указывающий на присутствие данных фазы начала линии в текущем фрейме.

numLinePhase

Поле, указывающее число отдельных линий с фазой запуска в текущем фрейме.

maxAmpllndexCoded

Поле, указывающее максимальную амплитуду нового компонента сигнала в текущем фрейме.

envFlag

Флаг, указывающий на присутствие данных огибающей в текущем фрейме.

envTmax

Кодированный параметр огибающей: время максимума.

envRatk

Кодированный параметр огибающей: скорость атаки.

envRdec

Кодированный параметр огибающей: скорость затухания.

prevLineContFlag [k]

Флаг, указывающий, что k-я отдельная линия предыдущего фрейма продолжается в текущем фрейме.

numHarmParalndex

Поле, указывающее на число параметров LPC гармонических линий в текущем фрейме.

numHarmLinelndex

Поле, указывающее на число гармонических линий в текущем фрейме.

harmContFlag

Флаг, указывающий, что гармонические линии продолжаются из предыдущего фрейма.

numHarmPhase

Поле, указывающее число гармонических линий с фазой старта в текущем фрейме.

harmEnvFlag

Флаг, указывающий, что к гармоническим линиям применяется огибающая амплитуды.

contHarmAmpI

Кодированное изменение амплитуды гармонических линий.

contHarmFreq

Кодированное изменение основной частоты гармонических линий.

harmAmplRel

Кодированная относительная амплитуда гармонических линий.

harmFreqlndex

Кодированная основная частота гармонических линий.

harmFreqStretch

Кодированный параметр растяжения частоты гармонических линий.

harmLAR [i]

Кодированные параметры LAR LPC гармонических линий.

harmPhase [i]

Кодированная фаза i-й гармонической линии.

numNoiseParalndex

Поле, указывающее на число шумовых параметров LPC в текущем фрейме.

noiseContFlag

Флаг, указывающий, что шум продолжается из предыдущего фрейма.

noiseEnvFlag

Флаг, указывающий, что данные огибающей шума присутствуют в текущем фрейме.

contNoiseAmpI

Кодированное изменение амплитуды шума.

noiseAmplRel

Кодированная относительная амплитуда шума.

noiseEnvTmax

Кодированный параметр огибающей шума: время максимума.

noiseEnvRatk

Кодированный параметр огибающей шума: темп нарастания.

noiseEnvRdec

Кодированный параметр огибающей шума: темп спада.

noiseLAR [i]

Кодированные параметры LAR LPC шума.

lineEnvFlag [i]

Флаг, указывающий, что огибающая амплитуды применяется к i-й отдельной линии.

DILFreq [i]

Кодированное изменение частоты i-й отдельной линии.

DILAmpI [i]

Кодированное изменение амплитуды i-й отдельной линии.

ILFreqlnc [i]

Кодированный инкремент частоты i-й отдельной линии.

ILAmplRel [i]

Кодированная относительная амплитуда i-й отдельной линии.

linePhase [i]

Кодированная фаза i-й отдельной линии.

envTmaxEnha

Кодированный параметр улучшения огибающей: время максимума.

envRatkEnha

Кодированный параметр улучшения огибающей: темп нарастания.

envRdecEnha

Кодированный параметр улучшения огибающей: темп затухания.

harmFreqEnha [i]

Кодированное улучшение частоты линии i-й гармоники.

lineFreqEnha [i]

Кодированное улучшение частоты i-й отдельной линии.

addNumLine [i]

Поле, указывающее число отдельных линий в уровне расширения i текущего фрейма.

layNumLinePhase [i]

Поле, указывающее число отдельных линий с фазой старта в уровне расширения i текущего фрейма.

layPrevLineContFlag [i] [k]

Флаг, указывающий, что k-я отдельная линия предыдущего фрейма продолжается в уровне расширения i текущего фрейма.

Элементы справки:

numLayer

Число доступных уровней расширения (0, если доступен только базовый уровень).

layNumLine [i]

Общее количество отдельных линий в текущем фрейме, которые переданы в базовом уровне и первых i уровнях расширения.

prevNumLine

Число отдельных линий в предыдущем фрейме.

layPrevNumLine [i]

Общее количество отдельных линий в предыдущем фрейме, переданных в базовом уровне и первых i уровнях расширения.

maxAmpllndex

Максимальная амплитуда нового компонента сигнала в текущем фрейме.

linePred [i]

Индекс предшествующего элемента в предыдущем фрейме для i-й отдельной линии в текущем фрейме.

lineContFlag [i]

Флаг, указывающий, что линия i в текущем фрейме продолжается из предыдущего фрейма.

питHarmPara

Число параметров LPC гармонической линии в текущем фрейме.

numHarmLine

Число гармонических линий в текущем фрейме.

harmAmpllndex

Индекс амплитуды гармонических линий в текущем фрейме.

harmFreqlndex

Индекс основной частоты гармонических линий в текущем фрейме.

prevHarmAmpllndex

Индекс амплитуды гармонических линий в предыдущем фрейме.

prevHarmFreqlndex

Индекс основной частоты гармонических линий в предыдущем фрейме.

harmPhaseAvail [i]

Флаг, указывающий, что доступна информация о стартовой фазе для i-й гармонической линии.

numNoisePara

Число параметров LPC шума в текущем фрейме.

noiseAmpllndex

Индекс амплитуды шума в текущем фрейме.

prevNoiseAmpllndex

Индекс амплитуды шума в предыдущем фрейме.

lastNLFreq

Аккумулятор инкремента частоты отдельной линии.

ILFreqlndex [i]

Индекс частоты i-й отдельной линии в текущем фрейме.

ILAmpllndex [i]

Индекс амплитуды i-й отдельной линии в текущем фрейме.

prevlLFreqlndex [i]

Индекс частоты i-й отдельной линии в предыдущем фрейме.

prevlLAmpllndex [i]

Индекс амплитуды i-й отдельной линии в предыдущем фрейме.

linePhaseAvail [i]

Флаг, указывающий, что доступна информация о стартовой фазе для i-й отдельной линии.

linebits

Число битов для numLine.

tmbits

Число битов для envTmax.

atkbits

Число битов для encRatk.

decbits

Число битов для envRdec.

tmEnhbits

Число битов для envTmaxEnha.

atkEnhbits

Число битов для encRatkEnha.

decEnhbits

Число битов для envRdecEnha.

fEnhbits [i]

Число битов для lineFreqEnha [i] и harmFreqEnha [i].

phasebits

Число битов для linePhase и harmPhase.

5 Инструменты параметрического декодера

5.1 Инструменты декодера HILN

Декодер гармонических и отдельных линий и шум (HILN) используют ряд параметров, которые кодируются в потоке битов, чтобы описать аудиосигнал.

Поддерживаются три различных модели сигнала (таблица 57).

Таблица 57 - Модели сигнала HILN

Модель сигнала

Описание

Существенные параметры

Гармонические линии

Группа синусоидальных сигналов с общей основной частотой

Основная частота и амплитуды линий спектра

Отдельные линии

Синусоидальные сигналы

Частота и амплитуда отдельных линий спектра

Шум

Шумовой сигнал спектральной формы

Форма спектра и энергия шума

Декодер HILN сначала восстанавливает эти параметры из потока битов с помощью ряда инструментов декодирования, а затем синтезирует аудиосигнал на базе этих параметров, используя ряд инструментов синтезатора:

декодер гармонической линии;

декодер отдельной линии;

декодер шума;

синтезатор гармонических и отдельных линий;

синтезатор шума.

Инструменты декодера HILN восстанавливают из потока битов параметры гармонических и отдельных линий (частота, амплитуда) и шум (форма спектра), а также возможные параметры огибающей.

Инструменты синтезатора HILN воссоздают один фрейм аудиосигнала, основываясь на параметрах, декодированных инструментами декодера HILN для текущего фрейма потока битов.

Выборки декодируемого аудиосигнала имеют полномасштабный диапазон [-32768, 32767], и возможные выбросы должны быть ограничены до этих значений.

Декодер HILN поддерживает широкий диапазон длин фрейма и частот дискретизации. Масштабируя длину фрейма синтезатора с произвольным коэффициентом, в декодере достигается доступность функциональности с изменением скорости. Масштабируя частоты линий и передискретизируя шумовой сигнал с произвольным коэффициентом, в декодере обеспечивается доступность функциональности изменения шага.

Декодер HILN может работать в двух различных режимах, как основной декодер и как улучшенный декодер. Основной декодер, который используется для нормальной работы, только оценивает информацию, доступную в элементах потока битов HILNbasicFrame (), чтобы восстановить аудиосигнал. Чтобы позволить большую масштабируемость шага в комбинации с другими инструментами кодера, должны быть переданы дополнительные элементы потока битов HILNenhaFrame (), и декодер HILN должен работать в расширенном режиме, который использует информацию как HILNbasicFrame (), так и HILNenhaFrame (). Этот режим восстанавливает аудиосигнал с четко определенными фазовыми соотношениями, который может быть объединен с остаточным сигналом, кодированным при более высоких скоростях передачи, используя кодер улучшения. Если декодер HILN используется таким образом в качестве ядра для масштабируемого кодера, никакой шумовой сигнал не должен быть синтезирован для сигнала, который подается декодеру улучшения.

В силу представления параметрического сигнала, используемого параметрическим кодером HILN, это хорошо подходит для приложений, требующих кодирование с масштабируемой скоростью передачи. Кодирование HILN с масштабируемой скоростью передачи выполняется путем добавления к данным, закодированным в HILNbasicFrame () основного потока битов, данных, закодированных в одном или более HILNextFrame () одного или нескольких потоков битов расширения, переданных, как дополнительные элементарные потоки.

5.1.1 Декодер гармонический линии

5.1.1.1 Описание инструмента

Этот инструмент декодирует параметры гармонических линий, переданных в потоке битов.

5.1.1.2 Определения

prevNumHarmPara

Число параметров LPC гармонической линии в предыдущем фрейме.

harmLPCPara [i]

Параметр LPC гармонической линии i в текущем фрейме (LARs для спектра гармонического тона).

prevHarmLPCPara [i]

Параметр LPC гармонической линии i в предыдущем фрейме (LARs для спектра гармонического тона).

hFreq

Основная частота гармонических линий.

hStretch

Растяжение частоты гармонических линий.

harmAmpI

Амплитуда гармонического тона.

harmPwr

Мощность гармонического тона.

hLineAmpI [i]

Амплитуда i-й гармонической линии.

hLineFreq [i]

Частота i-й гармонической линии, Гц.

hLineAmplEnh [i]

Улучшенная амплитуда i-й гармонической линии.

hLineFreqEnh [i]

Улучшенная частота i-й гармонической линии, Гц.

hLinePhaseEnh [i]

Фаза i-й гармонической линии (в радианах).

ha [i]

Немасштабированная амплитуда i-й гармонической линии.

r [i]

Коэффициенты отражения LPC.

h [i]

Импульсная характеристика LPC.

H (i)

Системная функция LPC.

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

Если harmFlag устанавливается и, таким образом данные HARMbasicPara (), а в режиме улучшения и данные HARMenhaPara (), доступны в текущем фрейме, параметры гармонических линий декодируются и деквантуются следующим образом.

5.1.1.3.1 Основной декодер

Гармонический тон представляется его основной частотой, его энергией и рядом LPC-параметров.

Сначала восстанавливаются параметры harmNumPara LAR. Когда устанавливается harmContFlag, используется прогноз из предыдущего фрейма.

Float harmLPCMean [25] = {5,0, -1,5, 0,0, 0,0, 0,0..., 0,0};

Float harmPredCoeff [25] = {0,75, 0,75, 0,5, 0,5, 0,5..., 0,5};

for (i = 0; i <numHarmPara; i ++) {

if (i <prevNumHarmPara && harmContFlag)

pred = harmLPCMean [i] +

(prevHarmLPCPara [i]-harmLPCMean [i]) *harmPredCoeff [i];

else

pred = harmLPCMean [i];

harmLPCPara [i] = pred + harmLAR [i];

}

Параметры, необходимые в следующем фрейме, сохраняются в межфреймовой памяти:

prevNumHarmPara = numHarmPara;

for (i = 0; / <numHarmPara; i ++)

prevHarmLPCPara [i] = harmLPCPara [i];

Основная частота и протяжение гармонических линий являются деквантованными:

hFreq = 20 * exp (log (4000./20) * (harmFreqlndex+0,5) / 2048,0);

hStretch = harmFreqStretch / 16000,0;

Амплитуда и мощность гармонического тона деквантуются следующим образом:

harmArnpl = 32768 * pow (10, -1,5 * (harmAmpllndex+0,5)/20);

harmPwr = harmAmpl*harmAmpl;

Флаги harmEnvFlag и harmContFlag не требуют дальнейшей деквантизации; они непосредственно передаются на инструмент синтезатора.

Параметры LPC передаются в форме "Логарифмических коэффициентов области" (LAR). После декодирования параметров частоты и амплитуды частей harmNumLine гармонического тона вычисляются следующим образом.

Частоты гармонических линий вычисляются так:

for (i = 0; i <numHarmLine; i ++)
hLineFreq [i] = hFreq * (i+
1) * (1 + hStretch * (i+1)).

Параметры LPC представляют llR-фильтр. Амплитуды синусоид получаются вычислением абсолютного значения системной функции этого фильтра H(z) на соответствующих частотах.

for (i = 0; i <numHarmLine; i ++)
ha [i] = abs (H (exp (j * pi * (i+
1) / (numHarmLine+1)));

cj = sqrt (-1) и

H(z) = 1 / (1 - h [0] * pow (z,-1) - h [1] * pow (z,-2)-... - h [numHarmPara-1] * pow (z, - numHarmPara))

Импульсная характеристика h [i] вычисляется из LARs по следующему алгоритму.

В первом шаге LARs преобразовываются в коэффициенты отражения:

for (i = 0; i <numHarmPara; i ++)

r[i] = (exp (harmLPCPara [i]) - 1) / (exp (harmLPCPara [i]) + 1).

После этого коэффициенты отражения преобразовываются в характеристику времени. Функция С делает это преобразование по месту (вызов с х [i] = r [i] и N=numHarmPara; возвраты с х [i] =h [i]):

void Convert_k_to_h (float * x, int N)

{

int i, j;

float a, b, c;

for (i = 1; i <N; i ++)

{

c = x [i];

for (j = 0; j <i-j-1; j ++)

{

a=x [i];

b=x [i-j-1];

x [j] = a-c*b;

x [i-j-1] = b-c*a;

}

if (j ==i-j-1)

x [j]- = c*x [i];

}

}

После вычисления амплитуд ha [i] они должны быть нормализованы и умножены на harmAmpl, чтобы найти амплитуды гармонической линии, удовлетворяющие условию:

sum (hLineArnpl [i] *hLineAmpl [i]) = power of harmonic tone

Это реализуется следующим образом:

р = 0,0

for (i = 0; i <numHarmLine; i ++)

p + = ha [i] * ha [i];
s = sqrt (harmPwr / p);

for (i = 0; i <numHarmLine; i ++)

hLineArnpl [i] = ha [i] * s;

Дополнительная информация о фазе декодируется следующим образом:

for (i = 0; i <numHarmLine; i ++) {

if (harmPhaseAvail [i]) {

hStartPhase [i] = 2*pi * (harmPhase [i] + 0,5 / (1 <<phasebits) - pi;

hStartPhaseAvail [i] = 1;

}

else

hStartPhaseAvail [i] = 0;

}

5.1.1.3.2 Декодер улучшения

В этом режиме параметры гармонической линии, декодированные основным декодером, уточняются, а также декодируются фазы линии, используя информацию, содержавшуюся в HARMenhaPara () следующим образом:

Для первых максимум 10 гармонических линий i

i = 0..... min (numHarmLine, 10)-1

вычисляются улучшенные параметры гармонической линии, используя базовые параметры гармонической линии и данные в потоке битов улучшения:

hLineAmplEnh [i] = hLineAmpl [i];

hLineFreqEnh [i] = hLineFreq [i] *

(1 + ((harmFreqEnh [i] + 0,5 / (1 <<fEnhbits [i]) - 0,5) * (hFreqRelStep-1));

где hFreqRelStep является отношением двух соседних шагов квантователя основной частоты:

hFreqRelStep = exp (log (4000/20)/2048)).

Для обоих типов линии фаза декодируется из потока битов улучшения:

hLinePhaseEnh [i] = 2*pi * (harmPhase [i] + 0,5) / (1 <<phasebits) - pi

5.1.2 Декодер отдельной линии

5.1.2.1 Описание инструмента

Основной декодер потока битов отдельной линии восстанавливает параметры линии, частоту, амплитуду, и огибающую из потока битов. Декодер улучшения потока битов восстанавливает параметры линии, частоту, амплитуду, и огибающую с более тонким квантованием и дополнительно восстанавливает фазу параметров линии.

5.1.2.2 Определения

t_max

Параметр огибающей: время максимума.

r_atk

Параметр огибающей: темп нарастания.

r_dec

Параметр огибающей: темп спада.

ampl [i]

Амплитуда i-й отдельной линии.

частота [i]

Частота i-й отдельной линии, Гц.

startPhase [i]

Стартовая фаза i-й отдельной линии.

startPhaseAvail [i]

Флаг; указывающий, что доступна информация о стартовой фазе для i-й отдельной линии.

t_maxEnh

Параметр улучшенной огибающей: время максимума.

r_atkEnh

Параметр улучшенной огибающей: темп нарастания.

r_decEnh

Параметр улучшенной огибающей: темп спада.

amplEnh [i]

Улучшенная амплитуда i-й отдельной линии.

freqEnh [i]

Улучшенная частота i-й отдельной линии, Гц.

phaseEnh [i]

Фаза i-й отдельной линии (в радианах).

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

5.1.2.3.1 Основной декодер

Основной декодер восстанавливает параметры линии из данных, содержавшихся в HILNbasicFrame () и INDIbasicPara () следующим образом.

Для каждого фрейма сначала из HILNbasicFrame () читается число отдельных линий, закодированных в этом фрейме:

numLine.

Затем из HILNbasicFrame () читается флаг огибающей фрейма:

envFlag.

Если envFlag = 1, тогда из HILNbasicFrame () декодируются 3 параметра огибающей, t_max, r_atk и r_dec:

t_max = (envTmax+0,5) / (1 <<tmbits);

r_atk = tan (pi/2*max (0, envRatk-0,5) / ((1 <<atkbits)-1))/0,2

r_dec = tan (pi/2*max (0, envRdec-0,5) / (1 <<decbits)-1))/0,2

Эти параметры огибающей действительны для гармонических линий, а также для отдельных линий. Таким образом, параметры огибающей envTmax, envRatk, envRdec должны быть деквантованы, даже если numLine == 0.

Для каждой линии k предыдущего фрейма

k = 0 .. prevNumLine-1

флаг продолжения предыдущей линии читается из HILNbasicFrame ():

prevLineContFlag [k]

Если prevLineContFlag [k] == 1, тогда линия k предыдущего фрейма продолжается в текущем фрейме. Если prevLineContFlag [k] == 0, тогда линия к предыдущего фрейма не продолжается.

В текущем фрейме сначала параметры всех продолжающихся линий кодируются, сопровождаемые параметрами новых линий. Поэтому флаг продолжения линии и предшественник линии определяются прежде, чем декодировать параметры линии:

i = 0;

for (k = 0; k <prevNumLine; k ++)

if (prevLineContFlag [k]) {

linePred [i] = k;

lineContFlag [i ++] = 1;

}

while (i <numLine)

lineContFlag [i ++] = 0;

Параметры новых линий кодируются с увеличивающимся индексом частоты, используя схему дифференциального кодирования. Поэтому единожды для каждого фрейма требуется следующая инициализация:

lastNLFreq = 0.

Для каждой линии i текущего фрейма

i = 0. numLine-1

параметры линии теперь декодируются из INDIbasicPara ().

Если envFlag = = 1, тогда флаг огибающей линии читается из INDIbasicPara ():

lineEnvFlag [i]

Если lineContFlag [i] == 1, тогда параметры продолжающейся линии декодируются из INDIbasicPara () на базе амплитуды и индекса частоты ее предшественника в предыдущем фрейме:

ILFreqlndex [i] = prevlLFreqlndex [linePred [i]] + DILFreq [i];
ILAmpllndex [i] = prevlLAmpllndex [linePred [i]] + DILAmpI [i];

Если lineContFlag [i] == 0, тогда параметры новой линии декодируются из INDIbasicPara ():

if (numLine-1-i <7)

ILFreqlnc [i] = SDCdecode (maxFindex-lastNLFreq, sdclLFTable [numLine-1-i]);

else

ILFreqlnc [i] = SDCdecode (maxFindex-lastNLFreq, sdclLFTable [7]);

ILFreqlndex [i] = lastNLFreq + ILFreqlnc [i];

lastNLFreq = ILFreqlndex [я];

if (HILNquantMode) {

ILAmplRel [i] = SDCdecode (50, sdclLATable);

ILAmpllndex [i] = maxAmpllndex + ILAmplRel [i];

}

else {

ILAmplRel [i] = SDCdecode (25, sdclLATable);

ILAmpllndex [i] = maxAmpllndex + 2*ILAmplRel [i];

}

Индексы параметров линии сохраняются для декодирования параметров линии следующего фрейма:

prevNumLine = numLine;

for (i = 0; i <prevNumLine; i ++) {

prevlLFreqlndex [i] = ILFreqlndex [i];

prevlLAmpi Index [i] = ILAmpllndex [i];

}

Основной декодер также обрабатывает комбинации основного уровня и одного или более уровней расширения. Если данные из всех уровней расширения numLayer доступны базовому декодеру, значения layNumLine [numLayer] и layPrevNumLine [numLayer] должны использоваться вместо numLine и prevNumLine, соответственно. Значения ILAmpllndex [i], ILFreqlndex [i], lineContFlag [i] и linePred [i], как определено описанием синтаксиса потока битов, должны использоваться.

Амплитуды и частоты отдельных линий теперь деквантованы из индексов:

for (i = 0; i <numLine; i ++) {

ampl [i] = 32768 * pow (10,-1,5 * (ILAmpllndex+0,5)/20);

if (ILFreqlndex <160)

freq [i] = (ILFreqlndex+0,5) * 3,125;

else

freq [] = 500 * exp (0,00625 * (ILFreqlndex+0,5-160));

}

Дополнительная информация о фазе запуска декодируется следующим образом:

for (i = 0; i <numLine; i ++) {

if (linePhaseAvail [i]) {

startPhase [i] = 2*pi * (HnePhase [i] +0,5) / (1 <<phasebits) - pi;

startPhaseAvail [i] = 1;

}

else

startPhase Avail [i] = 0;

}

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

5.1.2.3.2 Декодер улучшения

Декодер улучшения уточняет параметры линии, полученные из основного декодера, а также декодирует фазы линии. Дополнительная информация содержится в элементе потока битов INDIenhaPara () и оценивается следующим образом:

Все операции базового декодера должны быть выполнены, чтобы можно было корректно декодировать параметры для продолжающихся линий.

Если envFlag == 1, тогда улучшенные параметры t_maxEnh, r_atkEnh и r_decEnh декодируются с использованием данных огибающей, переданных в HILNbasicFrame () и HILNenhaFrame ():

t_maxEnh = (envTmax + (envTmaxEnh+0,5) / (1 <<tmEnhbits)) / (1 <<tmbits);

if (envRatk == 0)

r_atkEnh = 0;

else

r_atkEnh =tan (pi/2 * (envRatk-1 + (envRatkEnh+0,5) / (1 <<atkEnhbits)) /

((1 <<atkbits)-1))/0,2;

if (envRdec == 0)

r_decEnh = 0;

else
r_decEnh = tan (pi/
2 * (envRdec-1 + (envRdecEnh+0,5) / (1 <<decEnhbits)) /

((1 <<decbits)-1))/0,2.

Для каждой линии i текущего фрейма

i = 0......numLine-1

улучшенные параметры линии получаются путем уточнения параметров из базового декодера данными в INDIenhaPara ():

amplEnh [i] = ampl [i];

if (fEnhbits [i]! = 0) {

if (ILFreqlndex <160)

freqEnh [i] = (ILFreqlndex+0,5 + ((lineFreqEnh [i] +0,5) / (1 <<fEnhbits [i]) - 0,5)) * 3,125;

else

freqEnh [i] = 500 * exp (0,00625 * (ILFreqlndex+0,5 -160 +

((lineFreqEnh [i] + 0,5) / (1 <<fEnhbits [i]) - 0,5)));

}

else

freqEnh [i] = частота [i].

Для обоих типов линии фаза декодируется из потока битов улучшения:

phaseEnh [i] = 2*pi * (linePhase [i] + 0,5)/(1 <<phasebits) - pi.

5.1.3 Декодер шума

5.1.3.1 Описание инструмента

Этот инструмент декодирует параметры шума, переданные в потоке битов.

5.1.3.2 Определения

prevNumNoisePara

Число параметров LPC шума в предыдущем фрейме.

noiseLPCPara [i]

Параметр LPC шума i в текущем фрейме (LARs для спектра шума).

prevNoiseLPCPara [i]

Параметр LPC шума i в предыдущем фрейме (LARs для спектра шума).

noiseAmpI

Амплитуда шума.

noisePwr

Мощность шума.

noiseT_max

Параметр огибающей шума: время максимума.

noiseR_atk

Параметр огибающей шума: темп нарастания.

noiseR_dec

Параметр огибающей шума: темп спада.

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

5.1.3.3.1 Базовый декодер

Если noiseFlag установлено и, таким образом, данные NOISEbasicPara () доступны в текущем фрейме, параметры компонента сигнала шума декодируются и деквантуются следующим образом.

Шум представляется его энергией и рядом LPC-параметров.

Сначала восстанавливаются LAR параметры noiseNumPara. Прогноз из предыдущего фрейма используется, когда установлен noiseContFlag.

float noiseLPCMean [25] = {2,0, -0,75, 0,0, 0,0, 0,0..., 0,0};

for (i = 0; i <numNoisePara; i ++) {

if (i <prevNumNoisePara && noiseContFlag)

pred = noiseLPCMean [i] + (prevNoiseLPCPara [i]-noiseLPCMean [i]) * 0,75;

else

pred = noiseLPCMean [i];

noiseLPCPara [i] = pred + noiseLAR [i];

}

Параметры, необходимые в следующем фрейме, сохраняются в межфреймовой памяти:

prevNumNoisePara = numNoisePara;

for (i = 0; i <numNoisePara; i ++) {

prevNoiseLPCPara [i] = noiseLPCPara [i];

Амплитуда и мощность шума деквантуются следующим образом:

noiseArnpl = 32768 * pow (10,-1,5 * (noiseAmpllndex+0,5)/20);

noisePwr = noiseAmprnoiseAmpl.

Если noiseEnvFlag == 1, тогда шумовые параметры огибающей noiseEnvTmax, noiseEnvRatk и noiseEnvRdec деквантуются в noiseT_max, noiseR_atk и noiseR_dec таким же образом, как описано для декодера отдельной линии.

5.1.3.3.2 Декодер улучшения

Поскольку для шумовых компонентов нет никаких данных улучшения, для шумовых параметров нет специального режима улучшенного декодирования. Если шум должен быть синтезирован с данными улучшения для других компонентов, может использоваться базовый декодер параметров шума. Если декодер HILN используется в качестве ядра в масштабируемом кодере, никакой сигнал шума не должен синтезироваться для сигнала, который подается на декодер улучшения.

5.1.4 Синтезатор гармонической и отдельной линии

5.1.4.1 Описание инструмента

Этот инструмент синтезирует аудиосигнал согласно параметрам гармонической и отдельной линии, декодируемым соответствующими инструментами декодера. Это включает комбинацию гармонических и отдельных линий, базовый синтезатор и синтезатора улучшения. Чтобы получить полный декодированный аудиосигнал, выходной сигнал этого инструмента добавляется к выходному сигналу синтезатора шума.

5.1.4.2 Определения

totalNumLine

Общее количество линий в текущем фрейме, который будет синтезирован (отдельные плюс гармонические).

sampleRate

Частота дискретизации, Гц, как обозначено. HILNsampleRateCode (см. таблицу 7).

synthSampleRate

Частота дискретизации синтезируемого выходного сигнала х [n], Гц.

speedFactor

Коэффициент изменения скорости синтеза (>1 для большей, чем исходная скорость воспроизведения).

pitchFactor

Коэффициент изменения шага синтеза (>1 для большего, чем исходный шаг воспроизведения).

T

Длина фрейма синтеза в секундах.

N

Длина фрейма синтеза в выборках.

env(t)

Амплитудная функция огибающей в текущем фрейме.

a (t)

Мгновенная амплитуда синтезируемой линии.

P (t)

Мгновенная фаза синтезируемой линии.

x (t)

Синтезируемый выходной сигнал.

x [n]

Дискретный синтезируемый выходной сигнал.

startPhi [i]

Стартовая фаза i-й линии в текущем фрейме (в радианах).

phi [i]

Фаза окончания i-й линии в текущем фрейме (в радианах).

previousEnvFlag

Флаг огибающей в предыдущем фрейме.

previousT_max

Параметр огибающей t_max в предыдущем фрейме.

previousR_atk

Параметр огибающей r_atk в предыдущем фрейме.

previousR_dec

Параметр огибающей r_dec в предыдущем фрейме.

previousEnv (t)

Функция огибающей амплитуды в предыдущем фрейме.

previous TotalNumLine

Общее количество линий в предыдущем фрейме.

previousAmpl [k]

Амплитуда k-й линии в предыдущем фрейме.

previousFreq [k]

Частота k-й линии в предыдущем фрейме, Гц.

previousPhi [k]

Фаза окончания k-й линии в предыдущем фрейме (в радианах).

previousLineEnvFlag [k]

Флаг, указывающий, что предыдущая огибающая амплитуды применяется к k-й линии в предыдущем фрейме.

previous T_maxEnh

Улучшенный параметр огибающей t_max в предыдущем фрейме.

previousR_atkEnh

Улучшенный параметр огибающей r_atke предыдущем фрейме.

previousR_decEnh

Улучшенный параметр огибающей r_dec в предыдущем фрейме.

previousAmplEnh [k]

Улучшенная амплитуда k-й линии в предыдущем фрейме.

previousFreqEnh [k]

Улучшенная частота k-й линии в предыдущем фрейме, Гц.

previousPhaseEnh [k]

Фаза k-й линии в предыдущем фрейме (в радианах).

5.1.4.3 Процесс синтеза

5.1.4.3.1 Комбинация гармонических и отдельных линий

Для синтеза гармонических линий используется тот же самый метод синтеза, что и для отдельных линий.

Если никакая гармоническая составляющая не декодируется для следующих шагов, numHarmLine должен быть обнулен.

Иначе параметры гармонических линий добавляются к списку параметров отдельных линий как декодируемые декодером отдельных линий:

for (i=0; i <numHarmLine; i ++) {

freq [numLine+i] = hLineFreq [i];

ampl [numLine+i] = hLineArnpl [i];

if (harmContFlag && prevNumLine+i <previousTotalNumLine) {

lineContFlag [numLine+i] = 1;

linePred [numLine+i] = prevNumLine+i;

}

else

lineContFlag [numLine+i] = 0;

lineEnvFlag [numLine+i] = harmEnvFlag;

startPhase [numLine+i] = hStartPhase [i];

startPhaseAvail [numLine+i] = hStartPhaseAvail [i];

}

Таким образом, общее количество параметров линий, поступивших на синтезатор гармонических и отдельных линий равно:

totalNumLine = numLine + numHarmLine.

В зависимости от значения HILNcontMode возможно соединить линии в смежных фреймах, чтобы избежать разрывов фазы в случае переходов с гармонических линий (HILNcontMode == 0) или дополнительно с отдельных линий на отдельные линии, для которых бит продолжения lineContFlag в потоке битов не был установлен кодером (HILNcontMode == 1). Это дополнительное продолжение линии также может быть полностью отключено (HILNcontMode == 2).

Для каждой линии i = 0.. totalNumLine-1 текущего фрейма, у которой нет никакого предшественника (то есть lineContFlag [i] == 0), линия оптимальной подгонки j предыдущего фрейма, не имеющая преемника и с комбинацией, удовлетворяющей требованиям, определенным HILNcontMode определяется, максимизируя следующую меру q:

df = freq [i] / previousFreq [j];
df = max(df,
1/df);
da = ampl [i] / previousArnpl [j];
da = max (da,
1/da);
q = (
1 - (df-1) / (dfCont-1)) * (1 - (da-1) / (daCont-1)),

где dfCont = 1,05 и daCont = 4 являются максимальными разрешенными относительными изменениями частоты и амплитуды. Если имеется больше одного кандидата в предшественники, достигающего максимума q, то выбирается кандидат с самым маленьким индексом j. Для дополнительных продолжений линии, определенных таким образом, информация о предшественнике строки обновляется:

lineContFlag [i] = 1;

linePred [i] = j.

Если нет по крайней мере одного возможного предшественника с df <dfCont и da <daCont, lineContFlag [i] и linePred [i] остаются неизменными.

Для улучшенного синтезатора параметры улучшенной гармонической (максимум до 10) и отдельной линии объединяются следующим образом:

for (i = 0; i <min (10, numHarmLine); i ++) {

freqEnh [numLine+i] = hLineFreqEnh [i];

amplEnh [numLine+i] = hLineAmplEnh [i];

if (harmContFlag && prevNumLine+i <previousTotalNumLine) {

lineContFlag [numLine+i] = 1;

linePred [numLine+i] = prevNumLine+i;

}

else

lineContFlag [numLine+i] = 0;

lineEnvFlag [numLine+i] = harmEnvFlag;

phaseEnh [numLine+i] = hLinePhaseEnh [i];

}

Таким образом, общее количество параметров линии, переданных на синтезатор улучшенной гармонической и отдельной линии, если декодер HILN используется в качестве ядра в масштабируемом кодере, равно:

totalNumLine = numLine + min (10, numHarmLine).

Так как информация о фазе доступна для всех этих линий, никакое продолжение линии не вводится для улучшенного синтезатора.

5.1.4.3.2 Изменение скорости и шага

Благодаря используемому кодером HILN параметрическому представлению сигнала и продолжению фазы, обеспечиваемому базовым синтезатором линии, скорость воспроизведения и шаг легко могут быть изменены во время синтеза сигнала в декодере. Если требуется воспроизведение на исходной скорости и шаге, соответствующие факторы управления устанавливаются в их значения по умолчанию:

speedFactor = 1,0;

pitch Factor =1,0;

Если скоростью управляет масштабный коэффициент времени в поле speed узла AudioSource BSF, фактор изменения скорости будет:

speedFactor = 1 / speed;

Если шагом управляет поле pitch узла AudioSource BSF, фактор изменения шага будет:

pitchFactor = pitch;

Когда вместо базового синтезатора используется синтезатор улучшения, speedFactor и pitchFactor должны всегда устанавливаться в их значение по умолчанию 1,0.

Изменение скорости реализуется изменением длины фрейма синтеза согласно требующемуся speedFactor.

Изменение шага реализуется изменением параметров частоты гармонических и отдельных линий следующим образом:

for (i = 0; i <totalNumLine; i ++) {

freq [i] * = pitchFactor;

}

Синтезатор шума также поддерживает изменение скорости и шага.

5.1.4.3.3 Структурирование синтеза

Создание фреймов при синтезе

Синтезатор гармонический и отдельной линии восстанавливает один фрейм аудиосигнала. Так как параметры линии, закодированные во фрейме потока битов, действительны для центра соответствующего фрейма аудиосигнала, синтезатор генерирует секцию аудиосигнала х (t) длиной в один фрейм, которая стартует в центре предыдущего фрейма (t = 0), и заканчивается в центре текущего фрейма (t = T).

По умолчанию синтезатор HILN работает при частоте дискретизации synthSampleRate, как указано samplingFrequency, передающимся в AudioSpecificlnfo ():

synthSampleRate = samplingFrequency.

Фрейм синтеза содержит N выборок:

N = (int) (HILNframeLength * synthSampleRate / sampleRate / speedFactor + 0,5).

Таким образом продолжительность T фрейма синтеза равна:

Т = N / synthSampleRate.

В дальнейшем описывается вычисление синтезируемого выходного сигнала х (t)

для 0 <= t <Т. Вариант интервала времени (то есть фактический фрейм выходных выборок) определяется как

x [n] = x (t) c t = (n+0,5) * (T/N)

для 0 <= n <N.

Синтезатор шума использует тот же синтез создания фреймов, как синтезатор гармонической и отдельной линии.

5.1.4.3.4 Базовый синтезатор

Некоторые параметры предыдущего фрейма (имена, начинающиеся со слова "предыдущий"), извлекаются из межфреймовой памяти, которая должна быть сброшена перед декодированием первого фрейма потока битов.

Сначала вычисляются функции огибающей previousEnv (t) и env (t) предыдущего и текущего фреймов согласно следующим правилам:

Если envFlag == 1, тогда функция огибающей env (t) получается из параметров огибающей t_max, r_atk и r_dec. При Т, являющемся длиной фрейма, env (t) вычисляется для -Т/2 <= t <3/2:

if (-1/2 <= t/T && t/T <t_max)
env (t) = max (
0,1-(t_max-t/T) * r_atk);
if (t_max <= t/T && t/T <
3/2)

env (t) = max (0,1-(t/T-t_max) * r_dec).

Если envFlag == 0, то используется постоянная функции огибающей env (t):

env (t) = 1.

Соответственно, previousEnv(t) вычисляется исходя из параметров previousT_max, previousR_atk, previousR_dec и previousEnvFlag.

Параметры огибающей, переданные в случае envFlag == 1, справедливы для гармонических линий, а также для отдельных линий. Таким образом, функции огибающей должны генерироваться всегда, даже если все lineEnvFlag [i] == 0.

Прежде, чем выполняется синтез, очищается аккумулятор х (t) для синтезируемого аудиосигнала для 0 <=t<T:

х (t) = 0;

Линии I, продолжающиеся из предыдущего фрейма в текущем фрейме

all i = 0.. totalNumLine-1, that have lineContFlag [i] == 1

синтезируются для 0 <= t <Т следующим образом:

k = linePred [i];

ар (t) = previousArnpl [k];

if (previousLineEnvFlag [k] == 1)

ap (t) * = previousEnv (t+T/2);

ac (t) = ampl [k];

if (HneEnvFlag [i] == 1)

ac (t) * = env (t-T/2);

short_x_fade = (previousLineEnvFlag [k] &&! (previousR_dec <5 &&

(previousT_max <0,5 || previousR_atk <5))) ||

(lineEnvFlag [i] &&! (rjatk <5 && (t_max >0,5 || r_dec <5)));

if (short_x_fade == 1) {

if (0<=t && t<7/16*T)

a (t) = ар (t);

if (7/16*Т <= t && t <9/16*T)

a (t) = ap (t) + (ac (t)-ap (t)) * (t/T-7/16) *8;

if (9/16*Т <= t && t<T)

a (t) = ac (t);

}

else

a (t) = ap (t) + (ac (t)-ap (t)) *t/T;

p (t) = previousPhi [k] +2*pi*previousFreq [k] *t +

2*pi * (частота [i]-previousFreq [k]) /(2*T) *t*t;

x (t) + = (t) *sin (p (t));

phi [i] = p (T).

Линии i, стартующие в текущем фрейме

все i = 0.. totalNumLine-1, у которых lineContFlag [i] == 0

синтезируются для 0 <= t <T следующим образом:

if (lineEnvFlag [i] &&! (r_atk <5 && (t_max> 0,5 || r_dec <5))) {

if (0 <=t && t <7/16*T)

fade_in (t) = 0;

if (7/16*T<=t && t <9/16 *T)

fade_in (t) = 0,5 - 0,5*cos ((8*t/T-7/2) *pi);

if (9/16*Т <= t && t <T)

fade_in (t) = 1;

}

else

fade_in (t) = 0,5-0,5*cos (t/T*pi);

a (t) = fade_In (t) *ampl [i];

if (lineEnvFlag [i] == 1)

a (t) * = env (t-T/2);

if (startPhaseAvail [i])

startPhi [i] = startPhase [i];

else

startPhi [i] = random (2*pi);

p (t) = startPhi [i] + 2*pi*freq [i] * (t-T);

x(t) + = (t) *sin (p (t));

phi [i] = p (T)

random(x) является функцией, возвращающей случайное число с универсальным распределением в интервале

0 <= random (х) <х

Линиии k, оканчивающиеся в предыдущем фрейме

all k = 0.. previousTotalNumLine-1, that have prevLineContFlag [k] == 0

синтезируются для 0 <= t <T следующим образом:

if (previousLineEnvFlag [k] &&! (previousR_dec <5 &&

(previousT_max <0,5 || previousR_atk <5))) {

if (0<=t&& t<7/16*T)

fade_out (t) = 1;

if (7/16*Т<= t&& t <9/16*T)

fade_out (t) = 0,5 + 0,5*cos ((8*t/T-7/2) *pi);

if (9/16*Т <= t&& t <T)

fade_out (t) = 0;

}

else

fade_out (t) = 0,5+0,5*cos (t/T*pi);

a (t) = fade_out (t) *previousAmpl [k];

if (previousLineEnvFlag [k] == 1)

a (t) * = previousEnv (t+T/2);

p (t) = previousPhi [k] +2*pi*previousFreq [к] *t;

x (t) + = (t) *sin (p (t)).

Чтобы избежать искажений из-за наложения спектров, синтезируемые линии заглушаются (то есть a(t) = 0), пока их мгновенная частота выше или равна половине частоты дискретизации, то есть

d phi (t) / dt> = pi*N/T.

Параметры, необходимые в следующем фрейме, сохраняются в межфреймовой памяти:

previousEnvFlag = envFlag;

previousT_max = t_max;

previousR_atk = r_atk;

previousR_dec = r_dec;

previousTotalNumLine = totalNumLine;

for (i=0; i <totalNumLine; i ++) {

previousFreq [i] = freq [i];

previousAmpi [i] = ampl [i];

previousPhi [i] = fmod (p [i], 2*pi);

previousLineEnvFlag [i] = lineEnvFlag [i];

}

fmod (x, 2*pi) является функцией, возвращающей модуль 2*pi для х.

5.1.4.3.5 Синтезатор улучшения

Синтезатор улучшения основан на базовом синтезаторе, но оценивает также фазы линии при восстановлении одного фрейма аудиосигнала. Так как параметры линии, закодированные во фрейме потока битов и соответствующем фрейме улучшения, имеют силу в середине соответствующего фрейма аудиосигнала, синтезатор гармонической и отдельной линии генерирует секцию аудиосигнала длиной в один фрейм, который стартует в середине предыдущего фрейма и заканчивается в середине текущего фрейма.

Некоторые параметры предыдущего фрейма (имена, начинающиеся со слова "previous"), извлекаются из межфреймовой памяти, которая должна быть сброшена прежде, чем будет декодироваться первый фрейм потока битов.

Сначала вычисляются функции огибающей previousEnv (t) и env(t) предыдущего и текущего фреймов согласно следующим правилам.

Если envFlag == 1, тогда функция огибающей env(t) получается из параметров огибающей t_maxEnh, r_atkEnh и r_decEnh. При Т, являющемся длиной фрейма, env(t) вычисляется для -Т/2 <= t <3/2*Т:

if (-1/2 <= t/T && t/T <t_maxEnh)

env (t) = max (0,1-(t_maxEnh-t/T) *r_atkEnh).
if (t_maxEnh <= t/T && t/T <
3/2)

env (t) = max (0,1-(t/T-t_maxEnh) *r_decEnh);

Если envFlag == 0, тогда используется постоянная функция огибающей env(t):

env (t) = 1.

Соответственно previousEnv (t) вычисляется, исходя из параметров previousT_maxEnh, previousR_ atkEnh, previousR_decEnh и previousEnvFlag.

Параметры огибающей, переданные в случае envFlag == 1, справедливы для гармонических линий, а также для отдельных линий. Таким образом, функции огибающей должны быть сгенерированы всегда, даже если все lineEnvFlag [i] == 0.

Прежде, чем выполняется синтез, аккумулятор х (t) для синтезируемого аудиосигнала очищается для 0 <= t <Т:

x (t) = 0.

Все линии i в текущем фрейме

all i =0.. totalNumLine-1

синтезируются следующим образом для 0 <= t <Т:

if (envFlag &&! (r_decEnh <5 && (t_maxEnh <0,5 || r_atkEnh <5))) {

if (0 <= t&& t <7/16*Т)

fade_in (t) = 0;

if (7/16*Т<= t&& t <9/16*Т)

fade_in (t) = 0,5 - 0,5*cos ((8*t/Т-7/2) *pi);

if (9/16*Т <= t&& t <T)

fade_in (t) = 1;

}

else

fade_in (t) = 0,5-0,5*cos (t/Tpi);

a (t) = fade_in (t) *amplEnh [i];

if (envFlag [i] == 1)

a (t) * = env (t-T/2);

phi (t) = 2*pi*freqEnh [i] * (t-T) +phaseEnh [i];

x (t) + = (t) *sin (phi (t)).

Линии k в предыдущем фрейме

all k=0.. previousTotalNumLine-1

синтезируются следующим образом для 0 <= t <Т:

if (previousEnvFlag &&! (previousR_atkEnh <5 &&

(previousT_maxEnh> 0,5 || previousR_decEnh <5))) {

if (0<=t&& t <7/16*T)

fade_out (t) = 1;

if (7/16*Т<= t&& t <9/16*Т)

fade_out (t) = 0,5 + 0,5*cos ((8*t/Т-7/2) *pi);

if (9/16*Т <= t&& t <T)

fade_out (t) = 0;

}

else

fade_out (t) = 0,5+0,5*cos (t/T*pi);

a (t) = fade_out (t) *previousAmplEnh [k];

if (previousEnvFlag [k] == 1)

a (t) * = previousEnv (t+T/2);

phi (t) = 2*pi*previousFreqEnh [k] *t+previousPhaseEnh [i];

x (t) + = (t) *sin (phi (t)).

Если мгновенная частота линии выше или равная половине частоты дискретизации, то есть

d phi (t) / dt >= pi*N/T,

она не синтезируется, чтобы избежать искажения из-за наложения спектров.

Параметры, необходимые в следующем фрейме, сохраняются в межфреймовой памяти:

previousEnvFlag = envFlag;

previousT_maxEnh = t_maxEnh;

previousR_atkEnh = r_atkEnh;

previousR_decEnh = r_decEnh;

previousTotalNumLine = totalNumLine;

для (i=0; i <totalNumLine; i ++) {

previousFreqEnh [i]= freqEnh [i];

previousAmplEnh [i]= amplEnh [i];

previousPhaseEnh [i]= phaseEnh [i];

}

5.1.5 Синтезатор шума

5.1.5.1 Описание инструмента

Этот инструмент синтезирует шумовую часть выходного сигнала, основанного на параметрах шума, декодируемых декодером шума. Шумовой сигнал добавляется к выходному сигналу синтезатора гармонической и отдельной линии, чтобы получить полный декодированный аудиосигнал.

5.1.5.2 Определения

noiseWin [n]

Окно для наложения-добавления шума.

noiseEnv [n]

Огибающая для шумового компонента в текущем фрейме.

М

Длина фрейма в выборках перед передискретизацией.

w [m]

Белый шум с мощностью pw.

xf [m.]

Фильтруемый сигнал шума в текущем фрейме.

xn [n]

Синтезируемый сигнал шума в текущем фрейме.

previousXn [n]

Синтезируемый сигнал шума в предыдущем фрейме.

previousNoiseWin [n]

Окно и огибающая для шумового компонента в предыдущем фрейме.

r [i]

Коэффициенты отражения LPC.

h [i]

Импульсная характеристика LPC.

hlp [i]

Импульсная характеристика фильтра передискретизации низких частот.

5.1.5.3 Процесс синтеза

5.1.5.3.1 Базовый синтезатор

Если для текущего фрейма передаются шумовые параметры, сигнал шума со спектральной формой, которая описана шумовыми параметрами, декодируемыми из потока битов, синтезируется и добавляется к аудиосигналу, сгенерированному синтезатором гармонической и отдельной линии.

Шум представляется его энергией и рядом LPC-параметров. Шумовые параметры LPC преобразовываются в коэффициенты отражения r [i] и во временную характеристику h [i]:

for (i = 0; i <numNoisePara; i ++)
r [i] = (exp (noiseLPCPara [i]) -
1) /(exp (noiseLPCPara [i]) + 1).

После этого коэффициенты отражения r [i] преобразовываются во временную характеристику h [i], используя функцию С

void Convert_k_to_h (float *х, int N),

вызов с x [i] = r [i] и N = numNoisePara возвращает с x [i] = h [i]).

Фильтруемый сигнал шума xf [m] генерируется, применяя фильтр IIR синтеза LPC к белому шуму, представленному случайными числами w [m]. Энергия этого белого шума с нулевым средним обозначается pw. Для шума с равномерным распределением в [-1,1] энергия будет

pw = 1/3.

Чтобы достигнуть необходимой энергии шумового сигнала, требуется следующий масштабный коэффициент s:

ss = 1,0;

for (i = 0; i <numNoisePara; i ++)

ss *= 1-r [i] * r [i];
s = noiseArnpl * sqrt (ss/pw).

Затем белый шум w [m] IIR-фильтруется, чтобы получить синтезируемый сигнал шума xf [m]

for (т = startup; т <2*М; т ++) {

xf [m] = s *w [m];

for (i = 0; i <min (m-startup, numNoisePara); i ++)

xf [m] + = h [i] * xf [m-i-1];

}

Чтобы гарантировать, что фильтр IIR может достигнуть достаточно устойчивого состояния, используется фаза запуска:

startup = - numNoisePara

Если производится декодирование с изменением шага (то есть pitchPactor ! = 1,0) или с другой частотой дискретизации, чем у кодера (то есть synthSampleRate! = sampleRate), к сигналу xf [m] должна быть применена операция передискретизации с использованием коэффициента передискретизации

resampleFactor = (sampleRate * pitchFactor) / synthSampleRate;

где, например, pitchFactor2 указывает, что этот сигнал синтезируется при его удвоенном исходном шаге. Иначе resampleFactor устанавливается в 1,0. На базе resampleFactor перед передискретизацией определяется длина фрейма М:

М = N * resampleFactor.

Передискретизация может быть реализована, применяя две операции фильтра нижних частот FIR к сигналу xf [m] и линейно интерполируя между этими двумя значениями, чтобы получить заключительный сигнал шума xn [n].

if (resampleFactor <1)

fc = 1;

else
fc =
1/resampleFactor.

Следующая функция вычисляет временную характеристику hlp [0..31] соответствующего фильтра нижних частот FIR с 16 отводами и коэффициентом передискретизации 4. Частота среза будет fc.

void GenLPFilter (float, * hlp, double fc),

{

double x, f;

int i;

hip [0] = (float) fc;

for (i = 1; i <32; i ++)

{

x = i*pi/4,0;

hip [i] = (float) ((0,54+0,46*cos (0,125*x)) *sin (fc*x)/x);

}

}

Чтобы выполнить работу фильтра FIR, может использоваться следующая функция С. Параметра ми являются сигнал, временная характеристика (как результат функции выше) и позиция точки выборки. Позиция дается как разница между ближайшей позицией выборки до требующейся позиции выборки (х [7]) и требующейся позицией выборки. Поэтому 0 <= pos <1. Интерполяция выполняется между х [7] и х [8], полученное значение представляет позицию выборки 7+pos.

float LPInterpolate (float *x, float *hlp, double fc),

{

long j;

double s, t;

pos * = 4,0;

j = (long) pos;

pos - = (double) j;

s = t = 0,0;

j = 32-j;

if (j == 32)

{

t = h [31] * (*x);

x++;

j- = 4;

}

while (j> 0)

{

s + = h [j] * (*x);

t + =h [j-1] * (*x);

x ++;

j - = 4;

}

j -j;

while (j <32-1)

{

s + = h [j] * (*x);

t + =h [j+1] * (*x);

x ++;

j + = 4;

}

if (i<32)

s + = h [j] * (*x);

return (float) (s+pos * (t-s));

}

Используя функции GenLPFilter () и LPInterpolate (), производится передискретизация, как описано ниже. xf [m] устанавливается в 0,0 для m <startup и m >= 2*М.

GenLPFilter (hip, fc);
for(n =
0; n <2*N; n ++)
xn [n] = LPInterpolate (xf + (int) n*resampleFactor)-7, hip, frac (n*resampleFactor)).

Если resampleFactor == 1,0, xf [m] просто копируется в xn [n] без передискретизации:

for (n = 0; n <2*N; n ++)

xn [n] = xf [n].

Для гладкого затухания-перекрытия сигнала шума на границе между двумя смежными фреймами для этой операции перекрытия-добавления используется следующее окно:

for (n = 0; n <N; n ++) {

if (n<N*3/8)

noise Win [n] = 0;

if (N*3/8 <=n && n <N*5/8)

noiseWin [n] = грех (пи/2 * (n-N*3/8+0,5) / (N*2/8));

if (N*5/8 <= n)

noiseWin [n] = 1;

noiseWin [2*N-1-n] = noiseWin [n];

}

Теперь вычисляется функция огибающей noiseEnv [n]. Если noiseEnvFlag == 1, тогда функция огибающей

noiseEnv [n] = noiseEnv (t) c t = (n+0,5) * (T/N)-0,5

получается из параметров огибающей noiseT_max, noiseR_atk и noiseR_dec для -T/2 <= t<3/2*Т (то есть 0 <= n <2*N):

если (-1/2 <= t/T && t/T <noiseT_max)
noiseEnv (t) = max (0,1-(noiseT_max-t/T) *noiseR_atk);

если (noiseT_max <= t/T && t/T <3/2)
noiseEnv (t) = max (0,1-(t/T-noiseT_max) *noiseR_dec).

Если noiseEnvFlag == 0, то используется постоянная функция огибающей noiseEnv (t):

noiseEnv [n] = 1;

Сигнал шума xn [n] является оконным для перекрытия-добавления и умножается на огибающую noiseEnv [n]. Затем этот сигнал и шум из предыдущего фрейма previousXn [n] добавляются к сигналу x [n] из синтезатора гармонической и отдельной линии, чтобы создать полный синтезируемый signalx [n]:

for (n = 0; n <N; n ++)

x [n] + = xn [n] *noiseWin [n] * noiseEnv [n] + previousXn [n].

Вторая половина сгенерированного signalxn [n] шума сохраняется в межфреймовой памяти previousXn [n] для перекрытия-добавления:

for (n = 0; n <N; n ++)

previousXn [n] = xn [N+n] * noiseWin [N+n] * noiseEnv [N+n].

Память previousXn [n] должна быть сброшена в 0,0 прежде, чем будет декодироваться первый фрейм.

5.1.5.3.2 Синтезатор улучшения

Когда нет никаких данных улучшения для шумовых компонентов, нет и никакого определенного режима синтезатора улучшения для шумовых компонентов. Если должен быть синтезирован шум и имеются данные улучшения для других компонентов, может использоваться базовый декодер синтезатора шума. Если декодер HILN используется в масштабируемом кодере в качестве ядра, никакой шумовой сигнал не должен синтезироваться для сигнала, который подается декодеру улучшения.

5.2 Интегрированный параметрический кодер

Интегрированный параметрический кодер может работать в четырех различных режимах. PARAmodes 0 и 1 представляют режимы фиксированных HVXC и HILN. PARAmode 2 разрешает автоматическое переключение между HVXC и HILN в зависимости от текущего типа входного сигнала. В PARAmode 3 кодеры HVXC и HILN могут использоваться одновременно, и их выходные сигналы добавляются (смешиваются) в декодере.

Интегрированный параметрический кодер использует длину фрейма 40 мс и частоту дискретизации 8 кГц и может работать со скоростью передачи 2025 бит/с или любой более высокой.

5.2.1 Интегрированный параметрический декодер

Для режимов "HVXC only" и "HILN only" параметрический декодер не изменяется.

В режимах "switched HVXC/HILN" и "mixed HVXC/HILN" управление инструментами декодера HVXC и HILN происходит альтернативно или одновременно согласно PARAswitchMode или PARAmixMode текущего фрейма. Чтобы получить надлежащее выравнивание по времени выходных сигналов декодера HVXC и HILN прежде, чем они будут добавлены, различие между задержкой декодера HVXC и HILN нужно компенсировать с помощью буфера FIFO:

если HVXC используется в режиме декодера с низкой задержкой, его выход должен быть задержан на 100 выборок (то есть 12,5 мс);

если HVXC используется в режиме декодера с нормальной задержкой, его выход должен быть задержан на 80 выборок (то есть 10 мс).

Чтобы избежать трудных переходов на границах фрейма, когда включаются или выключаются декодеры HVXC или HILN, соответствующие выходные сигналы декодера нарастают и спадают гладко. Для декодера HVXC применяется линейное нарастание или спад 20 мс, когда он включается или выключается. Декодер HILN не требует дополнительного нарастания и исчезновения по причине гладких окон синтеза, используемых в синтезаторе HILN.

6 Устойчивые к ошибкам полезные нагрузки потока битов

6.1 Обзор инструментов

Устойчивые к ошибкам полезные нагрузки потока битов позволяют эффективно использовать усовершенствованные методы кодирования канала вроде неравномерной защиты от ошибок (UEP), которые могут быть отлично адаптированы к потребностям различных инструментов кодирования. Основная идея состоит в том, чтобы перестроить стандартную полезную нагрузку потока битов в зависимости от ее чувствительности к ошибкам в одном или более случаях, принадлежащих различным категориям чувствительности к ошибкам (ESC). Эта перестановка работает сданными или поэлементно, или даже порязрядно. Устойчивая к ошибкам полезная нагрузка потока битов создается, связывая эти случаи.

Поток битов переупорядочивается согласно чувствительности к ошибкам единичных элементов потока битов или даже единичных битов. Этот поток битов с новым расположением канально кодируется, передается и канально декодируется. Перед декодированием поток битов перестраивается к своему первоначальному порядку. Вместо того, чтобы выполнить переупорядочение описанным способом, в этом перестроении определяется переупорядоченный синтаксис, который является порядком потока битов, до форматизатора потока битов в месте расположения декодера.

6.2 ER HILN

Категории чувствительности к ошибкам (ESC) определяются в параметрическом потоке битов. Ниже описывается упорядочивание различных ESC для четырех различных режимов PARAmode == 0, 1, 2, 3.

PARAmode == 0 (только HVXC)

HVXC: ESC0 ESC1 ESC2 ESC3 ESC4

PARAmode == 1 (только HILN)

PARA/HILN: ESC0 ESC1 ESC2 ESC3 ESC4

PARAmode == 2 (переключение HVXC / HILN),

PARA/HILN: ESC0 /ESC1 ESC2 ESC3 ESC4]

HVXC 1/двойной; [ESC0 ESC1 ESC2 ESC3 ESC4]

HVXC 2/двойной; [ESC0 ESC1 ESC2 ESC3 ESC4]

PARAmode == 3 (смешение HVXC / HILN),

PARA/HILN: ESC0 /ESC1 ESC2 ESC3 ESC4]

HVXC 1/двойной; [ESC0 ESC1 ESC2 ESC3 ESC4]

HVXC 2/двойной; [ESC0 ESC1 ESC2 ESC3 ESC4]

ESC0 для "PARA/HILN" состоит из элемента потока битов PARAswitchMode или PARAmixMode в PARAframe (), сопровождаемого элементами потока битов в HILNbasicFrameESC0 (). Фактическое присутствие этих элементов потока битов может зависеть от текущих значений PARAmode, PARAswitchMode и PARAmixMode. "HVXC 1/двойной" и "HVXC 2/двойной" обозначают первый и второй ErHVXCfixfram () в пределах ErHVXCdoubleframe(). Присутствие ESC в квадратных скобках зависит от значения PARAswitchMode или PARAmixMode в текущем фрейме.

Приложение А
(справочное)


Параметрический аудиокодер

А.1 Краткий обзор инструментов кодера

В параметрическом кодере входной сигнал разделяется на две части, которые кодируются HVXC и инструментами HILN. Это может быть сделано вручную или автоматически. Автоматическое переключение между речью и музыкальными сигналами поддерживается HVXC для речи и HILN для музыки. Общее средство форматирования потока битов позволяет работу только в HVXC или только в HILN, или также в объединенных режимах, то есть переключенном или смешанном режиме.

Следующее описание параметрического кодера HILN информативно, и также альтернативные методы для сигнального разделения и оценки параметра могут использоваться в кодере.

А.2 Кодер HILN инструменты

Основной принцип HILN: кодер должен проанализировать входной сигнал, чтобы извлечь параметры, описывающие сигнал. Эти параметры кодируются и передаются как поток битов. В декодере выходной сигнал синтезируется, основанный на параметрах, извлеченных и переданных кодером.

Кодер состоит из двух основных частей: "экстракция параметра" и "кодирование параметра". В кодере входной сигнал делится на последовательные кадры, и для каждого фрейма ряд параметров, описывающих сигнал в этом фрейме, извлекается и кодируется. Из-за этого параметрического описания возможен широкий диапазон скоростей передачи, частот дискретизации и длин фрейма. Обычно используется длина фрейма 32 мс. Для входных сигналов с частотой дискретизации на 8-16 кГц обычно используется скорость передачи 6-16 Кбит/с.

А.2.1 Экстракция параметра HILN

На экстракции параметра входной сигнал разделяется на три различные части: "гармонические строки", "отдельные строки" и "шум".

Из этих параметров частей, описывающих сигнал, извлекаются:

гармонические строки: основная частота и амплитуды гармонических составляющих;

отдельные строки: частота и амплитуда каждой отдельной строки;

шум: спектральная форма шума.

Дополнительно параметры для амплитудных конвертов и для продолжения линий спектра от одного фрейма до следующего могут быть определены.

Сигнальная оценка разделения и параметра реализуется в трех шагах: сначала оценивается основная частота гармонической части сигнала, затем оцениваются параметры соответствующих линий спектра, и эти строки классифицируются как "отдельные строки" или "гармонические строки" в зависимости от частоты относительно основной частоты. После того, как все соответствующие линии спектра извлекаются, остающийся остаточный сигнал подобен шуму, и его спектральная форма описывается рядом параметров.

Гармоническая экстракция строки инструментов HILN может быть использована в интегрированном параметрическом кодере, использующем инструменты кодирования речи HVXC и кодирование инструментов HILN одновременно.

А.2.1.1 Оценка основной частоты

Инструментами HILN используется метод оценки основной частоты "Cepstrum". Сначала входной сигнал Hanning центрируется вокруг текущего фрейма. Для оконного сигнала вычисляется спектр:

w (f) = (1+cos (2*pi*f/fs))/2 0 <= f <= fs/2

Определяются локальные максимумы в cepstrum, и идентифицируется самый большой максимум в пределах разрешенного "диапазона поиска" задержки подачи. Вычисляется основная частота от "задержки подачи" (период основной частоты) самого большого максимума.

Основная частота, определенная на основе метода cepstrum, используется в качестве начальной (грубой) оценки для следующей оценки параметра строки.

А.2.1.2 Гармоническая и отдельная оценка параметра строки

Оценка гармонических и отдельных параметров строки основана на "Цикле Анализа/Синтеза".

В первом шаге оцениваются параметры всех гармонических строк. Вычисляется оценка основной частоты hFreq и "протяжения" hStretch, который минимизирует полную ошибку между реальными гармоническими строчными частотами и вычисленными согласно

hLinefreq [i] = hFreq * (i+1) * (1 + hStretch * (i+1)) i = 0.. harmNumLine-1,

где общее количество гармонических строк определяется пропускной способностью w сигнала и текущей основной частоты hFreq:

harmNumLine = floor (w/hFreq)

Гармонический флаг конвертера устанавливается, используя конвертер амплитуды тока для всех гармонических результатов строк по более низкой остаточной ошибке.

Во втором шаге извлекаются соответствующие линии спектра из входного сигнала посредством цикла анализа/синтеза. Этот цикл использует психоакустическую модель, чтобы извлечь линии спектра в порядке их субъективной уместности. Если частота извлеченной линии спектра близка к частоте гармонической строки, она классифицируется как гармоническая строка. Иначе она классифицируется как отдельная строка. Цикл анализа/синтеза завершается, если требуемое число отдельных строк было извлечено или если остающиеся сигнальные компоненты не могут быть должным образом смоделированы линиями спектра. Отношение между числом гармонических извлеченных строк и полными извлеченными строками передается кодеру как мера "уместности" гармонических строк.

А.2.1.2.1 Предварительный анализ

Преданалитический модуль определяет конвертер амплитуды сигнала, который используется в цикле анализа/синтеза.

А.2.1.2.2 Анализ/синтез, основанный на единственных линиях спектра

Отдельный кодер строки основан на модели единственных линий спектра, которые могут быть сгенерированы генератором синусоидальных колебаний. Для i-й строки цикл состоит из следующих шагов:

вычисление отклонения между спектрами FFT ввода и синтезируемых сигналов;

выбор соответствующей строки FFT c центральной частотой fi;

оценка частоты высокого разрешения окружения fi;

выбор информации о конверторе амплитуды и фазовая оценка;

синтез с решительными параметрами;

вычисление остаточной ошибки синтезируемого сигнала от входного сигнала.

Строка FFT определяется, вычисляя отклонение между входным спектром и синтезируемым спектром и находя максимальное отношение квадрата этого отклонения и порога маскирования, полученного из сигнала, синтезируемого от линий спектра.

Чтобы получить параметр частоты более высокой точности, чем разрешение FFT, используется центральная частота fi выбранной строки FFT.

А.2.1.2.3 Психоакустическая модель

Психоакустическая модель вычисляет порог для синтезируемых сигнальных компонентов в цикле анализа/синтеза.

А.2.1.3 Шумовая оценка параметра

Шумовые параметры используются, чтобы смоделировать спектральную форму остаточного сигнала. Сначала вычисляется энергетический спектр Hanning оконного остаточного сигнала. Затем этот спектр преобразовывается в автокорреляционную функцию. Вычисляются параметры LPC, используя алгоритм Дербина. Параметры LPC преобразовываются в коэффициенты отражения.

А.2.2 Кодер параметра HILN

Чтобы генерировать вывод потока битов кодера HILN, извлеченные параметры гармоники отдельной строки и шумовых частей сигнала квантуются и кодируются.

А.2.2.1 Гармоническое квантование параметра строки

Число битов, доступных для гармонических параметров строки, зависит от величины гармонического сигнального компонента. Если она низка, то число гармонических закодированных строк может быть меньше, чем число извлеченных строк. Это соответствует ограничению пропускной способности гармонического сигнала.

Основная частота квантуется с 2048 шагами по логарифмической шкале в пределах от 20 Гц к 4 кГц.

Для описания спектра гармонического тона вычисляется автокорреляционная функция гармонического сигнала. Из нее получают коэффициенты LPC. Этот процесс подобен LPC specral моделированию, используемому для шумового сигнала.

А.2.2.2 Отдельное квантование параметра строки

В модуле квантования и кодирования параметры обрабатываются в порядке поступления из цикла анализа/синтеза. Этот модуль в состоянии генерировать два потока битов, один основной поток битов, который позволяет генерацию основного качественного аудиосигнала, и поток битов улучшения, который может использоваться в приложениях. Основной поток битов содержит частоту и амплитудные параметры, в то время как поток битов улучшения содержит фазовые параметры и информацию для квантования параметров конверта и частоты.

Для каждого фрейма входного сигнала передаются биты согласно требуемой скорости передачи. В каждом фрейме передается бит, который указывает, используются ли параметры конверта или нет.

Так как человеческая слуховая система не чувствительна к изменениям фазы, то кодируются и передаются в основном потоке битов только частота и информация об амплитуде линий спектра. В этом случае необходимо предоставить информацию для декодера, который позволяет генерировать сигнал, свободный от фазовых разрывов на границах фрейма. Первый этап обработки обнаруживает строки, которые продолжаются от одного фрейма до другого. Если строка должна продолжаться от предыдущего фрейма, квантуются только частота и амплитудные изменения и передаются вместо абсолютной частоты и амплитудных значений. Продолжение строки используется, если относительное изменение частоты

не превышает порог и если отношение амплитуд

находится в пределах интервала [1... ]. Если есть более одной возможности продолжать строку от предыдущего фрейма, выбирается та строка в предыдущем фрейме, для которого следующий критерий достигает своего максимума:

.

Частоты и амплитуды отдельных строк квантуются согласно шкале частот и логарифмической шкале амплитуд. Для каждой строки предыдущего фрейма бит продолжения передается в потоке битов, который указывает, продолжается ли строка в текущем фрейме или нет. Для новых строк индексы для квантованной частоты и амплитуды кодируются, используя SubDivisionCode (SDC). Для всех строк, продолжаемых от предыдущего фрейма, индексные различия частоты и амплитуды, кодируются с кодом энтропии.

Так как основной поток битов не содержит фазовую информацию, нет необходимости вычислять остаточный ошибочный сигнал, вычитая соответствующий выходной сигнал декодера входного сигнала. Чтобы включить режимы масштабируемости, в которых остаточный сигнал передается в потоке битов более высокой скорости передачи, генерируют дополнительный поток битов улучшения. Это создается следующим образом.

Если параметры конверта передаются в основном потоке битов, для лучшего квантования передаются дополнительные биты 3 параметров конверта.

Если строка запускается, то есть не продолжаемая от предыдущего фрейма, и его частота превышает данный порог, для лучшего квантования передаются дополнительные биты абсолютной частоты.

Для каждой строки фазовый параметр передается после универсального квантования.

Число битов на фрейм в потоке битов улучшения может измениться, это должно быть принято во внимание в вычислении доступных битов для кодирования остаточной ошибки.

Так как позиция продолжительной строки в текущем фрейме зависит от позиции его предшественника в предыдущем фрейме, используется алгоритм выделения, который гарантирует, что строки N, переданные в текущем фрейме, всегда являются N большинством соответствующих строк, найденных циклом анализа/синтеза.

Системная задержка кодера равна 1,5 длины фрейма. Эта задержка следует из длины фрейма непосредственно и дополнительной задержки (0,5) времени длины фрейма, вызванная смещенным накладывающимся окном, используемым для оценки частоты.

SDC-кодирование:

k: число кодовых комбинаций (0... k-1)

i: значение для кодирования

tab: таблица, содержащая доменные пределы

void SDCEncode (int k, i, int * tab)

{
int * pp;
int g, dp, min, max, cwl;
long cw;
cw=cwl=
0;
min=
0

max=k-1;

pp=fab+16;

dp=16;

while (min ! = max)
{

if (dp)g=(k*(*pp))>>10; else g = (max+min)>>1;
dp>> =
1;
cw<< =
1;

cwl++;

if (i<=g){pp -=dp; max=g;} else {cw |=1; pp+=dp; min=g+1;}

}

PutBits (cw, cwl);

}

PutBits () пишет кодовую комбинацию в поток битов, где LSB по часовой стрелке являются "vlclbf" кодовой комбинацией, и cwl определяет число битов, которые будут переданы.

А.2.2.3 Шумовое квантование параметра

Число шумовых параметров, которые квантуются и кодируются, зависит от размера компонента шумового сигнала. Если число шумовых параметров мало, никакие шумовые параметры не передаются. Для более высоких значений числа шумовых параметров соответствующие числа параметров LAR квантуются и кодируются. Из-за свойств коэффициентов отражения число переданных параметров LAR может быть решено во время разрядного выделения в кодере, и никакой перерасчет этих параметров не требуется.

Если устанавливается noiseEnvFlag, тогда дополнительный набор шумовых параметров конверта квантуется и кодируется.

А.2.3 Масштабируемость скорости передачи HILN

Параметрические сигнальные представления, используемые параметрическим кодером HILN, хорошо подходят для приложений, требующих скорости передачи масштабируемого кодирования. В таком приложении скорость передачи, полученная декодером, может быть динамически адаптирована к свойствам ссылки передачи или выбрана согласно некоторым другим правилам. В случае потока битов льготного тарифа передаются только параметры перцепционно соответствующих сигнальных компонентов (отдельные строки, гармонический тон, шум). В случае потока битов полного тарифа также передаются параметры дополнительных сигнальных компонентов (например, отдельные строки).

Эта масштабируемость скорости передачи для потоков битов HILN может быть реализована, используя основу и потоки битов уровня расширения или динамически управляемый параметр, кодирующий, как описано ниже.

А.2.3.1 Масштабируемость скорости передачи HILN динамически управляемым кодированием параметра

Чтобы реализовать масштабируемость скорости передачи посредством динамически управляемого кодирования параметра, используется то, что экстракцией параметра HILN и кодером параметра HILN можно управлять независимо. Параметры, сгенерированные инструментом экстракции параметра, могут обращаться к инструментам кодера параметра, каждый из которых генерирует поток битов с различной скоростью передачи. Также можно сохранить неквантованные параметры, сгенерированные инструментом экстракции параметра в файле. Затем инструмент кодера параметра может использоваться, чтобы генерировать поток битов с требуемой в настоящий момент скоростью передачи от параметров, сохраненных в этом файле.

А.3 Музыка/речь - смешанный инструмент кодера

Аудиопараметрический кодер используется для того, чтобы кодировать естественные аудиосигналы в очень низких скоростях передачи в пределах от 2 Кбит/с до 16 Кбит/с. Параметрический кодер обеспечивает два набора инструментов для того, чтобы кодировать речевые и неречевые аудиосигналы соответственно:

гармоническое векторное возбуждение (HVXC) инструментов подходит для того, чтобы кодировать речевые сигналы от 2 Кбит/с до 4 Кбит/с;

гармонические и отдельные строки плюс шум (HILN) инструментов подходят для того, чтобы кодировать не речевые аудиосигналы в скоростях передачи от 4 Кбит/с и выше.

В режиме только HVXC или только HILN, режим кодирования выбирается вручную во время кодирования, и выбранный режим используется для всего закодированного аудиосигнала.

Интегрированный параметрический кодер автоматически выбирает инструменты кодирования, которые подходят лучше всего для фактических характеристик входного сигнала. В случае речевого сигнала используются инструменты HVXC, а для музыки используются инструменты HILN. Этот выбор делается на основании решения об автоматическом инструменте классификации речи/музыки. Для сигналов, которые являются смесью речи и музыки, также возможно использовать инструменты HVXC и HILN одновременно.

А.3.1 Инструмент классификации музыки/речи

Это инструмент для параметрического речевого кодера, который включается автоматической идентификацией музыки/речи для параметрического кодера речи/аудио (HVXC и HILN). Инструмент принимает решения, использует внутренние параметры HVXC.

Этот инструмент классификации музыки/речи может быть применен двумя способами:

первые 5 секунд сигнала, который будет закодирован, анализируются инструментом классификации, и затем выбираются HVXC или HILN, чтобы кодировать сообщение согласно решению речи/музыки;

инструментом классификации управляют непрерывно, и его текущее решение речи/музыки используется, чтобы выбрать HVXC или HILN для текущего фрейма. В этом приложении должна быть принята во внимание задержка решения с 5 секундами.

А.3.1.1 Энергия фрейма

Энергия фрейма вычисляется как

,

где является входным сигналом.

В этом случае фреймы с энергетическими уровнями выше, чем предопределенный минимальный уровень, используются (исключая>-78 дБ). Краткосрочная средняя энергия фрейма определяется как

,


который вычисляется из последних четырех энергий фрейма.

Различие между энергией фрейма и краткосрочной средней энергией фрейма вычисляется как:

,

сохраняется приблизительно для 250 фреймов (5 секунд).

А.3.1.2 Сила подачи

В HVXC максимальная автокорреляция остатка LPC () вычисляется во время процесса обнаружения по дачи. сохраняются приблизительно для 250 фреймов.

А.3.1.3 Решение музыки/речи

Среднее значение и различие энергий фрейма и r0r вычисляются соответственно как:


.

В том же самом диапазоне среднего значения y речевых данных есть более высокие различия, чем музыкальные данные. Матрица классифицируется в трех областях.

(1) speech

(2) unknown

(3) music

Если среднее значение и различие включаются в область (1), данные классифицируются как речь. Если они находятся в области (3), данные классифицируются как музыка.

Если среднее значение и различие существуют в области (2), среднее значение и различие (дифференциального) энергетического фрейма используются дополнительно. У речевых данных есть более выразительные средства и различия , чем музыкальные данные. Речевые и музыкальные данные разделяются на следующие две области.

(1) speech

(3) music

Используя выше упомянутые два критерия, разделяются речь и музыка.

А.3.2 Интегрированный параметрический кодер

Интегрированный параметрический кодер может работать в следующих режимах:

PARAmode

Описание

0

Только HVXC

1

Только HILN

2

Переключенный HVXC/HILN

3

Смешанный HVXC/HILN

PARAmodes 0 и 1 представляют фиксированный HVXC и режимы HILN. PARAmode 2 разрешения автоматическое переключение между HVXC и HILN в зависимости от текущего типа входного сигнала. В PARAmode 3 HVXC и кодеры HILN могут использоваться одновременно, и их выходные сигналы добавляются (смешанные) в декодере.

Интегрированный параметрический кодер использует длину фрейма 40 мс и частоту дискретизации 8 кГц и может работать с 2025 бит/с или любой более высокой скоростью передачи.

А.3.2.1 Интегрированный параметрический кодер

Для режима "только HVXC" и "только HILN" параметрический кодер не изменяется. "Коммутируемые HVXC/HILN" и "смешанный HVXC/HILN" режимы описываются ниже.

А.3.2.2 Коммутируемый режим HVXC/HILN

Поскольку инструмент классификации речи/музыки основан на кодере HVXC, кодером HVXC управляют непрерывно для каждого фрейма. Фрейм потока битов, сгенерированный кодером HVXC и входным аудиосигналом, сохранен в двух буферах FIFO, чтобы компенсировать задержку с 5 секундами решения речи/музыки. Если фрейм классифицируется как "речь", тогда PARAswitchMode устанавливается в 0 и фрейм потока битов HVXC, доступный в FIFO потока битов, передается. В случае "музыкального" решения PARAswitchMode устанавливается в 1, и вывод сигнального буфера FIFO кодируется кодером HILN, и этот кадр потока битов HILN передается. Если HVXC используется для фрейма, кодер HILN сбрасывается (prevNumLine = 0).

А.3.2.3 Смешанный режим HVXC/HILN

Чтобы управлять параметрическим кодеком в "смешанном HVXC/HILN" режиме, речь и музыкальные компоненты входного сигнала должны быть разделены. Если оба компонента уже доступны отдельно (например, речь и фоновая музыка), кодирование является прямым.

Библиография

[1]

ИСО/МЭК 14496-3:2009

Информационные технологии. Кодирование аудиовизуальных объектов. Часть 3. Аудио

(ISO/IEC 14496-3:2009)

(Information technology - Coding of audio-visual objects - Part 3: Audio)

________________

Заменен на ISO/IEC 14496-3:2019.

УДК 621.396:006.354

ОКС 33.170

Ключевые слова: звуковое вещание, электрические параметры, каналы и тракты, технологии MPEG-кодирования, синтетический звук, масштабирование, защита от ошибок, поток битов расширения, психоакустическая модель




Электронный текст документа
и сверен по:

, 2020