annotate libtwamr/pitch_fr.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 be8edf9e6bc1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
391
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : pitch_fr.c
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Find the pitch period with 1/3 or 1/6 subsample
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 * : resolution (closed loop).
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * MODULE INCLUDE FILE AND VERSION ID
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "namespace.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #include "pitch_fr.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 * INCLUDE FILES
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 #include "typedef.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "basic_op.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "oper_32b.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "no_count.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "cnst.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "enc_lag3.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 #include "enc_lag6.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 #include "inter_36.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 #include "inv_sqrt.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 #include "convolve.h"
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 * LOCAL VARIABLES AND TABLES
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 * mode dependent parameters used in Pitch_fr()
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 * Note: order of MRxx in 'enum Mode' is important!
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 static const struct {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 Word16 max_frac_lag; /* lag up to which fractional lags are used */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 Word16 flag3; /* enable 1/3 instead of 1/6 fract. resolution */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 Word16 first_frac; /* first fractional to check */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 Word16 last_frac; /* last fractional to check */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 Word16 delta_int_low; /* integer lag below TO to start search from */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 Word16 delta_int_range; /* integer range around T0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 Word16 delta_frc_low; /* fractional below T0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 Word16 delta_frc_range; /* fractional range around T0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 Word16 pit_min; /* minimum pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 } mode_dep_parm[8] = {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 /* MR475 */ { 84, 1, -2, 2, 5, 10, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 /* MR515 */ { 84, 1, -2, 2, 5, 10, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 /* MR59 */ { 84, 1, -2, 2, 3, 6, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 /* MR67 */ { 84, 1, -2, 2, 3, 6, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 /* MR74 */ { 84, 1, -2, 2, 3, 6, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 /* MR795 */ { 84, 1, -2, 2, 3, 6, 10, 19, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 /* MR102 */ { 84, 1, -2, 2, 3, 6, 5, 9, PIT_MIN },
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 /* MR122 */ { 94, 0, -3, 3, 3, 6, 5, 9, PIT_MIN_MR122 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 };
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 * LOCAL PROGRAM CODE
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 /*************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 * FUNCTION: Norm_Corr()
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 * PURPOSE: Find the normalized correlation between the target vector
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 * and the filtered past excitation.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 * DESCRIPTION:
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 * The normalized correlation is given by the correlation between the
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 * target and filtered past excitation divided by the square root of
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 * the energy of filtered excitation.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 * corr[k] = <x[], y_k[]>/sqrt(y_k[],y_k[])
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 * where x[] is the target vector and y_k[] is the filtered past
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 * excitation at delay k.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 *************************************************************************/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 static void Norm_Corr (Word16 exc[], Word16 xn[], Word16 h[], Word16 L_subfr,
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 Word16 t_min, Word16 t_max, Word16 corr_norm[])
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 Word16 i, j, k;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 Word16 corr_h, corr_l, norm_h, norm_l;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 Word32 s;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 /* Usally dynamic allocation of (L_subfr) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 Word16 excf[L_SUBFR];
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 Word16 scaling, h_fac, *s_excf, scaled_excf[L_SUBFR];
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 k = -t_min; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 /* compute the filtered excitation for the first delay t_min */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 Convolve (&exc[k], h, excf, L_subfr);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 /* scale "excf[]" to avoid overflow */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 for (j = 0; j < L_subfr; j++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 scaled_excf[j] = shr (excf[j], 2); move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 /* Compute 1/sqrt(energy of excf[]) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 s = 0; move32 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 for (j = 0; j < L_subfr; j++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 s = L_mac (s, excf[j], excf[j]);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 if (L_sub (s, 67108864L) <= 0) { /* if (s <= 2^26) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 s_excf = excf; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 h_fac = 15 - 12; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 scaling = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 /* "excf[]" is divided by 2 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 s_excf = scaled_excf; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 h_fac = 15 - 12 - 2; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 scaling = 2; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 /* loop for every possible period */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 for (i = t_min; i <= t_max; i++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 /* Compute 1/sqrt(energy of excf[]) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 s = 0; move32 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 for (j = 0; j < L_subfr; j++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 s = L_mac (s, s_excf[j], s_excf[j]);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 s = Inv_sqrt (s);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 L_Extract (s, &norm_h, &norm_l);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 /* Compute correlation between xn[] and excf[] */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 s = 0; move32 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 for (j = 0; j < L_subfr; j++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 s = L_mac (s, xn[j], s_excf[j]);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 L_Extract (s, &corr_h, &corr_l);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 /* Normalize correlation = correlation * (1/sqrt(energy)) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 s = Mpy_32 (corr_h, corr_l, norm_h, norm_l);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 corr_norm[i] = extract_h (L_shl (s, 16));
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 /* modify the filtered excitation excf[] for the next iteration */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 if (sub (i, t_max) != 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 k--;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 for (j = L_subfr - 1; j > 0; j--) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 s = L_mult (exc[k], h[j]);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 s = L_shl (s, h_fac);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 s_excf[j] = add (extract_h (s), s_excf[j - 1]); move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 s_excf[0] = shr (exc[k], scaling); move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 return;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 /*************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 * FUNCTION: searchFrac()
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 * PURPOSE: Find fractional pitch
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 * DESCRIPTION:
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 * The function interpolates the normalized correlation at the
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 * fractional positions around lag T0. The position at which the
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 * interpolation function reaches its maximum is the fractional pitch.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 * Starting point of the search is frac, end point is last_frac.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 * frac is overwritten with the fractional pitch.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 *************************************************************************/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 static void searchFrac (
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 Word16 *lag, /* i/o : integer pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 Word16 *frac, /* i/o : start point of search -
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 fractional pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 Word16 last_frac, /* i : endpoint of search */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 Word16 corr[], /* i : normalized correlation */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 Word16 flag3 /* i : subsample resolution
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 (3: =1 / 6: =0) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 )
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 Word16 i;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 Word16 max;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 Word16 corr_int;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 /* Test the fractions around T0 and choose the one which maximizes */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 /* the interpolated normalized correlation. */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 max = Interpol_3or6 (&corr[*lag], *frac, flag3); move16 (); /* function result */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 for (i = add (*frac, 1); i <= last_frac; i++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 corr_int = Interpol_3or6 (&corr[*lag], i, flag3);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 if (sub (corr_int, max) > 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 max = corr_int; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 *frac = i; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 test();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 if (flag3 == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 /* Limit the fraction value in the interval [-2,-1,0,1,2,3] */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 if (sub (*frac, -3) == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 *frac = 3; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 *lag = sub (*lag, 1);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 /* limit the fraction value between -1 and 1 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 if (sub (*frac, -2) == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 *frac = 1; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 *lag = sub (*lag, 1);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 if (sub (*frac, 2) == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 *frac = -1; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 *lag = add (*lag, 1);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 /*************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 * FUNCTION: getRange()
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 * PURPOSE: Sets range around open-loop pitch or integer pitch of last subframe
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 * DESCRIPTION:
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 * Takes integer pitch T0 and calculates a range around it with
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 * t0_min = T0-delta_low and t0_max = (T0-delta_low) + delta_range
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 * t0_min and t0_max are bounded by pitmin and pitmax
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 *************************************************************************/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 static void getRange (
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 Word16 T0, /* i : integer pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 Word16 delta_low, /* i : search start offset */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 Word16 delta_range, /* i : search range */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 Word16 pitmin, /* i : minimum pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 Word16 pitmax, /* i : maximum pitch */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 Word16 *t0_min, /* o : search range minimum */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 Word16 *t0_max) /* o : search range maximum */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 *t0_min = sub(T0, delta_low);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 if (sub(*t0_min, pitmin) < 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 *t0_min = pitmin; move16();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 *t0_max = add(*t0_min, delta_range);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 if (sub(*t0_max, pitmax) > 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 *t0_max = pitmax; move16();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 *t0_min = sub(*t0_max, delta_range);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 /*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 * PUBLIC PROGRAM CODE
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 ********************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 /*************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 * Function: Pitch_fr_reset
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 * Purpose: Initializes state memory to zero
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 **************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 void Pitch_fr_reset (Pitch_frState *state)
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 state->T0_prev_subframe = 0;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 /*************************************************************************
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 * FUNCTION: Pitch_fr()
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 * PURPOSE: Find the pitch period with 1/3 or 1/6 subsample resolution
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 * (closed loop).
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 * DESCRIPTION:
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306 * - find the normalized correlation between the target and filtered
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 * past excitation in the search range.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 * - select the delay with maximum normalized correlation.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 * - interpolate the normalized correlation at fractions -3/6 to 3/6
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 * with step 1/6 around the chosen delay.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 * - The fraction which gives the maximum interpolated value is chosen.
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 *************************************************************************/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 Word16 Pitch_fr ( /* o : pitch period (integer) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 Pitch_frState *st, /* i/o : State struct */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 enum Mode mode, /* i : codec mode */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 Word16 T_op[], /* i : open loop pitch lags */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 Word16 exc[], /* i : excitation buffer Q0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 Word16 xn[], /* i : target vector Q0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 Word16 h[], /* i : impulse response of synthesis and
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 weighting filters Q12 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 Word16 L_subfr, /* i : Length of subframe */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 Word16 i_subfr, /* i : subframe offset */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 Word16 *pit_frac, /* o : pitch period (fractional) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 Word16 *resu3, /* o : subsample resolution 1/3 (=1) or 1/6 (=0) */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 Word16 *ana_index /* o : index of encoding */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 )
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 Word16 i;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 Word16 t_min, t_max;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 Word16 t0_min, t0_max;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 Word16 max, lag, frac;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 Word16 tmp_lag;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334 Word16 *corr;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 Word16 corr_v[40]; /* Total length = t0_max-t0_min+1+2*L_INTER_SRCH */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 Word16 max_frac_lag;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 Word16 flag3, flag4;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 Word16 last_frac;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 Word16 delta_int_low, delta_int_range;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 Word16 delta_frc_low, delta_frc_range;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 Word16 pit_min;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 Word16 frame_offset;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 Word16 delta_search;
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347 * set mode specific variables *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350 max_frac_lag = mode_dep_parm[mode].max_frac_lag; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
351 flag3 = mode_dep_parm[mode].flag3; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
352 frac = mode_dep_parm[mode].first_frac; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
353 last_frac = mode_dep_parm[mode].last_frac; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354 delta_int_low = mode_dep_parm[mode].delta_int_low; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
355 delta_int_range = mode_dep_parm[mode].delta_int_range; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
356
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
357 delta_frc_low = mode_dep_parm[mode].delta_frc_low; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
358 delta_frc_range = mode_dep_parm[mode].delta_frc_range; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
359 pit_min = mode_dep_parm[mode].pit_min; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
360
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
361 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
362 * decide upon full or differential search *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
363 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
364
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
365 delta_search = 1; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
366
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
367 test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
368 if ((i_subfr == 0) || (sub(i_subfr,L_FRAME_BY2) == 0)) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
369
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
370 /* Subframe 1 and 3 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
371
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
372 test (); test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
373 if (((sub(mode, MR475) != 0) && (sub(mode, MR515) != 0)) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
374 (sub(i_subfr,L_FRAME_BY2) != 0)) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
375
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
376 /* set t0_min, t0_max for full search */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
377 /* this is *not* done for mode MR475, MR515 in subframe 3 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
378
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
379 delta_search = 0; /* no differential search */ move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
380
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
381 /* calculate index into T_op which contains the open-loop */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
382 /* pitch estimations for the 2 big subframes */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
383
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
384 frame_offset = 1; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
385 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
386 if (i_subfr == 0)
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
387 frame_offset = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
388
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
389 /* get T_op from the corresponding half frame and */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
390 /* set t0_min, t0_max */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
391
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
392 getRange (T_op[frame_offset], delta_int_low, delta_int_range,
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
393 pit_min, PIT_MAX, &t0_min, &t0_max);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
394 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
395 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
396
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
397 /* mode MR475, MR515 and 3. Subframe: delta search as well */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
398 getRange (st->T0_prev_subframe, delta_frc_low, delta_frc_range,
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
399 pit_min, PIT_MAX, &t0_min, &t0_max);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
400 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
401 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
402 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
403
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
404 /* for Subframe 2 and 4 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
405 /* get range around T0 of previous subframe for delta search */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
406
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
407 getRange (st->T0_prev_subframe, delta_frc_low, delta_frc_range,
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
408 pit_min, PIT_MAX, &t0_min, &t0_max);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
409 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
410
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
411 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
412 * Find interval to compute normalized correlation *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
413 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
414
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
415 t_min = sub (t0_min, L_INTER_SRCH);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
416 t_max = add (t0_max, L_INTER_SRCH);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
417
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
418 corr = &corr_v[-t_min]; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
419
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
420 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
421 * Compute normalized correlation between target and filtered excitation *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
422 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
423
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
424 Norm_Corr (exc, xn, h, L_subfr, t_min, t_max, corr);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
425
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
426 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
427 * Find integer pitch *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
428 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
429
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
430 max = corr[t0_min]; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
431 lag = t0_min; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
432
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
433 for (i = t0_min + 1; i <= t0_max; i++) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
434 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
435 if (sub (corr[i], max) >= 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
436 max = corr[i]; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
437 lag = i; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
438 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
439 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
440
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
441 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
442 * Find fractional pitch *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
443 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
444 test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
445 if ((delta_search == 0) && (sub (lag, max_frac_lag) > 0)) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
446
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
447 /* full search and integer pitch greater than max_frac_lag */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
448 /* fractional search is not needed, set fractional to zero */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
449
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
450 frac = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
451 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
452 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
453
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
454 /* if differential search AND mode MR475 OR MR515 OR MR59 OR MR67 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
455 /* then search fractional with 4 bits resolution */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
456
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
457 test (); test (); test (); test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
458 if ((delta_search != 0) &&
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
459 ((sub (mode, MR475) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
460 (sub (mode, MR515) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
461 (sub (mode, MR59) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
462 (sub (mode, MR67) == 0))) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
463
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
464 /* modify frac or last_frac according to position of last */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
465 /* integer pitch: either search around integer pitch, */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
466 /* or only on left or right side */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
467
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
468 tmp_lag = st->T0_prev_subframe; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
469 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
470 if ( sub( sub(tmp_lag, t0_min), 5) > 0)
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
471 tmp_lag = add (t0_min, 5);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
472 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
473 if ( sub( sub(t0_max, tmp_lag), 4) > 0)
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
474 tmp_lag = sub (t0_max, 4);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
475
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
476 test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
477 if ((sub (lag, tmp_lag) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
478 (sub (lag, sub(tmp_lag, 1)) == 0)) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
479
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
480 /* normal search in fractions around T0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
481
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
482 searchFrac (&lag, &frac, last_frac, corr, flag3);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
483
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
484 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
485 else if (sub (lag, sub (tmp_lag, 2)) == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
486 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
487 /* limit search around T0 to the right side */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
488 frac = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
489 searchFrac (&lag, &frac, last_frac, corr, flag3);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
490 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
491 else if (sub (lag, add(tmp_lag, 1)) == 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
492 test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
493 /* limit search around T0 to the left side */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
494 last_frac = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
495 searchFrac (&lag, &frac, last_frac, corr, flag3);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
496 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
497 else {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
498 test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
499 /* no fractional search */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
500 frac = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
501 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
502 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
503 else
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
504 /* test the fractions around T0 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
505 searchFrac (&lag, &frac, last_frac, corr, flag3);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
506 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
507
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
508 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
509 * encode pitch *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
510 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
511
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
512 test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
513 if (flag3 != 0) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
514 /* flag4 indicates encoding with 4 bit resolution; */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
515 /* this is needed for mode MR475, MR515 and MR59 */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
516
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
517 flag4 = 0; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
518 test (); test (); test (); test ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
519 if ( (sub (mode, MR475) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
520 (sub (mode, MR515) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
521 (sub (mode, MR59) == 0) ||
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
522 (sub (mode, MR67) == 0) ) {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
523 flag4 = 1; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
524 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
525
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
526 /* encode with 1/3 subsample resolution */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
527
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
528 *ana_index = Enc_lag3(lag, frac, st->T0_prev_subframe,
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
529 t0_min, t0_max, delta_search, flag4); move16 (); /* function result */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
530
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
531 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
532 else
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
533 {
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
534 /* encode with 1/6 subsample resolution */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
535
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
536 *ana_index = Enc_lag6(lag, frac, t0_min, delta_search); move16 (); /* function result */
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
537 }
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
538
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
539 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
540 * update state variables *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
541 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
542
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
543 st->T0_prev_subframe = lag; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
544
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
545 /*-----------------------------------------------------------------------*
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
546 * update output variables *
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
547 *-----------------------------------------------------------------------*/
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
548
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
549 *resu3 = flag3; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
550
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
551 *pit_frac = frac; move16 ();
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
552
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
553 return (lag);
be8edf9e6bc1 libtwamr: integrate pitch_fr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
554 }