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

📄 gaecepca.s55

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 S55
字号:
*-------------------------------------------------------------------------*
*                                                                         *
*   THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY   *
*   INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:    *
*      "COPYRIGHT 2003 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED"         *
*                                                                         *
*-------------------------------------------------------------------------*/
	.mmregs
    .cpl_on
    .arms_on
	.include "gaeci.h55"
	.sect ".ftext2"
	
_IN_SHFT        		.set (3)
_EN_SHFT        		.set (1)
_NORM_SHFT      		.set (15)
_REG2           		.set (1 << 8); load high!!!!

	.ref					_gaec_utl_en2log
;	.ref					_gl_sInvA	; dbg
;-------------------------------------------------------------------------
	.global _gaec_epc_in
;-------------------------------------------------------------------------
_gaec_epc_in
;S16 *psSav			= ar0,
;S32 *pslXcAcc		= ar1,
;S16 *psXc			= ar2,
;S16 *psIn			= ar3,
;S32 *plsReg		= ar4
;
	pshboth(xar5)
	sp = sp - #2
sDiv	.set 0
sInv	.set 1	
	
	xar5 = mar(*ar0(#(GAEC_FR_SZ/2)))
	
	repeat 	(#(GAEC_EPC_SSZ-1))
		*ar0+ = *ar5+
		
	brc0 = #(GAEC_FR_SZ/2-1)
	localrepeat {
		ac0 = *ar3+
		ac0 = ac0 + *ar3+
		*ar0+ = LO(ac0 << #(-_IN_SHFT));
	}
	mar (*ar0-)
	brc0 = #(GAEC_EPC_MAXD-1)
	xar5 = xar0;	
	localrepeat {
		ac0 = *ar0- * *ar5-
		|| repeat (#(GAEC_FR_SZ/2-2))
			ac0 = ac0 + (*ar0- * *ar5-);
		ac1 = dbl(*ar1);
		ac0 = ac0 - ac1;
		ac1 = ac1 + (ac0 << #(-_EN_SHFT));
		dbl(*ar1+) = ac1;
		mar (ar0 + #(GAEC_FR_SZ/2));
		mar (ar5 + #(GAEC_FR_SZ/2-1));
	}
	mar	(*+ar1(#(-GAEC_EPC_MAXD*2)))
	ac0	= dbl(*ar1)
	ac0 = ac0 + dbl(*ar4)
	dbl(*ar1) = ac0;
	ac0 = mant(ac0), t0 = -exp(ac0) || nop
	*sp(#sDiv) = HI(ac0)
	t0 = -t0;
	ac1 = #(1<<12) << #16;
	repeat (#(16-1))
		subc (*sp(#sDiv), ac1, ac1);
	*sp(#sInv) = ac1;
;	*(_gl_sInvA) = ac1; // dbg
	t0 = t0 - #2;
	
 	brc0 = #(GAEC_EPC_MAXD-1)
	localrepeat {
		ac0 = dbl(*ar1+)
		ac0 = ac0 << t0
		ac1 = ac0 * *sp(#sInv)
		*ar2+ = HI(ac1 << #(16-_NORM_SHFT))
	}
	.if 0	
	.endif
	sp = sp + #2
	xar5 = popboth()
	return
	 
;-------------------------------------------------------------------------
	.global _gaec_epc_corr
;-------------------------------------------------------------------------
_gaec_epc_corr
; GAEC_tDb *pDb,	= ar0
; GAEC_tScEpc *pSc	= ar1
;
; snd	
	xar2 = mar(*ar1(#(GAEC_tScEpc.asEpcSnd + GAEC_EPC_MIND)))
	ac0 = #_REG2 << #16;
	repeat (#(GAEC_EPC_MAXD-GAEC_EPC_MIND-1))
		ac0 = ac0 + (*ar2+ * *ar2+)
	call 	_gaec_utl_en2log
	*ar1(#(GAEC_tScEpc.sEpcSnd)) = t0;
; 
; rcv	
	xar2 = mar(*ar1(#(GAEC_tScEpc.asEpcRcv + GAEC_EPC_MIND)))
	ac0 = #_REG2 << #16;
	repeat (#(GAEC_EPC_MAXD-GAEC_EPC_MIND-1))
		ac0 = ac0 + (*ar2+ * *ar2+)
	call 	_gaec_utl_en2log
	*ar1(#(GAEC_tScEpc.sEpcRcv)) = t0
;
; cross - term	
	xar2 = mar(*ar1(#(GAEC_tScEpc.asEpcSnd + GAEC_EPC_MIND)))
	xar3 = mar(*ar1(#(GAEC_tScEpc.asEpcRcv + GAEC_EPC_MIND)))
	ac0 = #0;
	|| repeat (#(GAEC_EPC_MAXD-GAEC_EPC_MIND-1))
		ac0 = ac0 + (*ar2+ * *ar3+)
	ac1 = #0;
	ac0 = max (ac1, ac0)
	call 	_gaec_utl_en2log
	*ar1(#(GAEC_tScEpc.sEpcXcr)) = t0;
;
;
	ac0 = t0;
	ac1 = *ar1(#(GAEC_tScEpc.sEpcSnd))
	ac1 = ac1 + *ar1(#(GAEC_tScEpc.sEpcRcv))
	ac0 = ac0 - (ac1 << #-1);
	ac1	= #(-30*GAEC_1DB)
	ac0 = max(ac1, ac0)
	*ar0(#(GAEC_tDb.sEpcXcr)) = ac0;
	.if 0
	.endif
	return
	
	
	
	
			
	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -