FreeCalypso > hg > gsm-codec-lib
changeset 39:36e1363ad885
libgsmefr: initial import of ETSI header files
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 24 Nov 2022 07:38:23 +0000 |
parents | 38326102fc43 |
children | 0f1fe48bdb46 |
files | libgsmefr/cnst.h libgsmefr/codec.h libgsmefr/d_homing.h libgsmefr/dtx.h libgsmefr/e_homing.h libgsmefr/gains_tb.h libgsmefr/namespace.h libgsmefr/no_count.h libgsmefr/oper_32b.h libgsmefr/sig_proc.h libgsmefr/vad.h |
diffstat | 11 files changed, 695 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/cnst.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,21 @@ +/*--------------------------------------------------------------------------* +* Codec constant parameters (coder, decoder, and postfilter) * +*---------------------------------------------------------------------------*/ + +#define L_TOTAL 320 /* Total size of speech buffer. */ +#define L_WINDOW 240 /* Window size in LP analysis */ +#define L_FRAME 160 /* Frame size */ +#define L_FRAME_BY2 80 /* Frame size divided by 2 */ +#define L_SUBFR 40 /* Subframe size */ +#define M 10 /* Order of LP filter */ +#define MP1 (M+1) /* Order of LP filter + 1 */ +#define AZ_SIZE (4*M+4) /* Size of array of LP filters in 4 subfr.s */ +#define PIT_MIN 18 /* Minimum pitch lag */ +#define PIT_MAX 143 /* Maximum pitch lag */ +#define L_INTERPOL (10+1) /* Length of filter for interpolation */ + +#define PRM_SIZE 57 /* Size of vector of analysis parameters */ +#define SERIAL_SIZE (244+1) /* bits per frame + bfi */ + +#define MU 26214 /* Factor for tilt compensation filter 0.8 */ +#define AGC_FAC 29491 /* Factor for automatic gain control 0.9 */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/codec.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,162 @@ +void Init_Coder_12k2 (void); + +void Coder_12k2 ( + Word16 ana[], /* output : Analysis parameters */ + Word16 synth[] /* output : Local synthesis */ +); + +void Init_Decoder_12k2 (void); + +void Decoder_12k2 ( + Word16 parm[], /* input : vector of synthesis parameters + parm[0] = bad frame indicator (bfi) */ + Word16 synth[], /* output: synthesis speech */ + Word16 A_t[], /* output: decoded LP filter in 4 subframes */ + Word16 TAF, + Word16 SID_flag +); + +void Init_Post_Filter (void); + +void Post_Filter ( + Word16 *syn, /* in/out: synthesis speech (postfiltered is output) */ + Word16 *Az_4 /* input : interpolated LPC parameters in all subfr. */ +); + +void code_10i40_35bits ( + Word16 x[], /* (i) : target vector */ + Word16 cn[], /* (i) : residual after long term prediction */ + Word16 h[], /* (i) : impulse response of weighted synthesis + filter */ + Word16 cod[], /* (o) : algebraic (fixed) codebook excitation */ + Word16 y[], /* (o) : filtered fixed codebook excitation */ + Word16 indx[] /* (o) : index of 10 pulses (sign + position) */ +); +void dec_10i40_35bits ( + Word16 index[], /* (i) : index of 10 pulses (sign+position) */ + Word16 cod[] /* (o) : algebraic (fixed) codebook excitation */ +); +Word16 Dec_lag6 ( /* output: return integer pitch lag */ + Word16 index, /* input : received pitch index */ + Word16 pit_min, /* input : minimum pitch lag */ + Word16 pit_max, /* input : maximum pitch lag */ + Word16 i_subfr, /* input : subframe flag */ + Word16 L_frame_by2,/* input : speech frame size divided by 2 */ + Word16 *T0_frac, /* output: fractional part of pitch lag */ + Word16 bfi /* input : bad frame indicator */ +); +Word16 d_gain_pitch ( /* out : quantized pitch gain */ + Word16 index, /* in : index of quantization */ + Word16 bfi, /* in : bad frame indicator (good = 0) */ + Word16 state, /* in : state of the state machine */ + Word16 prev_bf, /* Previous bf */ + Word16 rxdtx_ctrl + +); +void d_gain_code ( + Word16 index, /* input : received quantization index */ + Word16 code[], /* input : innovation codevector */ + Word16 lcode, /* input : codevector length */ + Word16 *gain_code, /* output: decoded innovation gain */ + Word16 bfi, /* input : bad frame indicator */ + Word16 state, /* in : state of the state machine */ + Word16 prev_bf, /* Previous bf */ + Word16 rxdtx_ctrl, + Word16 i_subfr, + Word16 rx_dtx_state + +); +void D_plsf_5 ( + Word16 *indice, /* input : quantization indices of 5 submatrices */ + Word16 *lsp1_q, /* output: quantized 1st LSP vector */ + Word16 *lsp2_q, /* output: quantized 2nd LSP vector */ + Word16 bfi, /* input : bad frame indicator (set to 1 if a bad + frame is received) */ + Word16 rxdtx_ctrl, + Word16 rx_dtx_state +); +Word16 Enc_lag6 ( /* output: Return index of encoding */ + Word16 T0, /* input : Pitch delay */ + Word16 *T0_frac, /* in/out: Fractional pitch delay */ + Word16 *T0_min, /* in/out: Minimum search delay */ + Word16 *T0_max, /* in/out: Maximum search delay */ + Word16 pit_min, /* input : Minimum pitch delay */ + Word16 pit_max, /* input : Maximum pitch delay */ + Word16 pit_flag /* input : Flag for 1st or 3rd subframe */ +); + +Word16 q_gain_pitch ( /* Return index of quantization */ + Word16 *gain /* (i) : Pitch gain to quantize */ +); + +Word16 q_gain_code ( /* Return quantization index */ + Word16 code[], /* (i) : fixed codebook excitation */ + Word16 lcode, /* (i) : codevector size */ + Word16 *gain, /* (i/o) : quantized fixed codebook gain */ + Word16 txdtx_ctrl, + Word16 i_subfr +); + +Word16 G_pitch ( /* (o) : Gain of pitch lag saturated to 1.2 */ + Word16 xn[], /* (i) : Pitch target. */ + Word16 y1[], /* (i) : Filtered adaptive codebook. */ + Word16 L_subfr /* : Length of subframe. */ +); +Word16 G_code ( /* out : Gain of innovation code. */ + Word16 xn[], /* in : target vector */ + Word16 y2[] /* in : filtered inovation vector */ +); + +Word16 Interpol_6 ( /* (o) : interpolated value */ + Word16 *x, /* (i) : input vector */ + Word16 frac /* (i) : fraction */ +); +void Int_lpc ( + Word16 lsp_old[], /* input: LSP vector at the 4th subfr. of past frame */ + Word16 lsp_mid[], /* input: LSP vector at the 2nd subfr. of + present frame */ + Word16 lsp_new[], /* input: LSP vector at the 4th subfr. of + present frame */ + Word16 Az[] /* output: interpolated LP parameters in all subfr. */ +); +void Int_lpc2 ( + Word16 lsp_old[], /* input: LSP vector at the 4th subfr. of past frame */ + Word16 lsp_mid[], /* input: LSP vector at the 2nd subframe of + present frame */ + Word16 lsp_new[], /* input: LSP vector at the 4th subframe of + present frame */ + Word16 Az[] /* output:interpolated LP parameters + in subframes 1 and 3 */ +); +Word16 Pitch_fr6 ( /* (o) : pitch period. */ + Word16 exc[], /* (i) : excitation buffer */ + Word16 xn[], /* (i) : target vector */ + Word16 h[], /* (i) : impulse response of synthesis and + weighting filters */ + Word16 L_subfr, /* (i) : Length of subframe */ + Word16 t0_min, /* (i) : minimum value in the searched range. */ + Word16 t0_max, /* (i) : maximum value in the searched range. */ + Word16 i_subfr, /* (i) : indicator for first subframe. */ + Word16 *pit_frac /* (o) : chosen fraction. */ +); +Word16 Pitch_ol ( /* output: open loop pitch lag */ + Word16 signal[], /* input: signal used to compute the open loop pitch */ + /* signal[-pit_max] to signal[-1] should be known */ + Word16 pit_min, /* input : minimum pitch lag */ + Word16 pit_max, /* input : maximum pitch lag */ + Word16 L_frame /* input : length of frame to compute pitch */ +); +void Pred_lt_6 ( + Word16 exc[], /* in/out: excitation buffer */ + Word16 T0, /* input : integer pitch lag */ + Word16 frac, /* input : fraction of lag */ + Word16 L_subfr /* input : subframe size */ +); +void Q_plsf_5 ( + Word16 *lsp1, /* input : 1st LSP vector */ + Word16 *lsp2, /* input : 2nd LSP vector */ + Word16 *lsp1_q, /* output: quantized 1st LSP vector */ + Word16 *lsp2_q, /* output: quantized 2nd LSP vector */ + Word16 *indice, /* output: quantization indices of 5 matrices */ + Word16 txdtx_ctrl /* input : tx dtx control word */ +);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/d_homing.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,18 @@ +/************************************************************************** + * + * File Name: d_homing.h + * + * Purpose: Contains the prototypes for all the functions of + * decoder homing. + * + **************************************************************************/ + +#define EHF_MASK 0x0008 /* Encoder Homing Frame pattern */ + +#define D_HOMING + +/* Function Prototypes */ + +Word16 decoder_homing_frame_test (Word16 parm[], Word16 nbr_of_params); + +void decoder_reset (void);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/dtx.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,132 @@ +/*************************************************************************** + * + * File Name: dtx.h + * + * Purpose: Contains the prototypes for all the functions of DTX. + * Also contains definitions of constants used in DTX functions. + * + **************************************************************************/ + +#define PN_INITIAL_SEED 0x70816958L /* Pseudo noise generator seed value */ + +#define CN_INT_PERIOD 24 /* Comfort noise interpolation period + (nbr of frames between successive + SID updates in the decoder) */ + +#define DTX_HANGOVER 7 /* Period when SP=1 although VAD=0. + Used for comfort noise averaging */ + + +/* Frame classification constants */ + +#define VALID_SID_FRAME 1 +#define INVALID_SID_FRAME 2 +#define GOOD_SPEECH_FRAME 3 +#define UNUSABLE_FRAME 4 + +/* Encoder DTX control flags */ + +#define TX_SP_FLAG 0x0001 +#define TX_VAD_FLAG 0x0002 +#define TX_HANGOVER_ACTIVE 0x0004 +#define TX_PREV_HANGOVER_ACTIVE 0x0008 +#define TX_SID_UPDATE 0x0010 +#define TX_USE_OLD_SID 0x0020 + +/* Decoder DTX control flags */ + +#define RX_SP_FLAG 0x0001 +#define RX_UPD_SID_QUANT_MEM 0x0002 +#define RX_FIRST_SID_UPDATE 0x0004 +#define RX_CONT_SID_UPDATE 0x0008 +#define RX_LOST_SID_FRAME 0x0010 +#define RX_INVALID_SID_FRAME 0x0020 +#define RX_NO_TRANSMISSION 0x0040 +#define RX_DTX_MUTING 0x0080 +#define RX_PREV_DTX_MUTING 0x0100 +#define RX_CNI_BFI 0x0200 +#define RX_FIRST_SP_FLAG 0x0400 + +void reset_tx_dtx (void); /* Reset tx dtx variables */ +void reset_rx_dtx (void); /* Reset rx dtx variables */ + +void tx_dtx ( + Word16 VAD_flag, + Word16 *txdtx_ctrl +); + +void rx_dtx ( + Word16 *rxdtx_ctrl, + Word16 TAF, + Word16 bfi, + Word16 SID_flag +); + +void CN_encoding ( + Word16 params[], + Word16 txdtx_ctrl +); + +void update_lsf_history ( + Word16 lsf1[M], + Word16 lsf2[M], + Word16 lsf_old[DTX_HANGOVER][M] +); + +void update_lsf_p_CN ( + Word16 lsf_old[DTX_HANGOVER][M], + Word16 lsf_p_CN[M] +); + +void aver_lsf_history ( + Word16 lsf_old[DTX_HANGOVER][M], + Word16 lsf1[M], + Word16 lsf2[M], + Word16 lsf_aver[M] +); + +void update_gain_code_history_tx ( + Word16 new_gain_code, + Word16 gain_code_old_tx[4 * DTX_HANGOVER] +); + +void update_gain_code_history_rx ( + Word16 new_gain_code, + Word16 gain_code_old_rx[4 * DTX_HANGOVER] +); + +Word16 compute_CN_excitation_gain ( + Word16 res2[L_SUBFR] +); + +Word16 update_gcode0_CN ( + Word16 gain_code_old_tx[4 * DTX_HANGOVER] +); + +Word16 aver_gain_code_history ( + Word16 CN_excitation_gain, + Word16 gain_code_old[4 * DTX_HANGOVER] +); + +void build_CN_code ( + Word16 cod[], + Word32 *seed +); + +Word16 pseudonoise ( + Word32 *shift_reg, + Word16 no_bits +); + +Word16 interpolate_CN_param ( + Word16 old_param, + Word16 new_param, + Word16 rx_dtx_state +); + +void interpolate_CN_lsf ( + Word16 lsf_old_CN[M], + Word16 lsf_new_CN[M], + Word16 lsf_interp_CN[M], + Word16 rx_dtx_state +);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/e_homing.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,16 @@ +/************************************************************************** + * + * File Name: e_homing.h + * + * Purpose: Contains the prototypes for all the functions of + * encoder homing. + * + **************************************************************************/ + +#define EHF_MASK 0x0008 /* Encoder Homing Frame pattern */ + +/* Function Prototypes */ + +Word16 encoder_homing_frame_test (Word16 input_frame[]); + +void encoder_reset (void);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/gains_tb.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,21 @@ +/*-----------------------------------------------------------------------* + * Scalar quantization tables of the pitch gain and the codebook gain. * + *-----------------------------------------------------------------------*/ + +#define NB_QUA_PITCH 16 + +static const Word16 qua_gain_pitch[NB_QUA_PITCH] = +{ + 0, 3277, 6556, 8192, 9830, 11469, 12288, 13107, + 13926, 14746, 15565, 16384, 17203, 18022, 18842, 19661 +}; + +#define NB_QUA_CODE 32 + +static const Word16 qua_gain_code[NB_QUA_CODE] = +{ + 159, 206, 268, 349, 419, 482, 554, 637, + 733, 842, 969, 1114, 1281, 1473, 1694, 1948, + 2241, 2577, 2963, 3408, 3919, 4507, 5183, 5960, + 6855, 7883, 9065, 10425, 12510, 16263, 21142, 27485 +};
--- a/libgsmefr/namespace.h Thu Nov 24 05:30:03 2022 +0000 +++ b/libgsmefr/namespace.h Thu Nov 24 07:38:23 2022 +0000 @@ -44,3 +44,94 @@ #define norm_m EFR__norm_s #define div_s EFR__div_s #define norm_l EFR__norm_l + +#define L_Extract EFR__L_Extract +#define L_Comp EFR__L_Comp +#define Mpy_32 EFR__Mpy_32 +#define Mpy_32_16 EFR__Mpy_32_16 +#define Div_32 EFR__Div_32 + +#define Inv_sqrt EFR__Inv_sqrt +#define Log2 EFR__Log2 +#define Pow2 EFR__Pow2 + +#define Init_Pre_Process EFR__Init_Pre_Process +#define Pre_Process EFR__Pre_Process +#define Autocorr EFR__Autocorr +#define Lag_window EFR__Lag_window +#define Levinson EFR__Levinson +#define Az_lsp EFR__Az_lsp +#define Lsp_Az EFR__Lsp_Az +#define Lsf_lsp EFR__Lsf_lsp +#define Lsp_lsf EFR__Lsp_lsf +#define Reorder_lsf EFR__Reorder_lsf +#define Weight_Fac EFR__Weight_Fac +#define Weight_Ai EFR__Weight_Ai +#define Residu EFR__Residu +#define Syn_filt EFR__Syn_filt +#define Convolve EFR__Convolve +#define agc EFR__agc +#define agc2 EFR__agc2 +#define preemphasis EFR__preemphasis + +#define Init_Coder_12k2 EFR__Init_Coder_12k2 +#define Coder_12k2 EFR__Coder_12k2 +#define Init_Decoder_12k2 EFR__Init_Decoder_12k2 +#define Decoder_12k2 EFR__Decoder_12k2 +#define Init_Post_Filter EFR__Init_Post_Filter +#define Post_Filter EFR__Post_Filter +#define code_10i40_35bits EFR__code_10i40_35bits +#define dec_10i40_35bits EFR__dec_10i40_35bits +#define Dec_lag6 EFR__Dec_lag6 +#define d_gain_pitch EFR__d_gain_pitch +#define D_plsf_5 EFR__D_plsf_5 +#define Enc_lag6 EFR__Enc_lag6 +#define q_gain_pitch EFR__q_gain_pitch +#define q_gain_code EFR__q_gain_code +#define G_pitch EFR__G_pitch +#define G_code EFR__G_code +#define Interpol_6 EFR__Interpol_6 +#define Int_lpc EFR__Int_lpc +#define Int_lpc2 EFR__Int_lpc2 +#define Pitch_fr6 EFR__Pitch_fr6 +#define Pitch_ol EFR__Pitch_ol +#define Pred_lt_6 EFR__Pred_lt_6 +#define Q_plsf_5 EFR__Q_plsf_5 + +#define decoder_homing_frame_test EFR__decoder_homing_frame_test +#define decoder_reset EFR__decoder_reset +#define encoder_homing_frame_test EFR__encoder_homing_frame_test +#define encoder_reset EFR__encoder_reset + +#define reset_tx_dtx EFR__reset_tx_dtx +#define reset_rx_dtx EFR__reset_rx_dtx +#define tx_dtx EFR__tx_dtx +#define rx_dtx EFR__rx_dtx +#define CN_encoding EFR__CN_encoding +#define update_lsf_history EFR__update_lsf_history +#define update_lsf_p_CN EFR__update_lsf_p_CN +#define aver_lsf_history EFR__aver_lsf_history +#define update_gain_code_history_tx EFR__update_gain_code_history_tx +#define update_gain_code_history_rx EFR__update_gain_code_history_rx +#define compute_CN_excitation_gain EFR__compute_CN_excitation_gain +#define update_gcode0_CN EFR__update_gcode0_CN +#define aver_gain_code_history EFR__aver_gain_code_history +#define build_CN_code EFR__build_CN_code +#define pseudonoise EFR__pseudonoise +#define interpolate_CN_param EFR__interpolate_CN_param +#define interpolate_CN_lsf EFR__interpolate_CN_lsf + +#define vad_reset EFR__vad_reset +#define vad_computation EFR__vad_computation +#define energy_computation EFR__energy_computation +#define acf_averaging EFR__acf_averaging +#define predictor_values EFR__predictor_values +#define schur_recursion EFR__schur_recursion +#define step_up EFR__step_up +#define compute_rav1 EFR__compute_rav1 +#define spectral_comparison EFR__spectral_comparison +#define threshold_adaptation EFR__threshold_adaptation +#define tone_detection EFR__tone_detection +#define vad_decision EFR__vad_decision +#define vad_hangover EFR__vad_hangover +#define periodicity_update EFR__periodicity_update
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/no_count.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,7 @@ +/* no-op definitions for ETSI's move/logic/test counting calls */ + +static inline void move16(void) {} +static inline void move32(void) {} +static inline void logic16(void) {} +static inline void logic32(void) {} +static inline void test(void) {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/oper_32b.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,7 @@ +/* Double precision operations */ + +void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo); +Word32 L_Comp (Word16 hi, Word16 lo); +Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2); +Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n); +Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/sig_proc.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,114 @@ +/*--------------------------------------------------------------* +* Function prototypes for general SIGnal PROCessing functions. * +*--------------------------------------------------------------*/ + +/* Mathematic functions */ + +Word32 Inv_sqrt ( /* (o) : output value (range: 0<=val<1) */ + Word32 L_x /* (i) : input value (range: 0<=val<=7fffffff) */ +); +void Log2 ( + Word32 L_x, /* (i) : input value */ + Word16 *exponent, /* (o) : Integer part of Log2. (range: 0<=val<=30) */ + Word16 *fraction /* (o) : Fractional part of Log2. (range: 0<=val<1)*/ +); +Word32 Pow2 ( /* (o) : result (range: 0<=val<=0x7fffffff) */ + Word16 exponent, /* (i) : Integer part. (range: 0<=val<=30) */ + Word16 fraction /* (i) : Fractional part. (range: 0.0<=val<1.0) */ +); + +/* General signal processing */ + +void Init_Pre_Process (void); +void Pre_Process ( + Word16 signal[], /* Input/output signal */ + Word16 lg /* Lenght of signal */ +); + +Word16 Autocorr ( + Word16 x[], /* (i) : Input signal */ + Word16 m, /* (i) : LPC order */ + Word16 r_h[], /* (o) : Autocorrelations (msb) */ + Word16 r_l[], /* (o) : Autocorrelations (lsb) */ + const Word16 wind[]/* (i) : window for LPC analysis. */ +); +void Lag_window ( + Word16 m, /* (i) : LPC order */ + Word16 r_h[], /* (i/o) : Autocorrelations (msb) */ + Word16 r_l[] /* (i/o) : Autocorrelations (lsb) */ +); +void Levinson ( + Word16 Rh[], /* (i) : Rh[m+1] Vector of autocorrelations (msb) */ + Word16 Rl[], /* (i) : Rl[m+1] Vector of autocorrelations (lsb) */ + Word16 A[], /* (o) : A[m] LPC coefficients (m = 10) */ + Word16 rc[] /* (o) : rc[4] First 4 reflection coefficients */ +); +void Az_lsp ( + Word16 a[], /* (i) : predictor coefficients */ + Word16 lsp[], /* (o) : line spectral pairs */ + Word16 old_lsp[] /* (i) : old lsp[] (in case not found 10 roots) */ +); +void Lsp_Az ( + Word16 lsp[], /* (i) : line spectral frequencies */ + Word16 a[] /* (o) : predictor coefficients (order = 10) */ +); +void Lsf_lsp ( + Word16 lsf[], /* (i) : lsf[m] normalized (range: 0.0<=val<=0.5) */ + Word16 lsp[], /* (o) : lsp[m] (range: -1<=val<1) */ + Word16 m /* (i) : LPC order */ +); +void Lsp_lsf ( + Word16 lsp[], /* (i) : lsp[m] (range: -1<=val<1) */ + Word16 lsf[], /* (o) : lsf[m] normalized (range: 0.0<=val<=0.5) */ + Word16 m /* (i) : LPC order */ +); +void Reorder_lsf ( + Word16 *lsf, /* (i/o) : vector of LSFs (range: 0<=val<=0.5) */ + Word16 min_dist, /* (i) : minimum required distance */ + Word16 n /* (i) : LPC order */ +); +void Weight_Fac ( + Word16 gamma, /* (i) : Spectral expansion. */ + Word16 fac[] /* (i/o) : Computed factors. */ +); +void Weight_Ai ( + Word16 a[], /* (i) : a[m+1] LPC coefficients (m=10) */ + const Word16 fac[],/* (i) : Spectral expansion factors. */ + Word16 a_exp[] /* (o) : Spectral expanded LPC coefficients */ +); +void Residu ( + Word16 a[], /* (i) : prediction coefficients */ + Word16 x[], /* (i) : speech signal */ + Word16 y[], /* (o) : residual signal */ + Word16 lg /* (i) : size of filtering */ +); +void Syn_filt ( + Word16 a[], /* (i) : a[m+1] prediction coefficients (m=10) */ + Word16 x[], /* (i) : input signal */ + Word16 y[], /* (o) : output signal */ + Word16 lg, /* (i) : size of filtering */ + Word16 mem[], /* (i/o): memory associated with this filtering. */ + Word16 update /* (i) : 0=no update, 1=update of memory. */ +); +void Convolve ( + Word16 x[], /* (i) : input vector */ + Word16 h[], /* (i) : impulse response */ + Word16 y[], /* (o) : output vector */ + Word16 L /* (i) : vector size */ +); +void agc ( + Word16 *sig_in, /* (i) : postfilter input signal */ + Word16 *sig_out, /* (i/o): postfilter output signal */ + Word16 agc_fac, /* (i) : AGC factor */ + Word16 l_trm /* (i) : subframe size */ +); +void agc2 ( + Word16 *sig_in, /* (i) : postfilter input signal */ + Word16 *sig_out, /* (i/o): postfilter output signal */ + Word16 l_trm /* (i) : subframe size */ +); +void preemphasis ( + Word16 *signal, /* (i/o): input signal overwritten by the output */ + Word16 g, /* (i) : preemphasis coefficient */ + Word16 L /* (i) : size of filtering */ +);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmefr/vad.h Thu Nov 24 07:38:23 2022 +0000 @@ -0,0 +1,106 @@ +/*************************************************************************** + * + * File Name: vad.h + * + * Purpose: Contains the prototypes for all functions of voice activity + * detection. Also contains the type definition for the pseudo + * floating point data type. + * + **************************************************************************/ + +/* Struct for storing pseudo floating point exponent and mantissa */ +struct _fp +{ + Word16 e; /* exponent */ + Word16 m; /* mantissa */ +}; + +typedef struct _fp Pfloat; + +void vad_reset (void); + +Word16 vad_computation ( + Word16 r_h[], + Word16 r_l[], + Word16 scal_acf, + Word16 rc[], + Word16 ptch +); + +void energy_computation ( + Word16 r_h[], + Word16 scal_acf, + Word16 rvad[], + Word16 scal_rvad, + Pfloat * acf0, + Pfloat * pvad +); + +void acf_averaging ( + Word16 r_h[], + Word16 r_l[], + Word16 scal_acf, + Word32 L_av0[], + Word32 L_av1[] +); + +void predictor_values ( + Word32 L_av1[], + Word16 rav1[], + Word16 *scal_rav1 +); + +void schur_recursion ( + Word32 L_av1[], + Word16 vpar[] +); + +void step_up ( + Word16 np, + Word16 vpar[], + Word16 aav1[] +); + +void compute_rav1 ( + Word16 aav1[], + Word16 rav1[], + Word16 *scal_rav1 +); + +Word16 spectral_comparison ( + Word16 rav1[], + Word16 scal_rav1, + Word32 L_av0[] +); + +void threshold_adaptation ( + Word16 stat, + Word16 ptch, + Word16 tone, + Word16 rav1[], + Word16 scal_rav1, + Pfloat pvad, + Pfloat acf0, + Word16 rvad[], + Word16 *scal_rvad, + Pfloat * thvad +); + +void tone_detection ( + Word16 rc[], + Word16 *tone +); + +Word16 vad_decision ( + Pfloat pvad, + Pfloat thvad +); + +Word16 vad_hangover ( + Word16 vvad +); + +void periodicity_update ( + Word16 lags[], + Word16 *ptch +);