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

📄 g729a_cor_func.c

📁 在DSP上实现的G.729优化代码 编译过的 大家快来下载啊
💻 C
字号:
#include "../Common/typedef.h"
#include "../Include/G729A_basic_op.h"
#include "../Include/G729A_ld8a.h"

void G729ACorr_xy2(Word16 xn[], Word16 y1[], Word16 y2[], Word16 g_coeff[], Word16 exp_g_coeff[])
{
	Word16   i,exp;
	Word16   exp_y2y2,exp_xny2,exp_y1y2;
	Word16   y2y2,    xny2,    y1y2;
	Word32   L_acc;
	Word16   scaled_y2[G729A_L_SUBFR];        
	Word32   *Temp0, *Temp1;
	
	Temp0 = (Word32*)&y2[0];
	Temp1 = (Word32*)&scaled_y2[0];
	for(i = G729A_L_SUBFR>>1; i > 0; i--) 
	{
		*Temp1++ = _shr2(*Temp0++, 3);        
	}

	L_acc = 1;                      
	
	for(i=0; i<G729A_L_SUBFR; i++)
		L_acc = _sadd(L_acc, _smpy(scaled_y2[i], scaled_y2[i]));    
	
	exp      = G729Anorm_l(L_acc);
	y2y2     = (Word16)(_sadd(_sshl(L_acc, exp), (Word32)0x00008000L)>>16);
	exp_y2y2 = G729Aadd_s(exp, 19-16);                          
	
	g_coeff[2]     = y2y2;
	exp_g_coeff[2] = exp_y2y2;
	
	L_acc = 1;                      
	
	for(i=0; i<G729A_L_SUBFR; i++)
		L_acc = _sadd(L_acc, _smpy(xn[i], scaled_y2[i]));           
	
	exp      = G729Anorm_l(L_acc);
	xny2     = (Word16)(_sadd(_sshl(L_acc, exp), (Word32)0x00008000L)>>16);
	exp_xny2 = G729Aadd_s(exp, 10-16); 
	
	g_coeff[3]     = G729Anegate(xny2);
	exp_g_coeff[3] = G729Asub_s(exp_xny2,1);                  
	 
	L_acc = 1;                       
	
	for(i=0; i<G729A_L_SUBFR; i++)
		L_acc = _sadd(L_acc, _smpy(y1[i], scaled_y2[i]));           
	
	exp      = G729Anorm_l(L_acc);
	y1y2     = (Word16)(_sadd(_sshl(L_acc, exp), (Word32)0x00008000L)>>16);
	exp_y1y2 = G729Aadd_s(exp, 10-16);
	
	g_coeff[4]     = y1y2;
	exp_g_coeff[4] = _ssub(exp_y1y2,1);
	return;
}

void G729ACor_h_X(Word16 h[], Word16 X[], Word16 D[])
{
	Word16 i, j;
	Word32 s, max;
	Word32 y32[G729A_L_SUBFR];
	
	max = 0;
	
	for (i = 0; i < G729A_L_SUBFR; i++)
	{
		s = 0;
		for (j = i; j <  G729A_L_SUBFR; j++)
			s = _sadd(s, _smpy(X[j], h[j-i]));
		y32[i] = s;
		
		s = G729AL_abs(s);
		max = _max2(max, s);
	}
	
	j = G729Anorm_l(max);
	j = _min2(j, 16);
	
	j = _ssub(18, j);
	
	for(i=0; i<G729A_L_SUBFR; i++) 
	{
		D[i] = (Word16)_sshvr(y32[i], j);
	}
	return;
	
}

⌨️ 快捷键说明

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