📄 gaeci.h
字号:
// epc analysis
typedef struct {
S16 asEpcRcv [GAEC_EPC_MAXD];
S16 asEpcSnd [GAEC_EPC_MAXD];
S16 sEpcRcv;
S16 sEpcSnd;
S16 sEpcXcr;
} GAEC_tScEpc;
typedef struct GAEC_tSc {
union {
GAEC_tScRcv Rcv; // 106
GAEC_tScNr aNr[GAEC_BANDS+1]; // 88
GAEC_tScA2 aA2[GAEC_BANDS-1]; // 36
GAEC_tScA3 aA3[GAEC_BANDS-1]; // 54
GAEC_tScA4 aA4[GAEC_BANDS-1]; // 90
S16 asTmp[GAEC_TMP_SZ]; // 45
GAEC_tScEpc Epc; // 105
} u;
S16 aasErr0 [GAEC_BANDS*2][GAEC_ERR_SZ]; // 180
S16 aasSin [GAEC_BANDS*2][GAEC_BLKS]; // 80
S16 aasErr [GAEC_BANDS*2][GAEC_BLKS]; // 80
S16 aasErrM [GAEC_BANDS*2][GAEC_BLKS]; // 80
S16 asRinEn [GAEC_BANDS+1];
S16 sRinEn;
S16 asRoutEn [GAEC_BANDS+1];
S16 sRoutEn;
S16 asSinEn [GAEC_BANDS+1];
S16 sSinEn;
S16 asErrEn [GAEC_BANDS+1];
S16 sErrEn;
S16 asErrMEn [GAEC_BANDS+1];
S16 asErle [GAEC_BANDS+1];
S16 sErle;
S16 asErl [GAEC_BANDS+1];
S16 sErl;
S16 asSSC [GAEC_BANDS+1];
S16 asAttRin [GAEC_BANDS+1];
S16 asAttErr [GAEC_BANDS+1]; // 110
S16 sErleMax;
S16 sMaxCoef;
U16 uAdapt;
U16 uNlpMode;
} GAEC_tSc;
/*--------------------- public vars- ----------------------------------*/
extern const S16 GAEC_aasFBR[GAEC_BANDS*2][GAEC_FBR_SZ/2];
extern const S16 GAEC_aasFBS[GAEC_BANDS*2][GAEC_FBS_SZ/2];
extern const S16 GAEC_aasFBZ[GAEC_BANDS*2][GAEC_FBZ_SZ];
/*--------------------- local vars ------------------------------------*/
/*--------------------- local functions -------------------------------*/
#if defined (__cplusplus)
extern "C" {
#endif
// gaecz
extern void gaec_erl (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_erl_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_erle (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psSnd);
extern void gaec_erle_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaeczs
extern S16 _invert (S32 *psl,S16 sStepSz);
extern void gaec_update_err_sav (GAEC_tDb *pDb,GAEC_tSc *pSc);
extern void gaec_shift_rcv (GAEC_tDb *pDb);
extern void gaec_update_rbuf (GAEC_tDb *pDb, S16 *psRcv);
extern void gaec_add_energy (GAEC_tDb *pDb, S16 band, S32 *pslEnergy);
extern void gaec_copy_adf (S16 *psTo, S16 *psFrom, S16 band);
extern void gaec_copy_err (GAEC_tSc *pSc, S16 band);
extern void gaec_in_corr (S16 *psSav, S16 *psIO);
extern void gaec_out_corr (S32 *psSav, S16 *psIO);
extern void gaec_loopback (GAEC_tDb *pDb, S16 *psSnd);
extern void gaec_max_coef (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_scale_band (S16 *psAdf, S16 *psAdfM, S16 band, S16 sShft);
// gaeca2s
extern void gaec_get_energy2 (GAEC_tDb *pDb, S16 blk);
extern void gaec_adapt_dc2p (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk, S16 band);
extern void gaec_adapt_dc2d (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk, S16 band);
extern void gaec_adapt_ac2p (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk);
extern void gaec_adapt_ac2d (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk);
// gaeca3s
extern void gaec_get_energy3 (GAEC_tDb *pDb, S16 blk);
extern void gaec_adapt_dc3p (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk, S16 band);
extern void gaec_adapt_dc3d (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk, S16 band);
extern void gaec_adapt_ac3p (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk);
extern void gaec_adapt_ac3d (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 blk);
// gaeca4s
extern void gaec_get_energy4 (GAEC_tDb *pDb);
extern void gaec_adapt_dc4p (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 band);
extern void gaec_adapt_dc4d (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 band);
extern void gaec_adapt_ac4p (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adapt_ac4d (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaeccnls
extern void gaec_cancel_dc (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psAdf, S16 *psErr, S16 blk, S16 band);
extern void gaec_cancel_ac (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psAdf, S16 *psErr, S16 blk);
// gaecadf
extern void gaec_adf_cancel (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_adapt (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_control (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_stepsize (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_epc_control (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_dt_start (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_dt_end (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_adf_scale (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecfbs
extern void gaec_fb_rcv_analysis (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_fb_snd_analysis (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psSout);
extern void gaec_fb_synthesis (S16 ppsErr[][GAEC_ERR_SZ], S16 *psTx);
// gaecnr
extern void gaec_nr (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nr_nrg (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nr_coef (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nr_upd (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nr_att (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaectxps
extern void gaec_tx_vad_fb (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_tx_process (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psRcv);
extern void gaec_tx_analysis (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psTx);
extern void gaec_tx_vad (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_tx_att (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_tx_nse (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecrcv, gaecrcvs
extern void gaec_rcv_detect_tone (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psRcv);
extern void gaec_rcv_moments (GAEC_tDb *pDb, GAEC_tScRcv *pScr, S16 *psRcv);
extern S16 gaec_rcv_durbin (GAEC_tDb *pDb, GAEC_tScRcv *pScr);
extern void gaec_rcv_normalise_rk (GAEC_tDb *pDb, GAEC_tScRcv *pScr, S16 sShift, S16 sAdd);
// gaecens
extern void gaec_nrg_rcv (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nrg_blk (S16 *psFrom, S16 *psTo);
extern void gaec_nrg_err (S16 ppsErr[][GAEC_ERR_SZ], S16 *psTo);
// gaecdtd
extern void gaec_dtd (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecdtds
extern void gaec_dtd_update_rout_flat(GAEC_tDb *pDb, S16 *psRcv);
extern void gaec_dtd_update_exp_err (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_exp_err (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_exp_err_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_vad_err (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_vad_err_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_dec_criteria (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_criteria (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_criteria_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_dtd_avrg_erle_sb (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecnlp
extern void gaec_nlp_get_coefs (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nlp_corect_coefs (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nlp_stts_update (GAEC_tDb *pDb, GAEC_tSc *pSc);
extern void gaec_nlp (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecnlps
extern void gaec_nlp_add_noise (S16 *psSeed, S16 *psTo, S16 sLevel);
extern void gaec_nlp_mix_noise (GAEC_tDb *pDb, GAEC_tSc *pSc, U16 uUseDtCrit);
extern void gaec_nlp_att_rx (GAEC_tDb *pDb, GAEC_tSc *pSc);
// gaecepc
extern void gaec_epc_in (S16 *psSav,S32 *pslXcAcc,S16 *psXc,S16 *psIn,S32 *plsReg);
extern void gaec_epc_corr (GAEC_tDb *pDb, GAEC_tScEpc *pSc);
extern void gaec_epc_xcorrelation (GAEC_tDb *pDb, GAEC_tSc *pSc, S16 *psRcv, S16 *psSnd);
// gaecus
extern S16 gaec_utl_pkt_energy (S16 *psData);
extern S32 gaec_utl_pkt_norm (S16 *psData);
extern S16 gaec_utl_en2log (S32 lsEn);
extern S16 gaec_utl_pen2log (S32 lsEn);
extern S16 gaec_utl_exp (S16 sLevel);
//extern S16 gaec_utl_pkt_peak (S16 *psData);
extern void gaec_utl_avrg (S16 *psSav, S16 sNew, S16 sCoeff);
extern void memclr (void *p, U16 sz);
#if defined (__cplusplus)
}
#endif
// shift, round and saturate
static inline S16 _Srnd(S32 ac0, S16 tx)
{
if (tx > 0)
ac0 <<= tx;
else
ac0 >>= (-tx);
ac0 += (1<<14);
ac0 >>= 15;
if (ac0 > +32767) ac0 = +32767;
if (ac0 < -32768) ac0 = -32768;
return (S16)ac0;
}
static inline S16 _Smpy(S16 x, S16 y)
{
S32 ac0 = x * (S32) y;
return _Srnd(ac0,0);
}
/* divide by 17 */
#if ! defined (_dsp)
/* ------------------------------------------------------------------------ */
static inline S16 _by17
/* ------------------------------------------------------------------------ */
(
S16 sIn
)
{
S32 acc = sIn * (S32)(32767/17) + 0x4000;
return (S16)(acc >> 15);
}
#else
#define _by17(x) _smpyr(x, (32767/17))
#endif
/*---------------------------------------------------------------------*/
#endif /* _sbeci_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -