打印

FIR滤波器达不滤波要求,求助中...

[复制链接]
2199|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nxy825715|  楼主 | 2007-3-27 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人设计了一个FIR滤波器,
fs = 44100;
fc = 4000;
加kaiser窗
在MATLAB中的命令如下:
[n, Wn, beta, ftype] = kaiserord([3000, 5000], [1, 0], 
                                       [0.01, 0.001], 44100)
得到n和beta

然后使用fdatool工具进行设计得到16为有符号的系数(Q15).
在CCS5000(DSP为VC5402)上进行仿真时,只能完全的滤除10K频率以上的信号,
但是在MATLAB上仿真时却能够滤除5.5K频率以上的信号.
请问各个做过的或者高手们指点指点...
这个问题已经困扰了几天了,实在是没有办法才打扰大家.

我的程序如下:
其中: NX = 1024;
      NL = 81;
      dbptr 指针已经定义为 short 型.
      fir函数为C54x dsplib中的函数.
      输入/输出数组的长度均为1024.
      滤波器系数的长度和延时缓冲区的长度均为81.
void FirLowPassPrg(short *Input, short *Coefs, short *Output)
{
    ushort i, n;
    for (i = 0; i < NX; i++)
    FilterOut = 0x00; // Clear Filter Output
    for (i = 0; i < NL; i++)
    DbBuffer = 0x00;  // Clear Delay buffer (must)
    
    dbptr = &DbBuffer[0];
    NOP5(); NOP5(); NOP5();
    for (n = 0; n < 16; n += 2) {
       fir(&Input[n * 64], Coefs, &Output[n * 64], &dbptr, NL, 64);
       fir(&Input[(n + 1) * 64], Coefs, &Output[(n + 1) * 64], 
                                                   &dbptr, NL, 64);
    }
        
    // 将滤波后的数据再次存放到Audio[]中
    for (i = 0; i < NX; i++) {
    Input = Output;
    }
}

CMD文件中
   滤波器系数和延时缓冲区DbBuffer均已经进行256对齐.            

相关帖子

沙发
nxy825715|  楼主 | 2007-3-28 16:46 | 只看该作者

个人见解:

这里的高手都跑到哪里去了呀??
都是些娃娃兵在打来打去的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

389

帖子

1

粉丝