贝塞尔滤波器
贝赛尔(Bessel)滤波器是具有最大平坦的群延迟(线性相位响应)的线性过滤器,即最平坦的幅度和相位响应,常用在音频天桥系统中。具有最平坦的幅度和相位响应。带通(通常为用户关注区域)的相位响应近乎呈线性。
1、 贝塞尔滤波器传递函数
T n ( s ) = B n ( 0 ) B n ( s / ω 0 ) T_n(s) = \frac{B_n(0)}{B_n(s/\omega_0)} Tn(s)=Bn(s/ω0)Bn(0)
其中 ω 0 \omega_0 ω0为期望截至频率
2、特性
贝塞尔滤波器的相移与频率关系如下图所示。
从图上可以看出,贝塞尔滤波器带来的延时,基本是线性的,保证了滤波后的信号波形的完整性,贝塞尔滤波器在通频带内,其幅度特性也较为平坦,如下图所示。
但是与相同阶数的巴特沃斯、切比雪夫滤波器相比,贝塞尔滤波器在信号衰减方面有劣势,其阻带下降响应速度过慢,所以一般设计成高阶数的滤波器来达到相应的阻带衰减水平。
贝塞尔滤波器在通频带范围内,有近似的线性时延特性和较平坦的幅度特性,保证了信号处理的准确性及信号的无畸变传输,从而使贝塞尔滤波器常用作音频系统ADC输入之前的抗混叠滤波器以及DAC输出端的平滑滤波器。在生物医学信号放大与处理过程中也得到广泛的应用。
python函数介绍
scipy.signal.bessel(N, Wn, btype='low', analog=False, output='ba', norm='phase', fs=None)
参数:
N:int 过滤器的顺序。
Wn:array_like 标量或长度为2的序列给出了临界频率(由norm参数定义)。对于模拟滤波器,Wn是角频率(例如rad /s)。
btype:{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, 可选参数
过滤器的类型。默认值为‘lowpass’。
analog:bool, 可选参数
如果为True,则返回一个模拟滤波器,否则返回一个数字滤波器。
output:{‘ba’, ‘zpk’, ‘sos’}, 可选参数
输出类型:分子/分母(‘ba’),pole-zero(‘zpk’)或second-order部分(‘sos’)。默认值为‘ba’。
fs:float 可选参数 数字系统的采样频率。
对于数字滤波器,Wn与fs的单位相同。默认情况下,fs为2 half-cycles /sample,因此将它们从0标准化为1,其中1是奈奎斯特频率。 (因此Wn在half-cycles /样本中。)
返回值:
b, a:ndarray,ndarray
IIR滤波器的分子(b)和分母(a)多项式。仅在以下情况下返回output='ba'。
z, p, k:ndarray,ndarray,float
IIR滤波器传递函数的零点,极点和系统增益。仅在以下情况下返回output='zpk'。
sos:ndarray
IIR滤波器的Second-order个部分表示。仅在以下情况下返回output=='sos'。
python例子
绘制phase-normalized频率响应,显示与Butterworth截止频率的关系(绿色):
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
b, a = signal.butter(4, 100, 'low', analog=True)
w, h = signal.freqs(b, a)
plt.semilogx(w, 20 * np.log10(np.abs(h)), color='silver', ls='dashed')
b, a = signal.bessel(4, 100, 'low', analog=True, norm='phase')
w, h = signal.freqs(b, a)
plt.semilogx(w, 20 * np.log10(np.abs(h)))
plt.title('Bessel filter magnitude response (with Butterworth)')
plt.xlabel('Frequency [radians / second]')
plt.ylabel('Amplitude [dB]')
plt.margins(0, 0.1)
plt.grid(which='both', axis='both')
plt.axvline(100, color='green') # cutoff frequency
plt.show()
最后附上matlab实现代码
[b,a] = besself(n,Wn) % n为滤波器阶数 Wn为返回截至频率
% b a 分别为滤波器传递函数的分子和分母系数向量(降幂排列)
% 若Wn为二元向量,即Wn=[W1 W2] (W1<W2)时,其返回一个2n阶
% 模拟带通滤波器,其通带为W1 < ω < W2。
[b,a] = besself(n,Wn,’ftype’); % ftype类型low,hight,stop
dataOut = filter(b,a,dataIn); %信号滤波运算