comparison libtwamr/lsp.c @ 388:550d3594c878

libtwamr: integrate lsp.c
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 06 May 2024 06:43:22 +0000
parents
children
comparison
equal deleted inserted replaced
387:7818f466a639 388:550d3594c878
1 /*
2 ********************************************************************************
3 *
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
5 * R99 Version 3.3.0
6 * REL-4 Version 4.1.0
7 *
8 ********************************************************************************
9 *
10 * File : lsp.c
11 * Purpose : From A(z) to lsp. LSP quantization and interpolation
12 *
13 ********************************************************************************
14 */
15
16 /*
17 ********************************************************************************
18 * MODULE INCLUDE FILE AND VERSION ID
19 ********************************************************************************
20 */
21 #include "namespace.h"
22 #include "lsp.h"
23
24 /*
25 ********************************************************************************
26 * INCLUDE FILES
27 ********************************************************************************
28 */
29 #include "tw_amr.h"
30 #include "typedef.h"
31 #include "basic_op.h"
32 #include "oper_32b.h"
33 #include "q_plsf.h"
34 #include "memops.h"
35 #include "az_lsp.h"
36 #include "int_lpc.h"
37 #include "no_count.h"
38 #include "lsp_tab.h"
39
40 /*
41 ********************************************************************************
42 * PUBLIC PROGRAM CODE
43 ********************************************************************************
44 */
45
46 /*
47 **************************************************************************
48 *
49 * Function : lsp_reset
50 *
51 **************************************************************************
52 */
53 void lsp_reset (lspState *st)
54 {
55 /* Init lsp_old[] */
56 Copy(lsp_init_data, &st->lsp_old[0], M);
57
58 /* Initialize lsp_old_q[] */
59 Copy(st->lsp_old, st->lsp_old_q, M);
60
61 /* Reset quantization state */
62 Q_plsf_reset(&st->qSt);
63 }
64
65 /*************************************************************************
66 *
67 * FUNCTION: lsp()
68 *
69 ************************************************************************/
70 int lsp(lspState *st, /* i/o : State struct */
71 enum Mode req_mode, /* i : requested coder mode */
72 enum Mode used_mode, /* i : used coder mode */
73 Word16 az[], /* i/o : interpolated LP parameters Q12 */
74 Word16 azQ[], /* o : quantization interpol. LP parameters Q12*/
75 Word16 lsp_new[], /* o : new lsp vector */
76 Word16 **anap /* o : analysis parameters */)
77 {
78 Word16 lsp_new_q[M]; /* LSPs at 4th subframe */
79 Word16 lsp_mid[M], lsp_mid_q[M]; /* LSPs at 2nd subframe */
80
81 Word16 pred_init_i; /* init index for MA prediction in DTX mode */
82
83 test ();
84 if ( sub (req_mode, MR122) == 0)
85 {
86 Az_lsp (&az[MP1], lsp_mid, st->lsp_old);
87 Az_lsp (&az[MP1 * 3], lsp_new, lsp_mid);
88
89 /*--------------------------------------------------------------------*
90 * Find interpolated LPC parameters in all subframes (both quantized *
91 * and unquantized). *
92 * The interpolated parameters are in array A_t[] of size (M+1)*4 *
93 * and the quantized interpolated parameters are in array Aq_t[] *
94 *--------------------------------------------------------------------*/
95 Int_lpc_1and3_2 (st->lsp_old, lsp_mid, lsp_new, az);
96
97 test ();
98 if ( sub (used_mode, MRDTX) != 0)
99 {
100 /* LSP quantization (lsp_mid[] and lsp_new[] jointly quantized) */
101 Q_plsf_5 (&st->qSt, lsp_mid, lsp_new, lsp_mid_q, lsp_new_q, *anap);
102
103 Int_lpc_1and3 (st->lsp_old_q, lsp_mid_q, lsp_new_q, azQ);
104
105 /* Advance analysis parameters pointer */
106 (*anap) += add(0,5); move16 ();
107 }
108 }
109 else
110 {
111 Az_lsp(&az[MP1 * 3], lsp_new, st->lsp_old); /* From A(z) to lsp */
112
113 /*--------------------------------------------------------------------*
114 * Find interpolated LPC parameters in all subframes (both quantized *
115 * and unquantized). *
116 * The interpolated parameters are in array A_t[] of size (M+1)*4 *
117 * and the quantized interpolated parameters are in array Aq_t[] *
118 *--------------------------------------------------------------------*/
119
120 Int_lpc_1to3_2(st->lsp_old, lsp_new, az);
121
122 test ();
123 if ( sub (used_mode, MRDTX) != 0)
124 {
125 /* LSP quantization */
126 Q_plsf_3(&st->qSt, req_mode, lsp_new, lsp_new_q, *anap, &pred_init_i);
127
128 Int_lpc_1to3(st->lsp_old_q, lsp_new_q, azQ);
129
130 /* Advance analysis parameters pointer */
131 (*anap) += add (0, 3); move16 ();
132 }
133 }
134
135 /* update the LSPs for the next frame */
136 Copy (lsp_new, st->lsp_old, M);
137 Copy (lsp_new_q, st->lsp_old_q, M);
138
139 return 0;
140 }