Mel频谱和MFCC深入浅出

前言

在音频领域,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 X(m,k)2,STFT功率频谱
log ⁡ ( ∣ X ( m , k ) ∣ ) \log(|X(m,k)|) log(X(m,k)),STFT dB(分贝)频谱
<

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值