利用快速傅里叶变换进行 Butterworth 低通滤波处理, 去除70%的高频信号。
时间: 2024-03-10 13:48:42 浏览: 79
对于Butterworth低通滤波器,我们可以先设计其模拟滤波器,然后将其转化为数字滤波器。在模拟滤波器中,我们可以使用Butterworth滤波器的公式来计算传递函数:
H(s) = 1 / (1 + (s / ω_c)^2n)^0.5
其中,s是Laplace变换中的频率,ω_c是截止频率,n是滤波器的阶数。
我们要去除70%的高频信号,也就是保留30%的低频信号,因此,我们需要将截止频率设置在整个频率范围的30%处。然后,我们可以使用快速傅里叶变换将信号从时域转换到频域,然后将高于截止频率的频率成分置零,最后再使用逆傅里叶变换将信号从频域转换回时域。这样做就可以去除高频信号了。
下面是Python代码示例:
```python
import numpy as np
from scipy.signal import butter, filtfilt
# 生成例子信号
t = np.linspace(0, 1, 1000, endpoint=False)
sig = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 100 * t)
# 定义Butterworth滤波器参数
order = 4
fs = 1000
cutoff_freq = 0.3 * fs / 2
# 计算模拟滤波器的传递函数
b, a = butter(order, cutoff_freq, btype='lowpass', analog=True)
# 将模拟滤波器转换为数字滤波器
b_digital, a_digital = bilinear(b, a, fs)
# 使用滤波器滤波信号
filtered_sig = filtfilt(b_digital, a_digital, sig)
# 绘制结果
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
ax[0].plot(t, sig)
ax[0].set_xlabel('Time (s)')
ax[0].set_ylabel('Amplitude')
ax[0].set_title('Original Signal')
ax[1].plot(t, filtered_sig)
ax[1].set_xlabel('Time (s)')
ax[1].set_ylabel('Amplitude')
ax[1].set_title('Filtered Signal')
plt.tight_layout()
plt.show()
```
阅读全文