c++ 实现python中巴特沃斯带通滤波器
时间: 2023-05-30 20:06:39 浏览: 144
Python中有许多现成的开源库可以实现巴特沃斯带通滤波器,如scipy,numpy等。以下是一个使用scipy库的例子:
```python
import numpy as np
from scipy.signal import butter, filtfilt
# 定义采样频率和截止频率
fs = 1000.0
lowcut = 10.0
highcut = 100.0
# 计算滤波器系数
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
order = 5
b, a = butter(order, [low, high], btype='band')
# 生成测试信号
t = np.linspace(0, 1, fs)
x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*150*t) + np.sin(2*np.pi*300*t)
# 使用滤波器进行滤波
y = filtfilt(b, a, x)
# 绘制信号和滤波结果
import matplotlib.pyplot as plt
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True)
ax0.plot(t, x)
ax0.set_title('Original signal')
ax1.plot(t, y)
ax1.set_title('Filtered signal')
ax1.set_xlabel('Time (seconds)')
plt.show()
```
这里使用了butter函数计算滤波器系数,其中order表示滤波器阶数,[low, high]表示带通滤波器的截止频率,btype='band'表示带通滤波器。使用filtfilt函数对测试信号进行滤波,得到滤波结果y。最后绘制原始信号和滤波结果,可以看到滤波器成功去除了低于10Hz和高于100Hz的信号成分,保留了50Hz、150Hz和300Hz的成分。
阅读全文