FreeCalypso > hg > gsm-codec-lib
view libgsmefr/inter_6.c @ 128:a5ffec18e4cd
test programs: use printf %d format for codec parameters
Even though all codec params (both FR and EFR) are small unsigned integers,
we use signed int16_t data type for both, for interface reasons: in the
case of FR it's the gsm_signal type of libgsm, and in the case of EFR
it's the Word16 type of ETSI codec guts. Therefore, the correct printf
format is %d, not %u, when the objective is to see what's in the variables
(what the compiler sees) and catch any bugs.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 11 Dec 2022 04:00:13 +0000 |
parents | 63ad83f3d821 |
children |
line wrap: on
line source
/************************************************************************* * * FUNCTION: Interpol_6() * * PURPOSE: Interpolating the normalized correlation with 1/6 resolution. * *************************************************************************/ #include "gsm_efr.h" #include "typedef.h" #include "namespace.h" #include "basic_op.h" #include "no_count.h" #include "codec.h" #define UP_SAMP 6 #define L_INTERPOL 4 #define FIR_SIZE (UP_SAMP*L_INTERPOL+1) /* 1/6 resolution interpolation filter (-3 dB at 3600 Hz) */ static const Word16 inter_6[FIR_SIZE] = { 29519, 28316, 24906, 19838, 13896, 7945, 2755, -1127, -3459, -4304, -3969, -2899, -1561, -336, 534, 970, 1023, 823, 516, 220, 0, -131, -194, -215, 0 }; Word16 Interpol_6 ( /* (o) : interpolated value */ Word16 *x, /* (i) : input vector */ Word16 frac /* (i) : fraction */ ) { Word16 i, k; Word16 *x1, *x2; const Word16 *c1, *c2; Word32 s; test (); if (frac < 0) { frac = add (frac, UP_SAMP); x--; } x1 = &x[0]; move16 (); x2 = &x[1]; move16 (); c1 = &inter_6[frac]; move16 (); c2 = &inter_6[sub (UP_SAMP, frac)]; move16 (); s = 0; move32 (); for (i = 0, k = 0; i < L_INTERPOL; i++, k += UP_SAMP) { s = L_mac (s, x1[-i], c1[k]); s = L_mac (s, x2[i], c2[k]); } return round (s); }