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

📄 gaecfba.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 ".ftext1"

;-------------------------------------------------------------------------
	.global _GAEC_aasFBS
	.global _GAEC_aasFBR
	.global _GAEC_aasFBX
;-------------------------------------------------------------------------
	.global	_gaec_fb_snd_analysis
;-------------------------------------------------------------------------
_gaec_fb_snd_analysis
; GAEC_tDb *pDb		= ar0,
; GAEC_tSc *pSc		= ar1
; S16 *psIn			= ar2
;
    .arms_off
	bit(ST2, #ST2_ARMS) = #0;
	bit(ST1, #ST1_FRCT) = #1;
	
	pshboth(xar6)
	pshboth(xar5)
	
	xar4 = mar(*ar0(#(GAEC_tDb.asSbuf+GAEC_FR_SZ)))
	xar3 = mar(*ar0(#(GAEC_tDb.asSbuf)))
	repeat (#(GAEC_SBUF_SZ-GAEC_FR_SZ-1))
		*ar3+ = *ar4+
	
	repeat (#(GAEC_FR_SZ-1))
		*ar3+ = *ar2+;
		
	xar2 = mar(*ar0(#(GAEC_tDb.asSbuf)))
	
	xcdp = mar(*ar1(#(GAEC_tSc.u.asTmp)))
	t1 = #(GAEC_BLKS);
	t0 = #(1-GAEC_FBS_SZ/2);
	xar5 = mar(*ar1(#(GAEC_tSc.aasSin)))
	
	xar6 = #(GAEC_BLKS-1);
L01
		brc0 = #(GAEC_FBS_SZ/2-2);
		xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
		xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
		localrepeat {
			ac0 = (*ar2+ <<#16) + (*ar3- <<#16);
			*ar4+ = HI(ac0);
		}
		ac0 = (*(ar2+t0) <<#16) + (*ar3- <<#16);
		*ar4+ = HI(ac0);
		
		brc0 = #(GAEC_BANDS/2-1);
		xar3 = #_GAEC_aasFBS;
		xar4 = #(_GAEC_aasFBS + GAEC_FBS_SZ/2);
		localrepeat {
			ac0 = *ar3+ * coef(*cdp+),
			ac1 = *ar4+ * coef(*cdp+);
			|| repeat (#(GAEC_FBS_SZ/2-3))
				ac0 = ac0 + (*ar3+ * coef(*cdp+)),
				ac1 = ac1 + (*ar4+ * coef(*cdp+));
			ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
			ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
			*(ar5 + t1) = HI(ac0);
			|| mar (ar3 + #(GAEC_FBS_SZ/2))
			*(ar5 + t1) = HI(ac1);
			|| mar (ar4 + #(GAEC_FBS_SZ/2))
		}
		
		brc0 = #(GAEC_FBS_SZ/2-2);
		xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
		xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
		localrepeat {
			ac0 = (*ar2+ <<#16) - (*ar3- <<#16);
			*ar4+ = HI(ac0);
		}
		ac0 = (*(ar2+t0) <<#16) - (*ar3- <<#16);
		*ar4+ = HI(ac0);
		brc0 = #(GAEC_BANDS/2-1);
		xar3 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+0));
		xar4 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+1));
		localrepeat {
			ac0 = *ar3+ * coef(*cdp+),
			ac1 = *ar4+ * coef(*cdp+);
			|| repeat (#(GAEC_FBS_SZ/2-3))
				ac0 = ac0 + (*ar3+ * coef(*cdp+)),
				ac1 = ac1 + (*ar4+ * coef(*cdp+));
			ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
			ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
			*(ar5 + t1) = HI(ac0);
			|| mar (ar3 + #(GAEC_FBS_SZ/2))
			*(ar5 + t1) = HI(ac1);
			|| mar (ar4 + #(GAEC_FBS_SZ/2))
		}
		
		mar (ar5 - #(GAEC_BLKS*(2*GAEC_BANDS)-1));
		mar (ar2 + #GAEC_BLK_SZ);
		
	if (*ar6- != #0) goto L01
	
    .arms_on
	bit(ST2, #ST2_ARMS) = #1;
	bit(ST1, #ST1_FRCT) = #0;
	xar5 = popboth();
	xar6 = popboth();
	return;			

;-------------------------------------------------------------------------
	.global	_gaec_fb_rcv_analysis
;-------------------------------------------------------------------------
_gaec_fb_rcv_analysis
; GAEC_tDb *pDb		= ar0,
; GAEC_tSc *pSc		= ar1
;
    .arms_off
	bit(ST2, #ST2_ARMS) = #0;
	bit(ST1, #ST1_FRCT) = #1;
	
	pshboth(xar6)
	pshboth(xar5)
	
	xar2 = mar(*ar0(#(GAEC_tDb.asRbuf)))
	
	xcdp = mar(*ar1(#(GAEC_tSc.u.asTmp)))
	t1 = #(GAEC_RCV_SZ);
	t0 = #(1-GAEC_FBR_SZ/2);
	xar5 = dbl(*ar0(#(GAEC_tDb.psRcv)))
;	mar (ar5 + #(GAEC_RCV_SZ - GAEC_BLKS))
	mar (*+ar5(#(GAEC_RCV_SZ - GAEC_BLKS)))
	
	xar6 = #(GAEC_BLKS-1);
L02
		brc0 = #(GAEC_FBR_SZ/2-2);
		xar3 = mar(*ar2(#(GAEC_FBR_SZ-1)))
		xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
		localrepeat {
			ac0 = (*ar2+ <<#16) + (*ar3- <<#16);
			*ar4+ = HI(ac0);
		}
		ac0 = (*(ar2+t0) <<#16) + (*ar3- <<#16);
		*ar4+ = HI(ac0);
		
		brc0 = #(GAEC_BANDS/2-1);
		xar3 = #_GAEC_aasFBR;
		xar4 = #(_GAEC_aasFBR + GAEC_FBR_SZ/2);
		localrepeat {
			ac0 = *ar3+ * coef(*cdp+),
			ac1 = *ar4+ * coef(*cdp+);
			|| repeat (#(GAEC_FBR_SZ/2-3))
				ac0 = ac0 + (*ar3+ * coef(*cdp+)),
				ac1 = ac1 + (*ar4+ * coef(*cdp+));
			ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
			ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
			*(ar5 + t1) = HI(ac0);
			|| mar (ar3 + #(GAEC_FBR_SZ/2))
			*(ar5 + t1) = HI(ac1);
			|| mar (ar4 + #(GAEC_FBR_SZ/2))
		}
		
		brc0 = #(GAEC_FBR_SZ/2-2);
		xar3 = mar(*ar2(#(GAEC_FBR_SZ-1)))
		xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
		localrepeat {
			ac0 = (*ar2+ <<#16) - (*ar3- <<#16);
			*ar4+ = HI(ac0);
		}
		ac0 = (*(ar2+t0) <<#16) - (*ar3- <<#16);
		*ar4+ = HI(ac0);
		brc0 = #(GAEC_BANDS/2-1);
		xar3 = #(_GAEC_aasFBR + (GAEC_FBR_SZ/2)*(GAEC_BANDS+0));
		xar4 = #(_GAEC_aasFBR + (GAEC_FBR_SZ/2)*(GAEC_BANDS+1));
		localrepeat {
			ac0 = *ar3+ * coef(*cdp+),
			ac1 = *ar4+ * coef(*cdp+);
			|| repeat (#(GAEC_FBR_SZ/2-3))
				ac0 = ac0 + (*ar3+ * coef(*cdp+)),
				ac1 = ac1 + (*ar4+ * coef(*cdp+));
			ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
			ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
			*(ar5 + t1) = HI(ac0);
			|| mar (ar3 + #(GAEC_FBR_SZ/2))
			*(ar5 + t1) = HI(ac1);
			|| mar (ar4 + #(GAEC_FBR_SZ/2))
		}
		
		ar5 = ar5 - #(GAEC_RCV_SZ*(2*GAEC_BANDS)-1);
		mar (ar2 + #GAEC_BLK_SZ);
		
	if (*ar6- != #0) goto L02
	
    .arms_on
	bit(ST2, #ST2_ARMS) = #1;
	bit(ST1, #ST1_FRCT) = #0;
	xar5 = popboth();
	xar6 = popboth();
	return;			



;-------------------------------------------------------------------------
	.global	_gaec_fb_synthesis
;-------------------------------------------------------------------------
_gaec_fb_synthesis
; S16 ppsErr[][GAEC_ERR_SZ] = ar0
; S16 *psSout 		= ar1
;
    .arms_off
	bit(ST2, #ST2_ARMS) = #0;
	
	xar2 =  #(GAEC_BLKS-1);
	t0 = #(GAEC_ERR_SZ - GAEC_LFCTR+1);
	t1 = #(GAEC_FBZ_SZ*GAEC_BANDS);
	ac3 = #0;
	; cycle for blks
L03
		brc0 = #(GAEC_BLK_SZ/2-1);	
		brc1 = #(2*GAEC_BANDS-1);
		xar3 = #(_GAEC_aasFBX + GAEC_FBZ_SZ*         0);	
		xar4 = #(_GAEC_aasFBX + GAEC_FBZ_SZ*GAEC_BANDS);
		
		localrepeat { ; cycle for k within the blk
			; set cdp (ptr to data) and zero accumulators
			xcdp = xar0;
			|| ac0 = ac3;
			ac1 = ac3;
			|| localrepeat { ; cycle for bands
				.loop (GAEC_LFCTR-1) ; cycle for n
					ac0 = ac0 + (*ar3+ * coef(*cdp+)),
					ac1 = ac1 + (*ar4+ * coef(*cdp+));
				.endloop
				ac0 = ac0 + (*ar3+ * coef(*(cdp+t0))),
				ac1 = ac1 + (*ar4+ * coef(*(cdp+t0)));
			}
			; save results
			*ar1+ = HI(rnd(ac0 << #1));
			*ar1+ = HI(rnd(ac1 << #1));
		}
		mar (*ar0+);
		; advance cdp and return ar3, ar4 back to the table start
		mar(*(ar3-t1)), mar(*(ar4-t1)), mar(coef(*cdp+));
	
	if (*ar2- != #0) goto L03
	
    .arms_on
	bit(ST2, #ST2_ARMS) = #1;

	return;			

⌨️ 快捷键说明

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