FreeCalypso > hg > gsm-codec-lib
changeset 403:7e0aeab69b10
libtwamr: integrate spreproc.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 23:11:34 +0000 |
parents | a8b73b1c5b19 |
children | a37687c6ff22 |
files | libtwamr/Makefile libtwamr/namespace.list libtwamr/spreproc.c libtwamr/spreproc.h |
diffstat | 4 files changed, 167 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Mon May 06 19:58:22 2024 +0000 +++ b/libtwamr/Makefile Mon May 06 23:11:34 2024 +0000 @@ -14,7 +14,7 @@ prmno.o pstfilt.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 sid_sync.o \ - sqrt_l.o syn_filt.o tls_flags.o weight_a.o window.o + spreproc.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:58:22 2024 +0000 +++ b/libtwamr/namespace.list Mon May 06 23:11:34 2024 +0000 @@ -65,6 +65,7 @@ Cb_gain_average Cb_gain_average_reset MR475_update_unq_pred MR475_gain_quant MR795_gain_quant +subframePreProc calc_unfilt_energies calc_filt_energies calc_target_energy code_2i40_9bits code_2i40_11bits code_3i40_14bits code_4i40_17bits
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/spreproc.c Mon May 06 23:11:34 2024 +0000 @@ -0,0 +1,114 @@ +/* +******************************************************************************** +* +* 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 : spreproc.c +* Purpose : Subframe preprocessing +* +******************************************************************************** +*/ + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "spreproc.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" +#include "basic_op.h" +#include "oper_32b.h" +#include "weight_a.h" +#include "syn_filt.h" +#include "residu.h" +#include "memops.h" +#include "no_count.h" + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ +int subframePreProc( + enum Mode mode, /* i : coder mode */ + const Word16 gamma1[], /* i : spectral exp. factor 1 */ + const Word16 gamma1_12k2[],/* i : spectral exp. factor 1 for EFR */ + const Word16 gamma2[], /* i : spectral exp. factor 2 */ + Word16 *A, /* i : A(z) unquantized for the 4 subframes */ + Word16 *Aq, /* i : A(z) quantized for the 4 subframes */ + Word16 *speech, /* i : speech segment */ + Word16 *mem_err, /* i : pointer to error signal */ + Word16 *mem_w0, /* i : memory of weighting filter */ + Word16 *zero, /* i : pointer to zero vector */ + Word16 ai_zero[], /* o : history of weighted synth. filter */ + Word16 exc[], /* o : long term prediction residual */ + Word16 h1[], /* o : impulse response */ + Word16 xn[], /* o : target vector for pitch search */ + Word16 res2[], /* o : long term prediction residual */ + Word16 error[] /* o : error of LPC synthesis filter */ +) +{ + Word16 i; + Word16 Ap1[MP1]; /* A(z) with spectral expansion */ + Word16 Ap2[MP1]; /* A(z) with spectral expansion */ + const Word16 *g1; /* Pointer to correct gammma1 vector */ + + /*---------------------------------------------------------------* + * mode specific pointer to gamma1 values * + *---------------------------------------------------------------*/ + test (); test (); + if ( sub(mode, MR122) == 0 || sub(mode, MR102) == 0 ) + { + g1 = gamma1_12k2; move16 (); + } + else + { + g1 = gamma1; move16 (); + } + /*---------------------------------------------------------------* + * Find the weighted LPC coefficients for the weighting filter. * + *---------------------------------------------------------------*/ + Weight_Ai(A, g1, Ap1); + Weight_Ai(A, gamma2, Ap2); + + /*---------------------------------------------------------------* + * Compute impulse response, h1[], of weighted synthesis filter * + *---------------------------------------------------------------*/ + for (i = 0; i <= M; i++) + { + ai_zero[i] = Ap1[i]; move16 (); + } + + Syn_filt(Aq, ai_zero, h1, L_SUBFR, zero, 0); + Syn_filt(Ap2, h1, h1, L_SUBFR, zero, 0); + + /*------------------------------------------------------------------------* + * * + * Find the target vector for pitch search: * + * * + *------------------------------------------------------------------------*/ + + /* LPC residual */ + Residu(Aq, speech, res2, L_SUBFR); + Copy(res2, exc, L_SUBFR); + + Syn_filt(Aq, exc, error, L_SUBFR, mem_err, 0); + + Residu(Ap1, error, xn, L_SUBFR); + + /* target signal xn[]*/ + Syn_filt(Ap2, xn, xn, L_SUBFR, mem_w0, 0); + + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/spreproc.h Mon May 06 23:11:34 2024 +0000 @@ -0,0 +1,51 @@ +/* +******************************************************************************** +* +* 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 : spreproc.h +* Purpose : Subframe preprocessing +* +******************************************************************************** +*/ +#ifndef spreproc_h +#define spreproc_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "cnst.h" + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ +int subframePreProc( + enum Mode mode, /* i : coder mode */ + const Word16 gamma1[], /* i : spectral exp. factor 1 */ + const Word16 gamma1_12k2[],/* i : spectral exp. factor 1 for EFR */ + const Word16 gamma2[], /* i : spectral exp. factor 2 */ + Word16 *A, /* i : A(z) unquantized for the 4 subframes */ + Word16 *Aq, /* i : A(z) quantized for the 4 subframes */ + Word16 *speech, /* i : speech segment */ + Word16 *mem_err, /* i : pointer to error signal */ + Word16 *mem_w0, /* i : memory of weighting filter */ + Word16 *zero, /* i : pointer to zero vector */ + Word16 ai_zero[], /* o : history of weighted synth. filter */ + Word16 exc[], /* o : long term prediction residual */ + Word16 h1[], /* o : impulse response */ + Word16 xn[], /* o : target vector for pitch search */ + Word16 res2[], /* o : long term prediction residual */ + Word16 error[] /* o : error of LPC synthesis filter */ +); + +#endif