7 Variables, constants and tables in the C‑code of the GSM EFR codec

3GPP46.060Enhanced Full Rate (EFR) speech transcodingRelease 17TS

The various components of the 12,2 kbit/s GSM enhanced full rate codec are described in the form of a fixed‑point bit‑exact ANSI C code, which is found in GSM 06.53 [6]. This C simulation is an integrated software of the speech codec, VAD/DTX, comfort noise and bad frame handler functions. In the fixed‑point ANSI C simulation, all the computations are performed using a predefined set of basic operators.

Two types of variables are used in the fixed‑point implementation. These two types are signed integers in 2’s complement representation, defined by:

Word16 16 bit variables

Word32 32 bit variables

The variables of the Word16 type are denoted var1, var2,…, varn, and those of type Word32 are denoted L_var1, L_var2,…, L_varn.

7.1 Description of the constants and variables used in the C code

The ANSI C code simulation of the codec is, to a large extent, self‑documented. However, a description of the variables and constants used in the code is given to facilitate the understanding of the code. The fixed‑point precision (in terms of Q format, double precision (DP), or normalized precision) of the vectors and variables is given, along with the vectors dimensions and constant values.

Table 3 gives the coder global constants and table 4 describes the variables and vectors used in the encoder routine with their precision. Table 5 describes the fixed tables in the codec.

Table 3: Codec global constants

Parameter

Value

Description

L_TOTAL

240

size of speech buffer

L_WINDOW

240

size of LP analysis window

L_FRAME

160

size of speech frame

L_FRAME_BY2

80

half the speech frame size

L_SUBFR

40

size of subframe

M

10

order of LP analysis

MP1

11

M+1

AZ_SIZE

44

4*M+4

PIT_MAX

143

maximum pitch lag

PIT_MIN

18

minimum pitch lag

L_INTERPOL

10

order of sinc filter for interpolating

the excitations is 2*L_INTERPOL*6+1

PRM_SIZE

57

size of vector of analysis parameters

SERIAL_SIZE

245

number of speech bits + bfi

MU

26214

tilt compensation filter factor (0.8 in Q15)

AGC_FAC

29491

automatic gain control factor (0.9 in Q15)

Table 4: Description of the coder vectors and variables

Parameter

Size

Precision

Description

speech

‑80..159

Q0

speech buffer

wsp

‑143..159

Q0

weighted speech buffer

exc

‑(143+11)..159

Q0

LP excitation

F_gamma1

0..9

Q15

spectral expansion factors

F_gamma2

0..9

Q15

spectral expansion factors

lsp_old

0..9

Q15

LSP vector in past frame

lsp_old_q

0..9

Q15

quantified LSP vector in past frame

mem_syn

0..9

Q0

memory of synthesis filter

mem_w

0..9

Q0

memory of weighting filter (applied to input)

mem_wO

0..9

Q0

memory of weighting filter (applied to error)

error

‑10..39

Q0

error signal (input minus synthesized speech)

r_1 & r_h

0..10

normalized DP

correlations of windowed speech (low and hi)

A_t

11×4

Q12

LP filter coefficients in 4 subframes

Aq_t

11×4

Q12

quantified LP filter coefficients in

4 subframes

Ap1

0..10

Q12

LP coefficients with spectral expansion

Ap2

0..10

Q12

LP coefficients with spectral expansion

lsp_new

0..9

Q15

LSP vector in 4th subframe

lsp_new_q

0..9

Q15

quantified LSP vector in 4th subframe

lsp_mid

0..9

Q15

LSP vector in 2nd subframe

lsp_mid_q

0..9

Q15

quantified LSP vector in 2nd subframe

code

0..39

Q12

fixed codebook excitation vector

h1

0..39

Q12

impulse response of weighted synthesis filter

xn

0..39

Q0

target vector in pitch search

xn2

0..39

Q0

target vector in algebraic codebook search

dn

0..39

scaled max

< 8192

backward filtered target vector

y1

0..39

Q0

filtered adaptive codebook vector

y2

0..39

Q12

filtered fixed codebook vector

zero

0..39

zero vector

res2

0..39

long‑term prediction residual

gain_pit

scalar

Q12

adaptive codebook gain

gain_code

scalar

Q0

algebraic codebook gain

Table 5: Codec fixed tables

Parameter

Size

Precision

Description

grid [ ]

61

Q15

grid points at which Chebyshev polynomials are evaluated

lag_h [ ] and lag_1 [ ]

10

DP

higher and lower parts of the lag window table

window_160_80 [ ]

240

Q15

1st LP analysis window

window_232_8 [ ]

240

Q15

2nd LP analysis window

table [ ] in Lsf_lsp ( )

65

Q15

table to compute cos(x) in Lsf_lsp ( )

slope [ ] in Lsp_lsf ( )

64

Q12

table to compute acos(x) in LSP_lsf ( )

table [ ] in Inv_sqrt ( )

49

table used in inverse square root computation

table [ ] in Log2 ( )

33

table used in base 2 logarithm computation

table [ ] in Pow2 ( )

33

table used in 2 to the power computation

mean_lsf [ ]

10

Q15

LSF means in normalized frequency [0.0, 0.5]

dico1_lsf [ ]

128 x 4

Q15

1st LSF quantizer in normalized frequency [0.0, 0.5]

dico2_lsf [ ]

256 x 4

Q15

2nd LSF quantizer in normalized frequency [0.0, 0.5]

dico3_lsf [ ]

256 x 4

Q15

3rd LSF quantizer in normalized frequency [0.0, 0.5]

dico4_lsf [ ]

256 x 4

Q15

4th LSF quantizer in normalized frequency [0.0, 0.5]

dico5_lsf [ ]

64 x 4

Q15

5th LSF quantizer in normalized frequency [0.0, 0.5]

qua_gain_pitch [ ]

16

Q14

quantization table of adaptive codebook gain

qua_gain_code [ ]

32

Q11

quantization table of fixed codebook gain

inter_6 [ ] in Interpol_6 ( )

25

Q15

interpolation filter coefficients in Interpol_6 ( )

inter_6 [ ] in Pred_lt_6 ( )

61

Q15

interpolation filter coefficients in Pred_lt_6 ( )

b [ ]

3

Q12

HP filter coefficients (numerator) in Pre_Process ( )

a [ ]

3

Q12

HP filter coefficients (denominator) in Pre_Process ( )

bitno [ ]

57

Q0

number of bits corresponding to transmitted parameters

Table 6: Source Encoder output parameters in order of occurrence
and bit allocation within the speech frame of 244 bits/20 ms

Bits (MSB‑LSB)

Description

s1 ‑ s7

index of 1st LSF submatrix

s8 ‑ s15

index of 2nd LSF submatrix

s16 ‑ s23

index of 3rd LSF submatrix

s24

sign of 3rd LSF submatrix

s25 ‑ s32

index of 4th LSF submatrix

s33 ‑ s38

index of 5th LSF submatrix

subframe 1

s39 ‑ s47

adaptive codebook index

s48 ‑ s51

adaptive codebook gain

s52

sign information for 1st and 6th pulses

s53 ‑ s55

position of 1st pulse

s56

sign information for 2nd and 7th pulses

s57 ‑ s59

position of 2nd pulse

s60

sign information for 3rd and 8th pulses

s61 ‑ s63

position of 3rd pulse

s64

sign information for 4th and 9th pulses

s65 ‑ s67

position of 4th pulse

s68

sign information for 5th and 10th pulses

s69 ‑ s71

position of 5th pulse

s72 ‑ s74

position of 6th pulse

s75 ‑ s77

position of 7th pulse

s78 ‑ s80

position of 8th pulse

s81 ‑ s83

position of 9th pulse

s84 ‑ s86

position of 10th pulse

s87 ‑ s91

fixed codebook gain

subframe 2

s92 ‑ s97

adaptive codebook index (relative)

s98 ‑ s141

same description as s48 ‑ s91

subframe 3

s142 ‑ s194

same description as s39 ‑ s91

subframe 4

s195 ‑ s244

same description as s92 ‑ s141