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

📄 gaecdtda.s54

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

_DTSSC              		.set (0)
_ERL_CRIT_THR       		.set (GAEC_1DB*3)
_DTD_CRIT_THR       		.set (GAEC_1DB*6)
_DTD_NSE_THR        		.set (GAEC_1DB*8)
_DTD_NSE_THR2        		.set (GAEC_1DB*4) ; shifted >> 1

	.ref	_gaec_utl_pkt_energy

;-------------------------------------------------------------------------
	.global _gaec_dtd_exp_err
;-------------------------------------------------------------------------
_gaec_dtd_exp_err
; GAEC_tDb *pDb	= a
; GAEC_tSc *pSc = sp(1)
;
	stlm	a, ar2
	mvdk	*sp(1), ar3
	ssbx	sxm
	nop
	ld 		*ar3(#(GAEC_tSc.sRoutEn)), a
_sNew		.set 0
_sMax		.set 1
	pshm	ar1
	pshm	ar6
	pshm	ar7
	frame 	#-2
	nop
	mvmm	ar3, ar1
	stl 	a, *sp(_sNew)
;
; ptrs assignment
	mar 	*+ar1(#GAEC_tSc.sErleMax)	
	mvmm	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.asRoutEnHst)
	mvmm	ar2, ar5
	mar 	*+ar5(#GAEC_tDb.sExpectedErrEn)
	mvmm	ar2, ar6
	mar 	*+ar6(#GAEC_tDb.sErleAv)
	mvmm	ar2, ar7
	mar 	*+ar7(#GAEC_tDb.sErlAv)
	
	stm		#GAEC_ADF_FRS-1, brc
	rptb 	K10-1
		ld 		*ar4+, b
		max 	a
K10	
	mar 	*+ar4(#-GAEC_ADF_FRS)
	
	stl 	a, *sp(_sMax)
	ld 		*ar6, a
	ld 		*ar1, b
	min 	b
	ld 		*sp(_sMax), a
	sub 	b, a
	sub 	*ar7, a; 
	stl 	a, *sp(_sMax)
	
	ld 		*ar5, a
	sub 	*sp(_sMax), a, b
	nop
	nop
	xc 		1, blt
		ld 		*sp(_sMax), a
	xc 		2, bgeq
		sub 	#102, a	; GAEC_DB(0.6)
	stl 	a, *ar5
;
;	shift array
	mvmm 	ar4,ar3
	mar 	*ar3+
	rpt		#GAEC_ADF_FRS-2
		mvdd 	*ar3+, *ar4+
;
; update last elem with sNew		
	ld 		*sp(_sNew), a
	stl 	a, *ar4+
	mar 	*+ar4(#-GAEC_ADF_FRS)
	
	frame 	#2
	popm	ar7
	popm 	ar6
	popm	ar1
	ret


;-------------------------------------------------------------------------
	.global _gaec_dtd_exp_err_sb
;-------------------------------------------------------------------------
_gaec_dtd_exp_err_sb
; GAEC_tDb *pDb	= a
; GAEC_tSc *pSc = sp(1)
;
_sMaxSb		.set 4 ; stored in sp(1) [pSc]
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar1
	
	pshm	ar1
	pshm	ar6
	pshm	ar7
;
; ptrs assignment
	mvmm	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.aasRoutEnHst)
	mvmm	ar2, ar5
	mar 	*+ar5(#GAEC_tDb.asExpectedErrEn)
	mvmm	ar2, ar6
	mar 	*+ar6(#GAEC_tDb.asErleAv)
	mvmm	ar2, ar7
	mar 	*+ar7(#GAEC_tDb.asErlAv)
	mvmm	ar1, ar2
	mar 	*+ar2(#GAEC_tSc.asRoutEn)	
	mar 	*+ar1(#GAEC_tSc.sErleMax)
	stm 	#GAEC_BANDS, ar0
K21	
		ld 		*ar2, a
		stm		#GAEC_ADF_FRS-1, brc
		rptb 	K20-1
			ld 		*ar4+, b
			max 	a
K20	
		mar 	*+ar4(#-GAEC_ADF_FRS)
		
		stl 	a, *sp(_sMaxSb)
		ld 		*ar6+, a		; psErleAv incremented
		ld 		*ar1, b
		min 	b
		ld 		*sp(_sMaxSb), a
		sub 	b, a
		sub 	*ar7+, a 		; psErlAv incremented
		stl 	a, *sp(_sMaxSb)
		
		ld 		*ar5, a		
		sub 	*sp(_sMaxSb), a, b
		nop
		nop
		xc 		1, blt
			ld 		*sp(_sMaxSb), a
		xc 		2, bgeq
			sub 	#102, a	; GAEC_DB(0.6)
		stl 	a, *ar5+		; psExpectedErrEn incremented
;
;	shift array
		mvmm 	ar4,ar3
		mar 	*ar3+
		rpt		#GAEC_ADF_FRS-2
			mvdd 	*ar3+, *ar4+
;
; update last elem with sNew		
		mvdd 	*ar2+, *ar4+	; psRcvEn incremented
								; psRoutHstEn incremented

	banz 	K21, *ar0-
		
	popm	ar7
	popm 	ar6
	popm	ar1
	ret

;-------------------------------------------------------------------------
	.global _gaec_dtd_vad_err
;-------------------------------------------------------------------------
_gaec_dtd_vad_err
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3

	mvdk	*ar2(#GAEC_tDb.uAdfMode), ar5
	stm 	#3, ar0
	cmpr 	01, ar5
;
; set ptrs
; ar3-> pSc->sErrEn
; ar4-> pDb->sVadRxNse
; ar5-> pDb->sVadRxCrit
; ar0-> pSc->sSinEn
;
	frame 	#-2
_sDlt		.set 	0
_sNseMin	.set 	1

	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.sVadErrNse)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.sVadErrCrit)
	mvmm	ar3, ar0
	mar		*+ar0(#GAEC_tSc.sSinEn)
	mar		*+ar3(#GAEC_tSc.sErrEn)
	
	st 		#GAEC_VAD_NSE_MIN, *sp(_sNseMin)
		
	ld 		*ar3, a
	sub 	*sp(_sNseMin), a
	bc 		K31, aleq
	ld 		*ar0, a
	sub 	*sp(_sNseMin), a
	bc		K31, aleq
	
		ld 		*ar3, a
		sub		*ar4, a
		stl		a, *sp(_sDlt)
		sub		#GAEC_VAD_CRIT_THR, a
		add		*ar5, a
		ld 		#GAEC_CRIT_MIN, b
		max 	a
		ld 		#GAEC_CRIT_MAX, b
		min 	a
		stl		a, *ar5+
		sub		#GAEC_VAD_CRIT_THR, a
		bc		K30, ageq
			ld 		*ar4, a
			xc 		2, tc
				add 	*sp(_sDlt), -3, a
			xc 		2, ntc
				add 	*sp(_sDlt), -5, a
			ld 		#GAEC_VAD_NSE_MAX, b
			min 	a
			ld 		*sp(_sNseMin), b
			bd 		K32
			max 	a
			stl 	a, *ar4+
K30		
			ld 		*ar3, a
			sub 	#GAEC_VAD_NSE_MAX, a
			bc		K32, ageq
				ld 		*ar4, a
				add 	#1, a
				xc 		2, tc
					add 	#9, a
				stl 	a, *ar4+
				b	K32
K31
		ld 		*ar5, a
		sub 	#GAEC_VAD_CRIT_THR, a
		ld 		#GAEC_CRIT_MIN, b
		max 	a
		stl		a, *ar5+
K32					
	frame 	#2
	ret


;-------------------------------------------------------------------------
	.global _gaec_dtd_vad_err_sb
;-------------------------------------------------------------------------
_gaec_dtd_vad_err_sb
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3

	mvdk	*ar2(#GAEC_tDb.uAdfMode), ar5
	stm 	#3, ar0
	cmpr 	01, ar5
;
; set ptrs
; ar3-> pSc->sErrEn
; ar4-> pDb->sVadRxNse
; ar5-> pDb->sVadRxCrit
; ar0-> pSc->sSinEn
;
	frame 	#-2
_sDltSb		.set 	0
_sMaxEnSb	.set 	1

	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.asVadErrNse)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.asVadErrCrit)
	mvmm	ar3, ar0
	mar		*+ar0(#GAEC_tSc.asSinEn)
	mar		*+ar3(#GAEC_tSc.asErrEn)
	
	
	ld 		#-32768, a
	stm 	#GAEC_BANDS, brc
	rptb	K40-1
		ld 		*ar3+, b
		max 	a
K40	
	mar		*+ar3(#-(GAEC_BANDS+1))
	stl 	a, *sp(_sMaxEnSb)
	
	stm 	#GAEC_BANDS, ar2
K41
		ld 		*ar3, a
		sub 	#GAEC_VAD_NSE_MIN, a
		bc 		K43, aleq
		ld 		*ar0, a
		sub 	#GAEC_VAD_NSE_MIN, a
		bc		K43, aleq
		
			ld 		*ar3, a
			sub		*ar4, a
			stl		a, *sp(_sDltSb)
			sub		#GAEC_VAD_CRIT_THR, a
			add		*ar5, a
			ld 		#GAEC_CRIT_MIN, b
			max 	a
			ld 		#GAEC_CRIT_MAX, b
			min 	a
			stl		a, *ar5
;;;			sub		#GAEC_VAD_CRIT_THR, a
			bc		K42, ageq
				ld 		*ar4, a
				xc 		2, tc
					add 	*sp(_sDltSb), -3, a
				xc 		2, ntc
					add 	*sp(_sDltSb), -5, a
				ld 		#GAEC_VAD_NSE_MAX, b
				min 	a
				ld 		#GAEC_VAD_NSE_MIN, b
				bd 		K44
				max 	a
				stl 	a, *ar4
K42		
				ld 		*ar3, a
				sub 	#GAEC_VAD_NSE_MAX, a
				bc		K44, ageq
				ld 		*sp(_sMaxEnSb), a
				sub 	#(GAEC_VAD_NSE_MAX + GAEC_1DB*10), a
				bc 		K44, ageq
					ld 		*ar4, a
					add 	#1, a
					xc 		2, tc
						add 	#9, a
					stl 	a, *ar4
					b	K44
K43
			ld 		*ar5, a
			sub 	#GAEC_VAD_CRIT_THR, a
			ld 		#GAEC_CRIT_MIN, b
			max 	a
			stl		a, *ar5
K44	
;
; increment pointers
		mar 	*ar0+
		mar 	*ar3+
		mar 	*ar4+
		mar 	*ar5+
	banz 	K41, *ar2-					
	frame 	#2
	ret
	
	.if 0
;-------------------------------------------------------------------------
	.global _gaec_dtd_erle
;-------------------------------------------------------------------------
_gaec_dtd_erle
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
;
	ssbx	sxm
	mvdk	*sp(1), ar3
	mvmm	ar3, ar4
	mar		*+ar4(#GAEC_tSc.asErrEn)
	mvmm	ar3, ar5
	mar		*+ar5(#GAEC_tSc.asSndEn)
	mar		*+ar3(#GAEC_tSc.asErle)
	ld 		#0, b
	stm 	#GAEC_BANDS, brc
	rptb	K50-1
		sub 	*ar5+, *ar4+, a
		max 	a
		sth 	a, *ar3+
K50	
	ret
	.endif
	
;-------------------------------------------------------------------------
	.global _gaec_dtd_criteria
;-------------------------------------------------------------------------
_gaec_dtd_criteria
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
;
	pshm 	ar1
	stlm 	a,ar2
	ssbx	sxm

⌨️ 快捷键说明

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