annotate libgsmfr2/lpc.c @ 282:9ee8ad3d4d30

frtest: rm gsmfr-hand-test and gsmfr-max-out utils These hack programs were never properly documented and were written only as part of a debug chase, in pursuit of a bug that ultimately turned out to be in our then-hacky patch to osmo-bts-sysmo, before beginning of proper patches in Osmocom. These hack programs need to be dropped from the present sw package because they depend on old libgsm, and we are eliminating that dependency.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Apr 2024 05:44:47 +0000
parents 0cfb7c95cce2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
268
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This C source file has been adapted from TU-Berlin libgsm source,
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * original notice follows:
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 *
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdint.h>
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <assert.h>
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "tw_gsmfr.h"
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include "typedef.h"
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "ed_state.h"
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "ed_internal.h"
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 /*
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 /* 4.2.4 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 static void Autocorrelation (
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 word * s, /* [0..159] IN/OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 longword * L_ACF) /* [0..8] OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 /*
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 * The goal is to compute the array L_ACF[k]. The signal s[i] must
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 * be scaled in order to avoid an overflow situation.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 register int k, i;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 word temp, smax, scalauto;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 /* Dynamic scaling of the array s[0..159]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 /* Search for the maximum.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 smax = 0;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 for (k = 0; k <= 159; k++) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 temp = GSM_ABS( s[k] );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 if (temp > smax) smax = temp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 /* Computation of the scaling factor.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 if (smax == 0) scalauto = 0;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 else {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 assert(smax > 0);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 /* Scaling of the array s[0...159]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 if (scalauto > 0) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 # define SCALE(n) \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 case n: for (k = 0; k <= 159; k++) \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 break;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 switch (scalauto) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 SCALE(1)
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 SCALE(2)
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 SCALE(3)
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 SCALE(4)
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 # undef SCALE
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 /* Compute the L_ACF[..].
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 word * sp = s;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 word sl = *sp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 # define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 # define NEXTI sl = *++sp
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 for (k = 9; k--; L_ACF[k] = 0) ;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 STEP (0);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 STEP(0); STEP(1);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 STEP(0); STEP(1); STEP(2);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 STEP(0); STEP(1); STEP(2); STEP(3);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 for (i = 8; i <= 159; i++) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 NEXTI;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 STEP(0);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 STEP(1); STEP(2); STEP(3); STEP(4);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 STEP(5); STEP(6); STEP(7); STEP(8);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 for (k = 9; k--; L_ACF[k] <<= 1) ;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 /* Rescaling of the array s[0..159]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 if (scalauto > 0) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 assert(scalauto <= 4);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 for (k = 160; k--; *s++ <<= scalauto) ;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 /* 4.2.5 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 static void Reflection_coefficients (
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 longword * L_ACF, /* 0...8 IN */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 register word * r /* 0...7 OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 )
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 register int i, m, n;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 register word temp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 register longword ltmp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 word ACF[9]; /* 0..8 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 word P[ 9]; /* 0..8 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 word K[ 9]; /* 2..8 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 /* Schur recursion with 16 bits arithmetic.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 if (L_ACF[0] == 0) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 for (i = 8; i--; *r++ = 0) ;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 return;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 assert( L_ACF[0] != 0 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 temp = gsm_norm( L_ACF[0] );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 assert(temp >= 0 && temp < 32);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 /* ? overflow ? */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 /* Initialize array P[..] and K[..] for the recursion.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 /* Compute reflection coefficients
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 for (n = 1; n <= 8; n++, r++) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 temp = P[1];
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 temp = GSM_ABS(temp);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 if (P[0] < temp) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 for (i = n; i <= 8; i++) *r++ = 0;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 return;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 *r = gsm_div( temp, P[0] );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 assert(*r >= 0);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 assert (*r != MIN_WORD);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 if (n == 8) return;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 /* Schur recursion
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 temp = GSM_MULT_R( P[1], *r );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 P[0] = GSM_ADD( P[0], temp );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 for (m = 1; m <= 8 - n; m++) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 temp = GSM_MULT_R( K[ m ], *r );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 P[m] = GSM_ADD( P[ m+1 ], temp );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 temp = GSM_MULT_R( P[ m+1 ], *r );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 K[m] = GSM_ADD( K[ m ], temp );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 /* 4.2.6 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 static void Transformation_to_Log_Area_Ratios (
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 register word * r /* 0..7 IN/OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 )
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 /*
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 * The following scaling for r[..] and LAR[..] has been used:
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 *
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1.
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 * LAR[..] = integer( real_LAR[..] * 16384 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 * with -1.625 <= real_LAR <= 1.625
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 register word temp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 register int i;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 /* Computation of the LAR[0..7] from the r[0..7]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 for (i = 1; i <= 8; i++, r++) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 temp = *r;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 temp = GSM_ABS(temp);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 assert(temp >= 0);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 if (temp < 22118) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 temp >>= 1;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 } else if (temp < 31130) {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 assert( temp >= 11059 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 temp -= 11059;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 } else {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 assert( temp >= 26112 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 temp -= 26112;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 temp <<= 2;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 *r = *r < 0 ? -temp : temp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 assert( *r != MIN_WORD );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 /* 4.2.7 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 static void Quantization_and_coding (
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 register word * LAR /* [0..7] IN/OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 )
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 register word temp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 longword ltmp;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 /* This procedure needs four tables; the following equations
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 * give the optimum scaling for the constants:
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 *
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 * A[0..7] = integer( real_A[0..7] * 1024 )
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 * B[0..7] = integer( real_B[0..7] * 512 )
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 * MAC[0..7] = maximum of the LARc[0..7]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 * MIC[0..7] = minimum of the LARc[0..7]
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 # undef STEP
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 # define STEP( A, B, MAC, MIC ) \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 temp = GSM_MULT( A, *LAR ); \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 temp = GSM_ADD( temp, B ); \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 temp = GSM_ADD( temp, 256 ); \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 temp = SASR( temp, 9 ); \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 *LAR = temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 LAR++;
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 STEP( 20480, 0, 31, -32 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 STEP( 20480, 0, 31, -32 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 STEP( 20480, 2048, 15, -16 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 STEP( 20480, -2560, 15, -16 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 STEP( 13964, 94, 7, -8 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 STEP( 15360, -1792, 7, -8 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 STEP( 8534, -341, 3, -4 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 STEP( 9036, -1144, 3, -4 );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 # undef STEP
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 }
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 void Gsm_LPC_Analysis (
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 struct gsmfr_0610_state *S,
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 word * s, /* 0..159 signals IN/OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 word * LARc) /* 0..7 LARc's OUT */
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 {
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 longword L_ACF[9];
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 Autocorrelation (s, L_ACF );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 Reflection_coefficients (L_ACF, LARc );
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 Transformation_to_Log_Area_Ratios (LARc);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 Quantization_and_coding (LARc);
0cfb7c95cce2 libgsmfr2: integrate lpc.c from libgsm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 }