gui界面文件浏览框选择指定wav文件并绘制1/3倍频程声压级结果。其中x轴为0-16000hz中心频率 y轴为-20到80db声压级用python实现

时间: 2024-02-23 10:59:14 浏览: 28
好的,以下是完整的Python代码,可以实现GUI界面文件浏览框选择指定wav文件并绘制1/3倍频程声压级结果,其中x轴为0-16000hz中心频率,y轴为-20到80db声压级: ```python import tkinter as tk from tkinter import filedialog import os import matplotlib.pyplot as plt import numpy as np import wave class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.create_widgets() def create_widgets(self): # 创建文件浏览按钮 self.file_button = tk.Button(self) self.file_button["text"] = "选择文件" self.file_button["command"] = self.select_file self.file_button.pack(side="top") def select_file(self): # 打开文件浏览窗口 file_path = filedialog.askopenfilename() print(file_path) # 绘制声压级结果 self.plot_spl(file_path) def plot_spl(self, file_path): # 打开wav文件 with wave.open(file_path, "rb") as f: # 获取声道数、采样宽度和采样率 channels = f.getnchannels() sample_width = f.getsampwidth() sample_rate = f.getframerate() # 读取所有采样数据 frames = f.readframes(-1) # 将二进制数据转换为numpy数组 samples = np.frombuffer(frames, dtype=np.int16) # 计算FFT n = len(samples) freqs = np.fft.fftfreq(n, d=1/sample_rate) fft = np.fft.fft(samples) fft_abs = np.abs(fft) fft_db = 20 * np.log10(fft_abs / sample_rate / sample_width * 2) # 计算1/3倍频程声压级 spl = [] for i in range(16): mask = (freqs >= i*1000/3) & (freqs < (i+1)*1000/3) spl.append(np.max(fft_db[mask])) # 绘制图形 plt.bar(range(16), spl) plt.xticks(range(16), ["{:.0f}".format(i*1000/3) for i in range(16)]) plt.xlim(-0.5, 15.5) plt.ylim(-20, 80) plt.xlabel("Center Frequency (Hz)") plt.ylabel("SPL (dB)") plt.show() root = tk.Tk() app = Application(master=root) app.mainloop() ``` 在上面的代码中,我们首先创建了一个名为`Application`的类来实现GUI界面,其中包括一个文件浏览按钮。当用户点击文件浏览按钮时,会弹出文件浏览窗口,用户可以选择需要处理的wav文件。选择文件后,我们会调用`plot_spl`函数来绘制1/3倍频程声压级结果。 在`plot_spl`函数中,我们首先使用Python的wave库来读取wav文件,然后使用numpy库和matplotlib库来计算FFT并绘制声压级结果。计算1/3倍频程声压级时,我们将频率范围分成16个区间,每个区间的中心频率为1000/3 Hz,然后分别计算每个区间内的最大声压级。最后,我们使用matplotlib库来绘制柱状图,并设置x轴、y轴范围和标签。 将上面的代码保存为Python文件并运行,可以得到一个GUI界面,用户可以选择需要处理的wav文件,程序会自动绘制该文件的1/3倍频程声压级结果。

相关推荐

最新推荐

recommend-type

PyCharm GUI界面开发和exe文件生成的实现

主要介绍了PyCharm GUI界面开发和exe文件生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例

主要介绍了python GUI库图形界面开发之PyQt5信号与槽的高级知识(自定义信号与槽)详解与实例,需要的朋友可以参考下
recommend-type

python 实现简单的计算器(gui界面)

运行效果: 完整代码 from tkinter import * def click(num): global op op=op+str(num) iptext.set(op) def evaluate(): global op output=str(eval&#40;op&#41;) iptext.set(output) ...ipa
recommend-type

基于MATLAB-GUI的简易计算器设计.docx

基于MATLAB-GUI的简易计算器设计,基于MATLAB GUI的计算器设计是利用...可以进行括号及变量x与变量y的输入,结合坐标轴编辑框和曲线颜色编辑框实现函数的曲线绘制。最后运行调试,实现基于MATLAB GUI的计算器的设计。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。