c++ 提取傅里叶描述子_AI大语音(四)——MFCC特征提取(深度解析)
![](/assets/blank.gif)
1 特征提取流程
在语音识别和话者识别方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients,简称MFCC)。
MFCC提取过程包括预处理、快速傅里叶变换、Mei滤波器组、对数运算、离散余弦变换、动态特征提取等步骤。
![](/assets/blank.gif)
![](/assets/blank.gif)
2 快速傅里叶变换
快速傅里叶变换即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。
FFT不是Fast FT,而是Fast DFT
FT的种类很多,以最简单的基于2的FFT为例。
FFT实际上一种分治算法。FFT将长度为
![](/assets/blank.gif)
步骤1:将信号
偶数样本点信号:
奇数样本点信号:
步骤2:将两个求和项理解成两个长度为
步骤3:FFT的具体计算过程
对于任意
对于任意
FFT共有
语音信号是有限长的离散信号。
预处理后的语音信号:
![](/assets/blank.gif)
FFT后效果:
![](/assets/blank.gif)
3 Mel滤波器组
将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为 。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图所示:
![](/assets/blank.gif)
三角带通滤波器有两个主要目的:
(1)三角形是低频密、高频疏的,这可以模仿人耳在低频处分辨率高的特性;
(2)对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。频谱有包络和精细结构,分别对应音色与音高。对于语音识别来讲,音色是主要的有用信息,音高一般没有用。在每个三角形内积分,就可以消除精细结构,只保留音色的信息。
(3)傅里叶变换得到的序列很长(一般为几百到几千个点),把它变换成每个三角形下的能量,可以减少数据量
Mel频率和频率f的对应关系:
![](/assets/blank.gif)
或者
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
Mel滤波器实现过程:
(1)确定最低频率(0HZ),最高频率(fs/2),Mel滤波器个数M(23);
(2)转换最低频率和最高频率的Mel(f);
(3)计算相连两个Mel滤波器中心Mel频率的距离,在Mel频率上,两两之间的中心频率是等间距的;
![](/assets/blank.gif)
(4)将各种中心Mel频率转化为频率f(非等间距);
(5)计算频率所对应的FFT中点的下标;
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
灵魂的拷问:为什么有些Mel滤波器组不等高,我设计的是等高的?这样有影响吗?有优势吗?
AI大语音:不等高的原因是乘了一个递减的系数,就是实现上一些细节的差别,保证了每个滤波器的能量和一样。横轴指的频率,低频的系数高,就是对低频更加的关注 。没有太大的影响,一般主要用等高的。
经过梅尔滤波器组后的Fbank特征:
![](/assets/blank.gif)
![](/assets/blank.gif)
4 对数运算
将原语音信号经过傅里叶变换得到频谱:
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变换后,卷积变成了乘法,取对数后,乘法变成了加法,把卷积信号转换成加性信号。
![](/assets/blank.gif)
5 离散余弦变换(DCT)
再在两边取逆傅里叶变换得到:
x[k]=h[k]+e[k]
在上一步中,我们成功地把基音信息与声道信息变成了加性的。那么如何分离呢?它们有如下性质:
频谱图中(注意是一帧FFT变换内)
(1)基音信息在频域是快速变化的。
(2)声道信息在频域是缓慢变化的。
因此再做一次DCT可以将其分离。我们称之为"倒谱域"。因此倒谱域的低频部分刻画了声道信息,高频部分刻画了基音信息。
![](/assets/blank.gif)
由此得到12维的MFCC特征:
![](/assets/blank.gif)
![](/assets/blank.gif)
由于许多要处理的信号都是实信号,在使用DFT时由于傅里叶变换时由于实信号傅立叶变换的共轭对称性导致DFT后在频域中有一半的数据冗余。
将DFT式子拆开,抽出实数部分:
![](/assets/blank.gif)
则实数部分:
![](/assets/blank.gif)
虚数部分:
![](/assets/blank.gif)
又有:
![](/assets/blank.gif)
而当x[n]是实偶信号时:
![](/assets/blank.gif)
把DFT写成:
![](/assets/blank.gif)
但是实际中并没有那么多实偶信号,我们就认为造出来。将信号长度扩大成原来的两倍,并变成2N,又为了让造出来的信号关于0对称,把整个延拓的信号向右平移 0.5 个单位,最终DCT变换公式:
![](/assets/blank.gif)
6 动态特征提取
标准的倒谱参数MFCC只反映了语音参数的静态特性,语音的动态特性可以用这些静态特征的差分谱来描述。实验证明:把动、静态特征结合起来才能有效提高系统的识别性能。差分参数的计算可以采用下面的公式:
![](/assets/blank.gif)
式中,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图:
![](/assets/blank.gif)
附录(魔鬼写手)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
——————
浅谈则止,细致入微AI大道理
扫描下方“AI大道理”,选择“关注”公众号
![](/assets/blank.gif)
欢迎加入!
![](/assets/blank.gif)
▼下期预告▼
AI大语音(五)——声学模型
▼往期精彩回顾▼
AI大语音(一)——语音识别基础
AI大语音(二)——语音预处理
AI大语音(三)——傅里叶变换家族
留你心,言你想
c++ 提取傅里叶描述子_AI大语音(四)——MFCC特征提取(深度解析)相关推荐
- 【AIGC】大模型协作系统 HuggingGPT 深度解析
欢迎关注[youcans的 AIGC 学习笔记]原创作品 [AIGC]大模型协作系统 HuggingGPT 深度解析 1. 摘要 2. 前言 3. HugginGPT 大模型协作系统 3.1 任务规划 ...
- 4大行业实战案例,深度解析数字化转型升级路径
本篇文章为亿信华辰<4大行业实战案例,深度解析数字化转型升级路径>视频直播稿件. 大家晚上好,欢迎来到小亿直播间!今天主讲的内容是以4个行业的典型应用为背景,给大家讲讲数字化转型的项目是 ...
- python gmm em算法 2维数据_AI大语音(六)——混合高斯模型(GMM)(深度解析)...
1 GMM基础 高斯混合模型(GMM)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况. 灵魂的拷问:为什么GMM可以拟合出 ...
- 利用函数wavread对语音信号进行采样_AI大语音(一)——语音识别基础(深度解析)...
1 声音特性 声音(sound)是由物体振动产生的声波.是通过介质传播并能被人或动物听觉器官所感知的波动现象.最初发出振动的物体叫声源.声音以波的形式振动传播.声音是声波通过任何介质传播形成的运动. ...
- c++ 提取傅里叶描述子_SQL 子查询的优化
子查询(Subquery)的优化一直以来都是 SQL 查询优化中的难点之一.关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受.当数据量稍大时,必须在优化器 ...
- c++ 提取傅里叶描述子_非谐声子模拟方法(Normal Mode Decomposition)
(本文是2018年"蓝火计划"的调研报告,有修改) 个人博客链接: 非谐声子模拟方法(Normal Mode Decomposition) 引言 固体中的格波由相互独立的简正模式组 ...
- c++ 提取傅里叶描述子_Matlab | 提取图像ROI任意形状
前言 本文给出在matlab中如何提取图像任意形状的感兴趣(ROI)区域的程序及分析. 程序 程序如下: clc;clear; I=imread('1.bmp'); % 读取一张图片 imshow(I ...
- 智能化、多模态、平民化,星环科技行业大模型、向量数据库深度解析
星环科技落地未来数据技术,实现数据处理智能化.多模态.平民化. 出品 | CSDN云计算 以ChatGPT为代表的超大语言模型的迅速应用,加速了AI普及,让AI伸手可及,并开始走进我们的工作和生活.毫 ...
- [ 网络协议篇 ] TCP三次握手四次挥手深度解析
很抱歉,今天本来是要更新应急响应的,一个ctlt+z让我在暂时放弃了 8900字,直接跳回2300字,今天没法沉下心去写了.为了写出来的文章品质更高,今天暂时不更新,毕竟应急响应后续是比较难的. 目录 ...
最新文章
- 构建根文件系统之busybox(一)浅析
- 转:概述RAID磁盘的IOPS
- Python精选库大全,建议收藏留用!
- formrules 表单验证限制最大值_HTML5表单
- OUTLOOK邮箱设置
- PHP面试题及答案(一)
- 以太网转串口方案总结
- 如何对网站服务器进行安全防护
- matlab has encountered,[万能解决问题]MATLAB has encountered an internal problem and needs to close....
- 多因子模型 —— 因子正交化处理
- OpenGL 亮度调节
- 电气器件系列二十四:电子式压力传感器PPG-D(1)
- 怎样在Mac上的Safari中观看YouTube画中画?
- 学生管理系统报错合集
- 电脑怎么录制屏幕视频,3种方法,轻松弄懂
- 惊了,近4成年薪50W+商科TOP1院校的生源都有哪些? | 北大光华2022级推免大数据
- [kernel 启动流程] 前篇——vmlinux.lds分析
- 计算机技术应用体验,2018教师信息技术应用体验学习个人心得体会2篇
- 解决桌面文件图标变黑方法
- python游戏开发超级玛丽,100%真实版
热门文章
- drools6.5_Drools 6.4.0.Final提供
- javafx css_JavaFX技巧13:研究Modena CSS文件
- 在Gradle中为JPMS构建Java 6-8库
- spring基于注释的配置_基于注释的Spring MVC Web应用程序入门
- 用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
- Java 8:长期支持的堡垒
- java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。
- Spring Boot和数据库初始化
- apache camel_REST端点,可使用Apache Camel进行集成
- morphia_Morphia和MongoDB:不断发展的文档结构