4 C code structure

26.0733GPPANSI-C code for the Adaptive Multi Rate (AMR) speech codecRelease 17TS

This clause gives an overview of the structure of the bit‑exact C code and provides an overview of the contents and organization of the C code attached to this document.

The C code has been verified on the following systems:

– Sun Microsystems workstations and GNU gcc compiler;

– DEC Alpha workstations and GNU gcc compiler;

– IBM PC/AT compatible computers with Linux operating system and GNU gcc compiler.

ANSI‑C 9899 was selected as the programming language because portability was desirable.

4.1 Contents of the C source code

The C code distribution has all files in the root level.

The distributed files with suffix "c" contain the source code and the files with suffix "h" are the header files. The ROM data is contained mostly in files with suffix "tab".

The C code distribution also contains one speech coder installation verification data file, "spch_dos.inp". The reference encoder output file is named "spch_dos.cod", the reference decoder input file is named "spch_dos.dec" and the reference decoder output file is named "spch_dos.out". These four files are formatted such that they are correct for an IBM PC/AT compatible computer. The same files with reversed byte order of the 16 bit words are named "spch_unx.inp", "spch_unx.cod", "spch_unx.dec" and "spch_unx.out", respectively.

Final verification is to be performed using the GSM Adaptive Multi-Rate test sequences described in GSM 06.74  [2].

Makefiles are provided for the platforms in which the C code has been verified (listed above). Once the software is installed, this directory will have a compiled version of encoder and decoder (the bit-exact C executables of the speech codec) and all the object files.

4.2 Program execution

The GSM Adaptive Multi-Rate codec is implemented in two programs:

(encoder) speech encoder;

(decoder) speech decoder.

The programs should be called like:

– encoder [encoder options] <speech input file> <parameter file>;

– decoder [decoder options] <parameter file> <speech output file>.

The speech files contain 16-bit linear encoded PCM speech samples and the parameter files contain encoded speech data and some additional flags.

The encoder and decoder options will be explained by running the applications with option –h. See the file readme.txt for more information on how to run the encoder and decoder programs.

4.3 Coding style

The C code is written according to the following structuring conventions. Each function func() that needs static variables is considered a module. A module consists of:

– a ‘state structure’ (struct) combining the static variables of the module;

– three auxiliary functions func_init(), func_reset(), and func_exit();

– the processing function func() itself.

The initialization function func_init() allocates (from the heap) a new state structure, calls the func_reset() function, stores the pointer to the newly allocated structure in its first function parameter, and returns with a value of 0 if completed successful or a value of 1 otherwise.

The reset function func_reset() takes a pointer to the state structure and resets all members of the structure to a predefined value (‘homing’).

The exit function func_exit() performs any necessary cleanup and frees the state structure memory.

The processing function func() also takes a pointer to the state structure as well as all other necessary parameters and performs its task using (and possibly modifying) the values in the state structure.

If a module calls other modules, the higher level state structure contains a pointer to the lower level state structures, and the init, reset, and exit functions recursively call the corresponding lower level functions.

By this convention, the code becomes "instantiable" (more than one copy of a module can be used in the same program) and the static data hierarchy is clearly visible in the code.

4.4 Code hierarchy

Figures 1 to 4 are call graphs that show the functions used in the speech codec, including the functions of VAD, DTX, and comfort noise generation.

Each column represents a call level and each cell a function. The functions contain calls to the functions in rightwards neighbouring cells. The time order in the call graphs is from the top downwards as the processing of a frame advances. All standard C functions: printf(), fwrite(), etc. have been omitted. Also, no basic operations (add(), L_add(), mac(), etc.) or double precision extended operations (e.g. L_Extract()) appear in the graphs. The initialization of the static RAM (i.e. calling the _init functions) is also omitted.

The basic operations are not counted as extending the depth, therefore the deepest level in this software is level 7.

The encoder call graph is broken down into three separate call graphs, Table 1 to 3.

Table 1: Speech encoder call structure

Speech_Encode_Frame

Pre_Process

cod_amr

Copy

Vad1[1]1

filter_bank

first_filter_stage

filter5

filter3

level_calculation

vad_decision

complex_estimate_adapt

complex_vad

noise_estimate_update

update_cntrl

hangover_addition

Vad21

block_norm

r_fft

c_fft

fn10Log10

Log2

Log2_norm

Pow2

tx_dtx_handler

lpc

Autocorr

Lag_window

Levinson

lsp

Az_lsp

Chebps

Q_plsf_5

Lsp_lsf

Lsf_wt

Vq_subvec

Vq_subvec_s

Reorder_lsf

Lsf_lsp

Int_lpc_1and3_2

Lsp_az

Get_lsp_pol

Int_lpc_1and3

Lsp_az

Get_lsp_pol

Q_plsf_3

Lsp_lsf

Lsf_wt

Copy

Vq_subvec3

Vq_subvec4

Reorder_lsf

Lsf_lsp

Int_lpc_1to3_2

Lsp_az

Get_lsp_pol

Int_lpc_1to3

Lsp_az

Get_lsp_pol

Copy

dtx_buffer

Copy

Log2

Log2_norm

dtx_enc

Lsp_lsf

Reorder_lsf

Lsf_lsp

Set_zero

lsp_reset

Copy

Q_plsf_reset

cl_ltp_reset

Pitch_fr_reset

check_lsp

pre_big

Weight_Ai

Residu

Syn_filt

ol_ltp

Pitch_ol

vad_tone_detection_update[2]2

Lag_max

vad_tone_detection2

Inv_sqrt

comp_corr2

hp_max2

vad_complex_detection_update2

Pitch_ol_wgh

comp_corr2

Lag_max2

vad_tone_detection_update2

vad_tone_detection2

gmed_n

hp_max2

vad_complex_detection_update2

vad_pitch_detection

LTP_flag_update[3]3

subframePreProc

Weight_Ai

Syn_filt

Residu

Copy

cl_ltp

Pitch_fr

getRange

Norm_Corr

Convolve

Inv_sqrt

searchFrac

Interpol_3or6

Enc_lag3

Enc_lag6

(continued)

Table 1 (concluded): Speech encoder call structure

Pred_lt_3or6

Convolve

G_pitch

check_gp_clipping

q_gain_pitch

cbsearch

see Table 2

gainQuant

see Table 3

update_gp_clipping

Copy

subframePostProc

Syn_filt

Pred_lt_3or6

Convolve

Prm2bits

Int2bin

Table 2: cbsearch call structure

cbsearch

code_2i40_9bits

cor_h_x

set_sign

cor_h

Inv_sqrt

search_2i40

build_code

code_2i40_11bits

cor_h_x

set_sign

cor_h

Inv_sqrt

search_2i40

build_code

code_3i40_14bits

cor_h_x

set_sign

cor_h

Inv_sqrt

search_3i40

build_code

code_4i40_17bits

cor_h_x

set_sign

cor_h

Inv_sqrt

search_4i40

build_code

code_8i40_31bits

cor_h_x

set_sign12k2

Inv_sqrt

cor_h

Inv_sqrt

search_10and8i40

build_code

compress_code

compress10

code_10i40_35bits

cor_h_x

set_sign12k2

Inv_sqrt

cor_h

Inv_sqrt

search_10and8i40

build_code

q_p

Table 3: gainQuant call structure

gainQuant

gc_pred_copy

Copy

gc_pred

Log2

Log2_norm

Log2_norm

calc_filt_energies

calc_target_energy

MR475_update_unq_pred

gc_pred_update

MR475_gain_quant

MR475_quant_store_results

Log2

Log2_norm

gc_pred_update

gc_pred

Log2

Log2_norm

Log2_norm

G_code

q_gain_code

Pow2

MR795_gain_quant

q_gain_pitch

MR795_gain_code_quant3

calc_unfilt_energies

Log2

Log2_norm

gain_adapt

gmed_n

MR795_gain_code_quant_mod

sqrt_l_exp

Qua_gain

Pow2

gc_pred_update

Table 4: Speech decoder call structure

Speech_Decode_Frame

Bits2prm

Bin2int

Decoder_amr

rx_dtx_handler

Decoder_amr_reset

lsp_avg_reset

D_plsf_reset

ec_gain_pitch_reset

ec_gain_code_reset

gc_pred_reset

Bgn_scd_reset

Set_zero

ph_disp_reset

dtx_dec_reset

Copy

Set_zero

dtx_dec

Copy

Lsf_lsp

Init_D_plsf_3

Copy

D_plsf_3

Reorder_lsf

Copy

Lsf_lsp

pseudonoise

Lsp_lsf

Reorder_lsf

Lsp_Az

Get_lsp_pol

A_Refl

Log2

Log2_norm

Build_CN_code

pseudonoise

Syn_filt

Lsf_lsp

lsp_avg

Copy

D_plsf_3

Reorder_lsf

Copy

Lsf_lsp

Int_lpc_1to3

Lsp_Az

Get_lsp_pol

D_plsf_5

Reorder_lsf

Copy

Lsf_lsp

Int_lpc_1and3

Lsp_Az

Get_lsp_pol

Dec_lag3

Pred_lt_3or6

Dec_lag6

decode_2i40_9bits

decode_2i40_11bits

decode_3i40_14bits

decode_4i40_17bits

decode_8i40_31bits

decompress_code

decompress10

ec_gain_pitch

gmed_n

d_gain_pitch

ec_gain_pitch_update

decode_10i40_35bits

Dec_gain

Log2

Log2_norm

gc_pred

Log2

Log2_norm

Log2_norm

Pow2

gc_pred_update

ec_gain_code

gmed_n

gc_pred_average_limeted

gc_pred_update

ec_gain_code_update

d_gain_code

gc_pred

Log2

Log2_norm

Log2_norm

Pow2

gc_pred_update

Int_lsf

Cb_gain_average

ph_disp_release

ph_disp_lock

ph_disp

sqrt_l_exp

Ex_ctrl

gmed_n

agc2

Inv_sqrt

Syn_filt

Bgn_scd

gmed_n

dtx_dec_activity_update

Copy

Log2

Log2_norm

lsp_avg

Post_Filter

Copy

Weight_Ai

Residu

Set_zero

Syn_filt

Preemphasis

agc

energy_old

energy_new

energy_old

Inv_sqrt

Post_Process

4.5 Variables, constants and tables

The data types of variables and tables used in the fixed point implementation are signed integers in 2’s complement representation, defined by:

Word16 16 bit variable;

Word32 32 bit variable.

Furthermore some enum types are used, all possible to represent with one byte, and a Boolean Flag.

4.5.1 Description of constants used in the C-code

This subclause contains a listing of all global constants defined in cnst.h.

Table 5: Global constants

Constant

Value

Description

L_TOTAL

320

total size of speech buffer.

L_WINDOW

240

window size in LP analysis

L_FRAME

160

frame size

L_FRAME_BY2

80

frame size divided by 2

L_SUBFR

40

subframe size

L_CODE

40

codevector length

NB_TRACK

5

number of tracks

STEP

5

codebook step size

NB_TRACK_MR102

4

number of tracks mode mr102

STEP_MR102

4

codebook step size mode mr102

M

10

order of LP filter

MP1

(M+1)

order of LP filter + 1

LSF_GAP

205

minimum distance between LSF after quantization; 50 Hz = 205

LSP_PRED_FAC_MR122

21299

MR122 LSP prediction factor (0.65 Q15)

AZ_SIZE

44

size of array of LP filters in 4 subframes (4*M+4)

PIT_MIN_MR122

18

minimum pitch lag (MR122 mode)

PIT_MIN

20

minimum pitch lag (all other modes)

PIT_MAX

143

maximum pitch lag

L_INTERPOL

(10+1)

length of filter for interpolation

L_INTER_SRCH

4

length of filter for CL LTP search interpolation

MU

26214

factor for tilt compensation filter 0,8

AGC_FAC

29491

factor for automatic gain control 0,9

L_NEXT

40

overhead in LP analysis

SHARPMAX

13017

maximum value of pitch sharpening

SHARPMIN

0

minimum value of pitch sharpening

MAX_PRM_SIZE

57

max. num. of params

MAX_SERIAL_SIZE

244

max. num. of serial bits

GP_CLIP

15565

pitch gain clipping = 0.95

N_FRAME

7

old pitch gains in average calculation

EHF_MASK

8

16 bit representation of all samples in the encoder homing frame (left justification)

4.5.2 Description of fixed tables used in the C-code

This section contains a listing of all fixed tables sorted by source file name and table name. All table data is declared as Word16.

Table 6: Fixed tables

File

Table name

Length

Description

c2_9pf.c

trackTable

4*5

track table for algebraic code book search (MR475, MR515)

cod_amr.c

gamma1

10

spectral expansion factors

cod_amr.c

gamma1_12k2

10

spectral expansion factors

cod_amr.c

gamma2

10

spectral expansion factors

dtx_dec.c

lsf_hist_mean_scale

10

initialization values for DTX lsf parameters

dtx_dec.c

dtx_log_en_adjust

9

level adjustments for ech mode

ec_gains.c

cdown

7

attenuation factors for codebook gain

ec_gains.c

pdown

7

attenuation factors for adaptive codebook gain

gc_pred.c

pred

4

algebraic code book gain MA predictor coefficients

gc_pred.c

pred_MR122

4

algebraic code book gain MA predictor coefficients (MR122)

pitch_fr.c

mode_dep_parm

72

parameters defining the adaptive codebook search per mode

post_pro.c

a

3

HP filter coefficients (denominator) in Post_Process

post_pro.c

b

3

HP filter coefficients (numerator) in Post_Process

pre_proc.c

a

3

HP filter coefficients (denominator) in Pre_Process

pre_proc.c

b

3

HP filter coefficients (numerator) in Pre_Process

pred_lt.c

inter_6

61

interpolation filter coefficients

pstfilt.c

gamma3_MR122

10

spectral expansion factors

pstfilt.c

gamma3

10

spectral expansion factors

pstfilt.c

gamma4_MR122

10

spectral expansion factors

pstfilt.c

gamma4

10

spectral expansion factors

bitno.tab

prmno

9

number of bits for each mode

bitno.tab

prmnofsf

8

number of parameters for LPC and first subframe for each mode (used for decoder homing procedure)

bitno.tab

bitno

9

pointers to the bitno_MR… tables

bitno.tab

bitno_MR475

17

number of bits per parameter to transmit (MR475)

bitno.tab

bitno_MR515

19

number of bits per parameter to transmit (MR515)

bitno.tab

bitno_MR59

19

number of bits per parameter to transmit (MR59)

bitno.tab

bitno_MR67

19

number of bits per parameter to transmit (MR67)

bitno.tab

bitno_MR74

19

number of bits per parameter to transmit (MR74)

bitno.tab

bitno_MR795

23

number of bits per parameter to transmit (MR795)

bitno.tab

bitno_MR102

39

number of bits per parameter to transmit (MR102)

bitno.tab

bitno_MR122

57

number of bits per parameter to transmit (MR122)

bitno.tab

bitno_MRDTX

5

number of bits per parameter to transmit (MRDTX)

c2_11pf.tab

startPos1

2

track start search position for first pulse

c2_11pf.tab

startPos2

4

track start search position for second pulse

c2_9pf.tab

startPos

16

track start search position

corrwght.tab

corrweight

251

weighting of the correlation function in open loop LTP search (MR102)

d_homing.tab

dhf

8

pointers to the dhf_MR… tables

d_homing.tab

dhf_MR475

17

parameter values for the decoder homing frame (MR475)

d_homing.tab

dhf_MR515

19

parameter values for the decoder homing frame (MR515)

d_homing.tab

dhf_MR59

19

parameter values for the decoder homing frame (MR59)

d_homing.tab

dhf_MR67

19

parameter values for the decoder homing frame (MR67)

d_homing.tab

dhf_MR74

19

parameter values for the decoder homing frame (MR74)

d_homing.tab

dhf_MR795

23

parameter values for the decoder homing frame (MR795)

d_homing.tab

dhf_MR102

39

parameter values for the decoder homing frame (MR102)

d_homing.tab

dhf_MR122

57

parameter values for the decoder homing frame (MR122)

gains.tab

qua_gain_pitch

16

adaptive codebook gain quantization table (MR122, MR795)

gains.tab

qua_gain_code

96

fixed codebook gain quantization table (MR122, MR795)

gray.tab

gray

8

gray coding table

gray.tab

dgray

8

gray decoding table

grid.tab

grid

61

grid points at wich Chebyshev polynomials are evaluated

inter_36.tab

inter_6

25

interpolation filter coefficients

inv_sqrt.tab

table

49

table used in inverse square root computation

lag_wind.tab

lag_h

10

high part of the lag window table

lag_wind.tab

lag_l

10

low part of the lag window table

(continued)

Table 6 (concluded): Fixed tables

File

Table name

Length

Description

log2.tab

table

33

table used inbase 2 logharithm computation

lsp.tab

lsp_init_data

10

initialization table for lsp history in DTX

lsp_lsf.tab

table

65

table to compute cos(x) in Lsf_lsp()

lsp_lsf.tab

slope

64

table to compute acos(x) in Lsp_lsf()

ph_disp.tab

ph_imp_low_MR795

40

phase dispersion impulse response (MR795)

ph_disp.tab

ph_imp_mid_MR795

40

phase dispersion impulse response (MR795)

ph_disp.tab

ph_imp_low

40

phase dispersion impulse response (MR475 – MR67)

ph_disp.tab

ph_imp_mid

40

phase dispersion impulse response (MR475 – MR67)

pow2.tab

table

33

table used in 2 to the power computation

q_plsf_3.tab

past_rq_init

80

initialization table for the MA predictor in DTX

q_plsf_3.tab

mean_lsf

10

LSF means (not in MR122)

q_plsf_3.tab

pred_fac

10

LSF prediction factors (not in MR122)

q_plsf_3.tab

dico1_lsf

3*256

1st LSF quantizer (not in MR122 and MR795)

q_plsf_3.tab

dico2_lsf

3*512

2nd LSF quantizer (not in MR122)

q_plsf_3.tab

dico3_lsf

4*512

3rd LSF quantizer (not in MR122, MR515 and MR475)

q_plsf_3.tab

mr515_3_lsf

4*128

3rd LSF quantizer (MR515 and MR475)

q_plsf_3.tab

mr795_1_lsf

3*512

1st LSF quantizer (MR795)

q_plsf_5.tab

mean_lsf

10

LSF means (MR122)

q_plsf_5.tab

dico1_lsf

4*128

1st LSF quantizer (MR122)

q_plsf_5.tab

dico2_lsf

4*256

2nd LSF quantizer (MR122)

q_plsf_5.tab

dico3_lsf

4*256

3rd LSF quantizer (MR122)

q_plsf_5.tab

dico4_lsf

4*256

4th LSF quantizer (MR122)

q_plsf_5.tab

dico5_lsf

4*64

5th LSF quantizer (MR122)

qgain475.tab

table_gain_MR475

4*256

gain quantization table (MR475)

qua_gain.tab

table_gain_highrates

128*4

gain quantization table (MR67, MR74 and MR102)

qua_gain.tab

table_gain_lowrates

64*4

gain quantization table (MR515 and MR59)

R_fft.c

phs_tbl

128

sine/cosine phase table

R_fft.c

ii_table

8

indexing table

sqrt_l

table

49

table to compute sqrt(x)

Vad1.c

ch_tbl

2*16

channel energy combination table

Vad1.c

ch_tbl_sh

16

channel energy scaling table

Vad1.c

vm_tbl

90

voice metric table

Vad1.c

hangover_table

20

used to determine hangover as a function of SNR

Vad1.c

burstcount_table

20

used to determine burst count threshold as a function of SNR

Vad1.c

vm_thresh_table

20

used to determine the voice metric threshold as a function of SNR

Vad1.c

energy state tables

2*6

constants as a function of scaling state

window.tab

window_200_40

240

LP analysis window (not in MR122)

window.tab

window_160_80

240

1st LP analysis window (MR122)

window.tab

window_232_8

240

2nd LP analysis window (MR122)

4.5.3 Static variables used in the C-code

In this section two tables that specify the static variables for the speech encoder and decoder respectively are shown. All static variables are declared within a C struct.

Table 7: Speech encoder static variables

Struct name

Variable

Type[Length]

Description

Speech_Encode_
FrameState

cod_amr_state

cod_amrState

see below in this table

pre_state

Pre_ProcessState

see below in this table

dtx

Flag

Is set if DTX functionality is used

complexityCounter

int

Used for wMOPS counting

Pre_ProcessState

y2_hi

Word16

filter state, upper word

y2_lo

Word16

filter state, lower word

y1_hi

Word16

filter state, upper word

y1_lo

Word16

filter state, lower word

x0

Word16

filter state

x1

Word16

filter state

cod_amrState

old_speech

Word16[320]

speech buffer

speech

Word16*

pointer to current frame in old_speech

p_window

Word16*

pointer to LPC analysis window in old_speech

p_window_12k2

Word16*

pointer to LPC analysis window with no lookahead in old_speech (MR122)

new_speech

Word16*

pointer to the last 160 speech samples in old_speech

old_wsp

Word16[303]

buffer holding spectral weighted speech

wsp

Word16*

pointer to the current frame in old_wsp

old_lags

Word16[5]

open loop LTP states

ol_gain_flg

Word16[2]

enables open loop pitch lag weighting (MR102)

old_exc

Word16[314]

excitation vector

exc

Word16*

current excitation

ai_zero

Word16[51]

history of weighted synth. filter followed by zero vector

zero

Word16*

zero vector

h1

Word16*

impulse response of weighted synthesis filter

hvec

Word16[80]

zero vector followed by impulse response

lpcSt

lpcState

see below in this table

lspSt

lspState

see below in this table

clLtpSt

clLtpState

see below in this table

gainQuantSt

gainQuantState

see below in this table

pitchOLWghtSt

pitchOLWghtState

see below in this table

tonStabSt

tonStabState

see below in this table

vadSt

vadState1

see below in this table

vadSt

vadState2

see below in this table

dtx

Flag

is set if DTX functionality is used

dtx_encSt

dtx_encState

see below in this table

mem_syn

Word16[10]

synthesis filter memory

mem_w0

Word16[10]

weighting filter memory (applied to error signal)

mem_w

Word16[10]

weighting filter memory (applied to input signal)

mem_err

Word16[50]

filter memory for production of error vector

error

Word16*

error signal (input minus synthesized speech)

sharp

Word16

pitch sharpening gain

vadState1

bckr_est

Word16[9]

background noise estimate

ave_level

Word16[9]

averaged input components for stationary estimation

old_level

Word16[9]

input levels of the previous frame

sub_level

Word16[9]

input levels calculated at the end of a frame (lookahead)

a_data5

Word16[6]

memory for the filter bank

a_data3

Word16[5]

memory for the filter bank

burst_count

Word16

counts length of a speech burst

hang_count

Word16

hangover counter

stat_count

Word16

stationary counter

vadreg

Word16

15 flags for intermediate VAD decisions

pitch

Word16

15 flags for pitch detection

tone

Word16

15 flags for tone detection

complex_high

Word16

flags for complex detection

complex_low

Word16

flags for complex detection

oldlag_count

Word16

variables for pitch detection

oldlag

Word16

variables for pitch detection

complex_hang_count

Word16

complex hangover counter, used by VAD

complex_hang_timer

Word16

hangover initiator, used by CAD

best_corr_hp

Word16

filtered value

speech_vad_decision

Word16

final decision

complex_warning

Word16

complex background warning

sp_burst_count

Word16

counts length of a speech burst incl HO addition

corr_hp_fast

Word16

filtered value

vadState2

pre_emp_mem

Word16

input pre-emphasis memory

update_cnt

Word16

noise update counter

hyster_cnt

Word16

hysteresis counter

last_update_cnt

Word16

noise update counter value for last frame

ch_enrg_long_db

Word16[16]

long term channel energy in dB

Lframe_cnt

Word32

10 ms frame counter

Lch_enrg

Word32[16]

channel energy estimate

Lch_noise

Word32[16]

channel noise estimate

last_normb_shift

Word16

block shift factor for last frame, used for pre_emp_mem

tsnr

Word16

total estimated peak SNR in dB

hangover

Word16

VAD hangover

burstcount

Word16

number of consecutive voice active frames

fupdate_flag

Word16

A flag to control a forced update of the noise estimate

negSNRvar

Word16

SNR variability

negSNRbias

Word16

sensitivity bias

shift_state

Word16

indicates scaling state of channel energy estimate

L_R0

Word32

LTP energy

L_Rmax

Word32

LTP max correlation

LTP_flag

Flag

set when open loop pitch prediction gain > threshold

dtx_encState

lsp_hist

Word16[80]

LSP history (8 frames)

log_en_hist

Word16[8]

logarithmic frame energy history (8 frames)

hist_ptr

Word16

pointer to the cyclic history vectors

log_en_index

Word16

Index for logarithmic energy

init_lsf_vq_index

Word16

initial index for lsf predictor

lsp_index

Word16[3]

lsp indecies to the three code books

dtxHangoverCount

Word16

is decreased in DTX hangover period

decAnaElapsedCount

Word16

counter for elapsed speech frames in DTX

lpcState

LevinsonSt

LevinsonState

see below

LevinsonState

old_A

Word16[11]

last frames direct form coefficients

lspState

lsp_old

Word16[10]

old LSP vector

lsp_old_q

Word16[10]

old quantized LSP vector

qSt

Q_plsfState

see below in this table

Q_plsfState

past_rq

Word16[10]

past quantized LSF prediction error

clLtpState

pitchSt

Pitch_frState

see below in this table

tonStabState

count

Word16

count consecutive (potential) resonance frames

gp

Word16[7]

pitch gain history

Pitch_frState

T0_prev_subframe

Word16

integer. pitch lag of previous subframe

gainQuantState

sf0_exp_gcode0

Word16

subframe 0/2 codebook gain exponent

sf0_frac_gcode0

Word16

subframe 0/2 codebook gain fraction

sf0_exp_target_en

Word16

subframe 0/2 target energy exponent

sf0_frac_target_en

Word16

subframe 0/2 target energy fraction

sf0_exp_coeff

Word16[5]

subframe 0/2 energy coefficient exponents

sf0_frac_coeff

Word16[5]

subframe 0/2 energy coefficient fractions

gain_idx_ptr

Word16*

pointer to gain index value in parameter frame

gc_predSt

gc_predState

see below in this table

gc_predUncSt

gc_predState

see below in this table

adaptSt

GainAdaptState

see below in this table

gc_predState

past_qua_en

Word16[4]

MA predictor memory (20*log10(pred. error))

past_qua_en_MR122

Word16[4]

MA predictor memory, 12.2 style (log2(pred. error))

GainAdaptState

onset

Word16

onset counter

prev_alpha

Word16

previous adaptor output

prev_gc

Word16

previous codebook gain

ltpg_mem

Word16[5]

pitch gain history

pitchOLWghtState

old_T0_med

Word16

weighted open loop pitch lag

ada_w

Word16

weigthing level depeding on open loop pitch gain

wght_flg

Word16

switches lag weighting on and off

Table 8: Speech decoder static variables

Struct name

Variable

Type[Length]

Description

Speech_Decode_FrameState

decoder_amrState

Decoder_amrState

see below in this table

post_state

Post_FilterState

see below in this table

postHP_state

Post_ProcessState

see below in this table

ComplexityCounter

int

Used for wMOPS counting

Decoder_amrState

old_exc

Word16[194]

excitation vector

exc

Word16*

current excitation

lsp_old

Word16[10]

LSP vector of previous frame

mem_syn

Word16[10]

synthesis filter memory

sharp

Word16

pitch sharpening gain

old_T0

Word16

pitch sharpening lag

prev_bf

Word16

previous value of "bad frame" flag

prev_pdf

Word16

previous value of "pot. dangerous frame" flag

state

Word16

ECU state (0..6)

excEnergyHist

Word16[9]

excitation energy history

T0_lagBuff

Word16

received pitch lag for ECU

inBackgroundNoise

Word16

background noise flag

voicedHangover

Word16

hangover flag

ltpGainHistory

Word16[9]

pitch gain history

background_state

Bgn_scdState

see below in this table

Cb_gain_averState

Cb_gain_averageState

see below in this table

lsp_avg_st

lsp_avgState

see below in this table

lsfState

D_plsfState

see below in this table

ec_gain_p_st

ec_gain_pitchState

see below in this table

ec_gain_c_st

ec_gain_codeState

see below in this table

pred_state

gc_predState

see table 7

nodataSeed

Word16

seed for CN generator

ph_disp_st

ph_dispState

see below in this table

dtxDecoderState

dtx_decState

see below in this table

dtx_decState

since_last_sid

Word16

number of frames since last SID frame

true_sid_period_inv

Word16

inverse of true SID update rate

log_en

Word16

logarithmic frame energy

old_log_en

Word16

previous value of log_en

L_pn_seed_rx

Word32

random number generator seed

lsp

Word16[10]

LSP vector

lsp_old

Word16[10]

previous LSP vector

lsf_hist

Word16[80]

LSF vector history (8 frames)

lsf_hist_ptr

Word16

index to beginning of LSF history

lsf_hist_mean

Word16[80]

mean-removed LSF history (8 frames)

log_pg_mean

Word16

mean-removed logarithmic prediction gain

log_en_hist

Word16[8]

logarithmic frame energy history

log_en_hist_ptr

Word16

index to beginning of log, frame energy history

log_en_adjust

Word16

mode-dependent frame energy adjustment

dtxHangoverCount

Word16

counts down in hangover period

decAnaElapsedCount

Word16

counts elapsed speech frames after DTX

sid_frame

Word16

flags SID frames

valid_data

Word16

flags SID frames containing valid data

dtxHangoverAdded

Word16

flags hangover period at end of speech

dtxGlobalState

enum DTXStateType

DTX state flags

data_updated

Word16

flags CNI updates

Bgn_scdState

frameEnergyHist

Word16[60]

history of synthesis frame energy

bgHangover

Word16

number of frames since last speech frame

Cb_gain_averageState

cbGainHistory

Word16[7]

codebook gain history

hangVar

Word16

counts length of talkspurt in subframes

hangCount

Word16

number of subframes since last talkspurt

lsp_avgState

lsp_meanSave

Word16[10]

averaged LSP vector

D_plsfState

past_r_q

Word16[10]

past quantized LSF prediction vector

past_lsf_q

Word16[10]

past dequantized LSF vector

ec_gain_pitchState

pbuf

Word16[5]

pitch gain history

past_gain_pit

Word16

previous pitch gain (limited to 1.0)

prev_gp

Word16

previous good pitch gain

ec_gain_codeState

gbuf

Word16[5]

codebook gain history

past_gain_code

Word16

previous codebook gain

prev_gc

Word16

previous good codebook gain

ph_dispState

gainMem

Word16[5]

pitch gain history

prevState

Word16

previously used impulse response

prevCbGain

Word16

previous codebook gain

lockFull

Word16

force maximum phase dispersion

onset

Word16

onset counter

Post_FilterState

res2

Word16[40]

LP residual

mem_syn_pst

Word16[10]

synthesis filter memory

synth_buf

Word16[170]

synthesis filter work area

agc_state

agcState

see below in this table

preemph_state

preemphasisState

see below in this table

agcState

past_gain

Word16

past agc gain

preemphasisState

mem_pre

Word16

filter state

Post_ProcessState

y2_hi

Word16

filter state, upper word

y2_lo

Word16

filter state, lower word

y1_hi

Word16

filter state, upper word

y1_lo

Word16

filter state, lower word

x0

Word16

filter state

x1

Word16

filter state