7 Variables, constants and tables in the C‑code of the GSM EFR codec
06.603GPPEnhanced full rate speech transcodingTS
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 |