数字滤波器设计之二:贝塞尔(Bessel)滤波器

数字滤波器设计之⼆:贝塞尔(Bessel)滤波器
1.前⾔
经典滤波器按照最佳逼近特性可分为巴特沃斯(Butterworth)、切⽐雪夫(Chebyshev)、贝塞尔(Bessel)和椭圆(Elliptic)滤波器四种。滤波器按照频带⼜可分为低通、⾼通、带通和带阻四种,其中⾼通、带通和带阻滤波器均可由低通滤波器由频率变换得到,本⽂仅考虑低通滤波器的分析与设计。N阶巴特沃斯滤波器由于在0频率处的2N-1阶导数都等于零,所以称为最⼤平坦近似,在通带和阻带幅值响应均单调递减;切⽐雪夫滤波器可分为切⽐雪夫Ⅰ型滤波器和切⽐雪夫Ⅱ型滤波器,Ⅰ型滤波器幅值响应具有通带等波纹变化⽽阻带单调变化,Ⅱ型滤波器则相反,在通带单调变化⽽阻带等波纹变化。椭圆滤波器的幅值响应在通带和阻带都是等波纹变化。贝塞尔滤波器具有最⼤平坦的时延。上述前三种滤波器对于阶跃响应均具有很⼤的过冲,只有贝塞尔滤波器对阶跃响应有很⼩的过冲。当被测信号有很多阶跃信号时,应该采⽤贝塞尔滤波器进⾏滤波。
2.Bessel滤波器的原理
2.1Bessel滤波器的幅值响应
Bessel滤波器的传递函数如下:
所以Bessel模拟低通滤波器的幅值特性函数为:
其中为Bessel多项式,可以通过递推公式得到,如下所⽰:
...
将Bessel多项式写成⼀般n次多项式的形式为
由公式可以得到的各个系数,如表1所⽰
表1
11
233
315156
41051054510
594594542010515
610395103954725126021021
71351351351356237017325315037828
82027025202702594594527027051975693063036
Bessel滤波器不像Butterworth、Chebyshev和Elliptic滤波器的幅值响应,没有简单的⽅法和公式确定的根,即Bessel幅值响应的极点。我们可以通过计算机数值计算的⽅法得到Bessel幅值响应的极点,如表2所⽰。
表2
1-
1.0000000
2-
1.5000000
±j0.8660254
3-
2.3221854
-1.8389073±j1.7543810
4-
2.8962106
±j0.8672341-2.1037894±j2.6574180
5-
3.6467386
-3.3519564±j1.7426614-2.3246743±j3.5710229
6-
4.2483594
±j0.8675097-3.7357084±j2.6262723-2.5159322±j4.4926730
7-
4.9717869
-4.7582905±j1.7392861-4.0701392±j3.5171740-2.6856769±j5.4206941
8-5.5878860±j0.8676144-2.8389840±j6.3539113-4.3682892±j4.4144425-5.2048408±j2.6161751 2.2 Bessel滤波器的时延
Bessel滤波器是具有线性相位响应的线性滤波器,在整个通频带具有恒定的时延。下图1为2到10阶的Bessel滤波器的时延。
图1 2到10阶Bessel滤波器的延时
3. Bessel滤波器的C语⾔实现
⼀个N阶数字滤波器输⼊和输出的关系可以⽤N次差分⽅程表⽰,如下所⽰,
⽤传递函数表⽰如下
当系数  全部为零时表⽰有限冲激响应滤波器,系数 不全为零时表⽰⽆限冲激响应滤波器。若求得系数 和  ,便可由输⼊信号 递推得到 。流程图如下图所⽰:
图2 滤波器设计程序流程图
Bessel滤波器程序设计流程图对应步骤如下:
1.由滤波器的性能指标确定滤波器的阶数N
Bessel滤波器不像巴特沃斯和切⽐雪夫滤波器,有公式来计算滤波器的阶数,Bessel滤波器的阶数只能通过给定的性能指标通过已有的设计曲线查得到,主要通过时延D和通带衰减来确定阶数N,本⽂所设计的程序是直接⼈为给定滤波器的阶数。
2.由阶数N查表确定模拟滤波器的系数  和
Bessel滤波器的极点没有简单的计算公式,只能通过数值⽅法计算得到,所以滤波器的系数通过计算极点和零点得到,所以本⽂采⽤查表的⽅法直接根据滤波器的阶数确定滤波器的系数  和  。则滤波器的传递函数为:
3.s域频率变换
原型低通滤波器可以通过s域的频率变换得到模拟低通、⾼通、带通和带阻滤波器,本⽂主要考虑低通到低通的变换,只需做如下变换:
替换结果为
4.双线性变换求数字滤波器系数  和
双线性变换将模拟滤波器的传递函数 转换到数字滤波器的传递函数 ,相对冲击响应不变法,可以避免频率混叠,双线性变化法将s域的虚轴 映射到z域的单位圆上,将s域中左半平⾯的极点映射到单位圆内,是⼀种保⾓映射。具体变换⽅法为⽤z的分式替换s:
变换结果整理如下:
C语⾔编程实现步骤如下:
1. 初始化  、 和中间缓存数组为0;
2. 计算 展开式的各项系数;
3. 合并同类项的系数;
4. 最⾼次项系数归⼀化。
5.由差分⽅程递推计算滤波结果
⼀个⽆限冲激响应系统的差分⽅程所⽰,实现结构有直接型、并联型、级联型,其中最简单直观的是直接型,直接型分为直接Ⅰ型和直接Ⅱ型,⽤流图表⽰⽅法如下:
图3 IIR系统直接Ⅰ型流图
图4 IIR系统直接Ⅱ型流图
从图3和图4可以看出直接Ⅱ型的滤波器结构相⽐直接Ⅰ型减少⼀半的延时单元,程序实现上所需的存储空间也减少⼀半。基于C语⾔的编程步骤如下:
4.滤波结果
1. ⼀个⼀个输⼊待滤波数据;
2. 初始化所有中间缓存状态变量  为0;
3. 由数组计算当前状态变量:
4. 利⽤状态变量和数组计算滤波后的输出:
5. 刷新中间状态变量:
取⼀段含有噪声的信号,对其进⾏Bessel滤波,设置滤波器阶数为4,最⼤平坦相位频率500Hz,滤波结果在MATLAB中图形化如下图5所⽰,可以看出滤波后的信号基本没有⾼频噪声⽽且曲线光滑,只是滤波后信号相对滤波前信号有⼀定的时延,这是Bessel滤波器的固有属性。设计的滤波器对不对,本⽂通过与MATLAB中⾃带的bessel滤波器函数对信号的滤波结果进⾏对⽐,可以看出MATLAB的滤波结果和本⽂所设计的Bessel滤波器的滤波结果完全吻合,如图6所⽰,说明本⽂所设计的滤波器是合理的。
图5 信号滤波前后曲线
图6 ⾃编C语⾔程序和MATLAB滤波函数滤波结果对⽐

本文发布于:2024-09-23 22:35:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/96003.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:滤波   得到   响应   计算   信号   结果   设计   幅值
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议