Python实现用双线性变换法实现巴特沃斯高通滤波器并画图
时间: 2024-03-20 18:41:43 浏览: 136
通信工程基于MATLAB和双线性变换法的数字巴特沃斯高通IIR滤波器.doc
巴特沃斯高通滤波器是一种常见的数字滤波器,可以用于去除信号中的低频成分。下面是一个使用双线性变换法实现巴特沃斯高通滤波器的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def butter_highpass(cutoff, fs, order=5):
"""
实现巴特沃斯高通滤波器
:param cutoff: 截止频率
:param fs: 采样率
:param order: 滤波器阶数
:return: b, a 滤波器系数
"""
nyquist = 0.5*fs
normal_cutoff = cutoff/nyquist
b, a = signal.butter(order, normal_cutoff, btype='highpass', analog=False)
return b, a
# 生成测试信号
t = np.linspace(0, 1, 1000, False)
sig = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t)
# 设置滤波器参数
cutoff = 15 # 截止频率
fs = 1000 # 采样率
order = 6 # 滤波器阶数
# 计算滤波器系数
b, a = butter_highpass(cutoff, fs, order)
# 应用滤波器
filtered = signal.filtfilt(b, a, sig)
# 绘制原始信号和滤波后的信号
plt.figure(figsize=(10, 6))
plt.plot(t, sig, label='Original Signal')
plt.plot(t, filtered, label='Filtered Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
```
这段代码将生成一个包含两个正弦波的测试信号,并使用巴特沃斯高通滤波器去除其中的低频成分。最后,它将绘制原始信号和滤波后的信号的图形,以便比较它们的差异。可以根据需要修改参数来应用不同的滤波器。
阅读全文