用python 写一个fft滤波程序
时间: 2023-11-25 13:08:05 浏览: 70
Python利用FFT进行简单滤波的实现
好的,下面是一个简单的 Python FFT 滤波程序,它可以读取 WAV 格式的音频文件,对其进行 FFT 变换,然后根据用户设置的频率范围进行滤波操作,最后将结果保存到一个新的 WAV 文件中。
需要用到的库:
- scipy:用于读取 WAV 文件和进行 FFT 变换
- numpy:用于进行数组操作
代码如下:
```python
import numpy as np
from scipy.io import wavfile
# 读取 WAV 文件,返回采样率和音频数据
def read_wav(filename):
rate, data = wavfile.read(filename)
return rate, data
# 将音频数据进行 FFT 变换
def fft(data):
return np.fft.fft(data)
# 将 FFT 变换后的数据进行滤波
def fft_filter(data, rate, fmin, fmax):
fft_data = fft(data)
freqs = np.fft.fftfreq(len(data), 1.0 / rate)
# 将低于最小频率和高于最大频率的部分置为 0
mask = (freqs > fmin) & (freqs < fmax)
fft_data *= mask.astype(int)
# 反变换回时域
filtered_data = np.real(np.fft.ifft(fft_data))
return filtered_data
# 将滤波结果保存到新的 WAV 文件中
def save_wav(filename, rate, data):
wavfile.write(filename, rate, data.astype(np.int16))
# 主函数
def main():
# 读取 WAV 文件
rate, data = read_wav('input.wav')
# 设定滤波范围
fmin = 1000 # 最小频率
fmax = 5000 # 最大频率
# 进行滤波
filtered_data = fft_filter(data, rate, fmin, fmax)
# 保存结果到新的 WAV 文件
save_wav('output.wav', rate, filtered_data)
if __name__ == '__main__':
main()
```
注意:这个程序只是一个简单的演示,实际使用时还需要考虑更多的因素,如滤波器的设计、滤波器的阶数、滤波效果的评估等等。
阅读全文