c - DSP 处理器字大小

标签 c signal-processing

我想为这个 DSP 处理器实现一些东西。 http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF这是它的数据表..

这是我想要实现的函数之一..所有变量都是 16 位 int,除了 mem[j] 是 32 位 int(在我的计算机上)。(定点算术) 它是一个 IIR 滤波器(直接 Form 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;
       }
    }

最佳答案

它可能支持 32 位整数 - 它只会使处理速度变慢,因此您应该最大限度地减少 32 位整数和 32 位整数运算的数量。

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

关于c - DSP 处理器字大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615743/

相关文章:

C语言,从外部文件读取换行符

audio - 吉他和弦识别算法?

python - 将梅尔谱图归一化为单位峰值幅度?

c++ - 捕获自定义 UART 类信号

audio - 我想学习音频编程

python - 计算轨迹(路径)中的转折点/枢轴点

c - 在 C 中将数组作为参数传递

c - postgreSQL 客户端 (libpq) 中的段错误

c - 如何在 Linux pthreads 中设置线程的名称?

c - 我想解决二进制信号量的读者/编写者问题