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

📄 g729a_filter.c

📁 DSP上优化的G.729A代码
💻 C
字号:
#include "../Common/typedef.h"
#include "../Include/G729A_basic_op.h"
#include "../Include/G729A_ld8a.h"

void G729AConvolve(Word16 x[], Word16 h[], Word16 y[], Word16 L)
{
	Word16 i, n;
	Word32 s;
	for (n = 0; n < L; n++)
	{
		s = 0;
		for (i = 0; i <= n; i++)
			s = _sadd(s, _smpy(x[i], h[n-i]));
		
		s    = _sshl(s, 3);                    
		y[n] = G729Aextract_h(s);
	}
	return;
}

void G729ASyn_filt(Word16 a[], Word16 x[], Word16 y[], Word16 lg, Word16 mem[], Word16 update)
{
	Word16 i, j;
	Word32 s;
	Word16 tmp[100];     
	Word16 *yy;
	
	yy = tmp;
	
	for(i=0; i<G729A_M; i++)
	{
		*yy++ = mem[i];
	}
	
	for (i = 0; i < lg; i++)
	{
		s = _smpy(x[i], a[0]);
		for (j = 1; j <= G729A_M; j++)
			s = _ssub(s, _smpy(a[j], yy[-j]));
		
		s = _sshl(s, 3);
		*yy++ = (Word16)(_sadd(s, (Word32)0x00008000L)>>16);
	}
	
	for(i=0; i<lg; i++)
	{
		y[i] = tmp[i+G729A_M];
	}
	
	if(update != 0)
		for (i = 0; i < G729A_M; i++)
		{
			mem[i] = y[lg-G729A_M+i];
		}
		
		return;
}

void G729AResidu(Word16 a[], Word16 x[], Word16 y[], Word16 lg)
{
	Word16 i, j;
	Word32 s;
	for (i = 0; i < lg; i++)
	{
		s = _smpy(x[i], a[0]);
		for (j = 1; j <= G729A_M; j++)
			s = _sadd(s, _smpy(a[j], x[i-j]));
		
		s = _sshl(s, 3);
		y[i] = (Word16)(_sadd(s, (Word32)0x00008000L)>>16);
	}
	return;
}

⌨️ 快捷键说明

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