在音频分析中绘制频谱图

2023-12-24

我正在研究使用神经网络的语音识别。为此,我需要获取这些训练音频文件 (.wav) 的频谱图。如何在 python 中获取这些频谱图?


有很多方法可以做到这一点。最简单的方法是查看中提出的方法关于 Kaggle 竞赛TensorFlow 语音识别挑战赛 https://www.kaggle.com/c/tensorflow-speech-recognition-challenge(仅按投票最多的排序)。This one https://www.kaggle.com/alphasis/light-weight-cnn-lb-0-74特别清晰简单,包含以下功能。输入是从 wav 文件中提取的样本的数值向量、采样率、帧大小(以毫秒为单位)、步长(跨步或跳过)大小(以毫秒为单位)和一个小偏移量。

from scipy.io import wavfile
from scipy import signal
import numpy as np

sample_rate, audio = wavfile.read(path_to_wav_file)

def log_specgram(audio, sample_rate, window_size=20,
                 step_size=10, eps=1e-10):
    nperseg = int(round(window_size * sample_rate / 1e3))
    noverlap = int(round(step_size * sample_rate / 1e3))
    freqs, times, spec = signal.spectrogram(audio,
                                    fs=sample_rate,
                                    window='hann',
                                    nperseg=nperseg,
                                    noverlap=noverlap,
                                    detrend=False)
    return freqs, times, np.log(spec.T.astype(np.float32) + eps)

输出定义在SciPy手册 https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.spectrogram.html,但有一个例外,即频谱图使用单调函数 (Log()) 重新缩放,该函数对较大值的抑制作用远大于对较小值的抑制,同时使较大值仍然大于较小值。这样,规格中的极值就不会主导计算。或者,可以将值限制在某个分位数,但首选对数(甚至平方根)。还有许多其他方法可以标准化频谱图的高度,即防止极端值“欺负”输出:)

freq (f) : ndarray, Array of sample frequencies.
times (t) : ndarray, Array of segment times.
spec (Sxx) : ndarray, Spectrogram of x. By default, the last axis of Sxx corresponds to the segment times.

或者,您可以检查 train.py 和 models.py 代码github 仓库 https://github.com/tensorflow/tensorflow/tree/v1.4.0/tensorflow/examples/speech_commands来自音频识别的 Tensorflow 示例 https://www.tensorflow.org/tutorials/audio_recognition.

这是另一个线程 https://www.kaggle.com/timolee/audio-data-conversion-to-images-eda解释并给出了用 Python 构建频谱图的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在音频分析中绘制频谱图 的相关文章

随机推荐

  • 如何实现Linq OrderBy方法?

    我试图更多地了解 linq 例如 如果我想实现一个 Select 我会像这样实现 public static IEnumerable
  • ActionBarDrawerToggle 无法应用于 Android.support.v7.widget.Toolbar

    我不断收到错误消息 说 ActionBarDrawerToggle 无法应用于 v7 widget Toolbar 因为我查看了其他人如何修复类似问题 它们现在都是支持库文件 但由于某种原因错误并没有消失 错误说ActionBarDrawe
  • 如何防止 JList 在单元格边界之外进行选择?

    当用户单击列表中最后一个元素时 有什么方法可以阻止 JList 选择最后一个元素吗 这是有人问的问题here http objectmix com java 72850 jlist selection outside cell bounds
  • 使用通用 IHostBuilder 时访问 IServiceProvider

    我在用着IHostBuilder在 NET Core 2 1 控制台应用程序中 主要看起来像这样 public static async Task Main string args var hostBuilder new HostBuild
  • Java错误缺少返回语句

    好吧 我正在尝试编写这段代码 但我不断收到这个愚蠢的错误 我不知道我做错了什么 所以也许你们中的一位专家可以帮助我 import java util public class School Random randQuest new Rand
  • 有没有办法在单击 后重新加载页面?

    我想知道这一点 我有一个简单的 facebook 连接应用程序 只有在您登录并喜欢某个页面后才会显示某些内容 它有效 huzzah 但我想让它在您按下 喜欢 按钮后自动刷新 从而使其更加用户友好 这是一些代码
  • Wicket:如何处理长时间运行的任务

    我已经设置了一个 Wicket Hibernate Spring Web 应用程序 其中涉及收集一些数据 生成并返回一些文件 将其存储在数据库中 创建一些图像并将所有这些显示在网页上 这对于短期运行来说效果很好 但有时收集数据 涉及一些远程
  • 玩!框架 1.2.4 --- C3P0 设置以避免通信链路故障影响空闲时间

    我正在尝试自定义我的 C3P0 设置以避免本文底部显示的错误 这是在这个网址上建议的 http make it open blogspot com 2008 12 sql error 0 sqlstate 08s01 html http m
  • Vanilla Javascript 类中的“计算属性”

    The 计算属性该功能在流行的 JS 框架 React VueJS 中很常见 但是我们如何在普通 JS 中实现这个功能呢 假设给定一个User类 具有dateOfBirth属性 我们想计算它的age 有没有比下面的代码更好的方法来执行此任务
  • 在 View Pager 中的 Fragment 之间传递数据

    在视图分页器中的片段之间传递数据时需要帮助 我们尝试在片段内将数据作为包传递 在 Fragment getInstance 方法内部 尝试从其他 Fragment getArguments 获取数据 活动代码 package com nor
  • jQuery ajax 请求因跨源而被阻止

    如何通过ajax从远程url获取内容 jQuery ajax 请求因跨源而被阻止 控制台日志 跨源请求被阻止 同源策略不允许读取 远程资源位于http www dailymotion com embed video x28j5hv http
  • clang 构建 qt 的 mkspecs 是什么?

    如果我想在Windows下使用gcc构建qt 配置选项是 platform win32 g 但是当我想使用clang构建qt时 该选项是什么 clang windows 组合没有 我认为根据 linux g 和 linux clang 之间
  • Twitter Fabric - 无法解析符号

    我已经为 Android Studio 安装了 Twitter Fabric 插件 这很简单直接 但是当我从 Fabric 对话框复制并粘贴代码时 我的项目无法识别任何 Twitter 对象 例如以下行 private TwitterLog
  • Express 中间件、next 和 Promise

    有一个非常简单的带处理程序的 Express 路由器 router get users userId roles roleId function req res next const roleId req params roleId res
  • 如何知道客户端是否已在套接字中终止

    假设 写完这段代码后我有一个已连接的套接字 if sd accept socket d struct sockaddr client addr alen lt 0 perror accept failed n exit 1 我如何在服务器端
  • 使用 jsdom 加载 ajax 应用程序

    我正在寻找一种解决方案来在服务器上引导客户端应用程序 用 Backbone js 编写 以便我可以为爬虫和非 js 消费者提供正确的内容 我一直在尝试使用 jsdom 和 Node js 来引导应用程序 并且可以加载基本模板内容 但应用程序
  • Sonarqube 6.7x 的安全插件

    我们正在使用 sonarqube 我们喜欢它的工作方式 我们正在尝试扩展 sonarqube 以增强安全性 我尝试为sonarqube 6 x找到一些安全插件来检测Java语言的漏洞 但我找不到任何插件 我想知道是否有任何插件可以查找 so
  • 如何检查麦克风是否可用于录音

    我正在开发一个 WPF 应用程序 需要录制用户的音频消息 我按照代码here http channel9 msdn com coding4fun articles NET Voice Recorder并且它工作正常 现在的问题是 如果它是台
  • 如何比较两个 OrderedDict 字典?

    如何比较两个 OrderedDict 字典 我的结构如下 dict a OrderedDict 1 4 2 5 3 3 4 5 5 4 6 4 7 4 8 3 9 4 dict b OrderedDict 1 4 2 2 3 1 4 4 5
  • 在音频分析中绘制频谱图

    我正在研究使用神经网络的语音识别 为此 我需要获取这些训练音频文件 wav 的频谱图 如何在 python 中获取这些频谱图 有很多方法可以做到这一点 最简单的方法是查看中提出的方法关于 Kaggle 竞赛TensorFlow 语音识别挑战