FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/g_pitch.c @ 486:f35c8fd9ceba
CHANGES: document gsmrec-dump improvements
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 20 May 2024 02:07:30 +0000 |
parents | bd4f660eb75a |
children |
rev | line source |
---|---|
367
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : g_pitch.c |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Compute the pitch (adaptive codebook) gain. |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 /* |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 * MODULE INCLUDE FILE AND VERSION ID |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 #include "namespace.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 #include "g_pitch.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 /* |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 * INCLUDE FILES |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 #include "tw_amr.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 #include "typedef.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "basic_op.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "oper_32b.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "no_count.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "cnst.h" |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 /* |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 * PUBLIC PROGRAM CODE |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 ******************************************************************************** |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 /************************************************************************* |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 * FUNCTION: G_pitch |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 * PURPOSE: Compute the pitch (adaptive codebook) gain. |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 * Result in Q14 (NOTE: 12.2 bit exact using Q12) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 * DESCRIPTION: |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 * The adaptive codebook gain is given by |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 * g = <x[], y[]> / <y[], y[]> |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 * where x[] is the target vector, y[] is the filtered adaptive |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 * codevector, and <> denotes dot product. |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 * The gain is limited to the range [0,1.2] (=0..19661 Q14) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 * |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 *************************************************************************/ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 Word16 G_pitch ( /* o : Gain of pitch lag saturated to 1.2 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 enum Mode mode, /* i : AMR mode */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 Word16 xn[], /* i : Pitch target. */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 Word16 y1[], /* i : Filtered adaptive codebook. */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 Word16 g_coeff[], /* i : Correlations need for gain quantization */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 Word16 L_subfr /* i : Length of subframe. */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 ) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 Word16 i; |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 Word16 xy, yy, exp_xy, exp_yy, gain; |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 Word32 s; |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 Word16 scaled_y1[L_SUBFR]; /* Usually dynamic allocation of (L_subfr) */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 /* divide "y1[]" by 4 to avoid overflow */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 for (i = 0; i < L_subfr; i++) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 scaled_y1[i] = shr (y1[i], 2); move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 /* Compute scalar product <y1[],y1[]> */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 /* Q12 scaling / MR122 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 Overflow = 0; move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 s = 1L; move32 (); /* Avoid case of all zeros */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 for (i = 0; i < L_subfr; i++) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 s = L_mac (s, y1[i], y1[i]); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 test (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 if (Overflow == 0) /* Test for overflow */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 exp_yy = norm_l (s); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 yy = round (L_shl (s, exp_yy)); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 else |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 s = 1L; move32 (); /* Avoid case of all zeros */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 for (i = 0; i < L_subfr; i++) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 s = L_mac (s, scaled_y1[i], scaled_y1[i]); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 exp_yy = norm_l (s); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 yy = round (L_shl (s, exp_yy)); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 exp_yy = sub (exp_yy, 4); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 /* Compute scalar product <xn[],y1[]> */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 Overflow = 0; move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 s = 1L; move32 (); /* Avoid case of all zeros */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 for (i = 0; i < L_subfr; i++) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 s = L_mac(s, xn[i], y1[i]); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 test (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 if (Overflow == 0) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 exp_xy = norm_l (s); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 xy = round (L_shl (s, exp_xy)); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 else |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 s = 1L; move32 (); /* Avoid case of all zeros */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 for (i = 0; i < L_subfr; i++) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 s = L_mac (s, xn[i], scaled_y1[i]); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 exp_xy = norm_l (s); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 xy = round (L_shl (s, exp_xy)); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 exp_xy = sub (exp_xy, 2); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 g_coeff[0] = yy; move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 g_coeff[1] = sub (15, exp_yy); move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 g_coeff[2] = xy; move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 g_coeff[3] = sub (15, exp_xy); move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 /* If (xy < 4) gain = 0 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 i = sub (xy, 4); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 test (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 if (i < 0) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 return ((Word16) 0); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 /* compute gain = xy/yy */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 xy = shr (xy, 1); /* Be sure xy < yy */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 gain = div_s (xy, yy); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 i = sub (exp_xy, exp_yy); /* Denormalization of division */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 gain = shr (gain, i); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 /* if(gain >1.2) gain = 1.2 */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 test (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 if (sub (gain, 19661) > 0) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 gain = 19661; move16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 test (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 if (sub(mode, MR122) == 0) |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 { |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 /* clear 2 LSBits */ |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 gain = gain & 0xfffC; logic16 (); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 } |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 return (gain); |
bd4f660eb75a
libtwamr: integrate g_pitch.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 } |