FreeCalypso > hg > gsm-codec-lib
comparison libgsmefr/pstfilt2.c @ 87:41d8e8f4058d
libgsmefr: pstfilt2.c compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 26 Nov 2022 10:27:34 +0000 |
parents | 49dd1ac8e75b |
children |
comparison
equal
deleted
inserted
replaced
86:9aef9e54b19d | 87:41d8e8f4058d |
---|---|
6 * | 6 * |
7 * FUNCTIONS INCLUDED: Init_Post_Filter() and Post_Filter() | 7 * FUNCTIONS INCLUDED: Init_Post_Filter() and Post_Filter() |
8 * | 8 * |
9 *************************************************************************/ | 9 *************************************************************************/ |
10 | 10 |
11 #include "gsm_efr.h" | |
11 #include "typedef.h" | 12 #include "typedef.h" |
13 #include "namespace.h" | |
12 #include "basic_op.h" | 14 #include "basic_op.h" |
13 #include "sig_proc.h" | 15 #include "sig_proc.h" |
14 #include "count.h" | 16 #include "memops.h" |
17 #include "no_count.h" | |
15 #include "codec.h" | 18 #include "codec.h" |
16 #include "cnst.h" | 19 #include "cnst.h" |
20 #include "dec_state.h" | |
17 | 21 |
18 /*---------------------------------------------------------------* | 22 /*---------------------------------------------------------------* |
19 * Postfilter constant parameters (defined in "cnst.h") * | 23 * Postfilter constant parameters (defined in "cnst.h") * |
20 *---------------------------------------------------------------* | 24 *---------------------------------------------------------------* |
21 * L_FRAME : Frame size. * | 25 * L_FRAME : Frame size. * |
29 #define L_H 22 /* size of truncated impulse response of A(z/g1)/A(z/g2) */ | 33 #define L_H 22 /* size of truncated impulse response of A(z/g1)/A(z/g2) */ |
30 | 34 |
31 /*------------------------------------------------------------* | 35 /*------------------------------------------------------------* |
32 * static vectors * | 36 * static vectors * |
33 *------------------------------------------------------------*/ | 37 *------------------------------------------------------------*/ |
34 | |
35 /* inverse filtered synthesis */ | |
36 | |
37 static Word16 res2[L_SUBFR]; | |
38 | |
39 /* memory of filter 1/A(z/0.75) */ | |
40 | |
41 static Word16 mem_syn_pst[M]; | |
42 | 38 |
43 /* Spectral expansion factors */ | 39 /* Spectral expansion factors */ |
44 | 40 |
45 const Word16 F_gamma3[M] = | 41 const Word16 F_gamma3[M] = |
46 { | 42 { |
59 * | 55 * |
60 * PURPOSE: Initializes the postfilter parameters. | 56 * PURPOSE: Initializes the postfilter parameters. |
61 * | 57 * |
62 *************************************************************************/ | 58 *************************************************************************/ |
63 | 59 |
64 void Init_Post_Filter (void) | 60 void Init_Post_Filter (struct EFR_decoder_state *st) |
65 { | 61 { |
66 Set_zero (mem_syn_pst, M); | 62 Set_zero (st->mem_syn_pst, M); |
67 | 63 |
68 Set_zero (res2, L_SUBFR); | 64 Set_zero (st->res2, L_SUBFR); |
69 | 65 |
70 return; | 66 return; |
71 } | 67 } |
72 | 68 |
73 /************************************************************************* | 69 /************************************************************************* |
84 * - adaptive gain control | 80 * - adaptive gain control |
85 * | 81 * |
86 *************************************************************************/ | 82 *************************************************************************/ |
87 | 83 |
88 void Post_Filter ( | 84 void Post_Filter ( |
85 struct EFR_decoder_state *st, | |
89 Word16 *syn, /* in/out: synthesis speech (postfiltered is output) */ | 86 Word16 *syn, /* in/out: synthesis speech (postfiltered is output) */ |
90 Word16 *Az_4 /* input: interpolated LPC parameters in all subframes */ | 87 Word16 *Az_4 /* input: interpolated LPC parameters in all subframes */ |
91 ) | 88 ) |
92 { | 89 { |
93 /*-------------------------------------------------------------------* | 90 /*-------------------------------------------------------------------* |
118 Weight_Ai (Az, F_gamma3, Ap3); | 115 Weight_Ai (Az, F_gamma3, Ap3); |
119 Weight_Ai (Az, F_gamma4, Ap4); | 116 Weight_Ai (Az, F_gamma4, Ap4); |
120 | 117 |
121 /* filtering of synthesis speech by A(z/0.7) to find res2[] */ | 118 /* filtering of synthesis speech by A(z/0.7) to find res2[] */ |
122 | 119 |
123 Residu (Ap3, &syn[i_subfr], res2, L_SUBFR); | 120 Residu (Ap3, &syn[i_subfr], st->res2, L_SUBFR); |
124 | 121 |
125 /* tilt compensation filter */ | 122 /* tilt compensation filter */ |
126 | 123 |
127 /* impulse response of A(z/0.7)/A(z/0.75) */ | 124 /* impulse response of A(z/0.7)/A(z/0.75) */ |
128 | 125 |
155 { | 152 { |
156 temp2 = mult (temp2, MU); | 153 temp2 = mult (temp2, MU); |
157 temp2 = div_s (temp2, temp1); | 154 temp2 = div_s (temp2, temp1); |
158 } | 155 } |
159 | 156 |
160 preemphasis (res2, temp2, L_SUBFR); | 157 preemphasis (st, st->res2, temp2, L_SUBFR); |
161 | 158 |
162 /* filtering through 1/A(z/0.75) */ | 159 /* filtering through 1/A(z/0.75) */ |
163 | 160 |
164 Syn_filt (Ap4, res2, &syn_pst[i_subfr], L_SUBFR, mem_syn_pst, 1); | 161 Syn_filt (Ap4, st->res2, &syn_pst[i_subfr], L_SUBFR, |
162 st->mem_syn_pst, 1); | |
165 | 163 |
166 /* scale output to input */ | 164 /* scale output to input */ |
167 | 165 |
168 agc (&syn[i_subfr], &syn_pst[i_subfr], AGC_FAC, L_SUBFR); | 166 agc (st, &syn[i_subfr], &syn_pst[i_subfr], AGC_FAC, L_SUBFR); |
169 | 167 |
170 Az += MP1; | 168 Az += MP1; |
171 } | 169 } |
172 | 170 |
173 /* update syn[] buffer */ | 171 /* update syn[] buffer */ |