FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/q_plsf_5.c @ 513:03a40ac2e931
libgsmhr1: implement validation for *.cod frames
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Aug 2024 19:00:03 +0000 |
parents | 128ec87489b6 |
children |
rev | line source |
---|---|
373
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : q_plsf_5.c |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Quantization of 2 sets of LSF parameters using 1st |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * order MA prediction and split by 5 matrix |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 * quantization (split-MQ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 * MODULE INCLUDE FILE AND VERSION ID |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "namespace.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "q_plsf.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * INCLUDE FILES |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedef.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "basic_op.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "no_count.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "lsp_lsf.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "reorder.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "lsfwt.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "q_plsf5_tab.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * LOCAL PROGRAM CODE |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 /* Quantization of a 4 dimensional subvector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 static Word16 Vq_subvec (/* o : quantization index, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 Word16 *lsf_r1, /* i : 1st LSF residual vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 Word16 *lsf_r2, /* i : 2nd LSF residual vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 const Word16 *dico, /* i : quantization codebook, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 Word16 *wf1, /* i : 1st LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 Word16 *wf2, /* i : 2nd LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Word16 dico_size /* i : size of quantization codebook, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Word16 index = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 Word16 i, temp; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 const Word16 *p_dico; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 Word32 dist_min, dist; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 dist_min = MAX_32; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 p_dico = dico; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 for (i = 0; i < dico_size; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 temp = sub (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 temp = sub (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 temp = sub (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 temp = sub (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 /* Reading the selected vector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 p_dico = &dico[shl (index, 2)]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 lsf_r1[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 lsf_r1[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 lsf_r2[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 lsf_r2[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 return index; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 /* Quantization of a 4 dimensional subvector with a signed codebook */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 static Word16 Vq_subvec_s ( /* o : quantization index Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 Word16 *lsf_r1, /* i : 1st LSF residual vector Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 Word16 *lsf_r2, /* i : and LSF residual vector Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 const Word16 *dico, /* i : quantization codebook Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 Word16 *wf1, /* i : 1st LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 Word16 *wf2, /* i : 2nd LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 Word16 dico_size) /* i : size of quantization codebook Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 Word16 index = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 Word16 sign = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 Word16 i, temp; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 const Word16 *p_dico; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 Word32 dist_min, dist; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 dist_min = MAX_32; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 p_dico = dico; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 for (i = 0; i < dico_size; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 /* test positive */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 temp = sub (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 temp = sub (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 temp = sub (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 temp = sub (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 sign = 0; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 /* test negative */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 p_dico -= 4; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 temp = add (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 temp = add (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 temp = add (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 temp = add (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 sign = 1; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 /* Reading the selected vector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 p_dico = &dico[shl (index, 2)]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (sign == 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 lsf_r1[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 lsf_r1[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 lsf_r2[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 lsf_r2[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 else |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 lsf_r1[0] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 lsf_r1[1] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 lsf_r2[0] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 lsf_r2[1] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 index = shl (index, 1); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 index = add (index, sign); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 return index; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 * PUBLIC PROGRAM CODE |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 /************************************************************************* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 * FUNCTION: Q_plsf_5() |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 * PURPOSE: Quantization of 2 sets of LSF parameters using 1st order MA |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 * prediction and split by 5 matrix quantization (split-MQ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 * DESCRIPTION: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 * p[i] = pred_factor*past_rq[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 * r1[i]= lsf1[i] - p[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 * r2[i]= lsf2[i] - p[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * where: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 * lsf1[i] 1st mean-removed LSF vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 * lsf2[i] 2nd mean-removed LSF vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 * r1[i] 1st residual prediction vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 * r2[i] 2nd residual prediction vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 * past_r2q[i] Past quantized residual (2nd vector). |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 * The residual vectors r1[i] and r2[i] are jointly quantized using |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 * split-MQ with 5 codebooks. Each 4th dimension submatrix contains 2 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 * elements from each residual vector. The 5 submatrices are as follows: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 * {r1[0], r1[1], r2[0], r2[1]}; {r1[2], r1[3], r2[2], r2[3]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 * {r1[4], r1[5], r2[4], r2[5]}; {r1[6], r1[7], r2[6], r2[7]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 * {r1[8], r1[9], r2[8], r2[9]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 *************************************************************************/ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 void Q_plsf_5 ( |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 Q_plsfState *st, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 Word16 *lsp1, /* i : 1st LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 Word16 *lsp2, /* i : 2nd LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 Word16 *lsp1_q, /* o : quantized 1st LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 Word16 *lsp2_q, /* o : quantized 2nd LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 Word16 *indice /* o : quantization indices of 5 matrices, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 Word16 i; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 Word16 lsf1[M], lsf2[M], wf1[M], wf2[M], lsf_p[M], lsf_r1[M], lsf_r2[M]; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 Word16 lsf1_q[M], lsf2_q[M]; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 /* convert LSFs to normalize frequency domain 0..16384 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 Lsp_lsf (lsp1, lsf1, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 Lsp_lsf (lsp2, lsf2, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 /* Compute LSF weighting factors (Q13) */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 Lsf_wt (lsf1, wf1); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 Lsf_wt (lsf2, wf2); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 /* Compute predicted LSF and prediction error */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 for (i = 0; i < M; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 lsf_p[i] = add (mean_lsf[i], mult (st->past_rq[i], LSP_PRED_FAC_MR122)); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 lsf_r1[i] = sub (lsf1[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 lsf_r2[i] = sub (lsf2[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 /*---- Split-MQ of prediction error ----*/ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 indice[0] = Vq_subvec (&lsf_r1[0], &lsf_r2[0], dico1_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 &wf1[0], &wf2[0], DICO1_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 indice[1] = Vq_subvec (&lsf_r1[2], &lsf_r2[2], dico2_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 &wf1[2], &wf2[2], DICO2_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 indice[2] = Vq_subvec_s (&lsf_r1[4], &lsf_r2[4], dico3_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 &wf1[4], &wf2[4], DICO3_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 indice[3] = Vq_subvec (&lsf_r1[6], &lsf_r2[6], dico4_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 &wf1[6], &wf2[6], DICO4_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 indice[4] = Vq_subvec (&lsf_r1[8], &lsf_r2[8], dico5_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 &wf1[8], &wf2[8], DICO5_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 /* Compute quantized LSFs and update the past quantized residual */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 for (i = 0; i < M; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 lsf1_q[i] = add (lsf_r1[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 lsf2_q[i] = add (lsf_r2[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 st->past_rq[i] = lsf_r2[i]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 /* verification that LSFs has minimum distance of LSF_GAP */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 Reorder_lsf (lsf1_q, LSF_GAP, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 Reorder_lsf (lsf2_q, LSF_GAP, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 /* convert LSFs to the cosine domain */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 Lsf_lsp (lsf1_q, lsp1_q, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 Lsf_lsp (lsf2_q, lsp2_q, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 } |