📄 g729a_filter.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 + -