【深度学习】语音,Mel频谱图的前世今生

Mel频谱图的前世今生

背景与基本概念

Mel频谱图是音频信号处理中的一种表示形式,用于将音频信号转换为二维图像,这种表示形式在语音识别、语音合成和音频分类等领域中广泛应用。要理解Mel频谱图,首先需要了解以下几个基本概念:

  1. 频谱图:频谱图(Spectrogram)是显示信号强度(能量或功率)随时间和频率变化的图像。频谱图是通过对信号进行短时傅里叶变换(STFT)得到的。

  2. Mel尺度:Mel尺度(Mel Scale)是一种根据人耳感知频率的非线性尺度。Mel尺度试图将频率变换成一种更符合人类听觉感知的表示。Mel频率与实际频率之间的关系可以通过以下公式表示:

    m = 2595 log ⁡ 10 ( 1 + f 700 ) m = 2595 \log_{10} \left(1 + \frac{f}{700}\right) m=2595log10(1+700f)

https://aistudio.baidu.com/projectdetail/8196592
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

短时傅里叶变换 (STFT)

短时傅里叶变换(STFT)是将信号分割成短时间段,并对每个时间段进行傅里叶变换,从而得到随时间变化的频谱。其数学表达式如下:

S T F T { x ( t ) } ( m , ω ) = X ( m , ω ) = ∑ n = − ∞ ∞ x [ n ] ⋅ w [ n − m ] ⋅ e − j ω n STFT\{x(t)\}(m, \omega) = X(m, \omega) = \sum_{n=-\infty}^{\infty} x[n] \cdot w[n - m] \cdot e^{-j\omega n} STFT{x(t)}(m,ω)=X(m,ω)=n=x[n]w[nm]ejωn

其中:

  • x [ n ] x[n] x[n] 表示离散时间信号。
  • w [ n ] w[n] w[n] 表示时间窗口函数(如汉宁窗、汉明窗等)。
  • m m m 表示时间段的起始位置。
  • ω \omega ω 表示频率。
  • X ( m , ω ) X(m, \omega) X(m,ω) 表示在时间 m m m和频率 ω \omega ω上的STFT值。

通过对每个时间段的信号进行傅里叶变换,得到不同时间段的频率成分,最终得到的频谱图是频率随时间变化的二维图像。

频谱图

频谱图是STFT的结果,通常表示为信号强度(能量或功率)随时间和频率的变化。频谱图的计算过程如下:

  1. 对每一帧信号应用STFT,得到每一帧的频谱。
  2. 将每一帧的频谱值转换为能量或功率谱。

对于第 m m m帧信号,其频谱能量表示为:

P ( m , k ) = ∣ X ( m , ω k ) ∣ 2 P(m, k) = |X(m, \omega_k)|^2 P(m,k)=X(m,ωk)2

其中:

  • P ( m , k ) P(m, k) P(m,k) 表示在时间 m m m和频率 ω k \omega_k ωk上的功率谱。
  • ∣ X ( m , ω k ) ∣ |X(m, \omega_k)| X(m,ωk) 表示STFT结果的幅值。
Mel频谱图

在得到频谱图之后,将频谱图中的频率轴转换到Mel尺度上,计算过程如下:

  1. Mel尺度转换:将线性频率转换到Mel频率。
  2. Mel滤波器组:对频谱进行Mel滤波,得到每个Mel频率上的能量。
  3. 对数变换:对Mel频谱取对数,得到Mel频谱图。

以上步骤的公式如下:

  1. Mel频率变换:

m = 2595 log ⁡ 10 ( 1 + f 700 ) m = 2595 \log_{10} \left(1 + \frac{f}{700}\right) m=2595log10(1+700f)

  1. Mel滤波器输出:

E m = ∑ k = 0 N − 1 ∣ X ( m , k ) ∣ 2 ⋅ H m ( k ) E_m = \sum_{k=0}^{N-1} |X(m, k)|^2 \cdot H_m(k) Em=k=0N1X(m,k)2Hm(k)

其中:

  • E m E_m Em 表示第 m m m个Mel滤波器的输出能量。
  • H m ( k ) H_m(k) Hm(k) 表示第 m m m个Mel滤波器的频率响应。
  1. 取对数:

Mel频谱图 = log ⁡ ( E m ) \text{Mel频谱图} = \log(E_m) Mel频谱图=log(Em)

最终得到的Mel频谱图表示为:

Mel-Spectrogram ( m , ω ) = log ⁡ ( ∑ k = 0 N − 1 ∣ X ( m , k ) ∣ 2 ⋅ H m ( k ) ) \text{Mel-Spectrogram}(m, \omega) = \log\left(\sum_{k=0}^{N-1} |X(m, k)|^2 \cdot H_m(k)\right) Mel-Spectrogram(m,ω)=log(k=0N1X(m,k)2Hm(k))

以上公式和步骤描述了从时域信号到Mel频谱图的完整转换过程。

发展历史

早期发展阶段

在20世纪60年代,研究人员开始探索如何更好地处理和分析音频信号。傅里叶变换提供了一种将信号从时域转换到频域的方法,使得研究人员可以分析信号的频率成分。然而,直接使用傅里叶变换得到的频谱图在处理人类语音时存在一些问题,因为人耳对频率的感知是非线性的。

Mel尺度的提出

1975年,Stevens等人在研究人耳对不同频率声音的感知时提出了Mel尺度。他们发现人耳对频率的感知并不是线性的,而是对低频更敏感,对高频的变化不那么敏感。这一发现促使研究人员将音频信号转换到Mel尺度上,以更好地模拟人类的听觉感知。

Mel频谱图的形成

在Mel尺度提出后,研究人员将频谱图与Mel尺度结合,形成了Mel频谱图。具体方法是先对音频信号进行短时傅里叶变换(STFT),得到频谱图,然后将频谱图中的频率轴转换到Mel尺度上。这一过程包括以下步骤:

  1. 音频信号预处理:通常包括预加重、分帧和加窗。
  2. 短时傅里叶变换:对每一帧音频信号进行傅里叶变换,得到频谱图。
  3. 应用Mel滤波器:将频谱图中的频率成分通过一组Mel滤波器进行滤波,这些滤波器的中心频率和带宽按照Mel尺度分布。
  4. 取对数:对Mel滤波器输出的能量取对数,得到Mel频谱图。

现代应用与未来发展

现代应用

如今,Mel频谱图在很多领域中有着广泛的应用:

  1. 语音识别:Mel频谱图是许多语音识别系统中的关键特征表示。结合深度学习技术,Mel频谱图可以作为输入特征用于训练模型,提高语音识别的准确性。

  2. 音乐信息检索:在音乐分类、音乐推荐和音频检索中,Mel频谱图用于提取音频特征,帮助系统理解和分类音乐内容。

  3. 语音合成:在文本到语音(TTS)系统中,Mel频谱图可以作为中间表示,将文本转换为语音信号。

  4. 音频分类:在各种音频分类任务中,Mel频谱图提供了有效的特征表示,用于识别和分类不同的音频信号。

未来发展

随着深度学习和人工智能技术的发展,Mel频谱图的应用前景愈发广阔。一些可能的发展方向包括:

  1. 更高效的特征提取方法:研究新的方法以更高效地提取Mel频谱图特征,提升计算效率和特征表示能力。

  2. 多模态融合:将Mel频谱图与其他模态的数据(如图像、文本)结合,提升综合分析和处理能力。

  3. 自监督学习:利用自监督学习方法,在没有大量标注数据的情况下,从大量未标注的音频数据中学习有效的特征表示。

总结

Mel频谱图作为一种有效的音频信号表示方法,从其提出到如今,经历了多年的发展和应用。其在语音识别、语音合成和音频分类等领域中发挥了重要作用。随着技术的进步,Mel频谱图的应用前景将更加广阔,推动音频信号处理领域的发展。

import torch
from vocos import Vocos
import scipy.io.wavfile as wavfile# 加载预训练的Vocos模型
vocos = Vocos.from_pretrained("charactr/vocos-mel-24khz")# 创建随机的Mel频谱图
mel = torch.randn(1, 100, 256)  # B, C, T# 使用Vocos模型解码生成音频
audio = vocos.decode(mel)# 将音频数据从tensor转换为numpy数组,并确保数据格式正确
audio_np = audio.squeeze().cpu().numpy()# 保存音频为WAV文件
sample_rate = 24000
wavfile.write("output.wav", sample_rate, audio_np)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隆尧县“隆品佳尧”区域公用品牌发布推介会暨地标之都七月选品会成功举办

在国家乡村振兴战略与农业现代化建设的大背景下,隆尧县凭借其得天独厚的地理优势和丰富的自然资源,正在成为区域经济与品牌建设的一颗新星。为了进一步推动隆尧县的农业发展和乡村建设,由隆尧县商务局指导、隆尧县电子商务公共服务中心主办的…

在线医疗系统2024()

下载在最后 技术栈: ssmmysqljsp 展示: 下载地址: CSDN现在上传有问题,有兴趣的朋友先收藏.正常了贴上下载地址 备注:

计算机基础(day1)

1.什么是内存泄漏?什么是内存溢出?二者有什么区别? 2.了解的操作系统有哪些? Windows,Unix,Linux,Mac 3. 什么是局域网,广域网? 4.10M 兆宽带是什么意思?理论…

2024年阿里最新软件测试面试题:Web 测试+接口测试+App 测试

又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为软件测试工程师的我们唯有不停的学习,不断提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里,字节跳动,…

C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测

Winfor Tcp通信(服务端) 今天给大家讲一下C# 关于Tcp 通信部分,这一块的教程网上一大堆,不过关于掉网,异常断开连接的这部分到是到是没有多少说明,有方法 不过基本上最多的两种方式(1.设置一个超时时间,2.…

SpringDataJPA(一):ORM思想和hibernate以及JPA的概述和基本操作

传统jdbc引出的问题: 主要目的:操作实体类就相当于操作数据库表 建立两个映射关系: 实体类和表的映射关系实体类中属性和表中字段的映射关系不再重点关注:sql语句 一、ORM概述 ORM(Object-Relational Mapping&#…

YOLO v8目标检测(三)模型训练与正负样本匹配

YOLO v8目标检测 损失函数理论 在YOLO v5模型中,cls, reg, obj代表的是三个不同的预测组成部分,对应的损失函数如下: cls: 这代表类别预测(classification)。对应的损失是类别预测损失(loss_cls&#xff…

简单快速收集_安居客二手房小区数据

安居客二手房小区全国实时数据,含小区名称、价格、地区、地址、商圈、标签、经纬度、物业类型、交易权属、竣工时间、产权年限、开发商、总户数、总建面积、绿化率、容积率、统一供暖 供水供电、停车位、停车费、物业费、物业公司 车位管理费、在售房源、在租房源 …

B端:导航条就框架提供的默认样式吗?非也,看过来。

导航条不一定必须使用框架提供的默认样式,你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件,你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们,可以让设…

论文解读:DiAD之SG网络

目录 一、SG网络功能介绍二、SG网络代码实现 一、SG网络功能介绍 DiAD论文最主要的创新点就是使用SG网络解决多类别异常检测中的语义信息丢失问题,那么它是怎么实现的保留原始图像语义信息的同时重建异常区域? 与稳定扩散去噪网络的连接: S…

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transfor…

skynet 入门篇

文章目录 概述1.实现了actor模型2.实现了服务器的基础组件 环境准备centosubuntumac编译安装 ActorActor模型定义组成 Actor调度工作线程流程工作线程权重工作线程执行规则 小结 概述 skynet 是一个轻量级服务器框架,而不仅仅用于游戏; 轻量级有以下几…

C语言百分号打印器

目录 开头程序程序的流程图程序输入与输出的效果例1输入输出 例2输入输出 例3输入输出 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来看一下我用C语言编译的百分号打印器和与之相关的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <…

【RabbitMQ】MQ相关概念

一、MQ的基本概念 定义&#xff1a;MQ全称为Message Queue&#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件。它允许应用程序通过读写队列中的消息来进行通信&#xff0c;而无需建立直接的连接。作用&#xff1a;主要用于分布式系统之间的通信&#x…

CANoe在使用时碰到的一些很少见的Bug

CANoe作为一款成熟且稳定的总线仿真与测试工具&#xff0c;深受汽车工程师们的喜爱。CANoe虽然稳定&#xff0c;但作为一个软件来说&#xff0c;在使用中总会出现一些或大或小的Bug。最近全球范围内的大规模蓝屏事件&#xff0c;是由某个安全软件引起的。而很多CANoe使用者最近…

【中项】系统集成项目管理工程师-第7章 软硬件系统集成-7.2基础设施集成

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames&#xff1f;2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…

Kafka消息队列

目录 什么是消息队列 高可用性 高扩展性 高可用性 持久化和过期策略 consumer group 分组消费 ZooKeeper 什么是消息队列 普通版消息队列 说白了就是一个队列,生产者生产多少,放在消息队列中存储,而消费者想要多少拿多少,按序列号消费 缓存信息 生产者与消费者解耦…

VulnHub靶机入门篇--Kioptrix4

1.环境配置 下载地址&#xff1a; https://download.vulnhub.com/kioptrix/Kioptrix4_vmware.rar 下载完解压之后是一个vdmk文件&#xff0c;我们需要先创建一个新的虚拟机&#xff0c;将vdmk文件导入就行了 先移除原先硬盘&#xff0c;然后再进行添加&#xff0c;网络连接为…

EV代码签名证书具体申请流程

EV&#xff08;扩展验证&#xff09;代码签名证书是一种用于对代码进行数字签名的安全证书&#xff0c;它可以帮助用户验证软件发布者的身份&#xff0c;并确保软件未被篡改。对于Windows硬件开发者来说&#xff0c;这种证书尤其重要&#xff0c;因为它可以用来注册Windows硬件…