FreeCalypso > hg > gsm-codec-lib
changeset 399:3618b5cf25a6
libtwamr: integrate preemph.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 19:19:27 +0000 |
parents | df14b0c17e6d |
children | ffd48f0a2ab5 |
files | libtwamr/Makefile libtwamr/namespace.list libtwamr/preemph.c libtwamr/preemph.h |
diffstat | 4 files changed, 148 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Mon May 06 19:07:10 2024 +0000 +++ b/libtwamr/Makefile Mon May 06 19:19:27 2024 +0000 @@ -10,10 +10,11 @@ gc_pred.o gmed_n.o graytab.o hp_max.o int_lpc.o int_lsf.o inter_36.o \ inv_sqrt.o lag_wind.o levinson.o log2.o lpc.o lsfwt.o lsp.o lsp_avg.o \ lsp_az.o lsp_lsf.o lsp_tab.o mac_32.o oper_32b.o ph_disp.o pitch_fr.o \ - post_pro.o pow2.o pre_big.o pre_proc.o pred_lt.o prmno.o q_gain_c.o \ - q_gain_p.o q_plsf.o q_plsf3_tab.o q_plsf5_tab.o q_plsf_3.o q_plsf_5.o \ - qgain475.o qgain795.o qua_gain.o qua_gain_tab.o reorder.o residu.o \ - s10_8pf.o set_sign.o sqrt_l.o syn_filt.o tls_flags.o weight_a.o window.o + post_pro.o pow2.o pre_big.o pre_proc.o pred_lt.o preemph.o prmno.o \ + q_gain_c.o q_gain_p.o q_plsf.o q_plsf3_tab.o q_plsf5_tab.o q_plsf_3.o \ + q_plsf_5.o qgain475.o qgain795.o qua_gain.o qua_gain_tab.o reorder.o \ + residu.o s10_8pf.o set_sign.o sqrt_l.o syn_filt.o tls_flags.o \ + weight_a.o window.o HDRS= namespace.h LIB= libtwamr.a
--- a/libtwamr/namespace.list Mon May 06 19:07:10 2024 +0000 +++ b/libtwamr/namespace.list Mon May 06 19:19:27 2024 +0000 @@ -47,7 +47,7 @@ gmed_n hp_max lpc lpc_reset lsp lsp_reset lsp_avg lsp_avg_reset ph_disp ph_disp_reset ph_disp_lock ph_disp_release -pre_big +pre_big preemphasis preemphasis_reset q_gain_code q_gain_pitch Bits2prm Prm2bits
--- /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; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/preemph.h Mon May 06 19:19:27 2024 +0000 @@ -0,0 +1,53 @@ +/* +******************************************************************************** +* +* 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.h +* Purpose : Preemphasis filtering +* Description : Filtering through 1 - g z^-1 +* +******************************************************************************** +*/ +#ifndef preemph_h +#define preemph_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" + +/* +******************************************************************************** +* DEFINITION OF DATA TYPES +******************************************************************************** +*/ +typedef struct { + Word16 mem_pre; /* filter state */ +} preemphasisState; + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ + +void preemphasis_reset (preemphasisState *st); +/* reset of preemphasis filter (i.e. set state memory to zero) + returns 0 on success + */ + +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 */ +); + +#endif