FreeCalypso > hg > gsm-codec-lib
annotate libgsmhr1/vad.c @ 622:3ae5508f9a54 default tip
libgsmhr1/sp_sfrm.c: constify "ROM" static data
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 05 Mar 2026 21:56:18 +0000 |
| parents | 5773e3907b86 |
| children |
| rev | line source |
|---|---|
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * TITLE: Half-Rate GSM Voice Activity Detector (VAD) Modules |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * REFERENCE: Recommendation GSM 06.42 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | Include Files | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include "typedefs.h" |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
18 #include "namespace.h" |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #include "mathhalf.h" |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 #include "mathdp31.h" |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
21 #include "enc_state.h" |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #include "vad.h" |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 | Local Defines | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 /*** Floating point representations of constants pth, plev and margin ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #define M_PTH 26250 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #define E_PTH 18 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #define M_PLEV 17500 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #define E_PLEV 20 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #define M_MARGIN 27343 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #define E_MARGIN 27 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 * FUNCTION: vad_algorithm |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 * PURPOSE: Returns a decision as to whether the current frame being |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 * processed by the speech encoder contains speech or not. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 * INPUTS: pL_acf[0..8] autocorrelation of input signal frame |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 * swScaleAcf L_acf scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 * pswRc[0..3] speech encoder reflection coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 * swPtch flag to indicate a periodic signal component |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 * OUTPUTS: pswVadFlag vad decision |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
58 void vad_algorithm(struct vad_state *vst, Longword pL_acf[9], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
59 Shortword swScaleAcf, Shortword pswRc[4], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
60 Shortword swPtch, Shortword *pswVadFlag) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 pL_av0[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 pL_av1[9]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 swM_acf0, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 swE_acf0, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 pswRav1[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 swNormRav1, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 swM_pvad, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 swE_pvad, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 swStat, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 swTone, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 swVvad; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 energy_computation |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
92 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 pL_acf, swScaleAcf, |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
94 vst->pswRvad, vst->swNormRvad, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 &swM_pvad, &swE_pvad, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 &swM_acf0, &swE_acf0 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 average_acf |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
100 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 pL_acf, swScaleAcf, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 pL_av0, pL_av1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 predictor_values |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
106 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 pL_av1, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 pswRav1, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 &swNormRav1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 spectral_comparison |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
113 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 pswRav1, swNormRav1, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 pL_av0, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 &swStat |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 tone_detection |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
120 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 pswRc, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 &swTone |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 threshold_adaptation |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
126 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 swStat, swPtch, swTone, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 pswRav1, swNormRav1, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 swM_pvad, swE_pvad, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 swM_acf0, swE_acf0, |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
131 vst->pswRvad, &vst->swNormRvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
132 &vst->swM_thvad, &vst->swE_thvad |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 vad_decision |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
136 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 swM_pvad, swE_pvad, |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
138 vst->swM_thvad, vst->swE_thvad, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 &swVvad |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 vad_hangover |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
143 (vst, |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 swVvad, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 pswVadFlag |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 ); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 * FUNCTION: energy_computation |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 * PURPOSE: Computes the input and residual energies of the adaptive |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 * filter in a floating point representation. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 * INPUTS: pL_acf[0..8] autocorrelation of input signal frame |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 * swScaleAcf L_acf scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 * pswRvad[0..8] autocorrelated adaptive filter coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 * swNormRvad rvad scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 * OUTPUTS: pswM_pvad mantissa of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 * pswE_pvad exponent of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 * pswM_acf0 mantissa of signal frame energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 * pswE_acf0 exponent of signal frame energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
171 void energy_computation(struct vad_state *vst, Longword pL_acf[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
172 Shortword swScaleAcf, Shortword pswRvad[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
173 Shortword swNormRvad, Shortword *pswM_pvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
174 Shortword *pswE_pvad, Shortword *pswM_acf0, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
175 Shortword *pswE_acf0) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 L_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 pswSacf[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 swNormAcf, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 swNormProd, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 swShift; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 i; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 /*** Test if acf[0] is zero ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 if (pL_acf[0] == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 *pswE_pvad = -0x8000; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 *pswM_pvad = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 *pswE_acf0 = -0x8000; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 *pswM_acf0 = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 /*** Re-normalisation of L_acf[0..8] ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 swNormAcf = norm_l(pL_acf[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 swShift = sub(swNormAcf, 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 pswSacf[i] = extract_h(L_shl(pL_acf[i], swShift)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 /*** Computation of e_acf0 and m_acf0 ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 *pswE_acf0 = add(32, shl(swScaleAcf, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 *pswE_acf0 = sub(*pswE_acf0, swNormAcf); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 *pswM_acf0 = shl(pswSacf[0], 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 /*** Computation of e_pvad and m_pvad ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 *pswE_pvad = add(*pswE_acf0, 14); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 *pswE_pvad = sub(*pswE_pvad, swNormRvad); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 L_temp = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 for (i = 1; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 L_temp = L_mac(L_temp, pswSacf[i], pswRvad[i]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 L_temp = L_add(L_temp, L_shr(L_mult(pswSacf[0], pswRvad[0]), 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 if (L_temp <= 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 L_temp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 swNormProd = norm_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 *pswE_pvad = sub(*pswE_pvad, swNormProd); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 *pswM_pvad = extract_h(L_shl(L_temp, swNormProd)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 * FUNCTION: average_acf |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 * PURPOSE: Computes the arrays L_av0 [0..8] and L_av1 [0..8]. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 * INPUTS: pL_acf[0..8] autocorrelation of input signal frame |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 * swScaleAcf L_acf scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 * OUTPUTS: pL_av0[0..8] ACF averaged over last four frames |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 * pL_av1[0..8] ACF averaged over previous four frames |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
268 void average_acf(struct vad_state *vst, Longword pL_acf[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
269 Shortword swScaleAcf, Longword pL_av0[], Longword pL_av1[]) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 Longword L_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 Shortword swScale; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 int i; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 /*** computation of the scaleing factor ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 swScale = sub(10, shl(swScaleAcf, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 /*** Computation of the arrays L_av0 and L_av1 ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 L_temp = L_shr(pL_acf[i], swScale); |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
300 pL_av0[i] = L_add(vst->pL_sacf[i], L_temp); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
301 pL_av0[i] = L_add(vst->pL_sacf[i + 9], pL_av0[i]); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
302 pL_av0[i] = L_add(vst->pL_sacf[i + 18], pL_av0[i]); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
303 vst->pL_sacf[vst->swPt_sacf + i] = L_temp; |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
304 pL_av1[i] = vst->pL_sav0[vst->swPt_sav0 + i]; |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
305 vst->pL_sav0[vst->swPt_sav0 + i] = pL_av0[i]; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 /*** Update the array pointers ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
311 if (vst->swPt_sacf == 18) |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
312 vst->swPt_sacf = 0; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 else |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
314 vst->swPt_sacf = add(vst->swPt_sacf, 9); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
316 if (vst->swPt_sav0 == 27) |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
317 vst->swPt_sav0 = 0; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 else |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
319 vst->swPt_sav0 = add(vst->swPt_sav0, 9); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 * FUNCTION: predictor_values |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 * PURPOSE: Computes the array rav [0..8] needed for the spectral |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 * comparison and the threshold adaptation. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 * INPUTS: pL_av1 [0..8] ACF averaged over previous four frames |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 * OUTPUTS: pswRav1 [0..8] ACF obtained from L_av1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 * pswNormRav1 r_av1 scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
339 void predictor_values(struct vad_state *vst, Longword pL_av1[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
340 Shortword pswRav1[], Shortword *pswNormRav1) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 pswVpar[8], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 pswAav1[9]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
359 schur_recursion(vst, pL_av1, pswVpar); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
360 step_up(vst, 8, pswVpar, pswAav1); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
361 compute_rav1(vst, pswAav1, pswRav1, pswNormRav1); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 * FUNCTION: schur_recursion |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 * PURPOSE: Uses the Schur recursion to compute adaptive filter |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 * reflection coefficients from an autorrelation function. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 * INPUTS: pL_av1[0..8] autocorrelation function |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 * OUTPUTS: pswVpar[0..7] reflection coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
380 void schur_recursion(struct vad_state *vst, Longword pL_av1[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
381 Shortword pswVpar[]) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 pswAcf[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 pswPp[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 pswKk[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 swTemp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 int i, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 k, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 m, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 n; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 /*** Schur recursion with 16-bit arithmetic ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 if (pL_av1[0] == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 for (i = 0; i < 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 pswVpar[i] = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 swTemp = norm_l(pL_av1[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 for (k = 0; k <= 8; k++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 pswAcf[k] = extract_h(L_shl(pL_av1[k], swTemp)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 /*** Initialise array pp[..] and kk[..] for the recursion: ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 for (i = 1; i <= 7; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 pswKk[9 - i] = pswAcf[i]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 pswPp[i] = pswAcf[i]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 /*** Compute Parcor coefficients: ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 for (n = 0; n < 8; n++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 if (pswPp[0] < abs_s(pswPp[1])) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 for (i = n; i < 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 pswVpar[i] = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 pswVpar[n] = divide_s(abs_s(pswPp[1]), pswPp[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 if (pswPp[1] > 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 pswVpar[n] = negate(pswVpar[n]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 if (n == 7) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 /*** Schur recursion: ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 pswPp[0] = add(pswPp[0], mult_r(pswPp[1], pswVpar[n])); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 for (m = 1; m <= (7 - n); m++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 pswPp[m] = add(pswPp[1 + m], mult_r(pswKk[9 - m], pswVpar[n])); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 pswKk[9 - m] = add(pswKk[9 - m], mult_r(pswPp[1 + m], pswVpar[n])); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 * FUNCTION: step_up |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 * PURPOSE: Computes the transversal filter coefficients from the |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 * reflection coefficients. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 * INPUTS: swNp filter order (2..8) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 * pswVpar[0..np-1] reflection coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475 * OUTPUTS: pswAav1[0..np] transversal filter coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
479 void step_up(struct vad_state *vst, Shortword swNp, Shortword pswVpar[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
480 Shortword pswAav1[]) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 pL_coef[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 pL_work[9]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 swTemp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 i, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 m; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 /*** Initialisation of the step-up recursion ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 pL_coef[0] = L_shl(0x4000L, 15); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 pL_coef[1] = L_shl(L_deposit_l(pswVpar[0]), 14); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 /*** Loop on the LPC analysis order: ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515 for (m = 2; m <= swNp; m++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 for (i = 1; i < m; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 swTemp = extract_h(pL_coef[m - i]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 pL_work[i] = L_mac(pL_coef[i], pswVpar[m - 1], swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 for (i = 1; i < m; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 pL_coef[i] = pL_work[i]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 pL_coef[m] = L_shl(L_deposit_l(pswVpar[m - 1]), 14); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 /*** Keep the aav1[0..swNp] in 15 bits for the following subclause ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 for (i = 0; i <= swNp; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 pswAav1[i] = extract_h(L_shr(pL_coef[i], 3)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 * FUNCTION: compute_rav1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541 * PURPOSE: Computes the autocorrelation function of the adaptive |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 * filter coefficients. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 * INPUTS: pswAav1[0..8] adaptive filter coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 * OUTPUTS: pswRav1[0..8] ACF of aav1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 * pswNormRav1 r_av1 scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
551 void compute_rav1(struct vad_state *vst, Shortword pswAav1[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
552 Shortword pswRav1[], Shortword *pswNormRav1) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 pL_work[9]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 i, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566 k; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 /*** Computation of the rav1[0..8] ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 pL_work[i] = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 for (k = 0; k <= 8 - i; k++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 pL_work[i] = L_mac(pL_work[i], pswAav1[k], pswAav1[k + i]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585 if (pL_work[0] == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 *pswNormRav1 = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 *pswNormRav1 = norm_l(pL_work[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591 pswRav1[i] = extract_h(L_shl(pL_work[i], *pswNormRav1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 * FUNCTION: spectral_comparison |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601 * PURPOSE: Computes the stat flag needed for the threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 * adaptation decision. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 * INPUTS: pswRav1[0..8] ACF obtained from L_av1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605 * swNormRav1 rav1 scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 * pL_av0[0..8] ACF averaged over last four frames |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 * OUTPUTS: pswStat flag to indicate spectral stationarity |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
612 void spectral_comparison(struct vad_state *vst, Shortword pswRav1[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
613 Shortword swNormRav1, Longword pL_av0[], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
614 Shortword *pswStat) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 L_dm, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625 L_sump, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626 L_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629 pswSav0[9], |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630 swShift, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 swDivShift, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 swTemp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635 i; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 /*** Re-normalise L_av0[0..8] ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646 if (pL_av0[0] == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 pswSav0[i] = 4095; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 swShift = sub(norm_l(pL_av0[0]), 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 pswSav0[i] = extract_h(L_shl(pL_av0[i], swShift)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 /*** compute partial sum of dm ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660 L_sump = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 for (i = 1; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663 L_sump = L_mac(L_sump, pswRav1[i], pswSav0[i]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665 /*** compute the division of the partial sum by sav0[0] ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 if (L_sump < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668 L_temp = L_negate(L_sump); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 L_temp = L_sump; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 if (L_temp == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 L_dm = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 swShift = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679 pswSav0[0] = shl(pswSav0[0], 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 swShift = norm_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681 swTemp = extract_h(L_shl(L_temp, swShift)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683 if (pswSav0[0] >= swTemp) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 swDivShift = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686 swTemp = divide_s(swTemp, pswSav0[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 swDivShift = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 swTemp = sub(swTemp, pswSav0[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 swTemp = divide_s(swTemp, pswSav0[0]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695 if (swDivShift == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 L_dm = 0x8000L; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698 L_dm = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 L_dm = L_shl((L_add(L_dm, L_deposit_l(swTemp))), 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 if (L_sump < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703 L_dm = L_sub(0L, L_dm); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707 /*** Re-normalisation and final computation of L_dm ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 L_dm = L_shl(L_dm, 14); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 L_dm = L_shr(L_dm, swShift); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711 L_dm = L_add(L_dm, L_shl(L_deposit_l(pswRav1[0]), 11)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 L_dm = L_shr(L_dm, swNormRav1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715 /*** Compute the difference and save L_dm ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
717 L_temp = L_sub(L_dm, vst->L_lastdm); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
718 vst->L_lastdm = L_dm; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 if (L_temp < 0L) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721 L_temp = L_negate(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 /*** Evaluation of the state flag ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726 L_temp = L_sub(L_temp, 4456L); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728 if (L_temp < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729 *pswStat = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 *pswStat = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737 * FUNCTION: tone_detection |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 * PURPOSE: Computes the tone flag needed for the threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742 * adaptation decision. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 * INPUTS: pswRc[0..3] reflection coefficients calculated in the |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 * speech encoder short term predictor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 * OUTPUTS: pswTone flag to indicate a periodic signal component |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
751 void tone_detection(struct vad_state *vst, Shortword pswRc[4], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
752 Shortword *pswTone) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 L_num, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763 L_den, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764 L_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 swTemp, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768 swPredErr, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769 pswA[3]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 i; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780 *pswTone = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 /*** Calculate filter coefficients ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
785 step_up(vst, 2, pswRc, pswA); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788 /*** Calculate ( a[1] * a[1] ) ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790 swTemp = shl(pswA[1], 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 L_den = L_mult(swTemp, swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 /*** Calculate ( 4*a[2] - a[1]*a[1] ) ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 L_temp = L_shl(L_deposit_h(pswA[2]), 3); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797 L_num = L_sub(L_temp, L_den); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 /*** Check if pole frequency is less than 385 Hz ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 if (L_num <= 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 if (pswA[1] < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 swTemp = extract_h(L_den); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808 L_temp = L_msu(L_num, swTemp, 3189); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 if (L_temp < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 /*** Calculate normalised prediction error ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817 swPredErr = 0x7fff; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819 for (i = 0; i < 4; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821 swTemp = mult(pswRc[i], pswRc[i]); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 swTemp = sub(32767, swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 swPredErr = mult(swPredErr, swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 /*** Test if prediction error is smaller than threshold ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829 swTemp = sub(swPredErr, 1464); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 if (swTemp < 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 *pswTone = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 * FUNCTION: threshold_adaptation |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
842 * PURPOSE: Evaluates the secondary VAD decision. If speech is not |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
843 * present then the noise model rvad and adaptive threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
844 * thvad are updated. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
845 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
846 * INPUTS: swStat flag to indicate spectral stationarity |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
847 * swPtch flag to indicate a periodic signal component |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
848 * swTone flag to indicate a tone signal component |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
849 * pswRav1[0..8] ACF obtained from l_av1 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
850 * swNormRav1 r_av1 scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
851 * swM_pvad mantissa of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
852 * swE_pvad exponent of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
853 * swM_acf0 mantissa of signal frame energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
854 * swE_acf0 exponent of signal frame energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
855 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
856 * OUTPUTS: pswRvad[0..8] autocorrelated adaptive filter coefficients |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
857 * pswNormRvad rvad scaling factor |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
858 * pswM_thvad mantissa of decision threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
859 * pswE_thvad exponent of decision threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
860 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
861 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
862 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
863 void threshold_adaptation(struct vad_state *vst, Shortword swStat, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
864 Shortword swPtch, Shortword swTone, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
865 Shortword pswRav1[], Shortword swNormRav1, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
866 Shortword swM_pvad, Shortword swE_pvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
867 Shortword swM_acf0, Shortword swE_acf0, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
868 Shortword pswRvad[], Shortword *pswNormRvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
869 Shortword *pswM_thvad, Shortword *pswE_thvad) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
870 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
871 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
872 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
873 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
874 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
875 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
876 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
877 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
878 Longword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
879 L_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
880 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
881 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
882 swTemp, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
883 swComp, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
884 swComp2, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
885 swM_temp, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
886 swE_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
887 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
888 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
889 i; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
890 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
891 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
892 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
893 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
894 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
895 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
896 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
897 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
898 swComp = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
899 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
900 /*** Test if acf0 < pth; if yes set thvad to plev ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
901 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
902 if (swE_acf0 < E_PTH) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
903 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
904 if ((swE_acf0 == E_PTH) && (swM_acf0 < M_PTH)) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
905 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
906 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
907 if (swComp == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
908 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
909 *pswE_thvad = E_PLEV; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
910 *pswM_thvad = M_PLEV; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
911 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
912 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
913 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
914 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
915 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
916 /*** Test if an adaption is required ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
917 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
918 if (swPtch == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
919 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
920 if (swStat == 0) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
921 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
922 if (swTone == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
923 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
924 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
925 if (swComp == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
926 { |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
927 vst->swAdaptCount = 0; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
928 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
929 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
930 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
931 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
932 /*** Increment adaptcount ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
933 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
934 vst->swAdaptCount = add(vst->swAdaptCount, 1); |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
935 if (vst->swAdaptCount <= 8) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
936 return; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
937 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
938 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
939 /*** computation of thvad-(thvad/dec) ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
940 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
941 *pswM_thvad = sub(*pswM_thvad, shr(*pswM_thvad, 5)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
942 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
943 if (*pswM_thvad < 0x4000) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
944 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
945 *pswM_thvad = shl(*pswM_thvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
946 *pswE_thvad = sub(*pswE_thvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
947 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
948 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
949 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
950 /*** computation of pvad*fac ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
951 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
952 L_temp = L_mult(swM_pvad, 20889); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
953 L_temp = L_shr(L_temp, 15); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
954 swE_temp = add(swE_pvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
955 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
956 if (L_temp > 0x7fffL) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
957 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
958 L_temp = L_shr(L_temp, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
959 swE_temp = add(swE_temp, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
960 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
961 swM_temp = extract_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
962 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
963 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
964 /*** test if thvad < pavd*fac ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
965 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
966 if (*pswE_thvad < swE_temp) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
967 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
968 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
969 if ((*pswE_thvad == swE_temp) && (*pswM_thvad < swM_temp)) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
970 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
971 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
972 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
973 /*** compute minimum(thvad+(thvad/inc), pvad*fac) when comp = 1 ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
974 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
975 if (swComp == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
976 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
977 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
978 /*** compute thvad + (thvad/inc) ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
979 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
980 L_temp = L_add(L_deposit_l(*pswM_thvad),L_deposit_l(shr(*pswM_thvad, 4))); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
981 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
982 if (L_temp > 0x7fffL) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
983 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
984 *pswM_thvad = extract_l(L_shr(L_temp, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
985 *pswE_thvad = add(*pswE_thvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
986 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
987 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
988 *pswM_thvad = extract_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
989 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
990 swComp2 = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
991 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
992 if (swE_temp < *pswE_thvad) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
993 swComp2 = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
994 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
995 if ((swE_temp == *pswE_thvad) && (swM_temp < *pswM_thvad)) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
996 swComp2 = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
997 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
998 if (swComp2 == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
999 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1000 *pswE_thvad = swE_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1001 *pswM_thvad = swM_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1002 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1003 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1004 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1005 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1006 /*** compute pvad + margin ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1007 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1008 if (swE_pvad == E_MARGIN) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1009 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1010 L_temp = L_add(L_deposit_l(swM_pvad), L_deposit_l(M_MARGIN)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1011 swM_temp = extract_l(L_shr(L_temp, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1012 swE_temp = add(swE_pvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1013 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1014 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1015 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1016 if (swE_pvad > E_MARGIN) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1017 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1018 swTemp = sub(swE_pvad, E_MARGIN); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1019 swTemp = shr(M_MARGIN, swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1020 L_temp = L_add(L_deposit_l(swM_pvad), L_deposit_l(swTemp)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1021 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1022 if (L_temp > 0x7fffL) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1023 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1024 swE_temp = add(swE_pvad, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1025 swM_temp = extract_l(L_shr(L_temp, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1026 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1027 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1028 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1029 swE_temp = swE_pvad; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1030 swM_temp = extract_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1031 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1032 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1033 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1034 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1035 swTemp = sub(E_MARGIN, swE_pvad); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1036 swTemp = shr(swM_pvad, swTemp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1037 L_temp = L_add(L_deposit_l(M_MARGIN), L_deposit_l(swTemp)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1038 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1039 if (L_temp > 0x7fffL) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1040 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1041 swE_temp = add(E_MARGIN, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1042 swM_temp = extract_l(L_shr(L_temp, 1)); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1043 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1044 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1045 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1046 swE_temp = E_MARGIN; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1047 swM_temp = extract_l(L_temp); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1048 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1049 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1050 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1051 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1052 /*** Test if thvad > pvad + margin ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1053 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1054 swComp = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1055 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1056 if (*pswE_thvad > swE_temp) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1057 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1058 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1059 if ((*pswE_thvad == swE_temp) && (*pswM_thvad > swM_temp)) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1060 swComp = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1061 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1062 if (swComp == 1) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1063 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1064 *pswE_thvad = swE_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1065 *pswM_thvad = swM_temp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1066 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1067 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1068 /*** Normalise and retain rvad[0..8] in memory ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1069 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1070 *pswNormRvad = swNormRav1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1071 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1072 for (i = 0; i <= 8; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1073 pswRvad[i] = pswRav1[i]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1074 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1075 /*** Set adaptcount to adp + 1 ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1076 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1077 vst->swAdaptCount = 9; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1078 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1079 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1080 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1081 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1082 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1083 * FUNCTION: vad_decision |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1084 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1085 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1086 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1087 * PURPOSE: Computes the VAD decision based on the comparison of the |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1088 * floating point representations of pvad and thvad. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1089 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1090 * INPUTS: swM_pvad mantissa of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1091 * swE_pvad exponent of filtered signal energy |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1092 * swM_thvad mantissa of decision threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1093 * swE_thvad exponent of decision threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1094 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1095 * OUTPUTS: pswVvad vad decision before hangover is added |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1096 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1097 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1098 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1099 void vad_decision(struct vad_state *vst, Shortword swM_pvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1100 Shortword swE_pvad, Shortword swM_thvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1101 Shortword swE_thvad, Shortword *pswVvad) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1102 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1103 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1104 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1105 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1106 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1107 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1108 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1109 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1110 *pswVvad = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1111 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1112 if (swE_pvad > swE_thvad) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1113 *pswVvad = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1114 if ((swE_pvad == swE_thvad) && (swM_pvad > swM_thvad)) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1115 *pswVvad = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1116 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1117 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1118 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1119 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1120 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1121 * FUNCTION: vad_hangover |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1122 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1123 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1124 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1125 * PURPOSE: Computes the final VAD decision for the current frame |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1126 * being processed. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1127 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1128 * INPUTS: swVvad vad decision before hangover is added |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1129 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1130 * OUTPUTS: pswVadFlag vad decision after hangover is added |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1131 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1132 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1133 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1134 void vad_hangover(struct vad_state *vst, Shortword swVvad, |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1135 Shortword *pswVadFlag) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1136 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1137 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1138 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1139 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1140 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1141 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1142 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1143 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1144 if (swVvad == 1) |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1145 vst->swBurstCount = add(vst->swBurstCount, 1); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1146 else |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1147 vst->swBurstCount = 0; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1148 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1149 if (vst->swBurstCount >= 3) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1150 { |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1151 vst->swHangCount = 5; |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1152 vst->swBurstCount = 3; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1153 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1154 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1155 *pswVadFlag = swVvad; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1156 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1157 if (vst->swHangCount >= 0) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1158 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1159 *pswVadFlag = 1; |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1160 vst->swHangCount = sub(vst->swHangCount, 1); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1161 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1162 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1163 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1164 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1165 /**************************************************************************** |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1166 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1167 * FUNCTION: periodicity_update |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1168 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1169 * VERSION: 1.2 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1170 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1171 * PURPOSE: Computes the ptch flag needed for the threshold |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1172 * adaptation decision for the next frame. |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1173 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1174 * INPUTS: pswLags[0..3] speech encoder long term predictor lags |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1175 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1176 * OUTPUTS: pswPtch Boolean voiced / unvoiced decision |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1177 * |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1178 ***************************************************************************/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1179 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1180 void periodicity_update(struct vad_state *vst, Shortword pswLags[4], |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1181 Shortword *pswPtch) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1182 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1183 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1184 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1185 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1186 | Automatic Variables | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1187 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1188 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1189 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1190 Shortword |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1191 swMinLag, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1192 swMaxLag, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1193 swSmallLag, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1194 swLagCount, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1195 swTemp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1196 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1197 int |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1198 i, |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1199 j; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1200 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1201 /*_________________________________________________________________________ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1202 | | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1203 | Executable Code | |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1204 |_________________________________________________________________________| |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1205 */ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1206 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1207 /*** Run loop for No. of sub-segments in the frame ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1208 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1209 swLagCount = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1210 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1211 for (i = 0; i <= 3; i++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1212 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1213 /*** Search the maximum and minimum of consecutive lags ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1214 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1215 if (vst->swOldLag > pswLags[i]) |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1216 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1217 swMinLag = pswLags[i]; |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1218 swMaxLag = vst->swOldLag; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1219 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1220 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1221 { |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1222 swMinLag = vst->swOldLag; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1223 swMaxLag = pswLags[i]; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1224 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1225 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1226 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1227 /*** Compute smallag (modulo operation not defined) ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1228 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1229 swSmallLag = swMaxLag; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1230 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1231 for (j = 0; j <= 2; j++) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1232 { |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1233 if (swSmallLag >= swMinLag) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1234 swSmallLag = sub(swSmallLag, swMinLag); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1235 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1236 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1237 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1238 /*** Minimum of smallag and minlag - smallag ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1239 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1240 swTemp = sub(swMinLag, swSmallLag); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1241 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1242 if (swTemp < swSmallLag) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1243 swSmallLag = swTemp; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1244 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1245 if (swSmallLag < 2) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1246 swLagCount = add(swLagCount, 1); |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1247 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1248 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1249 /*** Save the current LTP lag ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1250 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1251 vst->swOldLag = pswLags[i]; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1252 } |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1253 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1254 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1255 /*** Update the veryoldlagcount and oldlagcount ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1256 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1257 vst->swVeryOldLagCount = vst->swOldLagCount; |
|
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1258 vst->swOldLagCount = swLagCount; |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1259 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1260 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1261 /*** Make ptch decision ready for next frame ***/ |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1262 |
|
615
5773e3907b86
libgsmhr1: integrate vad.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
614
diff
changeset
|
1263 swTemp = add(vst->swOldLagCount, vst->swVeryOldLagCount); |
|
614
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1264 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1265 if (swTemp >= 7) |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1266 *pswPtch = 1; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1267 else |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1268 *pswPtch = 0; |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1269 |
|
cf74197b9d4f
libgsmhr1/vad.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1270 } |
