C DSP处理器字号

C DSP处理器字号,c,signal-processing,C,Signal Processing,我想为这个DSP处理器实现一些东西。 这是它的数据表 下面是我想要实现的函数之一。。所有变量都是16位整数,除了mem[j]是32位整数(在我的计算机上)。(定点算术) 它是一个IIR滤波器(直接形式2转置) 查看第15-16页,我不知道是否可以存储int32。因为我看到不同大小的公共汽车。。48,24,32 如果它是24,那么它将不工作,因为mem[j]值超过24位… 它有56位累加器,所以这是正常的,但我不知道这是否可以存储在内存中(32位或48位累加器)… 我还没有评估委员会和文件 所以我

我想为这个DSP处理器实现一些东西。 这是它的数据表

下面是我想要实现的函数之一。。所有变量都是16位整数,除了mem[j]是32位整数(在我的计算机上)。(定点算术) 它是一个IIR滤波器(直接形式2转置)

查看第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;
       }
    }
void filter_mem16(常量spx_word16_t*x,常量spx_coef_t*num,常量spx_coef_t*den,spx_word16_t*y,int N,int ord,spx_mem_t*mem,char*stack)
{
int i,j;
习语,席,彝,尼依;
对于(i=0;i>13)
yi=EXTRACT16(饱和(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_移位)),32767));
//nyi=-yi
nyi=NEG16(yi);

对于(j=0;j它可能支持32位整数-它只会使处理速度变慢,因此您应该尽量减少32位整数和32位整数操作的数量

数据表上说芯片有一个专用的IDE。IDE文档和/或编译器应该能够告诉你是否支持32位INT