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

📄 gaecnlpa.s55

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 S55
字号:
*-------------------------------------------------------------------------*
*                                                                         *
*   THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY   *
*   INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:    *
*      "COPYRIGHT 2002 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED"          *
*                                                                         *
*-------------------------------------------------------------------------*/
	.mmregs
    .cpl_on
    .arms_on
	.include "gaeci.h55"
	.sect ".ftext2"

;-------------------------------------------------------------------------
_NLP_CRIT_THR   		.set (12*170)
_MULT           		.set (31821)
_INC            		.set (13849)

;-------------------------------------------------------------------------
	.global	_gaec_nlp_add_noise
;-------------------------------------------------------------------------
_gaec_nlp_add_noise
; S16 *psSeed		= ar0,
; S16 *psTo			= ar1
; S16 sLevel		= t0
;
;    .arms_off
;	bit(ST2, #ST2_ARMS) = #0;
;	bit(ST1, #ST1_FRCT) = #1;
;
	brc0 = #(GAEC_ERR_SZ-1)
	ac1 = t0;
	ac1 = ac1 << #16;		; ac1 = sLevel
	ac2 = #_MULT << #16;	; ac2 = MULT
	ac3 = #_INC;			; ac3 = INC
	ac0 = #_INC;
	t1 = *ar0;				; t1 = Seed
	|| localrepeat {
		ac0 = ac0 + (ac2 * t1);
		t1 = ac0;
		|| ac0 = *ar1 << #15;
		ac0 = ac0 + (ac1 * t1);
		*ar1+ = HI(saturate(rnd(ac0 << #1)));
		|| ac0 = ac3;
	}						; 9*4*20*200 = 0.15 MIPS
	*ar0 = t1;				; save Seed
	return;
	
;-------------------------------------------------------------------------
	.global	_gaec_nlp_mix_noise
;-------------------------------------------------------------------------
_gaec_nlp_mix_noise
; GAEC_tDb *pDb		= ar0	
; GAEC_tSc *pSc		= ar1	
; U16 uUseDtCrit	= t0

	
	ac3 = #(13*170);
	tc1 = *ar0(#(GAEC_tDb.uControl)) & IGAEC_CMD_NSE_RED_OFF;
	if (!tc1) execute (D_unit)
		ac3 = #(6*170);
		
	xar2 = mar(*ar0(#(GAEC_tDb.asVadErrNse)));
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
	brc0 = #(GAEC_BANDS+1-1)
	localrepeat {
		ac0 = ac3 + *ar2+;
		*ar3+ = ac0;
	}
;
; exp		
	xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
	brc0 = #(GAEC_BANDS+1-1)
	localrepeat {
		ac0 = *ar2;
		ac1 = ac0 << #-10;
		t1 = ac1;
		ac0 = ac0 << #2;
		ac0 = ac0 & #4095;
		*ar2 = ac0;
		ac0 = *ar2 * *ar2;
		ac0 = ac0 << #-13;
		ac0 = ac0 + *ar2;
		ac0 = ac0 << #16
		ac0 = ac0 * #21845;
		ac0 = ac0 << #-15;
		ac0 = ac0 + #4096;
		*ar2+ = LO(ac0 << t1);
	}
;
;	if use uDtCrit
	xar2 = mar(*ar1(#(GAEC_tSc.asAttErr)));
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
	ac2 = #4096 << #16;
	brc0 = #(GAEC_BANDS+1-1)
	localrepeat {
		ac1 = ac2 - (*ar2+ << #16);
		ac1 = ac1 * *ar3;
		if (t0 != #0) execute (D_unit)
			|| *ar3+ = HI(saturate(rnd(ac1 << #4)));
	}
	xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp+GAEC_BANDS+1)));
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp+1)));
	repeat (#(GAEC_BANDS-1-1))
		*ar2+ = *ar3+

	brc0 = #(2*GAEC_BANDS-1)
	brc1 = #(GAEC_ERR_SZ-1)
	xar2 = mar(*ar1(#(GAEC_tSc.aasErr0)));
	xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
	ac2 = #_MULT << #16;			; ac2 = MULT
	ac3 = #_INC;					; ac3 = INC
	t1 = *ar0(#(GAEC_tDb.sNseSav));	; t1 = Seed
	
	localrepeat {
		ac1 = *ar3+ << #16;			; ac1H = sLevel
		ac0 = ac3;
		|| localrepeat {
			ac0 = ac0 + (ac2 * t1);
			t1 = ac0;
			|| ac0 = *ar2 << #15;
			ac0 = ac0 + (ac1 * t1);
			*ar2+ = HI(saturate(rnd(ac0 << #1)));
			|| ac0 = ac3;
		}							; 9*4*20*200 = 0.15 MIPS
	}
	*ar0(#(GAEC_tDb.sNseSav)) = t1;	; save Seed
	.if 0
	.endif	
	return;
	
;-------------------------------------------------------------------------
	.global	_gaec_nlp_att_rx
;-------------------------------------------------------------------------
_gaec_nlp_att_rx
; GAEC_tDb *pDb		= ar0	
; GAEC_tSc *pSc		= ar1	
;
	xar2 = mar(*ar1(#(GAEC_tSc.asAttErr)));
	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.u.asTmp-1)));
	xar3 = mar(*ar1(#(GAEC_tSc.aasErr0)));
	xar4 = mar(*ar0(#(GAEC_tDb.aasErrSav)));
		
	brc0 = #(GAEC_BANDS*2-1);
	brc1 = #(GAEC_ERR_SZ-1);
	localrepeat {
		mar(*ar2+)
		|| localrepeat {
			ac0 = *ar4+ * *ar2;
			*ar3+ = HI(rnd(ac0 << #4));
		}
	}
	return

⌨️ 快捷键说明

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