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 |