文号
t62614
阅读
5573
回复
4
收藏
3
浅谈FIR滤波器的简单实现方法
2013/11/12
IP:浙江
FIR滤波器在数字电路中应用很广,可以简单谈谈它的原理和设计流程,详细的流程将会在后面附上。

FIR滤波器的时域表达式:y(n)=∑h(m)x(n-m),其中m的范围从0到N-1,N称为抽头或者阶数,h理论上说的是系统函数,实际上去实现只需要确

定h(0)到h(N-1)的值即可,h其实就是表达式的系数,所以h在时域上也就是N个点。

用C去实现的流程大概就是如下,比如设计20阶滤波器,x和h定义为数组,x数组长度为k,n的取值将有n=0-N-1+k,这样用两个for语句可以完成y数

组的求解。下面谈谈如何获取h数组,也就是系数,这个离不开matlab。

matlab有一个滤波器设计工具,可以输入命令sptool即可分析滤波器滤波效果,然后把各项指标填入这个工具里面的,我记得最后点击design即可出

现系统函数h的频谱图,然后可以点击导出或者直接点击C header即可产生包含系数数组的头文件,然后就可以用C去实现FIR滤波器的设计了。

到此,大体上的设计工作如此了,这是本人上DSP课老师亲手掩饰过,因为比较认真听讲所以印象还比较深。。。

小弟新手,细节方面肯定做得不到位[s:12] 。。。。。。。。。
+100
科创币
虎哥
2013/11/13
加点分
13年1个月前IP:未同步
653573
1楼
FIR滤波器的操作Y=∑h(m)x(n-m) 本质上是卷积变换,这个学过高数应该会有学到。
那么FIR滤波器的设计本质上是两种情况:
1,知道系统的输入 X,和期望的输出Y,求H。这是反卷积操作,可以通过解多元一次方程组,或数值迭代来得到。
2,根据时域卷积等效于频域相乘的原理,吧Y和X变换到频域,相除,再转换回时域,即得H。
引用
评论
陈辉铭作者
13年1个月前IP:未同步
653592
2楼
是的,就是时域卷积
引用
评论
13年1个月前IP:未同步
653603
3楼
呃,这个是窗函数滤波的那个么?前年学过都忘记掉了。。matlab都是直接调用库函数的。。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的