FreeCalypso > hg > gsm-codec-lib
diff libtwamr/gmed_n.c @ 308:8dfb7cbe6b59
libtwamr: integrated up to bgnscd.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 16 Apr 2024 17:57:21 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/gmed_n.c Tue Apr 16 17:57:21 2024 +0000 @@ -0,0 +1,91 @@ +/* +******************************************************************************** +* +* GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 +* R99 Version 3.3.0 +* REL-4 Version 4.1.0 +* +******************************************************************************** +* +* File : gmed_n.c +* Purpose : calculates N-point median. +* +******************************************************************************** +*/ +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "gmed_n.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" +#include "basic_op.h" +#include "no_count.h" + +/* +******************************************************************************** +* LOCAL VARIABLES AND TABLES +******************************************************************************** +*/ + +#define NMAX 9 /* largest N used in median calculation */ + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ +/************************************************************************* + * + * FUNCTION: gmed_n + * + * PURPOSE: calculates N-point median. + * + * DESCRIPTION: + * + *************************************************************************/ + +Word16 gmed_n ( /* o : index of the median value (0...N-1) */ + Word16 ind[], /* i : Past gain values */ + Word16 n /* i : The number of gains; this routine */ + /* is only valid for a odd number of gains */ + /* (n <= NMAX) */ +) +{ + Word16 i, j, ix = 0; + Word16 max; + Word16 medianIndex; + Word16 tmp[NMAX]; + Word16 tmp2[NMAX]; + + for (i = 0; i < n; i++) + { + tmp2[i] = ind[i]; move16 (); + } + + for (i = 0; i < n; i++) + { + max = -32767; move16 (); + for (j = 0; j < n; j++) + { + test (); + if (sub (tmp2[j], max) >= 0) + { + max = tmp2[j]; move16 (); + ix = j; move16 (); + } + } + tmp2[ix] = -32768; move16 (); + tmp[i] = ix; move16 (); + } + + medianIndex=tmp[ shr(n,1) ]; move16 (); /* account for complex addressing */ + return (ind[medianIndex]); +}