g729a_post_pro.c

来自「DSP上优化的G.729A代码」· C语言 代码 · 共 48 行

C
48
字号
#include "../Common/typedef.h"
#include "../Include/G729A_basic_op.h"
#include "../Include/G729A_oper_32b.h"
#include "../Include/G729A_ld8a.h"
#include "../Include/G729A_tab_ld8a.h"

static Word16 G729Ay2_hi, G729Ay2_lo, G729Ay1_hi, G729Ay1_lo, G729Ax0, G729Ax1;

void G729AInit_Post_Process(void)
{
	G729Ay2_hi = 0;
	G729Ay2_lo = 0;
	G729Ay1_hi = 0;
	G729Ay1_lo = 0;
	G729Ax0   = 0;
	G729Ax1   = 0;
}

void G729APost_Process(Word16 signal[], Word16 lg)    
{
	Word16 i, x2;
	Word32 L_tmp;

	for(i=0; i<lg; i++)
	{
		x2 = G729Ax1;
		G729Ax1 = G729Ax0;
		G729Ax0 = signal[i];
	
		L_tmp     = _sadd(_smpy(G729Ay1_hi, G729A_a100[1]), _smpy(G729Ay1_lo, G729A_a100[1])>>16);
		L_tmp     = _sadd(L_tmp, _sadd(_smpy(G729Ay2_hi, G729A_a100[2]), _smpy(G729Ay2_lo, G729A_a100[2])>>16));
		L_tmp     = _sadd(L_tmp, _smpy(G729Ax0, G729A_b100[0]));
		L_tmp     = _sadd(L_tmp, _smpy(G729Ax1, G729A_b100[1]));
		L_tmp     = _sadd(L_tmp, _smpy(x2, G729A_b100[2]));
		
		signal[i] = (Word16)(_sadd(_sshl(L_tmp, 3), (Word32)0x00008000L)>>16);
		
		G729Ay2_hi = G729Ay1_hi;
		G729Ay2_lo = G729Ay1_lo;
		
		G729Ay1_hi = _sshl(L_tmp, 2) >> 16;
	    G729Ay1_lo = (Word16)_ssub(_sshl(L_tmp, 1), _smpy(G729Ay1_hi, 16384));
	}
	
	return;
}

⌨️ 快捷键说明

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