FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/vad2.c @ 470:ea89eb8291bf
libgsmefr: add RTP-encoded DHF const datum to public API
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 14 May 2024 07:13:59 +0000 |
parents | 0152c069d01f |
children |
rev | line source |
---|---|
410
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ***************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ***************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : vad2.c |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Voice Activity Detection (VAD) for AMR (option 2) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 ***************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 /*************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 * FUNCTION NAME: vad2() |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 * PURPOSE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 * This function provides the Voice Activity Detection function option 2 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 * for the Adaptive Multi-rate (AMR) codec. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 * INPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 * farray_ptr |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 * pointer to Word16[80] input array |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * vadState2 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 * pointer to vadState2 state structure |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 * OUTPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 * state variables are updated |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 * RETURN VALUE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 * Word16 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 * VAD(m) - two successive calls to vad2() yield |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 * the VAD decision for the 20 ms frame: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 * VAD_flag = VAD(m-1) || VAD(m) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 *************************************************************************/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /* Includes */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 #include <stdint.h> |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 #include <string.h> |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 #include "tw_amr.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 #include "namespace.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 #include "typedef.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 #include "cnst.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 #include "basic_op.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 #include "oper_32b.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 #include "no_count.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 #include "log2.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 #include "pow2.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 #include "vad2.h" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 /* Local functions */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 /*************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 * FUNCTION NAME: fn10Log10 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 * PURPOSE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 * The purpose of this function is to take the 10*log base 10 of input and |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 * divide by 128 and return; i.e. output = 10*log10(input)/128 (scaled as 7,8) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 * INPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 * L_Input |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 * input (scaled as 31-fbits,fbits) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 * fbits |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 * number of fractional bits on input |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 * OUTPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 * none |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 * RETURN VALUE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 * Word16 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 * output (scaled as 7,8) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 * DESCRIPTION: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 * 10*log10(x)/128 = 10*(log10(2) * (log2(x<<fbits)-log2(1<<fbits)) >> 7 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 * = 3.0103 * (log2(x<<fbits) - fbits) >> 7 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 * = ((3.0103/4.0 * (log2(x<<fbits) - fbits) << 2) >> 7 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 * = (3.0103/4.0 * (log2(x<<fbits) - fbits) >> 5 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 *************************************************************************/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 static Word16 fn10Log10 (Word32 L_Input, Word16 fbits) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 Word16 integer; /* Integer part of Log2. (range: 0<=val<=30) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 Word16 fraction; /* Fractional part of Log2. (range: 0<=val<1) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 Word32 Ltmp; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 Word16 tmp; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 Log2(L_Input, &integer, &fraction); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 integer = sub(integer, fbits); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 Ltmp = Mpy_32_16 (integer, fraction, 24660); /* 24660 = 10*log10(2)/4 scaled 0,15 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 Ltmp = L_shr_r(Ltmp, 5+1); /* extra shift for 30,1 => 15,0 extract correction */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 tmp = extract_l(Ltmp); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 return (tmp); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 /*************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 * FUNCTION NAME: block_norm |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 * PURPOSE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 * The purpose of this function is block normalise the input data sequence |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 * INPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 * &in[0] |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 * pointer to data sequence to be normalised |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 * length |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 * number of elements in data sequence |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 * headroom |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 * number of headroom bits (i.e., |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 * OUTPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 * &out[0] |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 * normalised output data sequence pointed to by &out[0] |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 * RETURN VALUE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 * Word16 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 * number of bits sequence was left shifted |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 * DESCRIPTION: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 * 1) Search for maximum absolute valued data element |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 * 2) Normalise the max element with "headroom" |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 * 3) Transfer/shift the input sequence to the output buffer |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 * 4) Return the number of left shifts |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 * CAVEATS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 * An input sequence of all zeros will return the maximum |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 * number of left shifts allowed, NOT the value returned |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 * by a norm_s(0) call, since it desired to associate an |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 * all zeros sequence with low energy. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 *************************************************************************/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 static |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 Word16 block_norm (Word16 * in, Word16 * out, Word16 length, Word16 headroom) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 Word16 i, max, scnt, adata; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 max = abs_s(in[0]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 for (i = 1; i < length; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 adata = abs_s(in[i]); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 if (sub(adata, max) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 max = adata; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 if (max != 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 scnt = sub(norm_s(max), headroom); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 for (i = 0; i < length; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 out[i] = shl(in[i], scnt); move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 scnt = sub(16, headroom); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 for (i = 0; i < length; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 out[i] = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 return (scnt); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 /********************************************* The VAD function ***************************************************/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 Word16 vad2 (Word16 * farray_ptr, vadState2 * st) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 /* |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 * The channel table is defined below. In this table, the |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 * lower and higher frequency coefficients for each of the 16 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 * channels are specified. The table excludes the coefficients |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 * with numbers 0 (DC), 1, and 64 (Foldover frequency). |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 static const Word16 ch_tbl[NUM_CHAN][2] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 {2, 3}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 {4, 5}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 {6, 7}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 {8, 9}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 {10, 11}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 {12, 13}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 {14, 16}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 {17, 19}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 {20, 22}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 {23, 26}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 {27, 30}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 {31, 35}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 {36, 41}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 {42, 48}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 {49, 55}, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 {56, 63} |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 /* channel energy scaling table - allows efficient division by number |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 * of DFT bins in the channel: 1/2, 1/3, 1/4, etc. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 static const Word16 ch_tbl_sh[NUM_CHAN] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 16384, 16384, 16384, 16384, 16384, 16384, 10923, 10923, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 10923, 8192, 8192, 6554, 5461, 4681, 4681, 4096 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 /* |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 * The voice metric table is defined below. It is a non- |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 * linear table with a deadband near zero. It maps the SNR |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 * index (quantized SNR value) to a number that is a measure |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 * of voice quality. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 static const Word16 vm_tbl[90] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 8, 8, 9, 9, 10, 10, 11, 12, 12, 13, 13, 14, 15, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 24, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 24, 25, 26, 27, 28, 28, 29, 30, 31, 32, 33, 34, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 46, 47, 48, 49, 50, 50, 50, 50, 50, 50, 50, 50, |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 50, 50 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 /* hangover as a function of peak SNR (3 dB steps) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 static const Word16 hangover_table[20] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 30, 30, 30, 30, 30, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 8, 8, 8 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 /* burst sensitivity as a function of peak SNR (3 dB steps) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 static const Word16 burstcount_table[20] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 /* voice metric sensitivity as a function of peak SNR (3 dB steps) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 static const Word16 vm_threshold_table[20] = |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 40, 51, 71, 100, 139, 191, 257, 337, 432 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 }; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 /* State tables that use 22,9 or 27,4 scaling for ch_enrg[] */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 static const Word16 noise_floor_chan[2] = {NOISE_FLOOR_CHAN_0, NOISE_FLOOR_CHAN_1}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 static const Word16 min_chan_enrg[2] = {MIN_CHAN_ENRG_0, MIN_CHAN_ENRG_1}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 static const Word16 ine_noise[2] = {INE_NOISE_0, INE_NOISE_1}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 static const Word16 fbits[2] = {FRACTIONAL_BITS_0, FRACTIONAL_BITS_1}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 static const Word16 state_change_shift_r[2] = {STATE_1_TO_0_SHIFT_R, STATE_0_TO_1_SHIFT_R}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 /* Energy scale table given 30,1 input scaling (also account for -6 dB shift on input) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 static const Word16 enrg_norm_shift[2] = {(FRACTIONAL_BITS_0-1+2), (FRACTIONAL_BITS_1-1+2)}; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 /* Automatic variables */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 Word32 Lenrg; /* scaled as 30,1 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 Word32 Ltne; /* scaled as 22,9 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 Word32 Ltce; /* scaled as 22,9 or 27,4 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 Word16 tne_db; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 Word16 tce_db; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 Word16 input_buffer[FRM_LEN]; /* used for block normalising input data */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 Word16 data_buffer[FFT_LEN]; /* used for in-place FFT */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 Word16 ch_snr[NUM_CHAN]; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 Word16 ch_snrq; /* scaled as 15,0 (in 0.375 dB steps) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 Word16 vm_sum; /* scaled as 15,0 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 Word16 ch_enrg_dev; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 Word32 Lpeak; /* maximum channel energy */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 Word16 p2a_flag; /* flag to indicate spectral peak-to-average ratio > 10 dB */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 Word16 ch_enrg_db[NUM_CHAN]; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 Word16 ch_noise_db; /* scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 Word16 alpha; /* scaled as 0,15 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 Word16 one_m_alpha; /* scaled as 0,15 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 Word16 update_flag; /* set to indicate a background noise estimate update */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 Word16 i, j, j1, j2; /* Scratch variables */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 Word16 hi1, lo1; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 Word32 Ltmp, Ltmp1, Ltmp2; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 Word16 tmp; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 Word16 normb_shift; /* block norm shift count */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 Word16 ivad; /* intermediate VAD decision (return value) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 Word16 tsnrq; /* total signal-to-noise ratio (quantized 3 dB steps) scaled as 15,0 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 Word16 xt; /* instantaneous frame SNR in dB, scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 Word16 state_change; |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 /* Increment frame counter */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 st->Lframe_cnt = L_add(st->Lframe_cnt, 1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 /* Block normalize the input */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 normb_shift = block_norm(farray_ptr, input_buffer, FRM_LEN, FFT_HEADROOM); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 /* Pre-emphasize the input data and store in the data buffer with the appropriate offset */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 for (i = 0; i < DELAY; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 data_buffer[i] = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 st->pre_emp_mem = shr_r(st->pre_emp_mem, sub(st->last_normb_shift, normb_shift)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 st->last_normb_shift = normb_shift; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 data_buffer[DELAY] = add(input_buffer[0], mult(PRE_EMP_FAC, st->pre_emp_mem)); move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 for (i = DELAY + 1, j = 1; i < DELAY + FRM_LEN; i++, j++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 data_buffer[i] = add(input_buffer[j], mult(PRE_EMP_FAC, input_buffer[j-1])); move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 st->pre_emp_mem = input_buffer[FRM_LEN-1]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 for (i = DELAY + FRM_LEN; i < FFT_LEN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 data_buffer[i] = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 /* Perform FFT on the data buffer */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 r_fft(data_buffer); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 /* Use normb_shift factor to determine the scaling of the energy estimates */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 state_change = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 if (st->shift_state == 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 if (sub(normb_shift, -FFT_HEADROOM+2) <= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 state_change = 1; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 st->shift_state = 1; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 if (sub(normb_shift, -FFT_HEADROOM+5) >= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 state_change = 1; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 st->shift_state = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 /* Scale channel energy estimate */ test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 if (state_change) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 st->Lch_enrg[i] = L_shr(st->Lch_enrg[i], state_change_shift_r[st->shift_state]); move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 /* Estimate the energy in each channel */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 if (L_sub(st->Lframe_cnt, 1) == 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 alpha = 32767; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 one_m_alpha = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 alpha = CEE_SM_FAC; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 one_m_alpha = ONE_MINUS_CEE_SM_FAC; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 Lenrg = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 j1 = ch_tbl[i][0]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 j2 = ch_tbl[i][1]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 for (j = j1; j <= j2; j++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 Lenrg = L_mac(Lenrg, data_buffer[2 * j], data_buffer[2 * j]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 Lenrg = L_mac(Lenrg, data_buffer[2 * j + 1], data_buffer[2 * j + 1]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 /* Denorm energy & scale 30,1 according to the state */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 Lenrg = L_shr_r(Lenrg, sub(shl(normb_shift, 1), enrg_norm_shift[st->shift_state])); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 /* integrate over time: e[i] = (1-alpha)*e[i] + alpha*enrg/num_bins_in_chan */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 tmp = mult(alpha, ch_tbl_sh[i]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 L_Extract (Lenrg, &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 Ltmp = Mpy_32_16(hi1, lo1, tmp); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 L_Extract (st->Lch_enrg[i], &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 st->Lch_enrg[i] = L_add(Ltmp, Mpy_32_16(hi1, lo1, one_m_alpha)); move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 if (L_sub(st->Lch_enrg[i], min_chan_enrg[st->shift_state]) < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 st->Lch_enrg[i] = min_chan_enrg[st->shift_state]; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 /* Compute the total channel energy estimate (Ltce) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 Ltce = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 Ltce = L_add(Ltce, st->Lch_enrg[i]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 /* Calculate spectral peak-to-average ratio, set flag if p2a > 10 dB */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 Lpeak = 0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 for (i = LO_CHAN+2; i <= HI_CHAN; i++) /* Sine waves not valid for low frequencies */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 if (L_sub(st->Lch_enrg [i], Lpeak) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 Lpeak = st->Lch_enrg [i]; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 /* Set p2a_flag if peak (dB) > average channel energy (dB) + 10 dB */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 /* Lpeak > Ltce/num_channels * 10^(10/10) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 /* Lpeak > (10/16)*Ltce */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 L_Extract (Ltce, &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 Ltmp = Mpy_32_16(hi1, lo1, 20480); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 if (L_sub(Lpeak, Ltmp) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 p2a_flag = TRUE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 p2a_flag = FALSE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 /* Initialize channel noise estimate to either the channel energy or fixed level */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 /* Scale the energy appropriately to yield state 0 (22,9) scaling for noise */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 if (L_sub(st->Lframe_cnt, 4) <= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 if (p2a_flag == TRUE) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 st->Lch_noise[i] = INE_NOISE_0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 if (L_sub(st->Lch_enrg[i], ine_noise[st->shift_state]) < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 st->Lch_noise[i] = INE_NOISE_0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 if (st->shift_state == 1) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 st->Lch_noise[i] = L_shr(st->Lch_enrg[i], state_change_shift_r[0]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 st->Lch_noise[i] = st->Lch_enrg[i]; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 /* Compute the channel energy (in dB), the channel SNRs, and the sum of voice metrics */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 vm_sum = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 ch_enrg_db[i] = fn10Log10(st->Lch_enrg[i], fbits[st->shift_state]); move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 ch_noise_db = fn10Log10(st->Lch_noise[i], FRACTIONAL_BITS_0); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515 ch_snr[i] = sub(ch_enrg_db[i], ch_noise_db); move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 /* quantize channel SNR in 3/8 dB steps (scaled 7,8 => 15,0) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 /* ch_snr = round((snr/(3/8))>>8) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 /* = round(((0.6667*snr)<<2)>>8) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 /* = round((0.6667*snr)>>6) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 ch_snrq = shr_r(mult(21845, ch_snr[i]), 6); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 /* Accumulate the sum of voice metrics */ test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525 if (sub(ch_snrq, 89) < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 if (ch_snrq > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 j = ch_snrq; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 j = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 j = 89; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 vm_sum = add(vm_sum, vm_tbl[j]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 /* Initialize NOMINAL peak voice energy and average noise energy, calculate instantaneous SNR */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 test(),test(),logic16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 if (L_sub(st->Lframe_cnt, 4) <= 0 || st->fupdate_flag == TRUE) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 /* tce_db = (96 - 22 - 10*log10(64) (due to FFT)) scaled as 7,8 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 tce_db = 14320; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 st->negSNRvar = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
551 st->negSNRbias = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
552 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 /* Compute the total noise estimate (Ltne) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 Ltne = 0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 Ltne = L_add(Ltne, st->Lch_noise[i]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 /* Get total noise in dB */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 tne_db = fn10Log10(Ltne, FRACTIONAL_BITS_0); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 /* Initialise instantaneous and long-term peak signal-to-noise ratios */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 xt = sub(tce_db, tne_db); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 st->tsnr = xt; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 /* Calculate instantaneous frame signal-to-noise ratio */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570 /* xt = 10*log10( sum(2.^(ch_snr*0.1*log2(10)))/length(ch_snr) ) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 Ltmp1 = 0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 for (i=LO_CHAN; i<=HI_CHAN; i++) { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 /* Ltmp2 = ch_snr[i] * 0.1 * log2(10); (ch_snr scaled as 7,8) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 Ltmp2 = L_shr(L_mult(ch_snr[i], 10885), 8); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 L_Extract(Ltmp2, &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576 hi1 = add(hi1, 3); /* 2^3 to compensate for negative SNR */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 Ltmp1 = L_add(Ltmp1, Pow2(hi1, lo1)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 xt = fn10Log10(Ltmp1, 4+3); /* average by 16, inverse compensation 2^3 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 /* Estimate long-term "peak" SNR */ test(),test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 if (sub(xt, st->tsnr) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 /* tsnr = 0.9*tsnr + 0.1*xt; */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585 st->tsnr = round(L_add(L_mult(29491, st->tsnr), L_mult(3277, xt))); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587 /* else if (xt > 0.625*tsnr) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 else if (sub(xt, mult(20480, st->tsnr)) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 /* tsnr = 0.998*tsnr + 0.002*xt; */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591 st->tsnr = round(L_add(L_mult(32702, st->tsnr), L_mult(66, xt))); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 /* Quantize the long-term SNR in 3 dB steps, limit to 0 <= tsnrq <= 19 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 tsnrq = shr(mult(st->tsnr, 10923), 8); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 /* tsnrq = min(19, max(0, tsnrq)); */ test(),test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599 if (sub(tsnrq, 19) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601 tsnrq = 19; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 else if (tsnrq < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605 tsnrq = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 /* Calculate the negative SNR sensitivity bias */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610 if (xt < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
612 /* negSNRvar = 0.99*negSNRvar + 0.01*xt*xt; */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
613 /* xt scaled as 7,8 => xt*xt scaled as 14,17, shift to 7,8 and round */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
614 tmp = round(L_shl(L_mult(xt, xt), 7)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 st->negSNRvar = round(L_add(L_mult(32440, st->negSNRvar), L_mult(328, tmp))); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 /* if (negSNRvar > 4.0) negSNRvar = 4.0; */ test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 if (sub(st->negSNRvar, 1024) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 st->negSNRvar = 1024; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623 /* negSNRbias = max(12.0*(negSNRvar - 0.65), 0.0); */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 tmp = mult_r(shl(sub(st->negSNRvar, 166), 4), 24576); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626 if (tmp < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 st->negSNRbias = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 st->negSNRbias = shr(tmp, 8); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637 /* Determine VAD as a function of the voice metric sum and quantized SNR */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639 tmp = add(vm_threshold_table[tsnrq], st->negSNRbias); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640 if (sub(vm_sum, tmp) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 ivad = 1; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 st->burstcount = add(st->burstcount, 1); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 if (sub(st->burstcount, burstcount_table[tsnrq]) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646 st->hangover = hangover_table[tsnrq]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 st->burstcount = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652 st->hangover = sub(st->hangover, 1); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 if (st->hangover <= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 ivad = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656 st->hangover = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660 ivad = 1; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665 /* Calculate log spectral deviation */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 ch_enrg_dev = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668 if (L_sub(st->Lframe_cnt, 1) == 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 st->ch_enrg_long_db[i] = ch_enrg_db[i]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679 tmp = abs_s(sub(st->ch_enrg_long_db[i], ch_enrg_db[i])); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 ch_enrg_dev = add(ch_enrg_dev, tmp); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 /* |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 * Calculate long term integration constant as a function of instantaneous SNR |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686 * (i.e., high SNR (tsnr dB) -> slower integration (alpha = HIGH_ALPHA), |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687 * low SNR (0 dB) -> faster integration (alpha = LOW_ALPHA) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 /* alpha = HIGH_ALPHA - ALPHA_RANGE * (tsnr - xt) / tsnr, low <= alpha <= high */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 tmp = sub(st->tsnr, xt); test(),logic16(),test(),test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 if (tmp <= 0 || st->tsnr <= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 alpha = HIGH_ALPHA; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695 one_m_alpha = 32768L-HIGH_ALPHA; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697 else if (sub(tmp, st->tsnr) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 alpha = LOW_ALPHA; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 one_m_alpha = 32768L-LOW_ALPHA; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 tmp = div_s(tmp, st->tsnr); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705 alpha = sub(HIGH_ALPHA, mult(ALPHA_RANGE, tmp)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 one_m_alpha = sub(32767, alpha); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 /* Calc long term log spectral energy */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 Ltmp1 = L_mult(one_m_alpha, ch_enrg_db[i]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713 Ltmp2 = L_mult(alpha, st->ch_enrg_long_db[i]); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 st->ch_enrg_long_db[i] = round(L_add(Ltmp1, Ltmp2)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
717 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
718 /* Set or clear the noise update flags */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719 update_flag = FALSE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 st->fupdate_flag = FALSE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721 test(),test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 if (sub(vm_sum, UPDATE_THLD) <= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 if (st->burstcount == 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726 update_flag = TRUE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 st->update_cnt = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 else if (L_sub(Ltce, noise_floor_chan[st->shift_state]) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 if (sub(ch_enrg_dev, DEV_THLD) < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734 if (p2a_flag == FALSE) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736 if (st->LTP_flag == FALSE) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 st->update_cnt = add(st->update_cnt, 1); test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739 if (sub(st->update_cnt, UPDATE_CNT_THLD) >= 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 update_flag = TRUE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742 st->fupdate_flag = TRUE; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 if (sub(st->update_cnt, st->last_update_cnt) == 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
751 st->hyster_cnt = add(st->hyster_cnt, 1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
752 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 st->hyster_cnt = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758 st->last_update_cnt = st->update_cnt; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 if (sub(st->hyster_cnt, HYSTER_CNT_THLD) > 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 st->update_cnt = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766 /* Conditionally update the channel noise estimates */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768 if (update_flag == TRUE) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 /* Check shift state */ test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771 if (st->shift_state == 1) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773 /* get factor to shift ch_enrg[] from state 1 to 0 (noise always state 0) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 tmp = state_change_shift_r[0]; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 else |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778 /* No shift if already state 0 */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 tmp = 0; move16(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 /* Update noise energy estimate */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 for (i = LO_CHAN; i <= HI_CHAN; i++) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 { test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
785 /* integrate over time: en[i] = (1-alpha)*en[i] + alpha*e[n] */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786 /* (extract with shift compensation for state 1) */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 L_Extract (L_shr(st->Lch_enrg[i], tmp), &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788 Ltmp = Mpy_32_16(hi1, lo1, CNE_SM_FAC); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790 L_Extract (st->Lch_noise[i], &hi1, &lo1); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 st->Lch_noise[i] = L_add(Ltmp, Mpy_32_16(hi1, lo1, ONE_MINUS_CNE_SM_FAC)); move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 /* Limit low level noise */ test(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 if (L_sub(st->Lch_noise[i], MIN_NOISE_ENRG_0) < 0) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 st->Lch_noise[i] = MIN_NOISE_ENRG_0; move32(); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799 } |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 return(ivad); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 } /* end of vad2 () */ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 /**** Other related functions *****/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 /*************************************************************************** |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 * FUNCTION NAME: vad2_reset() |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811 * PURPOSE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 * The purpose of this function is to initialise the vad2() state |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813 * variables. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 * INPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817 * &st |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 * pointer to data structure of vad2 state variables |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 * OUTPUTS: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 * none |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 * RETURN VALUE: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826 * none |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828 * DESCRIPTION: |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 * Set all values in vad2 state to zero. Since it is |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 * known that all elements in the structure contain |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 * 16 and 32 bit fixed point elements, the initialisation |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 * is performed by zeroing out the number of bytes in the |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 * structure divided by two. |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835 * |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 *************************************************************************/ |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837 |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 void vad2_reset (vadState2 * st) |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839 { |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 memset(st, 0, sizeof(vadState2)); |
0152c069d01f
libtwamr: integrate VAD2 main body
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 } /* end of vad2_reset () */ |