脉冲响应不变法巴特沃斯低通滤波器设计代码
时间: 2024-12-13 13:24:30 浏览: 12
脉冲响应不变法是一种数字滤波器设计方法,它可以将连续时间滤波器设计转化为离散时间滤波器设计。巴特沃斯低通滤波器是一种常见的模拟低通滤波器,它具有通带最大平坦度和陡峭的截止频率特性。
脉冲响应不变法巴特沃斯低通滤波器的设计代码如下:
```python
from scipy.signal import butter, filtfilt
import numpy as np
# 设计巴特沃斯低通滤波器
def butter_lowpass(cutoff, fs, order=5):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='low', analog=False)
return b, a
# 应用滤波器
def butter_lowpass_filter(data, cutoff, fs, order=5):
b, a = butter_lowpass(cutoff, fs, order=order)
y = filtfilt(b, a, data)
return y
```
其中,`butter_lowpass`函数用于设计巴特沃斯低通滤波器,`butter_lowpass_filter`函数用于应用滤波器。具体使用方法可以参考以下示例:
```python
# 生成测试信号
fs = 1000 # 采样率为1000Hz
t = np.linspace(0, 1, fs)
x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*120*t)
# 应用巴特沃斯低通滤波器
cutoff = 80 # 截止频率为80Hz
order = 6 # 滤波器阶数为6
y = butter_lowpass_filter(x, cutoff, fs, order)
# 绘制原始信号和滤波后的信号
import matplotlib.pyplot as plt
plt.plot(t, x, 'b-', label='raw data')
plt.plot(t, y, 'g-', linewidth=2, label='filtered data')
plt.xlabel('Time [sec]')
plt.grid()
plt.legend()
plt.show()
```
阅读全文