📌  相关文章
📜  Python中的数字带阻巴特沃斯滤波器(1)

📅  最后修改于: 2023-12-03 15:04:36.454000             🧑  作者: Mango

Python中的数字带阻巴特沃斯滤波器

数字带阻滤波器是数字信号处理中常用的一种滤波器,主要用于去除频域干扰,保留指定频段内的信号。在Python中,可以使用scipy库中的scipy.signal模块实现数字带阻巴特沃斯滤波器。

工作原理

数字带阻巴特沃斯滤波器是一种基于差分方程实现的IIR滤波器,其传递函数为:

$$ H(z) = \frac{1}{1 + Q(\frac{z}{z_p} - \frac{z_p}{z}) + (\frac{z}{z_p})^2} $$

其中,$z_p$为通带角频率,$Q$为品质因数。通过调节$z_p$和$Q$的值可以实现带通滤波,带阻滤波等不同的滤波效果。在Python中,使用scipy.signal库的butter函数可以通过指定参数来生成差分方程。

代码演示

Python代码实现数字带阻巴特沃斯滤波器的过程如下所示。

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

# 生成模拟信号
fs = 1000  # 采样率
t = np.linspace(0, 1, fs, endpoint=False)
f1 = 50  # 信号频率
f2 = 200  # 干扰频率
s = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)

# 求取数字带阻巴特沃斯滤波器的系数
Wn = [40 / fs, 60 / fs]  # 通带边界频率
Q = 10.0  # 品质因数
b, a = signal.butter(2, Wn, btype='bandstop', analog=False, output='ba', fs=fs)

# 进行滤波操作
s_filtered = signal.filtfilt(b, a, s)

# 绘制原始信号和滤波后的信号
plt.plot(t, s, label='Original signal')
plt.plot(t, s_filtered, label='Butterworth filter')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.legend()
plt.show()

上述代码中,使用了np.linspace函数生成了采样率为1000Hz的模拟信号,并通过signal.butter函数求取了数字带阻巴特沃斯滤波器的系数。最后使用signal.filtfilt函数对信号进行滤波操作,并使用matplotlib绘制了原始信号和滤波后的信号。

总结

数字带阻巴特沃斯滤波器是一种常用的数字滤波器,可以有效去除频域干扰。Python中可以使用scipy库实现数字带阻巴特沃斯滤波器,使用方法简单,需要指定参数包括通带边界频率和品质因数等。