DSP

[DSP] Butterworth (巴特沃斯)数字滤波器设计参考

2019-07-13 12:12发布

Butterworth (巴特沃斯)滤波器设计参考

-- By Water  
在嵌入式音频产品开发过程中经常会到LPF(Low Pass Filter 低通滤波器)和HPF(High Pass Filter 高通滤波器),一般情况下都是离线用工具(如: Matlab)设计好滤波器的参数(Filter Coefficients)再应用到产品中去。但有些状况下需要用户自己根据需求来实时(Real-time)调整Filter Frequency Response (滤波器频率响应),这种情形下就需要在嵌入式系统中实时根据客户的设定需求来产生相应的Filter Coefficients。 下文就汇总出了N阶IIR LPF & HPF Butterworth滤波器系数的设计方法,具体的算法原理推导可以参考陈佩青《数字信号处理教程》一书,此处只给出工程上可以应用的结论。

背景介绍:

归一化的巴特沃斯滤波器系统函数一般形式:
(Note: 参考 陈佩青《数字信号处理教程》第二版266页(6-108)表达式)   一般情况下会希望保持通带增益为0dB,因此设定d0 = a0。 在a0 = aN = 1 情况下得到如下归一化的巴特沃斯多项式:
(Note: 参考 维基百科 “巴特沃斯滤波器”) 由此得到 d0=a0=aN=1情况下的Butterworth多项式展开的系数表:
(Note: 参考 陈佩青《数字信号处理教程》第二版266页 表6-4)   上面的表达式是s域的表达式,下面是变化到z域的方法。

低通滤波器:


采样频率fs, -3dB频率点 fc

高通滤波器:

(Note: 参考 陈佩青《数字信号处理教程》第二版291页 表6-8) 其他带通、带阻滤波器频率变换式参考表6-8 (下图)

参考设计:

1. 1阶Butterworth LPF设计


因此,在确定fc、fs后,1阶的Butterworth滤波器系数就能按照上式计算出来了。如果嵌入式系统没有数据函数库,那么tan的计算方式可以换成tan(x) = sin(x)/cos(x), 加入sin/cos table后就能计算出sin/cos值了。具体Fixed point实现在后续文章再表。 例1:设定fs=44100Hz, fc=1000Hz 计算1阶Butterworth LPF filter coefficients C1 =tan(2*pi*1000/44100/2) =  0.071358680866949307399178122527764 带入上式计算出1阶Butterworth LPF filter coefficients: B=[0.066605780250, 0.066605780250, 0] A=[1, -0.866788439500, 0] 与下图中MatLab获得的Filter Coefficients是完全一致的。

2. 2阶Butterworth LPF 设计
例2:设定fs=44100Hz, fc=1000Hz 计算2阶Butterworth LPF filter coefficients C1 = tan(2*pi*1000/44100/2) =  0.071358680867 G = 0.904152198106 带入上式计算得2阶Butterworth LPF Filter Coefficients B=[0.004603998476  0.009207996951  0.004603998476] A=[1 -1.799096409760  0.817512403663] 与Matlab的结果相当:

3. 1阶Butterworth HPF设计


例3:设定fs=44100Hz, fc=1000Hz 计算1阶Butterworth HPF filter coefficients C1 = tan(2*pi*1000/44100/2) =  0.071358680867 G = 0.93339421975 带入上式计算得Filter Coefficients: B = [0.933394219750  -0.933394219750  0] A = [1 -0.866788439500  0] 与Matlab计算结果相当:

4. 2阶Butterworth HPF设计


例4:设定fs=44100Hz, fc=1000Hz 计算2阶Butterworth HPF filter coefficients C1 = tan(2*pi*1000/44100/2) =  0.071358680867 G = 0.904152203356 带入上式计算得Filter Coefficients: B = [0.904152203356  -1.808304406712  0.904152203] A = [1 -1.799096409760  0.817510981662 ] 与Matlab计算结果相当:
Butterworth 1~2 阶 LPF & HPF Filter Coefficients以及制作成Excel表格分享在: http://pan.baidu.com/s/1hqw2mby 可以下载使用,选择对应的类型,设定相应的fs & fc就能自动计算出Filter Coefficients。

参考文献:

1. 陈佩青 《数字信号处理教程》第二版 2. 维基百科 “巴特沃斯滤波器 http://zh.wikipedia.org/wiki/%E5%B7%B4%E7%89%B9%E6%B2%83%E6%96%AF%E6%BB%A4%E6%B3%A2%E5%99%A8
该文档完整的PDF档案文章可以在如下地址下载: http://pan.baidu.com/s/1ntLu8GD