FreeCalypso > hg > efr-experiments
diff src/dtx.h @ 0:56410792419a
src: original EFR source from ETSI
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 03 Apr 2024 05:31:37 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dtx.h Wed Apr 03 05:31:37 2024 +0000 @@ -0,0 +1,140 @@ +/*************************************************************************** + * + * 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 sid_codeword_encoding ( + Word16 ser2[] +); + +Word16 sid_frame_detection ( + Word16 ser2[] +); + +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 +);