annotate libtwamr/pitch_ol.c @ 415:01c4becb9fda

libtwamr: integrate pitch_ol.c
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 07 May 2024 03:01:01 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : pitch_ol.c
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Compute the open loop pitch lag.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 * MODULE INCLUDE FILE AND VERSION ID
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 #include "namespace.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "pitch_ol.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 * INCLUDE FILES
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 #include "typedef.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 #include "basic_op.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "oper_32b.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "no_count.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "cnst.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "inv_sqrt.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "vad.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 #include "calc_cor.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 #include "hp_max.h"
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 * LOCAL VARIABLES AND TABLES
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 #define THRESHOLD 27853
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 * LOCAL PROGRAM CODE
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 /*************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 * FUNCTION: Lag_max
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 * PURPOSE: Find the lag that has maximum correlation of scal_sig[] in a
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 * given delay range.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 * DESCRIPTION:
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 * The correlation is given by
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 * cor[t] = <scal_sig[n],scal_sig[n-t]>, t=lag_min,...,lag_max
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 * The functions outputs the maximum correlation after normalization
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 * and the corresponding lag.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 *************************************************************************/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 static Word16 Lag_max ( /* o : lag found */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 vadState *vadSt, /* i/o : VAD state struct */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 Word32 corr[], /* i : correlation vector. */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 Word16 scal_sig[], /* i : scaled signal. */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 Word16 scal_fac, /* i : scaled signal factor. */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 Word16 scal_flag, /* i : if 1 use EFR compatible scaling */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 Word16 L_frame, /* i : length of frame to compute pitch */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 Word16 lag_max, /* i : maximum lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 Word16 lag_min, /* i : minimum lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 Word16 *cor_max, /* o : normalized correlation of selected lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 Word32 *rmax, /* o : max(<s[i]*s[j]>) */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 Word32 *r0, /* o : residual energy */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 Flag dtx /* i : dtx flag; use dtx=1, do not use dtx=0 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 )
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 Word16 i, j;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 Word16 *p;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 Word32 max, t0;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 Word16 max_h, max_l, ener_h, ener_l;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 Word16 p_max = 0; /* initialization only needed to keep gcc silent */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 max = MIN_32; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 p_max = lag_max; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 for (i = lag_max, j = (PIT_MAX-lag_max-1); i >= lag_min; i--, j--)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 if (L_sub (corr[-i], max) >= 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 max = corr[-i]; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 p_max = i; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 /* compute energy */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 t0 = 0; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 p = &scal_sig[-p_max]; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 for (i = 0; i < L_frame; i++, p++)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 t0 = L_mac (t0, *p, *p);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 /* 1/sqrt(energy) */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 if (dtx)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 { /* no test() call since this if is only in simulation env */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 *rmax = max; move32();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 *r0 = t0; move32();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 /* check tone */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 if (!vadSt->use_vad2)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 vad_tone_detection (&vadSt->u.v1, max, t0);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 t0 = Inv_sqrt (t0); move32 (); /* function result */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 test();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 if (scal_flag)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 t0 = L_shl (t0, 1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 /* max = max/sqrt(energy) */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 L_Extract (max, &max_h, &max_l);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 L_Extract (t0, &ener_h, &ener_l);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 t0 = Mpy_32 (max_h, max_l, ener_h, ener_l);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 test();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 if (scal_flag)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 t0 = L_shr (t0, scal_fac);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 *cor_max = extract_h (L_shl (t0, 15)); /* divide by 2 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 else
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 *cor_max = extract_l(t0);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 return (p_max);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 /*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 * PUBLIC PROGRAM CODE
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 ********************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 /*************************************************************************
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 * FUNCTION: Pitch_ol
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 * PURPOSE: Compute the open loop pitch lag.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 * DESCRIPTION:
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 * The open-loop pitch lag is determined based on the perceptually
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 * weighted speech signal. This is done in the following steps:
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 * - find three maxima of the correlation <sw[n],sw[n-T]>,
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 * dividing the search range into three parts:
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 * pit_min ... 2*pit_min-1
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 * 2*pit_min ... 4*pit_min-1
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 * 4*pit_min ... pit_max
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 * - divide each maximum by <sw[n-t], sw[n-t]> where t is the delay at
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 * that maximum correlation.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 * - select the delay of maximum normalized correlation (among the
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 * three candidates) while favoring the lower delay ranges.
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 *************************************************************************/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 Word16 Pitch_ol ( /* o : open loop pitch lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 vadState *vadSt, /* i/o : VAD state struct */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 enum Mode mode, /* i : coder mode */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 Word16 signal[], /* i : signal used to compute the open loop pitch */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 /* signal[-pit_max] to signal[-1] should be known */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 Word16 pit_min, /* i : minimum pitch lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 Word16 pit_max, /* i : maximum pitch lag */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 Word16 L_frame, /* i : length of frame to compute pitch */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 Word16 idx, /* i : frame index */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 Flag dtx /* i : dtx flag; use dtx=1, do not use dtx=0 */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 )
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 Word16 i, j;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 Word16 max1, max2, max3;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 Word16 p_max1, p_max2, p_max3;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 Word16 scal_flag = 0;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 Word32 t0;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 Word32 r01, r02, r03;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 Word32 rmax1, rmax2, rmax3;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 Word16 corr_hp_max;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 Word32 corr[PIT_MAX+1], *corr_ptr;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 /* Scaled signal */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 Word16 scaled_signal[L_FRAME + PIT_MAX];
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 Word16 *scal_sig, scal_fac;
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 if (dtx && !vadSt->use_vad2)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 { /* no test() call since this if is only in simulation env */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 /* update tone detection */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 test(); test();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 if ((sub(mode, MR475) == 0) || (sub(mode, MR515) == 0))
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 vad_tone_detection_update (&vadSt->u.v1, 1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 else
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 vad_tone_detection_update (&vadSt->u.v1, 0);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 scal_sig = &scaled_signal[pit_max]; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 t0 = 0L; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 for (i = -pit_max; i < L_frame; i++)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 t0 = L_mac (t0, signal[i], signal[i]);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 /*--------------------------------------------------------*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 * Scaling of input signal. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 * *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 * if Overflow -> scal_sig[i] = signal[i]>>3 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 * else if t0 < 1^20 -> scal_sig[i] = signal[i]<<3 *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 * else -> scal_sig[i] = signal[i] *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 *--------------------------------------------------------*/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 /*--------------------------------------------------------*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 * Verification for risk of overflow. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 *--------------------------------------------------------*/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 if (L_sub (t0, MAX_32) == 0L) /* Test for overflow */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 for (i = -pit_max; i < L_frame; i++)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 scal_sig[i] = shr (signal[i], 3); move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 scal_fac = 3; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 else if (L_sub (t0, (Word32) 1048576L) < (Word32) 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 /* if (t0 < 2^20) */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 for (i = -pit_max; i < L_frame; i++)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 scal_sig[i] = shl (signal[i], 3); move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 scal_fac = -3; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 else
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 for (i = -pit_max; i < L_frame; i++)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 scal_sig[i] = signal[i]; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 scal_fac = 0; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 /* calculate all coreelations of scal_sig, from pit_min to pit_max */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 corr_ptr = &corr[pit_max]; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 comp_corr (scal_sig, L_frame, pit_max, pit_min, corr_ptr);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 /*--------------------------------------------------------------------*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 * The pitch lag search is divided in three sections. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 * Each section cannot have a pitch multiple. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 * We find a maximum for each section. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 * We compare the maximum of each section by favoring small lags. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 * *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 * First section: lag delay = pit_max downto 4*pit_min *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 * Second section: lag delay = 4*pit_min-1 downto 2*pit_min *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 * Third section: lag delay = 2*pit_min-1 downto pit_min *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 *--------------------------------------------------------------------*/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 /* mode dependent scaling in Lag_max */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 if (sub(mode, MR122) == 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 scal_flag = 1; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 else
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 scal_flag = 0; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 j = shl (pit_min, 2);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 p_max1 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 pit_max, j, &max1, &rmax1, &r01, dtx);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 i = sub (j, 1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 j = shl (pit_min, 1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 p_max2 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 i, j, &max2, &rmax2, &r02, dtx);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 i = sub (j, 1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 p_max3 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 i, pit_min, &max3, &rmax3, &r03, dtx);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 if (dtx && !vadSt->use_vad2)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 { /* no test() call since this if is only in simulation env */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 if (sub(idx, 1) == 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 /* calculate max high-passed filtered correlation of all lags */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 hp_max (corr_ptr, scal_sig, L_frame, pit_max, pit_min, &corr_hp_max);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 /* update complex background detector */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 vad_complex_detection_update(&vadSt->u.v1, corr_hp_max);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 /*--------------------------------------------------------------------*
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 * Compare the 3 sections maximum, and favor small lag. *
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 *--------------------------------------------------------------------*/
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 if (sub (mult (max1, THRESHOLD), max2) < 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 max1 = max2; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 p_max1 = p_max2; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 if (dtx)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 rmax1 = rmax2; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 r01 = r02; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 test ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 if (sub (mult (max1, THRESHOLD), max3) < 0)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 p_max1 = p_max3; move16 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 if (dtx)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 rmax1 = rmax3; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334 r01 = r03; move32 ();
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 if (dtx && vadSt->use_vad2)
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 {
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 /* Save max correlation */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 vadSt->u.v2.L_Rmax = L_add(vadSt->u.v2.L_Rmax, rmax1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 /* Save max energy */
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 vadSt->u.v2.L_R0 = L_add(vadSt->u.v2.L_R0, r01);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 }
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 return (p_max1);
01c4becb9fda libtwamr: integrate pitch_ol.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347 }