我想为这个DSP处理器实现一些东西。 http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF这是它的数据表..
这是我想要实现的函数之一..所有变量都是16位int,除了mem [j],它是32位int(在我的计算机上)。(定点运算) 它是IIR滤波器(Direct Form 2 Transposed)
查看第15-16页我不知道我是否可以存储int32。因为我看到不同的公交车尺寸.. 48,24,32 ..
如果是24那么它就不会工作,因为mem [j]值超过24位...
它有56位累加器,所以没关系,但我不知道这是否可以存储在内存中(32位或48位来自累加器)..
我还没有评估板和文件。
所以我的问题是它是否支持超过24位,或者我可以做的代码有修改......
void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
{
int i,j;
spx_word16_t xi,yi,nyi;
for (i=0;i<N;i++)
{
xi= x[i];
//yi=saturate (x[i]+mem[0]>>13)
yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767));
//nyi=-yi
nyi = NEG16(yi);
for (j=0;j<ord-1;j++)
{
//mem[j]= (num[j] *xi + mem[j+1]) + den[j] * nyi
mem[j] = MAC16_16(MAC16_16(mem[j+1], num[j],xi), den[j],nyi);
}
//mem[ord-1]=(num[ord-1] * xi) + (den[ord-1] *nyi)
mem[ord-1] = ADD32(MULT16_16(num[ord-1],xi), MULT16_16(den[ord-1],nyi));
y[i] = yi;
}
}
答案 0 :(得分:0)
它可能支持32位整数 - 它只会使处理速度变慢,因此您应该最小化32位整数和32位整数运算。
数据表显示该芯片具有专用IDE。 IDE文档和/或编译器应该能够告诉您是否支持32位整数。