大神教你:FIR与IIR低通滤波器的最简最快实现.doc
《大神教你:FIR与IIR低通滤波器的最简最快实现.doc》由会员分享,可在线阅读,更多相关《大神教你:FIR与IIR低通滤波器的最简最快实现.doc(4页珍藏版)》请在三一文库上搜索。
1、大神教你:FIR与IIR低通滤波器的最简最快实现在设计单片机程序的过程中,经常需要利用ADC采集外界模拟信号。有一些信号我们比较关注它的直流与低频分量,希望将高频噪声滤除,就需要借助低通滤波器。低通滤波器常见的利用电子电路实现的方式是一阶RC无源滤波器。简单讲就是这样:RC滤波器的各类计算略,有需要请谷歌。RC滤波器用于单片机ADC输入有许多缺点。如果R的取值较小,就要求C较大,同时输入信号阻抗不能过大;如果R的取值较大,则ADC采样瞬间释放的电荷会使得端口电压升高而无法在采样时间内释放到稳定水平。这会导致采样精度问题。而即便使用一个运放来缓冲RC滤波器的输出,再接入ADC,也只解决了输入阻抗
2、问题,ADC电路受外界干扰仍然会在转换结果中产生噪声。因此,我们希望在单片机内部利用程序来实现低通滤波,彻底摆脱高频噪声。数字低通滤波器有两种形式,IIR和FIR。IIR是无限脉冲响应滤波器,它的特点是输出与无限久以前的输入有关。这就如同上面RC滤波器的响应,随着时间流逝,输出电压只会无限接近于输入电压,而不会等于。用c语言实现IIR低通很简单:int last = 0;/下面的函数以固定频率运行,函数输出就是IIR低通滤波器的输出。int lowpass()int this = ADC();last = (this * 1 + last * 15) / 16; /新的last 是旧的last
3、 * 15 / 16 + this * 1 / 16return last;如果对函数返回值作图,得到的波形就会和RC滤波器的波形一样。要改变截止频率,只需要改变函数第二句中新的last的组成(例如改成3/4和1/4,截止频率会提高)。值得注意的是,上述代码使用了整数乘法和2的n次幂除法,因此编译优化后,在8位平台上运行超快。如果你使用带有浮点运算模块的平台,请直接使用浮点数。IIR的特点是节省内存,上面的滤波器只使用了两个变量。IIR的缺点是不稳定。如果你把15改成17,显然这个滤波器的输出会在一段时间后溢出。你必须负责保证IIR滤波器稳定。FIR是有限脉冲响应滤波器,它的特点是输出与有限久
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大神 FIR IIR 滤波器 最快 实现
链接地址:https://www.31doc.com/p-3420705.html