FreeCalypso > hg > gsm-codec-lib
diff libtwamr/preemph.c @ 399:3618b5cf25a6
libtwamr: integrate preemph.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 19:19:27 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/preemph.c Mon May 06 19:19:27 2024 +0000 @@ -0,0 +1,89 @@ +/* +******************************************************************************** +* +* 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 : preemph.c +* Purpose : Preemphasis filtering +* Description : Filtering through 1 - g z^-1 +* +******************************************************************************** +*/ + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "preemph.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" +#include "basic_op.h" +#include "no_count.h" + +/* +******************************************************************************** +* LOCAL VARIABLES AND TABLES +******************************************************************************** +*/ + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ + +/************************************************************************* +* +* Function: preemphasis_reset +* Purpose: Initializes state memory to zero +* +************************************************************************** +*/ +void preemphasis_reset (preemphasisState *state) +{ + state->mem_pre = 0; +} + +/* +************************************************************************** +* Function: preemphasis +* Purpose: Filtering through 1 - g z^-1 +* +************************************************************************** +*/ +int preemphasis ( + preemphasisState *st, /* (i/o) : preemphasis filter state */ + Word16 *signal, /* (i/o) : input signal overwritten by the output */ + Word16 g, /* (i) : preemphasis coefficient */ + Word16 L /* (i) : size of filtering */ +) +{ + Word16 *p1, *p2, temp, i; + + p1 = signal + L - 1; move16 (); + p2 = p1 - 1; move16 (); + temp = *p1; move16 (); + + for (i = 0; i <= L - 2; i++) + { + *p1 = sub (*p1, mult (g, *p2--)); move16 (); + p1--; + } + + *p1 = sub (*p1, mult (g, st->mem_pre)); move16 (); + + st->mem_pre = temp; move16 (); + + return 0; +}