mfcc特征提取_AI大语音(四)——MFCC特征提取

本文详细介绍了MFCC特征提取在语音识别和说话者识别中的应用,包括预处理、快速傅里叶变换、梅尔滤波器组、对数运算、离散余弦变换和动态特征提取等步骤。通过MFCC,可以有效地提取语音信号的音色信息,降低数据量,提高识别性能。
摘要由CSDN通过智能技术生成

点击上方“AI大道理”,选择“置顶”公众号

重磅干货,细致入微AI大道理

 ——————

1 特征提取流程 42e915929b4c5ead037caef96b704631.png

    在语音识别和说话者识别方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients,简称MFCC)。

     MFCC提取过程包括预处理、快速傅里叶变换、Mei滤波器组、对数运算、离散余弦变换、动态特征提取等步骤。

c26a41c283bc355a3152146586abe45c.png

982ec1e8d6b711bedb9c97be7461d8f3.png

 2 快速傅里叶变换 42e915929b4c5ead037caef96b704631.png

    快速傅里叶变换即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。

    FFT不是Fast FT,而是Fast DFT 

    FT的种类很多,以最简单的基于2的FFT为例。

    FFT实际上一种分治算法。FFT将长度为74b8314a-825c-eb11-8da9-e4434bdf6706.svg的信号分解成两个长度为76b8314a-825c-eb11-8da9-e4434bdf6706.svg信号进行处理,这样分解一直到最后,每一次的分解都会减少计算的次数。理解FFT分以下三个步骤进行:

6e6024be3c0e94aeca2fae0b316b9a6c.png

步骤1:将信号78b8314a-825c-eb11-8da9-e4434bdf6706.svg分解成两个子信号
偶数样本点信号:79b8314a-825c-eb11-8da9-e4434bdf6706.svg
奇数样本点信号:7ab8314a-825c-eb11-8da9-e4434bdf6706.svg7bb8314a-825c-eb11-8da9-e4434bdf6706.svg

步骤2:将两个求和项理解成两个长度为76b8314a-825c-eb11-8da9-e4434bdf6706.svg的DFT

步骤3:FFT的具体计算过程

对于任意7db8314a-825c-eb11-8da9-e4434bdf6706.svg都要进行74b8314a-825c-eb11-8da9-e4434bdf6706.svg次加法操作,所以DFT共有80b8314a-825c-eb11-8da9-e4434bdf6706.svg次乘法操作。
对于任意7db8314a-825c-eb11-8da9-e4434bdf6706.svg都要进行83b8314a-825c-eb11-8da9-e4434bdf6706.svg次加法操作,DFT共有85b8314a-825c-eb11-8da9-e4434bdf6706.svg次加法操作。
FFT共有87b8314a-825c-eb11-8da9-e4434bdf6706.svg次乘法操作和88b8314a-825c-eb11-8da9-e4434bdf6706.svg次加法操作。

语音信号是有限长的离散信号。

预处理后的语音信号:

06f2c25624f4160c05f74a389faf2c62.png

FFT后效果:

77a4c8864898b83f79624768f28952cb.png

3 Mel滤波器组 42e915929b4c5ead037caef96b704631.png 将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有 M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为 。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图所示:

2622604c013b86a636025dfab8716a8d.png

三角带通滤波器有两个主要目的:

(1)三角形是低频密、高频疏的,这可以模仿人耳在低频处分辨率高的特性;

(2)对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。频谱有包络和精细结构,分别对应音色与音高。对于语音识别来讲,音色是主要的有用信息,音高一般没有用。在每个三角形内积分,就可以消除精细结构,只保留音色的信息。

(3)傅里叶变换得到的序列很长(一般为几百到几千个点),把它变换成每个三角形下的能量,可以减少数据量

Mel频率和频率f的对应关系:

5a8e373adfbbee39c4323b0c8b974ebf.png

或者

bd40539ad7bc82928cc928083b8c414e.png

4f007f5f9e41cc53e53f6ced44d29b19.png

8167d5e4f6f7f95e53c9b89b4b71b126.png

Mel滤波器实现过程:

(1)确定最低频率(0HZ),最高频率(fs/2),Mel滤波器个数M(23);

(2)转换最低频率和最高频率的Mel(f);

(3)计算相连两个Mel滤波器中心Mel频率的距离,在Mel频率上,两两之间的中心频率是等间距的;

65cfd673db97e213f36fe37d28394581.png

(4)将各种中心Mel频率转化为频率f(非等间距);

(5)计算频率所对应的FFT中点的下标;cfae8f95e9c24cd72f2b67adad6cfae8.png

db10fa1a7f68d4f6a4f9f5d91ad5f2fa.png

ea9b1f2475da27a10c38a0ee8c5379af.png

灵魂的拷问:为什么有些Mel滤波器组不等高,我设计的是等高的?这样有影响吗?有优势吗?

AI大语音:不等高的原因是乘了一个递减的系数,就是实现上一些细节的差别,保证了每个滤波器的能量和一样。横轴指的频率,低频的系数高,就是对低频更加的关注 。没有太大的影响,一般主要用等高的。

经过梅尔滤波器组后的Fbank特征:

1a473593a2f1542dbee8820e120e93a8.png

465c566637099722d6c83d6e755b4968.png

4 对数运算 42e915929b4c5ead037caef96b704631.png

将原语音信号经过傅里叶变换得到频谱:                                                        X[k]=H[k]E[k]

只考虑幅度就是:

                            |X[k] |=|H[k]||E[k] |

两边取对数:

              log||X[k] ||= log ||H[k] ||+ log ||E[k] ||

再在两边取逆傅里叶变换得到:

                                    x[k]=h[k]+e[k]

灵魂的拷问:为什么要进行对数运算?它在干嘛?

对数运算包括取绝对值和log运算。取绝对值是仅使用幅度值,忽略相位的影响,因为相位信息在语音识别中作用不大。

log运算是为了分别包络和细节,包络代表音色,细节带包音高,显然语音识别就是为了识别音色。另外,人的感知与频率的对数成正比,正好使用log模拟。

FFT变换后,卷积变成了乘法,取对数后,乘法变成了加法,把卷积信号转换成加性信号。

88153b08a0dc2a707dc75441a5deccd9.png

5 离散余弦变换(DCT) 42e915929b4c5ead037caef96b704631.png

再在两边取逆傅里叶变换得到:

                                    x[k]=h[k]+e[k]

在上一步中,我们成功地把基音信息与声道信息变成了加性的。那么如何分离呢?它们有如下性质:

频谱图中(注意是一帧FFT变换内)

(1)基音信息在频域是快速变化的。

(2)声道信息在频域是缓慢变化的。

因此再做一次DCT可以将其分离。我们称之为"倒谱域"。因此倒谱域的低频部分刻画了声道信息,高频部分刻画了基音信息。   

a1b6c90026081e9ddb1e1cbfb3094b78.png

由此得到12维的MFCC特征:

b082b64839711f7a968eede50afbe91f.png

c734ed695f519880d073f98acd211faf.png

 由于许多要处理的信号都是实信号,在使用DFT时由于傅里叶变换时由于实信号傅立叶变换的共轭对称性导致DFT后在频域中有一半的数据冗余。

    将DFT式子拆开,抽出实数部分:

33c0ced8ec173ce614538b2305f3b006.png

则实数部分:

9bb15de3606997ad4a874b6f31cf7175.png

虚数部分:

fd551cba8633966dbadb4336afa96d4c.png

又有:

77b19d9e9280c3c1aed92ce36822b88c.png

而当x[n]是实偶信号时:

2c5cf9f678eec890ed70b7261bff4625.png

把DFT写成:

4bb31fae7896d36d6c50a7568fe1b9d9.png

    但是实际中并没有那么多实偶信号,我们就认为造出来。将信号长度扩大成原来的两倍,并变成2N,又为了让造出来的信号关于0对称,把整个延拓的信号向右平移 0.5 个单位,最终DCT变换公式:

16b8037f1a4b84933e3204a0e73cd1a5.png

6 动态特征提取 42e915929b4c5ead037caef96b704631.png

标准的倒谱参数MFCC只反映了语音参数的静态特性,语音的动态特性可以用这些静态特征的差分谱来描述。实验证明:把动、静态特征结合起来才能有效提高系统的识别性能。差分参数的计算可以采用下面的公式:

e1138e4fedd0fd9b8e4975689b5cc26f.png

 式中,dt表示第t个一阶差分,Ct表示第t个倒谱系数,Q表示倒谱系数的阶数,K表示一阶导数的时间差,可取1或2。将上式的结果再代入就可以得到二阶差分的参数。

因此,MFCC的全部组成其实是由:N维MFCC参数(N/3 MFCC系数+ N/3 一阶差分参数+ N/3 二阶差分参数)+帧能量(此项可根据需求替换)。

这里的帧能量是指一帧的音量(即能量),也是语音的重要特征。

d_mfcc_feat = delta(wav_feature, 1)                     d_mfcc_feat2 = delta(wav_feature, 2) 

feature = np.hstack((wav_feature, d_mfcc_feat, d_mfcc_feat2))

最终39维MFCC图:

52e4c864f279a9e3340f2596a0050021.png

附录(魔鬼写手)

87f838d1e13d2f5018151219f7dbf897.png

ce287cbb4460f1780eb672a3032d2301.png

559dcf6758c34d1faad4e9a925872246.png

c3550c96f9640c8a444c625270da18cc.png

  9dce45773eda4c54ab8523ed44b43165.png

——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

16a6a4e2ce08be352f237186ce7147ae.png

           欢迎加入!

    7800804d2875232e7e1c1bec8c0f2e7d.png

▼下期预告▼ AI大语音(五)——声学模型▼往期精彩回顾▼ AI大语音(一)— —语音识别基础 AI大语音(二)——语音预处理 AI大语音(三)——傅里叶变换家族

                                                                          留你心,言你想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值