19 #define Short_term_analysis_filtering Short_term_analysis_filteringx 28 static void Decoding_of_the_coded_Log_Area_Ratios
P2((
LARc,LARpp),
58 #define STEP( B_TIMES_TWO, MIC, INVA ) \ 59 temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ 60 temp1 = GSM_SUB( temp1, B_TIMES_TWO ); \ 61 temp1 = (word)GSM_MULT_R( INVA, temp1 ); \ 62 *LARpp++ = GSM_ADD( temp1, temp1 ); 64 STEP( 0, -32, 13107 );
65 STEP( 0, -32, 13107 );
66 STEP( 4096, -16, 13107 );
67 STEP( -5120, -16, 13107 );
69 STEP( 188, -8, 19223 );
70 STEP( -3584, -8, 17476 );
71 STEP( -682, -4, 31454 );
72 STEP( -2288, -4, 29708 );
95 static void Coefficients_0_12
P3((LARpp_j_1, LARpp_j, LARp),
96 register word * LARpp_j_1,
97 register word * LARpp_j,
102 for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
108 static void Coefficients_13_26
P3((LARpp_j_1, LARpp_j, LARp),
109 register word * LARpp_j_1,
110 register word * LARpp_j,
111 register word * LARp)
114 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
119 static void Coefficients_27_39
P3((LARpp_j_1, LARpp_j, LARp),
120 register word * LARpp_j_1,
121 register word * LARpp_j,
122 register word * LARp)
126 for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
133 static void Coefficients_40_159
P2((LARpp_j, LARp),
134 register word * LARpp_j,
135 register word * LARp)
139 for (i = 1; i <= 8; i++, LARp++, LARpp_j++)
145 static void LARp_to_rp
P1((LARp),
146 register word * LARp)
156 for (i = 1; i <= 8; i++, LARp++) {
169 *LARp = - ((temp < 11059) ? temp << 1
170 : ((temp < 20070) ? temp + 11059
171 :
GSM_ADD( temp >> 2, 26112 )));
174 *LARp = (temp < 11059) ? temp << 1
175 : ((temp < 20070) ? temp + 11059
176 :
GSM_ADD( temp >> 2, 26112 ));
183 #ifndef Short_term_analysis_filtering 190 static void Short_term_analysis_filtering
P4((u0,rp0,k_n,s),
207 register word * u_top = u0 + 8;
208 register word * s_top = s + k_n;
211 register word *u, *rp ;
214 for (rp=rp0, u=u0; u<u_top;) {
219 u_out = ui + (((rpi*
di)+0x4000)>>15);
220 di = di + (((rpi*ui)+0x4000)>>15);
222 if ((u_out == (
word)u_out) && (di == (
word)
di))
continue;
234 #if defined(USE_FLOAT_MUL) && defined(FAST) 236 static void Fast_Short_term_analysis_filtering
P4((u,rp,k_n,s),
248 register float scalef = 3.0517578125e-5;
249 register float sav,
di, temp;
251 for (i = 0; i < 8; ++i) {
253 rpf[i] = rp[i] * scalef;
257 for (i = 0; i < 8; ++i) {
258 register float rpfi = rpf[i];
259 register float ufi = uf[i];
262 temp = rpfi * di + ufi;
268 for (i = 0; i < 8; ++i) u[i] = uf[i];
281 static void Short_term_synthesis_filtering
P5((
S,rrp,k,wt,sr),
289 register word * v = S->
v;
303 tmp2 = (( tmp1 * tmp2 + 16384) >> 15) ;
306 if (sri != (
word)sri) {
312 tmp1 = (( tmp1 * sri + 16384) >> 15) ;
315 if (tmp1 != (
word)tmp1) {
320 *sr++ = v[0] = (
word)sri;
325 #if defined(FAST) && defined(USE_FLOAT_MUL) 327 static void Fast_Short_term_synthesis_filtering
P5((
S,rrp,k,wt,sr),
335 register word * v = S->
v;
338 float va[9], rrpa[8];
339 register float scalef = 3.0517578125e-5, temp;
341 for (i = 0; i < 8; ++i) {
343 rrpa[i] = (float)rrp[i] * scalef;
346 register float sri = *wt++;
348 sri -= rrpa[i] * va[i];
349 if (sri < -32768.) sri = -32768.;
350 else if (sri > 32767.) sri = 32767.;
352 temp = va[i] + rrpa[i] * sri;
353 if (temp < -32768.) temp = -32768.;
354 else if (temp > 32767.) temp = 32767.;
359 for (i = 0; i < 9; ++i) v[i] = va[i];
364 void Gsm_Short_Term_Analysis_Filter
P3((S,
LARc,s),
378 #if defined(FAST) && defined(USE_FLOAT_MUL) 379 # define FILTER (* (S->fast \ 380 ? Fast_Short_term_analysis_filtering \ 381 : Short_term_analysis_filtering )) 384 # define FILTER Short_term_analysis_filtering 387 Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
389 Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
393 Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
395 FILTER( S->
u, LARp, 14, s + 13);
397 Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
399 FILTER( S->
u, LARp, 13, s + 27);
401 Coefficients_40_159( LARpp_j, LARp);
403 FILTER( S->
u, LARp, 120, s + 40);
407 void Gsm_Short_Term_Synthesis_Filter
P4((S, LARcr, wt, s),
422 #if defined(FAST) && defined(USE_FLOAT_MUL) 424 # define FILTER (* (S->fast \ 425 ? Fast_Short_term_synthesis_filtering \ 426 : Short_term_synthesis_filtering )) 428 # define FILTER Short_term_synthesis_filtering 431 Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
433 Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
435 FILTER( S, LARp, 13, wt, s );
437 Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
439 FILTER( S, LARp, 14, wt + 13, s + 13 );
441 Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
443 FILTER( S, LARp, 13, wt + 27, s + 27 );
445 Coefficients_40_159( LARpp_j, LARp );
447 FILTER(S, LARp, 120, wt + 40, s + 40);
static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc, LARpp), word *LARc, word *LARpp)
static word GSM_ADD(longword a, longword b)
static void Short_term_analysis_filtering P4((u0, rp0, k_n, s), register word *u0, register word *rp0, register int k_n, register word *s)
static void LARp_to_rp P1((LARp), register word *LARp)
#define STEP(B_TIMES_TWO, MIC, INVA)
static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp), register word *LARpp_j_1, register word *LARpp_j, register word *LARp)
static void Short_term_synthesis_filtering P5((S, rrp, k, wt, sr), struct gsm_state *S, register word *rrp, register int k, register word *wt, register word *sr)