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

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

;-------------------------------------------------------------------------

_EN_CORR            	.set (-3*GAEC_1DB - GAEC_1DB/2)

;-------------------------------------------------------------------------
	.global	_gaec_nrg_rcv
;-------------------------------------------------------------------------
_gaec_nrg_rcv
; GAEC_tDb *pDb		= ar0,
; GAEC_tSc *pSc		= ar1

	xar2 = dbl(*ar0(#(GAEC_tDb.psRcv)))
	xar3 = mar(*ar1(#(GAEC_tSc.asRoutEn)))
;	mar(ar2 + #(GAEC_ADF_SZ - 1))
	mar(*+ar2(#(GAEC_ADF_SZ - 1)))
	xar4 = mar(*ar2(#(GAEC_RCV_SZ*(GAEC_BANDS+1))))
	t0 = #(GAEC_RCV_SZ - GAEC_BLKS+1);
	
; the first real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-2)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	ac0 = ac0 + (*(ar2+t0) * *(ar2+t0));
	m_en2log 	ac0, t1
	*ar3+ = ac0;
; middle complex bands
	brc0 = #(GAEC_BANDS-2);
	localrepeat {
		ac0 = *ar2+ * *ar2+;
		.loop (GAEC_BLKS-2)
			ac0 = ac0 + (*ar2+ * *ar2+);
		.endloop			
		ac0 = ac0 + (*(ar2+t0) * *(ar2+t0));
		.loop (GAEC_BLKS-1)
			ac0 = ac0 + (*ar4+ * *ar4+);
		.endloop
		ac0 = ac0 + (*(ar4+t0) * *(ar4+t0));
		m_en2log	ac0, t1
		*ar3+ = ac0;
	}		
; the last real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-1)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	m_en2log 	ac0, t1
	*ar3+ = ac0;
	return
	
;-------------------------------------------------------------------------
	.global	_gaec_nrg_blk
;-------------------------------------------------------------------------
_gaec_nrg_blk
; S16 *psFrom	= ar0,
; S16 *psTo		= ar1

	xar2 = mar(*ar0(#(GAEC_BLKS*(GAEC_BANDS+1))))
	
; the first band	
	ac0 = #0; 
	|| repeat (#(GAEC_BLKS-1))
		ac0 = ac0 + (*ar0+ * *ar0+);
	m_en2log 	ac0, t0
	*ar1+ = ac0;
; middle complex bands
	brc0 = #(GAEC_BANDS-2);
	localrepeat {
		ac0 = #0 
		|| repeat (#(GAEC_BLKS-1))
			ac0 = ac0 + (*ar0+ * *ar0+);
		repeat (#(GAEC_BLKS-1))
			ac0 = ac0 + (*ar2+ * *ar2+);
		m_en2log	ac0, t0
		*ar1+ = ac0;
	}		
; the last band	
	ac0 = #0; 
	|| repeat (#(GAEC_BLKS-1))
		ac0 = ac0 + (*ar0+ * *ar0+);
	m_en2log 	ac0, t0
	*ar1+ = ac0;
	return

;-------------------------------------------------------------------------
	.global	_gaec_nrg_err
;-------------------------------------------------------------------------
_gaec_nrg_err
; S16 *psFrom	= ar0,
; S16 *psTo		= ar1

	xar2 = mar(*ar0(#(GAEC_ERR_SZ*(GAEC_BANDS+1))))
	
; the first band	
	ac0 = #0; 
	|| repeat (#(GAEC_ERR_SZ-1))
		ac0 = ac0 + (*ar0+ * *ar0+);
	m_en2log 	ac0, t0
	ac0 = ac0 + #_EN_CORR
	*ar1+ = ac0;
; middle complex bands
	brc0 = #(GAEC_BANDS-2);
	localrepeat {
		ac0 = #0 
		|| repeat (#(GAEC_ERR_SZ-1))
			ac0 = ac0 + (*ar0+ * *ar0+);
		repeat (#(GAEC_ERR_SZ-1))
			ac0 = ac0 + (*ar2+ * *ar2+);
		m_en2log	ac0, t0
		ac0 = ac0 + #_EN_CORR
		*ar1+ = ac0;
	}		
; the last band	
	ac0 = #0; 
	|| repeat (#(GAEC_ERR_SZ-1))
		ac0 = ac0 + (*ar0+ * *ar0+);
	m_en2log 	ac0, t0
	ac0 = ac0 + #_EN_CORR
	*ar1+ = ac0;
	return

	.if 0
;-------------------------------------------------------------------------
	.global	_GAEC_err0_energy
;-------------------------------------------------------------------------
_GAEC_err0_energy
; GAEC_tDb *pDb		= ar0,
; GAEC_tSc *pSc		= ar1

	xar2 = mar(*ar1(#(GAEC_tSc.aasErr0+GAEC_ERR_SZ - GAEC_BLKS)))
	xar3 = mar(*ar1(#(GAEC_tSc.asErr0En)))
	xar4 = mar(*ar2(#(GAEC_ERR_SZ*(GAEC_BANDS+1))))
	t0 = #(GAEC_ERR_SZ - GAEC_BLKS+1);
	
; the first real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-2)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	ac0 = ac0 + (*(ar2+t0) * *(ar2+t0));
	m_en2log 	ac0, t1
	*ar3+ = ac0;
; middle complex bands
	brc0 = #(GAEC_BANDS-2);
	localrepeat {
		ac0 = *ar2+ * *ar2+;
		.loop (GAEC_BLKS-2)
			ac0 = ac0 + (*ar2+ * *ar2+);
		.endloop			
		ac0 = ac0 + (*(ar2+t0) * *(ar2+t0));
		.loop (GAEC_BLKS-1)
			ac0 = ac0 + (*ar4+ * *ar4+);
		.endloop
		ac0 = ac0 + (*(ar4+t0) * *(ar4+t0));
		m_en2log	ac0, t1
		*ar3+ = ac0;
	}		
; the last real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-1)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	m_en2log 	ac0, t1
	*ar3+ = ac0;
	return

	.endif
;-------------------------------------------------------------------------
	.global	_GAEC_snd_energy
;-------------------------------------------------------------------------
_GAEC_snd_energy
; GAEC_tDb *pDb		= ar0,
; GAEC_tSc *pSc		= ar1

	xar2 = mar(*ar1(#(GAEC_tSc.aasSin)))
	xar3 = mar(*ar1(#(GAEC_tSc.asSinEn)))
	xar4 = mar(*ar2(#(GAEC_BLKS*(GAEC_BANDS+1))))
	
; the first real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-2)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	ac0 = ac0 + (*ar2+ * *ar2+);
	m_en2log 	ac0, t1
	*ar3+ = ac0;
; middle complex bands
	brc0 = #(GAEC_BANDS-2);
	localrepeat {
		ac0 = *ar2+ * *ar2+;
		.loop (GAEC_BLKS-2)
			ac0 = ac0 + (*ar2+ * *ar2+);
		.endloop			
		ac0 = ac0 + (*ar2+ * *ar2+);
		.loop (GAEC_BLKS-1)
			ac0 = ac0 + (*ar4+ * *ar4+);
		.endloop
		ac0 = ac0 + (*ar4+ * *ar4+);
		m_en2log	ac0, t1
		*ar3+ = ac0;
	}		
; the last real band	
	ac0 = *ar2+ * *ar2+;
	.loop (GAEC_BLKS-1)
		ac0 = ac0 + (*ar2+ * *ar2+);
	.endloop
	m_en2log 	ac0, t1
	*ar3+ = ac0;
	return


⌨️ 快捷键说明

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