⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaeci.h

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 H
📖 第 1 页 / 共 2 页
字号:
// 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 + -