IIR巴特沃斯滤波器
时间: 2025-01-07 07:13:19 浏览: 10
### IIR 巴特沃斯滤波器设计与实现
#### 设计原理
巴特沃斯滤波器是一种具有单调下降幅频响应的经典IIR滤波器,在通带内拥有平坦的频率特性。这种滤波器的特点是在截止频率处相位线性度较好,过渡带较宽[^1]。
#### 参数定义
为了设计一个巴特沃斯滤波器,需要指定几个关键参数:
- `N`:滤波器阶数,决定了滤波器的选择性和复杂度。
- `Wn`:归一化后的截至角频率,对于低通滤波器而言是指定的最大允许衰减边界位置;对于高通则是最小允许衰减值所在的位置。
- `btype`:滤波器类型('lowpass', 'highpass', 'bandpass', 或者 'bandstop')
这些参数可以通过分析具体应用场景的需求来确定[^2]。
#### Python 实现示例
下面是一个使用 SciPy 库中的 `signal.butter()` 函数创建并应用巴特沃斯低通滤波器的例子:
```python
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
# 定义采样率和目标截止频率 (Hz)
fs = 500.0 # Sample frequency (Hz)
cutoff = 80 # Desired cutoff frequency of the filter, Hz
# 计算归一化的截止频率
nyq = 0.5 * fs # Nyquist Frequency
normal_cutoff = cutoff / nyq
# 创建四阶巴特沃斯低通滤波器
order = 4 # Filter order
b, a = signal.butter(order, normal_cutoff, btype='low', analog=False)
# 绘制频率响应图
w, h = signal.freqz(b, a)
plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
plt.title("Low-pass Butterworth filter frequency response")
plt.xlabel('Frequency [Hz]')
plt.grid()
plt.show()
def butter_lowpass_filter(data):
y = signal.filtfilt(b, a, data)
return y
```
此代码片段展示了如何利用Python中的SciPy库快速构建一个简单的巴特沃斯低通滤波器,并绘制其频率响应曲线。通过调整变量`order`可以改变滤波器的阶数,而修改`cutoff`则能设置不同的截止频率。
阅读全文