annotate libtwamr/pstfilt.c @ 585:3c6bf0d26ee7 default tip

TW-TS-005 reader: fix maximum line length bug TW-TS-005 section 4.1 states: The maximum allowed length of each line is 80 characters, not including the OS-specific newline encoding. The implementation of this line length limit in the TW-TS-005 hex file reader function in the present suite was wrong, such that lines of the full maximum length could not be read. Fix it. Note that this bug affects comment lines too, not just actual RTP payloads. Neither Annex A nor Annex B features an RTP payload format that goes to the maximum of 40 bytes, but if a comment line goes to the maximum allowed length of 80 characters not including the terminating newline, the bug will be triggered, necessitating the present fix.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Feb 2025 07:49:28 +0000
parents 59655481e45b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
401
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * R99 Version 3.3.0
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * REL-4 Version 4.1.0
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 * File : pstfilt.c
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * Purpose : Performs adaptive postfiltering on the synthesis
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * : speech
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * MODULE INCLUDE FILE AND VERSION ID
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "namespace.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #include "pstfilt.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 /*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 * INCLUDE FILES
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "tw_amr.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "typedef.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "basic_op.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "memops.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "weight_a.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 #include "residu.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 #include "syn_filt.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 #include "preemph.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 #include "no_count.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 #include "cnst.h"
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 /*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 * LOCAL VARIABLES AND TABLES
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 /*---------------------------------------------------------------*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 * Postfilter constant parameters (defined in "cnst.h") *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 *---------------------------------------------------------------*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 * L_FRAME : Frame size. *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 * L_SUBFR : Sub-frame size. *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 * M : LPC order. *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 * MP1 : LPC order+1 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 * MU : Factor for tilt compensation filter *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 * AGC_FAC : Factor for automatic gain control *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 *---------------------------------------------------------------*/
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 #define L_H 22 /* size of truncated impulse response of A(z/g1)/A(z/g2) */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 /* Spectral expansion factors */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 static const Word16 gamma3_MR122[M] = {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 22938, 16057, 11240, 7868, 5508,
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 3856, 2699, 1889, 1322, 925
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 };
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 static const Word16 gamma3[M] = {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 18022, 9912, 5451, 2998, 1649, 907, 499, 274, 151, 83
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 };
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 static const Word16 gamma4_MR122[M] = {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 24576, 18432, 13824, 10368, 7776,
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 5832, 4374, 3281, 2461, 1846
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 };
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 static const Word16 gamma4[M] = {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 22938, 16057, 11240, 7868, 5508, 3856, 2699, 1889, 1322, 925
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 };
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 /*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 * PUBLIC PROGRAM CODE
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 ********************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 /*************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 * Function: Post_Filter_reset
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 * Purpose: Initializes state memory to zero
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 **************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 void Post_Filter_reset (Post_FilterState *state)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 Set_zero (state->mem_syn_pst, M);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 Set_zero (state->res2, L_SUBFR);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 Set_zero (state->synth_buf, L_FRAME + M);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 agc_reset(&state->agc_state);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 preemphasis_reset(&state->preemph_state);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 /*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 **************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 * Function: Post_Filter
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 * Purpose: postfiltering of synthesis speech.
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 * Description:
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 * The postfiltering process is described as follows:
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 * - inverse filtering of syn[] through A(z/0.7) to get res2[]
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 * - tilt compensation filtering; 1 - MU*k*z^-1
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 * - synthesis filtering through 1/A(z/0.75)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 * - adaptive gain control
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 **************************************************************************
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 int Post_Filter (
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 Post_FilterState *st, /* i/o : post filter states */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 enum Mode mode, /* i : AMR mode */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 Word16 *syn, /* i/o : synthesis speech (postfiltered is output) */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 Word16 *Az_4 /* i : interpolated LPC parameters in all subfr. */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 )
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 /*-------------------------------------------------------------------*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 * Declaration of parameters *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 *-------------------------------------------------------------------*/
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 Word16 Ap3[MP1], Ap4[MP1]; /* bandwidth expanded LP parameters */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 Word16 *Az; /* pointer to Az_4: */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 /* LPC parameters in each subframe */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 Word16 i_subfr; /* index for beginning of subframe */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 Word16 h[L_H];
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 Word16 i;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 Word16 temp1, temp2;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 Word32 L_tmp;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 Word16 *syn_work = &st->synth_buf[M]; move16 ();
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 /*-----------------------------------------------------*
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 * Post filtering *
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 *-----------------------------------------------------*/
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 Copy (syn, syn_work , L_FRAME);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 Az = Az_4;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 /* Find weighted filter coefficients Ap3[] and ap[4] */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 test (); test ();
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 if (sub(mode, MR122) == 0 || sub(mode, MR102) == 0)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 Weight_Ai (Az, gamma3_MR122, Ap3);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 Weight_Ai (Az, gamma4_MR122, Ap4);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 else
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 Weight_Ai (Az, gamma3, Ap3);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 Weight_Ai (Az, gamma4, Ap4);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 /* filtering of synthesis speech by A(z/0.7) to find res2[] */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 Residu (Ap3, &syn_work[i_subfr], st->res2, L_SUBFR);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 /* tilt compensation filter */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 /* impulse response of A(z/0.7)/A(z/0.75) */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 Copy (Ap3, h, M + 1);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 Set_zero (&h[M + 1], L_H - M - 1);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 Syn_filt (Ap4, h, h, L_H, &h[M + 1], 0);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 /* 1st correlation of h[] */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 L_tmp = L_mult (h[0], h[0]);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 for (i = 1; i < L_H; i++)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 L_tmp = L_mac (L_tmp, h[i], h[i]);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 temp1 = extract_h (L_tmp);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 L_tmp = L_mult (h[0], h[1]);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 for (i = 1; i < L_H - 1; i++)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 L_tmp = L_mac (L_tmp, h[i], h[i + 1]);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 temp2 = extract_h (L_tmp);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 test ();
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 if (temp2 <= 0)
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 temp2 = 0; move16 ();
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 else
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 {
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 temp2 = mult (temp2, MU);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 temp2 = div_s (temp2, temp1);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 preemphasis (&st->preemph_state, st->res2, temp2, L_SUBFR);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 /* filtering through 1/A(z/0.75) */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 Syn_filt (Ap4, st->res2, &syn[i_subfr], L_SUBFR, st->mem_syn_pst, 1);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 /* scale output to input */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 agc (&st->agc_state, &syn_work[i_subfr], &syn[i_subfr],
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 AGC_FAC, L_SUBFR);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 Az += MP1;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 }
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 /* update syn_work[] buffer */
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 Copy (&syn_work[L_FRAME - M], &syn_work[-M], M);
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 return 0;
59655481e45b libtwamr: integrate pstfilt.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }