python 写一个fft滤波器
时间: 2023-10-09 12:17:36 浏览: 139
calc_FFT_filter.zip_FFT滤波_FFT滤波器_Fourier filter_fft_filter_圆形滤波
以下是一个使用FFT实现低通滤波器的Python代码示例:
```python
import numpy as np
from scipy.fft import fft, ifft
import matplotlib.pyplot as plt
# 生成随机信号
t = np.linspace(0, 1, 1000, endpoint=False)
x = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t) + np.sin(2*np.pi*30*t)
# 定义滤波器
cutoff_freq = 15 # 截止频率
Fs = 1000 # 采样率
nyquist_freq = Fs/2
cutoff_normal = cutoff_freq/nyquist_freq
order = 100 # 滤波器阶数
# 计算低通滤波器系数
b = np.zeros(order+1)
for i in range(order+1):
if i == order/2:
b[i] = 2*cutoff_normal
else:
b[i] = np.sin(2*np.pi*cutoff_normal*(i-order/2))/(np.pi*(i-order/2))
# 将滤波器系数应用于信号
x_filtered = np.convolve(x, b, mode='same')
# 绘制结果
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(6, 6))
ax0.plot(t, x)
ax0.set_title('Original Signal')
ax0.margins(0, 0.1)
ax1.plot(t, x_filtered)
ax1.set_title('Filtered Signal')
ax1.margins(0, 0.1)
plt.tight_layout()
plt.show()
```
这个代码示例生成一个包含三个正弦信号的随机信号,然后定义一个低通滤波器,通过将滤波器系数应用于信号来实现滤波,最后绘制结果。你可以根据需要,调整截止频率和阶数来改变滤波器的效果。
阅读全文