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

📄 gaecnra.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 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED"          *
*                                                                         *
*-------------------------------------------------------------------------*/
	.mmregs
    .cpl_on
    .arms_on
	.include "gaeci.h55"
	.sect ".ftext2"

;-------------------------------------------------------------------------
	.ref _gaec_utl_exp
	.ref _gaec_utl_en2log

;-------------------------------------------------------------------------
	.global _gaec_nr_nrg
;-------------------------------------------------------------------------
_gaec_nr_nrg
; GAEC_tDb *pDb	= ar0
; GAEC_tSc *pSc	= ar1
;
	xar2 = mar(*ar1(#(GAEC_tSc.u.aNr)))
	xar3 = mar(*ar1(#(GAEC_tSc.asErrEn)))
	xar4 = mar(*ar0(#(GAEC_tDb.asVadErrNse)))
	mar (*+ar0(#(GAEC_tDb.aslNrPrior)))
	
	xar1 = #(GAEC_BANDS+1-1)
L01	
		t0 = *ar3+;
		t0 = t0 + #(GAEC_1DB*25);
		t1 = #(GAEC_1DB*15)
		t0 = min(t1, t0)
		call _gaec_utl_exp
		*ar2(#(GAEC_tScNr.sSig)) = t0;
		ac0 = t0;
		ac0 = ac0 << #16;
		ac0 = ac0 * ac0;
		dbl(*ar2(#(GAEC_tScNr.slSig))) = ac0;

		t0 = *ar4+;
		t0 = t0 + #(GAEC_1DB*25);
		call _gaec_utl_exp
		ac0 = t0;
		ac0 = ac0 << #16;
		ac0 = ac0 * ac0;
		dbl(*ar2(#(GAEC_tScNr.slNse))) = ac0;

		ac0 = dbl(*ar2(#(GAEC_tScNr.slSig)))
		ac0 = ac0 - dbl(*ar2(#(GAEC_tScNr.slNse)))
		ac1 = #0;
		ac0 = max(ac1, ac0)
		ac1 = dbl(*ar0+);
		ac0 = ac0 - ac1;
		ac1 = ac1 + (ac0 << #-6)
		dbl(*ar2(#(GAEC_tScNr.slEst))) = ac1;

	.if 0
	.endif
	
		mar (ar2 + #GAEC_tScNr_Sz)
	if (*ar1- != 0) goto L01
	return;
	
	
;-------------------------------------------------------------------------
	.global _gaec_nr_coef
;-------------------------------------------------------------------------
_gaec_nr_coef
; GAEC_tDb *pDb	= ar0
; GAEC_tSc *pSc	= ar1
;
	xar2 = mar(*ar1(#(GAEC_tSc.u.aNr)))
	xar3 = #(GAEC_BANDS+1-1);
	
s1	.set 	0
s2 	.set 	1
	sp = sp - #2
	
L11	
		ac0 = dbl(*ar2(#(GAEC_tScNr.slNse)))
		ac0 = ac0 + dbl(*ar2(#(GAEC_tScNr.slEst)))
		call _gaec_utl_en2log
		*sp(#s1) = t0;

		ac0 = dbl(*ar2(#(GAEC_tScNr.slEst)))
		call _gaec_utl_en2log
		t0 = t0 - *sp(#s1)
		*sp(#s1) = t0;

		ac0 = dbl(*ar2(#(GAEC_tScNr.slSig)))
		call _gaec_utl_en2log
		*sp(#s2) = t0;

		ac0 = dbl(*ar2(#(GAEC_tScNr.slNse)))
		call _gaec_utl_en2log
		t0 = t0 - *sp(#s2)
		
		t1 = #(GAEC_1DB*8)
		t0 = min(t1, t0)
		*sp(#s2) = t0;
		
		t0 = *sp(#s1);
		t0 = t0 << #1
		call _gaec_utl_exp
		*sp(#s1) = t0;

		t0 = *sp(#s2);
		t0 = t0 << #1
		call _gaec_utl_exp
		*sp(#s2) = t0;
		
		ac0 = *sp(#s1) << #16;
		ac0 = ac0 + (*sp(#s2) << #16)
		ac0 = ac0 * *sp(#s1)
		ac0 = ac0 + #2048
		ac0 = ac0 << #-12
		
		call _gaec_utl_en2log
		t0 = t0 + #8875
		t1 = #0
		t0 = min(t1, t0)
		call _gaec_utl_exp
		*ar2(#(GAEC_tScNr.sCoef)) = t0;
		
		mar (ar2 + #GAEC_tScNr_Sz)
		
	if (*ar3- != #0) goto L11
	sp = sp + #2
	return

;-------------------------------------------------------------------------
	.global _gaec_nr_upd
;-------------------------------------------------------------------------
_gaec_nr_upd
; GAEC_tDb *pDb	= ar0
; GAEC_tSc *pSc	= ar1
;
	xar2 = mar(*ar0(#(GAEC_tDb.asNrCoef)))
	xar3 = mar(*ar0(#(GAEC_tDb.aslNrPrior)))
	xar1 = mar(*ar1(#(GAEC_tSc.u.aNr)))
	brc0 = #(GAEC_BANDS+1-1)
	
	blockrepeat {
		ac0 = *ar1(#(GAEC_tScNr.sCoef))
		ac1 = ac0 - #1024;
		if (ac1 > #0) goto L24
		ac1 = ac0 - #720;
		if (ac1 > #0) goto L22
		ac1 = ac0 - #410;
		if (ac1 > #0) goto L23
; less that 410		
			ac0 = #410
			ac0 = ac0 - *ar2
			ac0 = ac0 << #-3
			ac0 = ac0 + *ar2
			goto L24
L23
			ac0 = ac0 - *ar2
			ac0 = ac0 << #-2
			ac0 = ac0 + *ar2	
			goto L24
L22
			ac0 = ac0 - *ar2
			ac0 = ac0 << #-1
			ac0 = ac0 + *ar2	
L24			
		*ar2 = ac0;
		ac0 = *ar1(#(GAEC_tScNr.sSig)) << #16
		ac0 = ac0 * *ar2+
		ac0 = ac0 << #4
		ac0 = ac0 * ac0
		dbl(*ar3+) = ac0;
		
		mar (ar1 + #GAEC_tScNr_Sz)
	}
	return
	
;-------------------------------------------------------------------------
	.global _gaec_nr_att
;-------------------------------------------------------------------------
_gaec_nr_att
; GAEC_tDb *pDb	= ar0
; GAEC_tSc *pSc	= ar1
;
	xar2 = mar(*ar0(#(GAEC_tDb.asNrCoef)))
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
	repeat (#(GAEC_BANDS+1-1))
		*ar3+ = *ar2+
	xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp+1)))
	repeat (#(GAEC_BANDS-1-1))
		*ar3+ = *ar2+
	
	xar2 = mar(*ar1(#(GAEC_tSc.aasErr0)))	
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
	brc0 = #(GAEC_BANDS*2-1)	
	brc1 = #(GAEC_ERR_SZ-1)
	localrepeat {
		t0 = *ar3+
		|| localrepeat {
			ac0 = t0 * *ar2;
			*ar2+ = HI(rnd(ac0 << #4))
		}
	}
	return;
	
;-------------------------------------------------------------------------

⌨️ 快捷键说明

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