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

📄 gaecza.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"

;-------------------------------------------------------------------------
_SHFT   		.set (2)

;-------------------------------------------------------------------------
	.global	_gaec_update_rbuf
;-------------------------------------------------------------------------
_gaec_update_rbuf
; GAEC_tDb *pDb 	= ar0
; S16 *psRcv		= ar1
;
; shift sRbuf
	xar2 = mar (*ar0(#(GAEC_tDb.asRbuf)))
	xar3 = mar (*ar0(#(GAEC_tDb.asRbuf+GAEC_FR_SZ)))
	repeat (#(GAEC_RBUF_SZ-GAEC_FR_SZ - 1))
		*ar2+ = *ar3+
;
; add new data
	repeat (#(GAEC_FR_SZ - 1))
		*ar2+ = *ar1+
	return
	
;-------------------------------------------------------------------------
	.global	_gaec_shift_rcv
;-------------------------------------------------------------------------
_gaec_shift_rcv
; GAEC_tDb *pDb 	= ar0
;
;
; shift psRcv
	xar2 = dbl (*ar0(#(GAEC_tDb.psRcv)))
	t0 = #(GAEC_BLKS+1);
	brc0 = #(GAEC_BANDS*2-1);
	xar3 = mar (*ar2(#(GAEC_BLKS)))
	localrepeat {
;		*ar2+ = *ar3+;
		repeat (#(GAEC_RCV_SZ-GAEC_BLKS-2))
			*ar2+ = *ar3+;
		*(ar2+t0) = *(ar3+t0);
	}			
	return;

;-------------------------------------------------------------------------
	.global	_gaec_update_err_sav
;-------------------------------------------------------------------------
_gaec_update_err_sav
; GAEC_tDb *pDb 	= ar0
; GAEC_tSc *pSc 	= ar1
;
	xar2 = mar(*ar0(#(GAEC_tDb.aasErrSav)))
	xar3 = mar(*ar0(#(GAEC_tDb.aasErrSav+GAEC_BLKS)))
	xar4 = mar(*ar1(#(GAEC_tSc.aasErr)))
	brc0 = #(GAEC_BANDS*2-1);
	t0 = #(GAEC_BLKS + 1);
	localrepeat {
		*ar2+ = *ar3+;
		|| repeat (#(GAEC_ERR_SZ-GAEC_BLKS-3))
			*ar2+ = *ar3+;
		*ar2+ = *(ar3+t0);
		|| repeat (#(GAEC_BLKS-1))
			*ar2+ = *ar4+;
	}
	return;
;-------------------------------------------------------------------------
	.global	_gaec_copy_adf
;-------------------------------------------------------------------------
_gaec_copy_adf
; S16 *psTo		= ar0
; S16 *psFrom	= ar1
; S16 band 		= t0
	if (t0 == #0) goto A10
	t0 = t0 - #GAEC_BANDS;
	if (t0 == #0) goto A11
		ac0 = #(GAEC_BANDS * GAEC_ADF_SZ*2);
		ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))
		t0 = ac0;
		mar (*(ar0 + t0)), mar (*(ar1 + t0)), mar(coef(*cdp))
		repeat (#(GAEC_ADF_SZ*2-1))
			*ar0+ = *ar1+
		return
A11		
		mar (*ar0+), mar (*ar1+), mar(coef(*cdp))
A10
		t0 = #2
		|| repeat (#(GAEC_ADF_SZ-1))
			*(ar0+t0) = *(ar1+t0)
		return;
		
;-------------------------------------------------------------------------
	.global	_gaec_copy_err
;-------------------------------------------------------------------------
_gaec_copy_err
; GAEC_tSc *pSc	= ar0
; S16 band		= t0
	xar2 = mar(*ar0(#(GAEC_tSc.aasErr)))
	xar3 = mar(*ar0(#(GAEC_tSc.aasErrM)))
	ac0 = #0;
	ac0 = ac0 + (t0 * #GAEC_BLKS);
	t1 = ac0;
	mar (ar2 + t1);
	mar (ar3 + t1);
	repeat (#(GAEC_BLKS-1))
		*ar2+ =  *ar3+
		
	ac0 = t0 - #GAEC_BANDS
	ac0 = ac0 << #16
	ac0 = ac0 * t0;
;
; if any of multipliers is equal to 0	
	if (ac0 == #0) return
	
	mar (ar2 + #(GAEC_BLKS*(GAEC_BANDS-1)))
	mar (ar3 + #(GAEC_BLKS*(GAEC_BANDS-1)))
	repeat (#(GAEC_BLKS-1))
		*ar2+ =  *ar3+
	return
	
;-------------------------------------------------------------------------
	.global	_gaec_in_corr
;-------------------------------------------------------------------------
_gaec_in_corr
; S16 *psSav	= ar0
; S16 *psIO		= ar1
;
	brc0 = #(GAEC_FR_SZ-1)
	localrepeat {
		ac0 = (*ar1 << #16) - (*ar0 << #16)
		ac0 = ac0 + (*ar0 << #(16 - _SHFT))
		*ar0 = *ar1;
		*ar1+ = HI(rnd(ac0))
	}
	return
;-------------------------------------------------------------------------
	.global	_gaec_out_corr
;-------------------------------------------------------------------------
_gaec_out_corr
; S16 *pslSav	= ar0
; S16 *psIO		= ar1
;
	brc0 = #(GAEC_FR_SZ-1)
	localrepeat {
		ac0 = *ar1 << #15
		ac1 = dbl(*ar0)
		ac0 = ac0 + ac1
		ac0 = ac0 - (ac1 << #(-_SHFT))
		dbl(*ar0) = ac0;
		*ar1+ = HI(rnd(ac0 << #1))
	}
	return
		
;-------------------------------------------------------------------------
	.global _gaec_loopback
;-------------------------------------------------------------------------
_gaec_loopback
; GAEC_tDb *pDb 	= ar0
; S16 *psSnd		= ar1
;
	xar2 = mar(*ar0(#(GAEC_tDb.asRbuf+5)))
	brc0 = #(GAEC_FR_SZ-1)
	t0 = #18425
	localrepeat {
		ac0 = t0 * *ar2+
		*ar1+ = HI(rnd(ac0 << #1))
	}
	return;
;-------------------------------------------------------------------------
	.global _gaec_max_coef
;-------------------------------------------------------------------------
_gaec_max_coef
; GAEC_tDb *pDb 	= ar0
; GAEC_tSc *pSc		= ar1
;
	ac2 = *ar0(#(GAEC_tDb.sMaxCoefBand))
	ac2 = ac2 + #1
	ac3 = ac2 - #(GAEC_BANDS+1)
	if (ac3 < 0) goto A71
		ac2 = #0;
		ac1 = *ar0(#(GAEC_tDb.sMaxCoefAv))
		ac0 = *ar0(#(GAEC_tDb.sMaxCoef))
		ac0 = ac0 - ac1;
		ac1 = ac1 + (ac0 << #-2)
		*ar0(#(GAEC_tDb.sMaxCoefAv)) = ac1;
		*ar0(#(GAEC_tDb.sMaxCoef)) = #0
A71	
	*ar0(#(GAEC_tDb.sMaxCoefBand)) = ac2;
;	
; ac0 = smax	
; xar2 = psAdf
	ac1 = dbl(*ar0(#(GAEC_tDb.psAdf)))
	ac0 = #0
	compare (ac2 == #0) goto A72
	compare (ac2 == #(GAEC_BANDS)) goto A73
		; bands 1... BANDS-1
		t0 = ac2
		ac1 = ac1 + (t0 * #(GAEC_ADF_SZ*2))
		xar2 = ac1;
		brc0 = #(GAEC_ADF_SZ*2-1)
		localrepeat {
			ac1 = *ar2+;
			ac1 = |ac1|;
			ac0 = max(ac1, ac0)
		}
		goto A74
A73
		ac1 = ac1 + #1
A72				
		xar2 = ac1
		brc0 = #(GAEC_ADF_SZ-1)
		t0 = #2
		localrepeat {
			ac1 = *(ar2+t0);
			ac1 = |ac1|;
			ac0 = max(ac1, ac0)
		}
A74		
	ac1 = *ar0(#(GAEC_tDb.sMaxCoef))
	ac1 = max(ac0, ac1)
	*ar0(#(GAEC_tDb.sMaxCoef)) = ac1;
	*ar1(#(GAEC_tSc.sMaxCoef)) = ac0;
	return
;-------------------------------------------------------------------------
	.global _gaec_scale_band
;-------------------------------------------------------------------------
_gaec_scale_band
; S16 *psAdf  	= ar0
; S16 *psAdfM  	= ar1
; S16 band 		= t0
; S16 shift		= t1
	compare (t0 == #0) goto A81
	compare (t0 == (GAEC_BANDS)) goto A82
		ac0 = xar0
		ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))	
		xar0 = ac0;
		ac0 = xar1
		ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))	
		xar1 = ac0;
		brc0 = #(GAEC_ADF_SZ*2-1);
		localrepeat {
			ac0 = *ar0 << t1;
			ac1 = *ar1 << t1
			|| *ar0+ = ac0;
			*ar1+ = ac1;
		}
		return
A82
		mar (ar0 + #1)	
		mar (ar1 + #1)	
A81		
		t0 = #2
		brc0 = #(GAEC_ADF_SZ-1);
		localrepeat {
			ac0 = *ar0 << t1;
			ac1 = *ar1 << t1
			|| *(ar0+t0) = ac0;
			*(ar1+t0) = ac1;
		}
		return


⌨️ 快捷键说明

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