本人设计了一个FIR滤波器,<br />fs = 44100;<br />fc = 4000;<br />加kaiser窗<br />在MATLAB中的命令如下:<br />[n, Wn, beta, ftype] = kaiserord([3000, 5000], [1, 0], <br /> [0.01, 0.001], 44100)<br />得到n和beta<br /><br />然后使用fdatool工具进行设计得到16为有符号的系数(Q15).<br />在CCS5000(DSP为VC5402)上进行仿真时,只能完全的滤除10K频率以上的信号,<br />但是在MATLAB上仿真时却能够滤除5.5K频率以上的信号.<br />请问各个做过的或者高手们指点指点...<br />这个问题已经困扰了几天了,实在是没有办法才打扰大家.<br /><br />我的程序如下:<br />其中: NX = 1024;<br /> NL = 81;<br /> dbptr 指针已经定义为 short 型.<br /> fir函数为C54x dsplib中的函数.<br /> 输入/输出数组的长度均为1024.<br /> 滤波器系数的长度和延时缓冲区的长度均为81.<br />void FirLowPassPrg(short *Input, short *Coefs, short *Output)<br />{<br /> ushort i, n;<br /> for (i = 0; i < NX; i++)<br /> FilterOut = 0x00; // Clear Filter Output<br /> for (i = 0; i < NL; i++)<br /> DbBuffer = 0x00; // Clear Delay buffer (must)<br /> <br /> dbptr = &DbBuffer[0];<br /> NOP5(); NOP5(); NOP5();<br /> for (n = 0; n < 16; n += 2) {<br /> fir(&Input[n * 64], Coefs, &Output[n * 64], &dbptr, NL, 64);<br /> fir(&Input[(n + 1) * 64], Coefs, &Output[(n + 1) * 64], <br /> &dbptr, NL, 64);<br /> }<br /> <br /> // 将滤波后的数据再次存放到Audio[]中<br /> for (i = 0; i < NX; i++) {<br /> Input = Output;<br /> }<br />}<br /><br />CMD文件中<br /> 滤波器系数和延时缓冲区DbBuffer均已经进行256对齐. <br /> |
|