当前位置: 首页 > news >正文

CMSC5707-高级人工智能之语音识别

文章目录

    • 语音识别预处理
    • 语音识别配对

这章是将前面学的一些处理综合起来,设计出一个语音识别系统,判断当前语音的匹配度。

很多知识是和我前面总结的CMSC5707是重合的,因此笔者只关注其中不太相同的部分。

语音识别预处理

进行语音识别的过程主要如下:

  1. 首尾端点检测 endpoint detection
  2. 预加重 pre-emphasis
  3. 加窗分帧 frame blocking and windowing
  4. 特征提取 feature extraction,在课间中用的是Mel频率倒谱系数(MFCC)特征提取。
  5. 失真测量 distortion measure

关于第4步,MFCC特征提取相当于在之前倒谱分析的过程中加入了一层Mel滤波,之前倒谱分析参考我的上一篇文章CMSC5707-高级人工智能之音频信号特征提取,加入Mel滤波的MFCC特征提取的步骤如下:

  1. 先对语音进行预加重、分帧和加窗(预处理,还未进入特征提取);
  2. 对每一个分帧窗口,通过傅立叶变换FFT得到对应的频谱;将上面的频谱通过Mel滤波器组得到Mel频谱;
  3. 在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征。通过Matlab的htk-mfcc tool可以从.wav文件中提取出13个MFCC系数组成的向量,第一个系数是关于这一帧的能量energy term,与波谱分析信息无关,因此取其中的第2个到第13个系数作为音帧的特征系数。
    在这里插入图片描述
    在这里插入图片描述
    关于第5步,就可以用上面提取出来的关于每一个frame的特征向量,衡量两个信号的差异。主要就是两个特征向量(c1,c2...c13)(c1',c2'...c13')分量差距的累加和。
    请添加图片描述

语音识别配对

在经过上面的预处理后,就可以进入语音识别阶段speech recognization了。针对已有的标准的样本(reference sample/ template sample)与一个待识别的输入(unknown input),已经可以计算出它们不同帧之间组成的差异矩阵distortion matrix了,问题是如何进行匹配,因为其中最难处理的就是不同语音之间的时间对齐,也就是不同语音对应音帧的时间是不完全相同的。课件中采取了一种动态规划Dynamic Programming的方法,进行弹性匹配,如下图所示。

在Accumulated distortion score matrix中找到累加差异的最小值optimal score,然后从这里开始回溯找到最佳匹配路径optimal path.
请添加图片描述
找到累加差异的最小值optimal score(最佳路径的终点)应该在最顶端一行top-row或者最靠近右边的一列right-most-column,其找到的最佳路径起点也应该在最底部一行bottom-row或者最靠近左边的一列left-most-cloumn的最小值。

但是也应该尽量让最佳匹配路径在下图中的白色区域,也就是最佳路径的终点也应在白色区域中。如果匹配的位置在黑色区域中,就会让匹配得到的输入未知序列input sequence和参考模板reference之间的长度差异过大,即使optimal score很小,这也不算是种好匹配。
请添加图片描述
习题1:
请添加图片描述
请添加图片描述
在有n个testing sample测试样本set B和有n个reference sample模板样本 set A的时候,我们可以通过绘制混淆矩阵,如下图,来表示每个测试样本和模板样本之间的差异,这也是最后在作业中展现结果的一种方式。混淆矩阵大小为n*n,每个格子填的是对应reference/input pair计算出来的累加差异的最小值optimal score.

由于测试样本和模板样本的特征表示都不一样,因此每个格子的值应该都不一样,但可以想到的是,对应同一类的声音,它们之间的差异值应该是最小的。
请添加图片描述

相关文章:

  • AES(对称加密)学习记录
  • 【技术推荐】WebLogic 反序列化漏洞深入分析
  • 提高 IDC 网络带宽利用率
  • JavaWeb综合案例(黑马程序员2021年JavaWeb课程总结,所有功能均实现,包含数据库sql文件)
  • 卫星通信系统按照工作轨道分类
  • JDBC在idea上的配置
  • Kotlin协程:MutableStateFlow的实现原理
  • ElasticSearch入门笔记
  • Pytorch 自动求导的设计与实现
  • 抖音怎么开启直播
  • 【Servlet】Servlet API
  • 关于makefile
  • C语言 变量的存储和引用,内部和外部函数
  • 仿真1 - takeoff_land
  • 基于C语言的图论汇编
  • “大数据应用场景”之隔壁老王(连载四)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C++类中的特殊成员函数
  • C++入门教程(10):for 语句
  • dva中组件的懒加载
  • ES6简单总结(搭配简单的讲解和小案例)
  • in typeof instanceof ===这些运算符有什么作用
  • Linux中的硬链接与软链接
  • Mysql数据库的条件查询语句
  • REST架构的思考
  • Spring Cloud Feign的两种使用姿势
  • vue2.0项目引入element-ui
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 高度不固定时垂直居中
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端性能优化——回流与重绘
  • 日剧·日综资源集合(建议收藏)
  • 一起参Ember.js讨论、问答社区。
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • ###C语言程序设计-----C语言学习(3)#
  • ###项目技术发展史
  • #{} 和 ${}区别
  • (3)(3.5) 遥测无线电区域条例
  • (8)STL算法之替换
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (全注解开发)学习Spring-MVC的第三天
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一一四)第九章编程练习
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)大型网站架构演变和知识体系
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net2005怎么读string形的xml,不是xml文件。
  • /proc/interrupts 和 /proc/stat 查看中断的情况