annotate libtwamr/ph_disp.c @ 581:e2d5cad04cbf

libgsmhr1 RxFE: store CN R0+LPC separately from speech In the original GSM 06.06 code the ECU for speech mode is entirely separate from the CN generator, maintaining separate state. (The main intertie between them is the speech vs CN state variable, distinguishing between speech and CN BFIs, in addition to the CN-specific function of distinguishing between initial and update SIDs.) In the present RxFE implementation I initially thought that we could use the same saved_frame buffer for both ECU and CN, overwriting just the first 4 params (R0 and LPC) when a valid SID comes in. However, I now realize it was a bad idea: the original code has a corner case (long sequence of speech-mode BFIs to put the ECU in state 6, then SID and CN-mode BFIs, then a good speech frame) that would be broken by that buffer reuse approach. We could eliminate this corner case by resetting the ECU state when passing through a CN insertion period, but doing so would needlessly increase the behavioral diffs between GSM 06.06 and our version. Solution: use a separate CN-specific buffer for CN R0+LPC parameters, and match the behavior of GSM 06.06 code in this regard.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Feb 2025 10:02:45 +0000
parents bde9f5804670
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
390
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : ph_disp.c
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Perform adaptive phase dispersion of the excitation
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 * signal.
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /*
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * MODULE INCLUDE FILE AND VERSION ID
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "namespace.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #include "ph_disp.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 /*
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 * INCLUDE FILES
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "typedef.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "basic_op.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "no_count.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "cnst.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "memops.h"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 /*
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 * LOCAL VARIABLES AND TABLES
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 #include "ph_disp.tab"
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 /*
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 * PUBLIC PROGRAM CODE
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 ********************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 /*************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 * Function: ph_disp_reset
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 **************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 void ph_disp_reset (ph_dispState *state)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 Word16 i;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 for (i=0; i<PHDGAINMEMSIZE; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 state->gainMem[i] = 0;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 state->prevState = 0;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 state->prevCbGain = 0;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 state->lockFull = 0;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 state->onset = 0; /* assume no onset in start */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 /*************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 * Function: ph_disp_lock
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 **************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 void ph_disp_lock (ph_dispState *state)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 state->lockFull = 1;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 return;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 /*************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 * Function: ph_disp_release
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 **************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 void ph_disp_release (ph_dispState *state)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 state->lockFull = 0;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 return;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 /*************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 * Function: ph_disp
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 * Adaptive phase dispersion; forming of total excitation
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 * (for synthesis part of decoder)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 *
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 **************************************************************************
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 void ph_disp (
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 ph_dispState *state, /* i/o : State struct */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 enum Mode mode, /* i : codec mode */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 Word16 x[], /* i/o Q0 : in: LTP excitation signal */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 /* out: total excitation signal */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 Word16 cbGain, /* i Q1 : Codebook gain */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 Word16 ltpGain, /* i Q14 : LTP gain */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 Word16 inno[], /* i/o Q13 : Innovation vector (Q12 for 12.2) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 Word16 pitch_fac, /* i Q14 : pitch factor used to scale the
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 LTP excitation (Q13 for 12.2) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 Word16 tmp_shift /* i Q0 : shift factor applied to sum of
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 scaled LTP ex & innov. before
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 rounding */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 )
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 Word16 i, i1;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 Word16 tmp1;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 Word32 L_temp;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 Word16 impNr; /* indicator for amount of disp./filter used */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 Word16 inno_sav[L_SUBFR];
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 Word16 ps_poss[L_SUBFR];
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 Word16 j, nze, nPulse, ppos;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 const Word16 *ph_imp; /* Pointer to phase dispersion filter */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 /* Update LTP gain memory */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 for (i = PHDGAINMEMSIZE-1; i > 0; i--)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 state->gainMem[i] = state->gainMem[i-1]; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 state->gainMem[0] = ltpGain; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 /* basic adaption of phase dispersion */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 if (sub(ltpGain, PHDTHR2LTP) < 0) { /* if (ltpGain < 0.9) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 if (sub(ltpGain, PHDTHR1LTP) > 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 { /* if (ltpGain > 0.6 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 impNr = 1; /* medium dispersion */ move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 impNr = 0; /* maximum dispersion */ move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 impNr = 2; /* no dispersion */ move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 /* onset indicator */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 /* onset = (cbGain > onFact * cbGainMem[0]) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 move32 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 tmp1 = round(L_shl(L_mult(state->prevCbGain, ONFACTPLUS1), 2));
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 if (sub(cbGain, tmp1) > 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 state->onset = ONLENGTH; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 if (state->onset > 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 state->onset = sub (state->onset, 1); move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 /* if not onset, check ltpGain buffer and use max phase dispersion if
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 half or more of the ltpGain-parameters say so */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 if (state->onset == 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 /* Check LTP gain memory and set filter accordingly */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 i1 = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 for (i = 0; i < PHDGAINMEMSIZE; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 if (sub(state->gainMem[i], PHDTHR1LTP) < 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 i1 = add (i1, 1);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 if (sub(i1, 2) > 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 impNr = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 /* Restrict decrease in phase dispersion to one step if not onset */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 test (); test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 if ((sub(impNr, add(state->prevState, 1)) > 0) && (state->onset == 0))
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 impNr = sub (impNr, 1);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 /* if onset, use one step less phase dispersion */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 test (); test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 if((sub(impNr, 2) < 0) && (state->onset > 0))
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 impNr = add (impNr, 1);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 /* disable for very low levels */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 if(sub(cbGain, 10) < 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 impNr = 2; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 if(sub(state->lockFull, 1) == 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 impNr = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 /* update static memory */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 state->prevState = impNr; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 state->prevCbGain = cbGain; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 /* do phase dispersion for all modes but 12.2 and 7.4;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 don't modify the innovation if impNr >=2 (= no phase disp) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 test (); test (); test(); test();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 if (sub(mode, MR122) != 0 &&
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 sub(mode, MR102) != 0 &&
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 sub(mode, MR74) != 0 &&
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 sub(impNr, 2) < 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 /* track pulse positions, save innovation,
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 and initialize new innovation */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 nze = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 for (i = 0; i < L_SUBFR; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 move16 (); test();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 if (inno[i] != 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 ps_poss[nze] = i; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 nze = add (nze, 1);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 inno_sav[i] = inno[i]; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 inno[i] = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 /* Choose filter corresponding to codec mode and dispersion criterium */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 if (sub (mode, MR795) == 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 if (impNr == 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 ph_imp = ph_imp_low_MR795; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 ph_imp = ph_imp_mid_MR795; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 test ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 if (impNr == 0)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 ph_imp = ph_imp_low; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 else
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 ph_imp = ph_imp_mid; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 /* Do phase dispersion of innovation */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 for (nPulse = 0; nPulse < nze; nPulse++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 ppos = ps_poss[nPulse]; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 /* circular convolution with impulse response */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 j = 0; move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 for (i = ppos; i < L_SUBFR; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 /* inno[i1] += inno_sav[ppos] * ph_imp[i1-ppos] */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 tmp1 = mult(inno_sav[ppos], ph_imp[j++]);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 inno[i] = add(inno[i], tmp1); move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 for (i = 0; i < ppos; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 /* inno[i] += inno_sav[ppos] * ph_imp[L_SUBFR-ppos+i] */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 tmp1 = mult(inno_sav[ppos], ph_imp[j++]);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 inno[i] = add(inno[i], tmp1); move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 /* compute total excitation for synthesis part of decoder
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 (using modified innovation if phase dispersion is active) */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 for (i = 0; i < L_SUBFR; i++)
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 {
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 /* x[i] = gain_pit*x[i] + cbGain*code[i]; */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 L_temp = L_mult ( x[i], pitch_fac);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 /* 12.2: Q0 * Q13 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 /* 7.4: Q0 * Q14 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 L_temp = L_mac (L_temp, inno[i], cbGain);
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 /* 12.2: Q12 * Q1 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 /* 7.4: Q13 * Q1 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306 L_temp = L_shl (L_temp, tmp_shift); /* Q16 */
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 x[i] = round (L_temp); move16 ();
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 }
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 return;
bde9f5804670 libtwamr: integrate ph_disp.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 }