用python 写一个fft滤波程序
时间: 2023-11-25 11:08:06 浏览: 129
Python利用FFT进行简单滤波的实现
好的,下面是一个简单的 Python FFT 滤波程序,它可以将输入信号进行 FFT 变换,然后将低于指定截止频率的频率成分滤除,最后将滤波后的频率信号进行反变换得到滤波后的时域信号:
```python
import numpy as np
from scipy.fftpack import fft, ifft
# 生成测试信号
Fs = 1000 # 采样频率
T = 1 / Fs # 采样时间间隔
L = 1000 # 信号长度
t = np.arange(0, L * T, T) # 时间序列
f1 = 50 # 信号频率
f2 = 150 # 信号频率
s = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t) # 输入信号
# FFT 滤波
Y = fft(s) # 进行 FFT 变换
f = Fs * np.arange(0, L/2+1) / L # 频率序列
fc = 80 # 截止频率
Y[fc:L-fc+1] = 0 # 将低于截止频率的频率成分滤除
Y[L-fc+2:L] = np.flip(Y[1:fc]) # 将高于截止频率的频率成分滤除
s_filtered = np.real(ifft(Y)) # 进行反变换得到滤波后的时域信号
# 绘制结果
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
ax[0].plot(t, s)
ax[0].set_xlabel('Time (s)')
ax[0].set_ylabel('Amplitude')
ax[0].set_title('Original signal')
ax[1].plot(t, s_filtered)
ax[1].set_xlabel('Time (s)')
ax[1].set_ylabel('Amplitude')
ax[1].set_title('Filtered signal')
plt.tight_layout()
plt.show()
```
在该程序中,我们首先生成了一个测试信号,然后进行 FFT 变换,将低于截止频率的频率成分滤除,再进行反变换得到滤波后的时域信号。在代码中,我们使用 `fft` 函数进行 FFT 变换,使用 `ifft` 函数进行反变换。注意,由于 FFT 变换后的结果是一个复数数组,因此我们需要使用 `np.real` 函数获取实部,得到滤波后的时域信号。
以上是一个简单的 FFT 滤波程序,可以在不同的应用场合中进行修改和扩展。
阅读全文