1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
ITU-T G.729A Annex B ANSI-C Source Code
Version 1.3 Last modified: August 1997
Copyright (c) 1996, France Telecom, Rockwell International,
Universite de Sherbrooke.
All rights reserved.
*/
/*--------------------------------------------------------------------------*
* Prototypes for DTX/CNG *
*--------------------------------------------------------------------------*/
/* Encoder DTX/CNG functions */
void Init_Cod_cng(void);
void Cod_cng(
Word16 *exc, /* (i/o) : excitation array */
Word16 pastVad, /* (i) : previous VAD decision */
Word16 *lsp_old_q, /* (i/o) : previous quantized lsp */
Word16 *Aq, /* (o) : set of interpolated LPC coefficients */
Word16 *ana, /* (o) : coded SID parameters */
Word16 freq_prev[MA_NP][M],
/* (i/o) : previous LPS for quantization */
Word16 *seed /* (i/o) : random generator seed */
);
void Update_cng(
Word16 *r_h, /* (i) : MSB of frame autocorrelation */
Word16 exp_r, /* (i) : scaling factor associated */
Word16 Vad /* (i) : current Vad decision */
);
/* SID gain Quantization */
void Qua_Sidgain(
Word16 *ener, /* (i) array of energies */
Word16 *sh_ener, /* (i) corresponding scaling factors */
Word16 nb_ener, /* (i) number of energies or */
Word16 *enerq, /* (o) decoded energies in dB */
Word16 *idx /* (o) SID gain quantization index */
);
/* CNG excitation generation */
void Calc_exc_rand(
Word16 cur_gain, /* (i) : target sample gain */
Word16 *exc, /* (i/o) : excitation array */
Word16 *seed, /* (i) : current Vad decision */
Flag flag_cod /* (i) : encoder/decoder flag */
);
/* SID LSP Quantization */
void Get_freq_prev(Word16 x[MA_NP][M]);
void Update_freq_prev(Word16 x[MA_NP][M]);
void Get_decfreq_prev(Word16 x[MA_NP][M]);
void Update_decfreq_prev(Word16 x[MA_NP][M]);
/* Decoder CNG generation */
void Init_Dec_cng(void);
void Dec_cng(
Word16 past_ftyp, /* (i) : past frame type */
Word16 sid_sav, /* (i) : energy to recover SID gain */
Word16 sh_sid_sav, /* (i) : corresponding scaling factor */
Word16 *parm, /* (i) : coded SID parameters */
Word16 *exc, /* (i/o) : excitation array */
Word16 *lsp_old, /* (i/o) : previous lsp */
Word16 *A_t, /* (o) : set of interpolated LPC coefficients */
Word16 *seed, /* (i/o) : random generator seed */
Word16 freq_prev[MA_NP][M]
/* (i/o) : previous LPS for quantization */
);
Word16 read_frame(FILE *f_serial, Word16 *parm);
/*--------------------------------------------------------------------------*
* Constants for DTX/CNG *
*--------------------------------------------------------------------------*/
/* DTX constants */
#define FLAG_COD (Flag)1
#define FLAG_DEC (Flag)0
#define INIT_SEED 11111
#define FR_SID_MIN 3
#define NB_SUMACF 3
#define NB_CURACF 2
#define NB_GAIN 2
#define FRAC_THRESH1 4855
#define FRAC_THRESH2 3161
#define A_GAIN0 28672
#define SIZ_SUMACF (NB_SUMACF * MP1)
#define SIZ_ACF (NB_CURACF * MP1)
#define A_GAIN1 4096 /* 32768L - A_GAIN0 */
#define RATE_8000 80 /* Full rate (8000 bit/s) */
#define RATE_SID 15 /* SID */
#define RATE_0 0 /* 0 bit/s rate */
/* CNG excitation generation constant */
/* alpha = 0.5 */
#define FRAC1 19043 /* (sqrt(40)xalpha/2 - 1) * 32768 */
#define K0 24576 /* (1 - alpha ** 2) in Q15 */
#define G_MAX 5000
|