Python中的数字低通巴特沃斯滤波器


低通滤波器是一种电子滤波器,它允许频率低于定义截止频率的信号通过,而频率高于截止频率的信号则会被衰减。高通巴特沃斯滤波器具有一些专门的特性,定义如下。

  • 给定输入信号的采样率为 40 kHz。

  • 通带的截止频率为 4 kHz。

  • 阻带的截止频率为 8 kHz。

  • 通带的纹波为 0.5 dB。

  • 阻带的最小衰减为 40 dB,每个频率的衰减都基于滤波器设计。

实现低通巴特沃斯滤波器

Numpy 库提供了名为 butter() 的函数,该函数属于 scipy.signal 模块,用于通过将 btype 参数定义为 low 来创建低通巴特沃斯滤波器。以下是使用 Python 实现低通巴特沃斯滤波器的步骤。

步骤 1 - 在此步骤中,我们将定义用于传递较低频率的截止频率 f、采样频率 fs 和滤波器的阶数。

步骤 2 - 在 Python 中,我们有 scipy 库,它有一个名为 scipy.signal.butter() 的函数,用于使用定义的阶数和归一化频率设计巴特沃斯滤波器,将 btype 参数传递为 low 以实现低通巴特沃斯滤波器。

步骤 3 - 在此步骤中,我们将使用 scipy.signal.filtfilt() 函数创建给定输入信号频率的滤波器,以执行零相位滤波。

步骤 4 - 现在,我们将绘制低通巴特沃斯滤波器的输出频率和滤波后的输出频率。

示例

在以下示例中,我们通过组合所有提到的步骤来实现低通巴特沃斯滤波器。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt
t = np.linspace(0, 1, 1000, False)  
signal = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*100*t)
cutoff_freq = 50  
nyquist_freq = 0.5 * 1000 
order = 4
b, a = butter(order, cutoff_freq/nyquist_freq, btype='low')
print("The output of the Low band pass Butterworth filter:",b,a)
filtered_signal = filtfilt(b, a, signal)
print("The output of the filtered Low band pass Butterworth filter:",filtered_signal[:60])
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(t, signal)
ax1.set(title='Original signal')
ax2.plot(t, filtered_signal)
ax2.set(title='Filtered signal')
plt.show()

输出

The output of the Low band pass Butterworth filter: [0.0004166 0.0016664 0.0024996 0.0016664 0.0004166] [ 1.         -3.18063855  3.86119435 -2.11215536  0.43826514]
The output of the filtered Low band pass Butterworth filter: [ 2.57011434e-02  8.61005841e-02  1.44535721e-01  2.01004914e-01
  2.55827118e-01  3.09620894e-01  3.63131838e-01  4.16969733e-01
  4.71355911e-01  5.25981148e-01  5.80034880e-01  6.32402662e-01
  6.81965142e-01  7.27892755e-01  7.69831093e-01  8.07912298e-01
  8.42592726e-01  8.74381837e-01  9.03567319e-01  9.30041579e-01
  9.53294974e-01  9.72576767e-01  9.87160288e-01  9.96608860e-01
  1.00093881e+00  1.00061547e+00  9.96382240e-01  9.88986904e-01
  9.78909138e-01  9.66193004e-01  9.50448481e-01  9.31021733e-01
  9.07269534e-01  8.78833540e-01  8.45810150e-01  8.08751539e-01
  7.68497795e-01  7.25904493e-01  6.81569842e-01  6.35665536e-01
  5.87935734e-01  5.37864244e-01  4.84945669e-01  4.28956498e-01
  3.70122109e-01  3.09115413e-01  2.46887151e-01  1.84392199e-01
  1.22315971e-01  6.09049996e-02 -3.39902671e-05 -6.09665336e-02
 -1.22358749e-01 -1.84405645e-01 -2.46863503e-01 -3.09050695e-01
 -3.70016926e-01 -4.28816577e-01 -4.84782072e-01 -5.37693155e-01]

更新于: 2023年11月2日

1K+ 阅读量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告