python写一个5阶iir滤波器,并显示波形
时间: 2024-03-20 10:44:11 浏览: 47
iir.rar_IIR数字滤波器_数字录波器_波形 滤波_频率滤波
好的,下面是一个5阶IIR滤波器的Python实现,使用的是巴特沃斯滤波器:
```python
import numpy as np
from scipy.signal import butter, filtfilt
import matplotlib.pyplot as plt
# 生成测试信号
fs = 1000
t = np.arange(0, 1, 1/fs)
x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*120*t) + np.sin(2*np.pi*200*t)
# 设计滤波器
def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
# 滤波信号
lowcut = 60
highcut = 160
order = 5
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = filtfilt(b, a, x)
# 绘制波形
fig, axs = plt.subplots(2, 1, figsize=(8, 6))
axs[0].plot(t, x)
axs[0].set_xlabel('Time (s)')
axs[0].set_ylabel('Amplitude')
axs[0].set_title('Original Signal')
axs[1].plot(t, y)
axs[1].set_xlabel('Time (s)')
axs[1].set_ylabel('Amplitude')
axs[1].set_title('Filtered Signal')
plt.tight_layout()
plt.show()
```
这个滤波器可以对频率在60 Hz 到 160 Hz 之间的信号进行滤波。在这里,我们生成了一个包含三个频率成分的测试信号,并将其滤波后绘制出原始信号和滤波后的信号。你可以根据自己的需求修改滤波器的参数,比如滤波的频率范围、阶数等。
阅读全文