生成一个文件浏览框选择指定wav文件并绘制1/3倍频程结果,并封装成函数,最后通过gui界面展示的代码
时间: 2024-02-22 11:55:32 浏览: 71
好的,以下是完整的代码,可以实现你想要的功能:
```python
import tkinter as tk
from tkinter import filedialog
import os
import scipy.io.wavfile as wavfile
import scipy.signal as signal
import matplotlib.pyplot as plt
def plot_filtered_wav(file_path):
# 读取WAV文件
sample_rate, data = wavfile.read(file_path)
# 计算1/3倍频程的频率范围
freqs, psd = signal.welch(data, sample_rate, nperseg=1024)
low_cutoff = freqs[np.where(psd == np.max(psd))[0][0]] / 3
high_cutoff = freqs[np.where(psd == np.max(psd))[0][0]] / 2
# 滤波
b, a = signal.butter(5, [low_cutoff, high_cutoff], btype='band')
filtered_data = signal.filtfilt(b, a, data)
# 绘制数据
plt.plot(data, 'b', alpha=0.5)
plt.plot(filtered_data, 'r')
plt.show()
def browse_file():
file_path = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select file", filetypes=(("WAV files", "*.wav"), ("All files", "*.*")))
plot_filtered_wav(file_path)
root = tk.Tk()
root.title("WAV File Filter")
root.geometry("300x100")
browse_button = tk.Button(root, text="Browse", command=browse_file)
browse_button.pack()
root.mainloop()
```
以上代码使用了前面提到的函数`plot_filtered_wav`和`browse_file`,并使用了Python的tkinter库创建了一个GUI界面,包含一个“Browse”按钮。当用户点击按钮时,将打开文件浏览框,让用户选择WAV文件,并绘制出1/3倍频程滤波后的数据。
希望这个代码可以帮助到你。如果还有其他问题,请随时问我。
阅读全文