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