贝塞尔滤波器

贝塞尔滤波器

贝赛尔(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);          %信号滤波运算
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值