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

📄 gaectxa.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 ".ftext3"
	
_EN_CORR            		.set (-GAEC_1DB*3-GAEC_1DB/2); GAEC_DB(-3.5)
	.ref					_gaec_utl_en2log
	.ref					_gaec_utl_exp

;-------------------------------------------------------------------------
	.global _gaec_tx_analysis
;-------------------------------------------------------------------------
_gaec_tx_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
; S16 *psIn
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
;
; shift old data in buffer	
	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.asTbuf)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.asTbuf+GAEC_FR_SZ)
	rpt		#(GAEC_TBUF_SZ-GAEC_FR_SZ)-1
		mvdd 	*ar5+, *ar4+	; from -> to
;
; add new data to buffer
	mvdk	*sp(2), ar5
	rpt		#GAEC_FR_SZ-1
		mvdd	*ar5+, *ar4+
;		
; shift old data in 2D array
	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.aasT)
	mvmm	ar4, ar5
	mar		*+ar5(#GAEC_BLKS)
	stm		#GAEC_BLKS+1, ar0
	stm		#0, bk
	stm		#GAEC_BANDS*2-1, brc
	rptb	G15-1
		rpt		#GAEC_ERR_SZ-GAEC_BLKS-2
			mvdd 	*ar5+, *ar4+
		mvdd 	*ar5+0%, *ar4+0%
G15
;
; loop for all blks
; ar2 -> coeffs
; ar3 -> psTmp
; ar4 -> psFrom
; ar7 -> psTo
;
	pshm	ar6
	pshm	ar7
	orm		#1, *(pmst)
	mvmm	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.asTbuf)
	mvmm	ar2, ar7	
	mar		*+ar7(#GAEC_tDb.aasT + GAEC_ERR_SZ-GAEC_BLKS)
	stm		#_GAEC_aasFBS, ar2
	stm		#GAEC_BLKS-1, ar6
	stm		#GAEC_ERR_SZ, ar0
	mar 	*+ar3(#GAEC_tSc.u.asTmp)
G10	
;	
; symmetric						
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBS_SZ-1))
		stm		#GAEC_FBS_SZ/2-1, brc
		rptb	G11-1
			add	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
G11
		mar 	*+ar3(#(-GAEC_FBS_SZ/2))
		mar 	*+ar4(#(-GAEC_FBS_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	G12-1
			rptz	a, #(GAEC_FBS_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add		#1, 14,  a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBS_SZ/2)
G12		
;
; asymmetric
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBS_SZ-1))
		stm		#GAEC_FBS_SZ/2-1, brc
		rptb	G13-1
			sub	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
G13
		mar 	*+ar4(#(-GAEC_FBS_SZ/2))
		mar 	*+ar3(#(-GAEC_FBS_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	G14-1
			rptz	a, #(GAEC_FBS_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add 	#1, 14, a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBS_SZ/2)
G14	
	.if 0
	.endif
		mar		*+ar7(#-(GAEC_ERR_SZ*(2*GAEC_BANDS)-1))
		mar 	*+ar4(#GAEC_BLK_SZ)
		mar 	*+ar2(#-GAEC_FBS_SZ*GAEC_BANDS)
	banz	G10, *ar6-

	andm	#~1, *(pmst)
	popm	ar7
	popm	ar6
	.if 0	
	.endif
	ret

;-------------------------------------------------------------------------
	.global _gaec_tx_vad_sb
;-------------------------------------------------------------------------
_gaec_tx_vad_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->asVadTxEn
; ar4-> pDb->asVadTxNse
; ar5-> pDb->asVadTxCrit
	frame 	#-2
_sDlt		.set 	0
_sMaxEn		.set 	1

	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.asVadRinNse)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.asVadRinCrit)
	mar		*+ar3(#GAEC_tSc.asRinEn)
;	
; find smaxEn	
	stm		#(GAEC_BANDS+1)-1, brc
	ld 		#-32768, b
	rptb	G37-1
		ld 		*ar3+, a
		max 	b
G37	
	stl 	b, *sp(_sMaxEn)
	mar 	*+ar3(#-(GAEC_BANDS+1))
	
	stm		#(GAEC_BANDS+1)-1, brc
	rptb	G35-1
		ld 		*ar3, a
		sub 	#GAEC_VAD_NSE_MIN, a, b
		bc		G34, bgt
			ld 		*ar5, a
			sub		#GAEC_VAD_CRIT_THR, a
			ld 		#GAEC_CRIT_MIN, b
			max 	a
			stl 	a, *ar5
			b 		G31
G34		 
		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
		bc		G30, 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 		#GAEC_VAD_NSE_MIN, b
			bd 		G31
			max 	a
			stl 	a, *ar4
G30		
			ld 		*ar3, a
			sub 	#GAEC_VAD_NSE_MAX, a
			bc		G31, ageq
			ld 		*sp(_sMaxEn), a
			sub 	#GAEC_VAD_NSE_MAX, a
			bc 		G31, ageq
				ld 		*ar4, a
				add 	#1, a
				xc 		2, tc
					add 	#9, a
				stl 	a, *ar4
G31		
;	
; next band
        mar 	*ar3+
        mar 	*ar4+
        mar 	*ar5+
        
G35	
	frame 	#2
	ret
;-------------------------------------------------------------------------
	.global _gaec_tx_vad
;-------------------------------------------------------------------------
_gaec_tx_vad
; 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->sVadTxEn
; ar4-> pDb->sVadTxNse
; ar5-> pDb->sVadTxCrit

	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.sVadRinNse)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.sVadRinCrit)
	mar		*+ar3(#GAEC_tSc.sRinEn)
	
	ld 		*ar3, a
	sub 	#GAEC_VAD_NSE_MIN, a, b
	bc		G64, bgt
		ld 		*ar5, a
		sub		#GAEC_VAD_CRIT_THR, a
		ld 		#GAEC_CRIT_MIN, b
		max 	a
		stl 	a, *ar5
		b 		G61
G64		 
	sub		*ar4, a
	stl		a, *sp(2)
	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
	bc		G60, ageq
		ld 		*ar4, a
		xc 		2, tc
			add 	*sp(2), -3, a
		xc 		2, ntc
			add 	*sp(2), -5, a
		ld 		#GAEC_VAD_NSE_MAX, b
		min 	a
		ld 		#GAEC_VAD_NSE_MIN, b
		bd 		G61
		max 	a
		stl 	a, *ar4
G60		
		ld 		*ar3, a
		sub 	#GAEC_VAD_NSE_MAX, a
		bc		G61, ageq
			ld 		*ar4, a
			add 	#1, a
			xc 		2, tc
				add 	#9, a
			stl 	a, *ar4
G61		
	ret
	
;-------------------------------------------------------------------------
	.global _gaec_tx_att
;-------------------------------------------------------------------------
_gaec_tx_att
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	mvmm	ar3, ar4
	mar		*+ar4(#GAEC_tSc.asAttRin)
	mvmm	ar3, ar5
	mar		*+ar5(#GAEC_tSc.aasErr0)
	mar		*+ar3(#GAEC_tSc.u.asTmp)
	mar 	*+ar2(#GAEC_tDb.aasT)
	
	stm		#GAEC_BANDS, brc
	rptb	G41-1
		ld 		*ar4+, a
		neg 	a
		call 	_gaec_utl_exp
		stl 	a, *ar3+
G41	
	mvmm 	ar3, ar4
	mar 	*+ar3(#-GAEC_BANDS)
	rpt 	#(GAEC_BANDS-1)-1
		mvdd 	*ar3+, *ar4+
	mar 	*+ar3(#-GAEC_BANDS);

	stm 	#GAEC_BANDS*2-1, ar4
G42
		ld 		*ar3+, t
		stm 	#GAEC_ERR_SZ-1, brc
		rptb 	G43-1
			mpy 	*ar2+, a
			add 	#1, 11, a
			sth 	a, 4, *ar5+
G43				
	banz	G42, *ar4-
	ret
	
	
;-------------------------------------------------------------------------
	.global _gaec_tx_nse
;-------------------------------------------------------------------------
_gaec_tx_nse
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	
	mvmm	ar2, ar4	
	mar 	*+ar4(#GAEC_tDb.asVadRinNse)
	mvmm	ar3, ar5
	mar 	*+ar5(#GAEC_tSc.u.asTmp)
	
	stm 	#GAEC_BANDS, ar0
G51
		ld 		*ar5, a
		sub 	#GAEC_1DB*6, a
		ld 		*ar4+, b
		min 	b
		ld 		*ar5, a
		add 	*ar2(#GAEC_tDb.Cfg.sWhiteThr), a
		max 	a
		add 	#GAEC_1DB*13, a
		call 	_gaec_utl_exp
		stl 	a, *ar5+
	banz	G51, *ar0-	
	
	mvmm 	ar5, ar4
	mar 	*+ar4(#-GAEC_BANDS)
	rpt		#GAEC_BANDS-2
		mvdd 	*ar4+, *ar5+
	
_MULT                   	.set (31821)
_INC                    	.set (13849)

;	
; S16 *psSeed	= a				; ar2
; S16 *psTo		= sp(1)			; ar5
; S16 sLevel	= sp(2)			; ar3->sLevel
	mvmm 	ar3, ar5
	mar 	*+ar5(#GAEC_tSc.aasErr0)
	mar 	*+ar2(#GAEC_tDb.sNseSav)
	mar 	*+ar3(#GAEC_tSc.u.asTmp)
	orm 	#1, *(pmst)
	stm 	#GAEC_BANDS*2-1, ar0
G53	
		stm		#GAEC_ERR_SZ-1, brc
		rptb	G54-1
			mpy 	*ar2, #_MULT, a
			add		#_INC, a
			stl 	a, *ar2
			mpy		*ar2, *ar3, a
			add 	*ar5, 15, a
			add		#1, 14, a
			sth		a,1, *ar5+
G54	
		mar 	*ar3+
	banz	G53, *ar0-
	andm	#~1, *(pmst)
	.if 0
	.endif
	ret
	
	

⌨️ 快捷键说明

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