Mel频谱和MFCC深入浅出

2023-10-19 16:59
文章标签 深入浅出 频谱 mfcc mel

本文主要是介绍Mel频谱和MFCC深入浅出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 算法流程
      • 1. 预加重(Pre-emphasis)
      • 2. 分帧(Frame)
      • 3. 加窗(Window)
      • 4. 短时傅里叶变换(STFT)
      • 5. 滤波器组过程(Filter bank)
      • 6. 非线性校正(Rectification)
      • 7. 离散余弦变换(DCT)
      • 8. 能量和delta
  • 相关细节
      • 1. weight-A计权
      • 2. overlap重叠
      • 3. window窗函数
      • 4. rectification非线性校正
  • 各种刻度
      • 1. 其它刻度
      • 2. Gammatone filter
      • 3. 刻度频谱
      • 4. 可能的问题
  • 滤波器组
      • 1. 概念
      • 2. 归一化
      • 3. 不同的窗
      • 4. 加窗方式
  • 倒谱系数
      • 1. 概念
      • 2. 倒谱应用
      • 3. 延展
  • 方法论
      • 1. 大特征(big feature)式训练
      • 2. 内嵌式网络训练
  • 总结

前言

在音频领域,mel频谱和mfcc是非常重要的特征数据,在深度学习领域通常用此特征数据作为网络的输入训练模型,来解决音频领域的各种分类、分离等业务,如端点侦测、节奏识别、和弦识别、音高追踪、乐器分类、音源分离、回声消除等相关业务。

当然,针对深度学习音频领域的业务,不是用下这两个特征、选几个网络、打个标签,放数据训练就完事了, 仅仅基于mel频谱和mfcc这两个特征,解决好上述业务某些情况下还是远远不够的,熟悉这些特征的内在逻辑性、衍生细节和延展,才能更好的结合深度学习解决业务问题。

下面讲解mel频谱和mfcc特征的算法流程和一些细节、延展,这些细节从局部角度来看,都会影响到最终特征呈现的细节差异,这些差异放大到模型训练结果的准确性、鲁棒性上怎么样是非常值得研究的,某些情况下可能会有质的变化,质的变化无论正向还是负向都是值得关注的,最怕的是没变化;同时,一些问题的延展从广义角度来看,带来不同的特征组合、网络结构设计思考等也是解决业务问题非常重要的思想源泉。

算法流程

sr 为采样率,fftLength 为帧长度,slideLength 为滑动长度

下面是一张mel频谱和mfcc的大概算法流程图。

请添加图片描述

1. 预加重(Pre-emphasis)

如流程图所示的第1步,属于信号的预处理,补偿高频分量损失,提升高频分量,一般情况下可以忽略此步骤,属于信号的简单增强,对特征有一定的提升效果。公式如下

x [ n ] = x [ n ] − α x [ n − 1 ] x[n]=x[n]-\alpha x[n-1] x[n]=x[n]αx[n1]

α \alpha α一般取0.97
公式属于差分一阶即高通滤波器。

2. 分帧(Frame)

现实中大多数信号都是非平稳的,但大多数短时间内可以近似看做是平稳的,可以用短时傅里叶变换表现非平稳信号频域特征。 一般语音中采用10ms~30ms左右,乐音中可以更长一些64ms~256ms。

分帧涉及到前后重叠(overlap),一般情况下以滑动帧长的1/4或1/2(前后重叠3/4或1/2)进行,即 s l i d e L e n g t h = f f t L e n g t h 4 或 f f t L e n g t h 2 slideLength=\cfrac{fftLength}4或\cfrac{fftLength}2 slideLength=4fftLength2fftLength

3. 加窗(Window)

加窗目的是减少频谱泄露,降低泄漏频率干扰,提升频谱效果,默认不处理即加矩形窗(Rect),干扰泄漏较严重,一般情况下加Hann窗,针对大多数信号都有不错的效果。公式如下
w ( n ) = 0.5 ( 1 − cos ⁡ ( 2 π n N ) ) , 0 ≤ n ≤ N w(n)=0.5\left( 1-\cos \left(2\pi \cfrac n{N} \right)\right) , 0 \le n \le N w(n)=0.5(1cos(2πNn)),0nN

Hann为余弦窗,N表示阶数。

4. 短时傅里叶变换(STFT)

分帧加窗傅里叶变换即短时傅里叶变换。公示如下
X ( τ , f ) = ∫ − ∞ ∞ x ( t ) w ( t − τ ) e − j 2 π f t d t X(\tau,f)=\int_{-\infty}^\infty x(t)w(t-\tau)e^{-j2\pi f t}dt X(τ,f)=x(t)w(tτ)ej2πftdt
X ( m , k ) = ∑ n = 0 N − 1 x [ n ] W [ n − m ] e − j 2 π k n N X(m,k)=\sum_{n=0}^{N-1} x[n]W[n-m]e^{\frac{-j2\pi kn}{N} } X(m,k)=n=0N1x[n]W[nm]eNj2πkn

设数据长度为 dataLength
t = { ( d a t a L e n g t h − f f t L e n g t h ) s l i d e L e n g t h + 1 , 无填充 d a t a L e n g t h s l i d e L e n g t h + 1 , 填充 f f t L e n g t h t=\begin{cases} \cfrac{(dataLength-fftLength)}{slideLength}+1, &无填充 \\ \cfrac{dataLength}{slideLength}+1 , &填充fftLength\end{cases} t= slideLength(dataLengthfftLength)+1,slideLengthdataLength+1,无填充填充fftLength

STFT属于标准的数学变换,为复数域,尺寸为 t ∗ f f t L e n g t h t*fftLength tfftLength,为表示区分,一般的如 ∣ X ( m , k ) ∣ |X(m,k)| X(m,k)取模,尺寸为 t ∗ ( f f t L e n g t h / 2 + 1 ) t*(fftLength/2+1) t(fftLength/2+1) 表示为STFT频谱,有以下类型频谱。

∣ X ( m , k ) ∣ |X(m,k)| X(m,k),STFT幅值频谱
∣ X ( m , k ) ∣ 2 |X(m,k)|^2

这篇关于Mel频谱和MFCC深入浅出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241137

相关文章

深入浅出SRS—RTMP实现

RTMP 直播是 SRS 最典型的使用场景,客户端使用 RTMP 协议向 SRS 推流,使用 RTMP 协议从 SRS 拉流,SRS 作为一个 RTMP 直播服务器实现媒体的转发。同时,RTMP 是 SRS 的中转协议,其他协议之间的互通需要先转为 RTMP,因此,理解 SRS RTMP 直播实现是理解其他协议实现的重要前提。本文主要分析 SRS RTMP 直播功能的实现原理,相关概念和配置请参考

深入浅出Java垃圾回收机制

对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。   这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点

RS FPC1500 三合一频谱分析仪

R&S FPC1500  三合一频谱分析仪 XLT 简述 R&S FPC1500 具有三位一体特点:它是市场上少有集成三种仪器功能的频谱分析仪。而且,这些仪器正是 RF 工程师在物联网设备开发等过程中较常使用的三种仪器:频谱分析仪,网络分析仪,信号发生器。 主要特性 主要特性: 出色的射频性能,德国工程设计 10.1" WXGA(136

语音特征提取方法 (二)MFCC

下面总结的是第四个知识点:MFCC。因为花的时间不多,所以可能会有不少说的不妥的地方,还望大家指正。谢谢。         在任意一个Automatic speech recognition 系统中,第一步就是提取特征。换句话说,我们需要把音频信号中具有辨识性的成分提取出来,然后把其他的乱七八糟的信息扔掉,例如背景噪声啊,情绪啊等等。       搞清语音是怎么产生的对于我们理解语音有很大

matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。

下图窗2的频谱在周期化的时候应该是2(w-k*pi/T)我直接对2w减得写错了 可见这两个kaiser窗频谱不一样,采样间隔为2T的窗,频谱压缩2倍,且以原采样频率的一半周期化。 但是这两个不同的kaiser窗在频域采样点的值使完全一致的。这和matlab模拟dft的过程吻合 也说明不管原信号拉伸成什么样子,只要时域采样序列是一样的,变到频谱后再采样就是一样的频域序列。 (与原信号的

深入浅出Stream流

Java 8的新特性之一就是流stream,配合同版本出现的 Lambda ,使得操作集合(Collection)提供了极大的便利。 案例引入 在JAVA中,涉及到对数组、Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。 假设遇到了这么一个需求:从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个。

深入浅出Android中的MVP模式

MVP模式是在MVC模式的基础之上改进而来的。MVP模式分为:model,view,presenter三部分。三部分的关系如下图所示: 其中PresenterCompl实现IPresenter接口,PresenterCompl中的方法要改变view时通过调用IView中的方法来实现。Model层为PresenterCompl提供数据。 也就是说之前MVC中view的控制都是在activit

[Cocoa]深入浅出 Cocoa 之 Core Data(2)- 手动编写代码

深入浅出 Cocoa 之 Core Data(2)- 代码示例 罗朝辉( http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面 详细讲解了 Core Data 的框架以及设计的类,下面我们来讲解一个完全手动编写代码使用这些类的示例,这个例子来自苹果官方示例。在这个例子里面,我们打算做这样一件事情:记录程序运行记录(时间与 proc

带你深入浅出之QT编程:一、掌握信号与槽的奥秘

此为QT编程的第一谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点! 码农不易,各位学者学到东西请点赞支持支持! 开始部分: 总:信号与槽,简单来说:信号就是事件,槽就是函数。信号只需声明,不需要实现,槽函数需要实现。(重中之中,开发过程中贯穿此机制) 就像我去咖啡厅点餐(

GNN-频域-2014:Spectral Networks and Locally Connected Networks on Graphs(频谱图卷积神经网络)【第一篇从频域角度分析】

《原始论文:Spectral Networks and Locally Connected Networks on Graphs》 空域卷积非常直观地借鉴了图像里的卷积操作,但缺乏一定的理论基础。 而频域卷积则不同,相比于空域卷积而言,它主要利用的是**图傅里叶变换(Graph Fourier Transform)**实现卷积。 简单来讲,它利用图的**拉普拉斯矩阵(Laplacian ma