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

📄 gaecnra.s54

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 S54
字号:
*-------------------------------------------------------------------------*
*                                                                         *
*   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
	.include "gaeci.h54"
	.sect ".ftext2"

;-------------------------------------------------------------------------
	.ref 	_gaec_utl_exp
	.ref 	_gaec_utl_en2log
	
_DB52p21	.set 	8875

;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
	.global				_gaec_nr_nrg
;-------------------------------------------------------------------------
_gaec_nr_nrg
; GAEC_tDb *pDb	= a 
; GAEC_tSc *pSc	= sp(1)
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
;	
; ar2 -> pDb->aslNrPrior[band]
; ar3 -> pSc->asErrEn[band]
; ar4 =  pNr
; ar5 -> pDb->asVadRxNse[band]
;	
	mvmm	ar3, ar4
	mar		*+ar4(#GAEC_tSc.u.aNr)
	mar		*+ar3(#GAEC_tSc.asErrEn)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.asVadErrNse)
	mar 	*+ar2(#GAEC_tDb.aslNrPrior)
;
; loop start	
	stm		#(GAEC_BANDS+1)-1, brc
	rptb	N20-1
		ld 		*ar3+, a
		add 	#GAEC_1DB*25, a	
		ld 		#GAEC_1DB*15, b
		min 	a
		call 	_gaec_utl_exp
		stl 	a, *ar4(#GAEC_tScNr.sSig)
		squr	*ar4(#GAEC_tScNr.sSig), a
		dst		a, *ar4(#GAEC_tScNr.slSig)		
		
		ld 		*ar5+, a
		add		#GAEC_1DB*25, a	
		call 	_gaec_utl_exp
		ld 		a, 8, a
		ld 		a, 8, a
		squr 	a, b
		dst		b, *ar4(#GAEC_tScNr.slNse)
		
		dld		*ar4(#GAEC_tScNr.slSig), a
		sub		b, a
		ld 		#0, b
		max 	a
		dld		*ar2+, b
		sub 	b, a
		add 	a, -6, b
		dst 	b, *ar4(#GAEC_tScNr.slEst)
		
		mar		*+ar4(#GAEC_tScNr_Sz)
N20	
	ret

;-------------------------------------------------------------------------
	.global				_gaec_nr_coef
;-------------------------------------------------------------------------
_gaec_nr_coef
; GAEC_tDb *pDb	= a - not used
; GAEC_tSc *pSc	= sp(1)
;
	ssbx	sxm
	mvdk	*sp(1), ar3
	mar		*+ar3(#GAEC_tSc.u.aNr)
;
; local vars
_s1			.set 	0
_s2			.set 	1
	frame 	#-2
; 	
	stm		#(GAEC_BANDS+1)-1, brc
	rptb	N30-1
		dld 	*ar3(#GAEC_tScNr.slEst), a
		dadd 	*ar3(#GAEC_tScNr.slNse), a
		call 	_gaec_utl_en2log
		stl 	a, _s1
		dld		*ar3(#GAEC_tScNr.slEst), a
		call 	_gaec_utl_en2log
		sub 	*sp(_s1), a
		stl 	a, *sp(_s1)
		
		dld		*ar3(#GAEC_tScNr.slSig), a
		call 	_gaec_utl_en2log
		stl 	a, *sp(_s2)
		dld		*ar3(#GAEC_tScNr.slNse), a
		call 	_gaec_utl_en2log
		sub 	*sp(_s2), a
		
		ld 		#GAEC_1DB*8, b
		min 	a
		stl 	a, *sp(_s2)
		
		ld 		*sp(_s1), 1, a
		call 	_gaec_utl_exp
		stl		a, *sp(_s1)
		
		ld 		*sp(_s2), 1, a
		call 	_gaec_utl_exp
		stl		a, *sp(_s2)
		
		add 	*sp(_s1), a
		ld 		a, 8, a
		ld 		a, 8, a
		mpya 	*sp(_s1)
		add 	#2048, b
		ld 		b, -12, a
		call 	_gaec_utl_en2log
		add 	#_DB52p21, a
		ld 		#0, b
		min 	a
		call 	_gaec_utl_exp
		stl 	a, *ar3(#GAEC_tScNr.sCoef)
		
		mar		*+ar3(#GAEC_tScNr_Sz)
N30
	frame 	#2
	ret	
;-------------------------------------------------------------------------
	.global				_gaec_nr_upd
;-------------------------------------------------------------------------
_gaec_nr_upd
; GAEC_tDb *pDb	= a 
; GAEC_tSc *pSc	= sp(1)
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	mar		*+ar3(#GAEC_tSc.u.aNr)
	mvmm 	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.aslNrPrior)
	mar 	*+ar2(#GAEC_tDb.asNrCoef)
;
	stm		#(GAEC_BANDS+1)-1, brc
	rptb	N40-1
		ld 		*ar3(#GAEC_tScNr.sCoef), a
		sub 	#1024, a, b
		bc 		N44, bgt
		sub 	#720, a, b
		bc 		N42, bgt
		sub 	#410, a, b
		bc 		N43, bgt
; case: <= 410		
			ld 		#410, a
			sub 	*ar2, a
			bd		N44
			ld 		a, -3, a
			add 	*ar2, a
N42 ; case > 710
			sub 	*ar2, a
			bd		N44
			ld 		a, -1, a
			add 	*ar2, a
N43 ; case > 410
			sub 	*ar2, a
			ld 		a, -2, a
			add 	*ar2, a
N44
		stl 	a, *ar2
		ld 		*ar3(#GAEC_tScNr.sSig), t
		mpy		*ar2+, a
		ld 		a, 4, a
		squr 	A, b
		dst 	b, *ar4+
;		
		mar		*+ar3(#GAEC_tScNr_Sz)
N40
	ret
;-------------------------------------------------------------------------
	.global				_gaec_nr_att
;-------------------------------------------------------------------------
_gaec_nr_att
; GAEC_tDb *pDb	= a 
; GAEC_tSc *pSc	= sp(1)
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	mar		*+ar2(#GAEC_tDb.asNrCoef)
	mvmm	ar3, ar5
	mar		*+ar5(#GAEC_tSc.u.asTmp)
	rpt		#(GAEC_BANDS+1)-1
		mvdd	*ar2+, *ar5+
	mvmm	ar5, ar4
	mar		*+ar4(#-GAEC_BANDS)
	rpt		#(GAEC_BANDS-1)-1
		mvdd	*ar4+, *ar5+
	mar		*+ar5(#-GAEC_BANDS*2)	; back to asTmp[0]
		
	mvmm	ar3, ar4
	mar		*+ar4(#GAEC_tSc.aasErr0)
	stm		#(2*GAEC_BANDS)-1, ar2
N10
		ld 		*ar5+, t
		stm		#GAEC_ERR_SZ-1, brc	
		rptb	N11-1
			mpy		*ar4, a
			add		#1, 11, a
			sth		a, 4, *ar4+
N11		
	banz	N10, *ar2-
	ret
	

⌨️ 快捷键说明

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