annotate libtwamr/d2_9pf.c @ 548:583dc4cbee95

efrtest: new program gsmefr-decode-tw5-r
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 04 Oct 2024 20:40:42 +0000
parents 2303ba1490dd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
332
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : d2_9pf.c
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Algebraic codebook decoder
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /*
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * MODULE INCLUDE FILE AND VERSION ID
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "namespace.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #include "d2_9pf.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 /*
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 * INCLUDE FILES
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 *****************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "typedef.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "basic_op.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "no_count.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "cnst.h"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 /*
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 ********************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 * LOCAL VARIABLES AND TABLES
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 ********************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 #define NB_PULSE 2 /* number of pulses */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 #include "c2_9pf.tab"
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 /*
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 ********************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 * PUBLIC PROGRAM CODE
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 ********************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 /*************************************************************************
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 * FUNCTION: decode_2i40_9bits (decod_ACELP())
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 * PURPOSE: Algebraic codebook decoder. For details about the encoding se
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 * c2_9pf.c
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 *
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 *************************************************************************/
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 void decode_2i40_9bits(
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 Word16 subNr, /* i : subframe number */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 Word16 sign, /* i : signs of 2 pulses. */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 Word16 index, /* i : Positions of the 2 pulses. */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 Word16 cod[] /* o : algebraic (fixed) codebook excitation */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 )
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 {
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 Word16 i, j, k;
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 Word16 pos[NB_PULSE];
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 /* Decode the positions */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 /* table bit is the MSB */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 j = shr((index & 64),6); logic16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 i = index & 7; logic16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 i = add(i, shl(i, 2)); /* pos0 =i*5+startPos[j*8+subNr*2] */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 k = startPos[add(shl(j, 3), shl(subNr, 1))];
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 pos[0] = add(i, k); move16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 index = shr(index, 3);
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 i = index & 7; logic16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 i = add(i, shl(i, 2)); /* pos1 =i*5+startPos[j*8+subNr*2+1] */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 k = startPos[add(add(shl(j, 3), shl(subNr, 1)), 1)];
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 pos[1] = add(i, k); move16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 /* decode the signs and build the codeword */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 for (i = 0; i < L_SUBFR; i++) {
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 cod[i] = 0; move16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 }
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 for (j = 0; j < NB_PULSE; j++) {
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 i = sign & 1; logic16 ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 sign = shr(sign, 1);
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 test ();
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 if (i != 0) {
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 cod[pos[j]] = 8191; move16 (); /* +1.0 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 } else {
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 cod[pos[j]] = -8192; move16 (); /* -1.0 */
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 }
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 }
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 return;
2303ba1490dd libtwamr: integrate d2_9pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 }