本人设计了一个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对齐.
|