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

1.前言

         经典滤波器按照最佳逼近特性可分为巴特沃斯(Butterworth)、切比雪夫(Chebyshev)、贝塞尔(Bessel)和椭圆(Elliptic)滤波器四种。滤波器按照频带又可分为低通、高通、带通和带阻四种,其中高通、带通和带阻滤波器均可由低通滤波器由频率变换得到,本文仅考虑低通滤波器的分析与设计。N阶巴特沃斯滤波器由于在0频率处的2N-1阶导数都等于零,所以称为最大平坦近似,在通带和阻带幅值响应均单调递减;切比雪夫滤波器可分为切比雪夫Ⅰ型滤波器和切比雪夫Ⅱ型滤波器,Ⅰ型滤波器幅值响应具有通带等波纹变化而阻带单调变化,Ⅱ型滤波器则相反,在通带单调变化而阻带等波纹变化。椭圆滤波器的幅值响应在通带和阻带都是等波纹变化。贝塞尔滤波器具有最大平坦的群时延。上述前三种滤波器对于阶跃响应均具有很大的过冲,只有贝塞尔滤波器对阶跃响应有很小的过冲。当被测信号有很多阶跃信号时,应该采用贝塞尔滤波器进行滤波。

2.Bessel滤波器的原理

2.1Bessel滤波器的幅值响应

Bessel滤波器的传递函数如下:

                                                                     \large T_{n}(s)=\frac{B_{n}(0)}{B_{n}(s)}

所以Bessel模拟低通滤波器的幅值特性函数为:

                                                             \large \left | T_{n}(j\omega ) \right |=\left | \frac{B_{n}(0)}{B_{n}(j\omega )} \right |

其中\small B_{n}(s)为Bessel多项式,可以通过递推公式得到,如下所示:

                                                                           B_{0}=1

                                                                          B_{1}=s+1

                                                                           ...

                                                                        B_{n}=(2n-1)B_{n-1}+s^{2}B_{n-2}

将Bessel多项式写成一般n次多项式的形式为

                                            B_{n}(s)=s^{n}+a_{n-1}s^{n-1}+...+a_{1}s+a_{0}=\sum_{k=0}^{n}a_{k}s^{k},a_{n}=1

由公式可以得到\small B_{n}(s)的各个系数,如表1所示

 

表1
n a_{0} a_{1} a_{2} a_{3} a_{4} a_{5} a_{6} a_{7}
1 1              
2 3 3            
3 15 15 6          
4 105 105 45 10        
5 945 945 420 105 15      
6 10395 10395 4725 1260 210 21    
7 135135 135135 62370 17325 3150 378 28  
8 2027025 2027025 945945 270270 51975 6930 630 36

Bessel滤波器不像Butterworth、Chebyshev和Elliptic滤波器的幅值响应,没有简单的方法和公式确定的根,即Bessel幅值响应的极点。我们可以通过计算机数值计算的方法得到Bessel幅值响应的极点,如表2所示。

表2
\small n                
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滤波器的群时延。

 

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第1张图片 图1 2到10阶Bessel滤波器的延时

 3. Bessel滤波器的C语言实现

一个N阶数字滤波器输入\small x\left ( n \right )和输出\small y(n)的关系可以用N次差分方程表示,如下所示,

                                                        \large y(n)=-\sum_{k=1}^{N}a_{k}y(n-k)+\sum_{k=0}^{M}b_{k}x(n-k)

用传递函数表示如下

                                             \large H\left ( z \right )=\frac{b_{0}+b_{1}z^{-1}+...+b_{M}z^{-M}}{1+a_{1}z^{-1}+...+a_{N}z^{-N}}=\frac{\sum_{k=0}^{M}b_{k}z^{-k}}{1+\sum_{k=1}^{N}a_{k}z^{-k}}

当系数 \large a_{k} 全部为零时表示有限冲激响应滤波器,系数\large a_{k} 不全为零时表示无限冲激响应滤波器。若求得系数\large a_{k} 和  \large b_{k},便可由输入信号\large x\left ( n \right ) 递推得到\large y\left ( n \right ) 。流程图如下图所示:

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第2张图片 图2 滤波器设计程序流程图

Bessel滤波器程序设计流程图对应步骤如下:

1.由滤波器的性能指标确定滤波器的阶数N

        Bessel滤波器不像巴特沃斯和切比雪夫滤波器,有公式来计算滤波器的阶数,Bessel滤波器的阶数只能通过给定的性能指标通过已有的设计曲线查找得到,主要通过时延D和通带衰减来确定阶数N,本文所设计的程序是直接人为给定滤波器的阶数。

 2.由阶数N查表确定模拟滤波器的系数 \large a_{s} 和\large b_{s} 

        Bessel滤波器的极点没有简单的计算公式,只能通过数值方法计算得到,所以滤波器的系数通过计算极点和零点得到,所以本文采用查表的方法直接根据滤波器的阶数确定滤波器的系数 \large a_{s}  和 \large b_{s} 。则滤波器的传递函数为:

                                          \large T_{n}\left ( s \right )=\frac{B_{n}\left ( n \right )}{B_{n}\left ( s \right )}=\frac{b_{n}}{a_{0}s^{n}+a_{1}s^{n-1}+...+a^{_{n-1}}s+a_{n}},b_{n}=a_{n}

3.s域频率变换

    原型低通滤波器可以通过s域的频率变换得到模拟低通、高通、带通和带阻滤波器,本文主要考虑低通到低通的变换,只需做如下变换:

                                                                                             \large s=\frac{s}{\Omega _{p}}

替换结果为

                                                       \large T_{n}\left ( s \right )=\frac{b_{n}}{\frac{a_{0}}{\Omega _{p}^{n}}s^{n}+\frac{a_{1}}{\Omega _{p}^{n-1}}s^{n-1}+...+\frac{a_{n-1}}{\Omega _{p}}s+a_{n}}

4.双线性变换求数字滤波器系数  \large a_{z} 和\large b_{z} 

        双线性变换将模拟滤波器的传递函数\large H\left ( s \right ) 转换到数字滤波器的传递函数\large H\left ( z \right ) ,相对冲击响应不变法,可以避免频率混叠,双线性变化法将s域的虚轴\large j\Omega 映射到z域的单位圆上,将s域中左半平面的极点映射到单位圆内,是一种保角映射。具体变换方法为用z的分式替换s:

                                                                                 \large s=\frac{2}{T}\cdot \frac{1-z^{-1}}{1+z^{-1}}

变换结果整理如下:

T_{n}\left ( s \right )=\frac{b_{n}\left ( 1+z^{-1} \right )^{n}}{\frac{a_{0}}{\Omega _{p}^{n}}\left ( \frac{2}{T_{s}} \right )^{n}\left (1-z^{-1} \right )^{n}+\frac{a_{1}}{\Omega _{p}^{n-1}}\left ( \frac{2}{T_{s}} \right )^{n-1}\left (1-z^{-1} \right )^{n-1}(1+z^{-1})+...+\frac{a_{n-1}}{\Omega _{p}}\frac{2}{T_{s}}(1-z^{-1})\left ( 1+z^{-1} \right )^{n-1}+a_{n}\left ( 1+z^{-1} \right )^{n}}

C语言编程实现步骤如下:

  1. 初始化  a_{z}b_{z} 和中间缓存数组为0;
  2. 计算\left ( 1-z^{-1} \right )^{n-k}\left ( 1+z^{-1} \right )^{k}(k=0,1,...,n) 展开式的各项系数;
  3. 合并同类项的系数;
  4. 最高次项系数归一化。

5.由差分方程递推计算滤波结果

        一个无限冲激响应系统的差分方程所示,实现结构有直接型、并联型、级联型,其中最简单直观的是直接型,直接型分为直接Ⅰ型和直接Ⅱ型,用流图表示方法如下:

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第3张图片 图3 IIR系统直接Ⅰ型流图

 

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第4张图片 图4 IIR系统直接Ⅱ型流图

 

       从图3和图4可以看出直接Ⅱ型的滤波器结构相比直接Ⅰ型减少一半的延时单元,程序实现上所需的存储空间也减少一半。基于C语言的编程步骤如下:

 

         \large w_{0}=a_{0}x\left ( i \right )-\sum_{k=1}^{N}a_{k}w_{k}

 

        \large y\left ( i \right )=\sum_{k=0}^{N}b_{k}w_{k} 

 

        \large w_{N}\leftarrow w_{N-1},w_{N-1}\leftarrow w_{N-2},...,w_{1}\leftarrow w_{0},w_{0}=0 

4.滤波结果

  1. 一个一个输入待滤波数据x\left ( n \right )
  2. 初始化所有中间缓存状态变量  w_{i}\left ( i=0,1,2,...,N \right )为0;
  3. 由数组\large a_{z}计算当前状态变量\large w_{0}: 
  4. 利用状态变量\large w_{i}和数组\large b_{z}计算滤波后的输出:
  5. 刷新中间状态变量:

        取一段含有噪声的信号,对其进行Bessel滤波,设置滤波器阶数为4,最大平坦相位频率500Hz,滤波结果在MATLAB中图形化如下图5所示,可以看出滤波后的信号基本没有高频噪声而且曲线光滑,只是滤波后信号相对滤波前信号有一定的时延,这是Bessel滤波器的固有属性。设计的滤波器对不对,本文通过与MATLAB中自带的bessel滤波器函数对信号的滤波结果进行对比,可以看出MATLAB的滤波结果和本文所设计的Bessel滤波器的滤波结果完全吻合,如图6所示,说明本文所设计的滤波器是合理的。

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第5张图片 图5 信号滤波前后曲线

 

数字滤波器设计之二:贝塞尔(Bessel)滤波器_第6张图片 图6 自编C语言程序和MATLAB滤波函数滤波结果对比

 

 

 

你可能感兴趣的:(信号处理)