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

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

个人见解:

这里的高手都跑到哪里去了呀??<br />都是些娃娃兵在打来打去的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

389

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部