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


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

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

    语音识别预处理

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

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

    关于第1步,首尾端点检测其实就是为了检测在一段语音(一般有多帧)中开始和结束的位置,方便我们分析。其需要统计帧的累积能量以及该帧中过零点的个数,过零点定义如下,直观理解下,开始位置的能量会增高,同时过零点数目变多;结束的位置的能量会降低,同时过零点数量也会降低。
    在这里插入图片描述
    找starting point, 假设一帧the time frame length =20 ms, and non-overlapping =10 ms,需要统计出连续帧(比如3个连续帧)的能量energy以及过零点数目zero crossing count,当这连续帧的能量和过零点都超过某个阈值,则可认为当前第一帧的第一个时间点,为starting point。
    当3个连续帧,第一个帧id=32,找starting point的流程如下:

    if (
    
    E(i=32)> e_threshold  and ZC(i=32) > zc_threshold ) and
    
    and (E(i=33)> e_threshold  and ZC(i=33) > zc_threshold) and
    
    and (E(i=34)> e_threshold  and ZC(i=34) > zc_threshold)
    
    ) then the starting time (in seconds) of the 32th frame is the starting point
    
    其中一帧的能量E(i)=0.5*sum(s(k)*s(k))
    

    找ending point就是找连续低于阈值的时候。

    关于第2,3步,在我之前CMSC5707的文章中有讲到。

    关于第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.

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

  • 相关阅读:
    【C/C++笔试练习】内联函数、哪些运算符不能重载、拷贝构造函数、const类型、函数重载、构造函数、空类的大小、井字棋、密码强度等级
    关于QUERY_ALL_PACKAGES权限导致Google下架apk
    python+nodejs+vue社区志愿者活动报名服务管理系统源码
    清空flowable的表定义的相关表
    Android项目---拼图小游戏(下)
    江苏大学计算机考研资料汇总
    这是什么代码你绝对看不懂
    八、mysql语句的DDL语句
    【分布式事务】
    Git 学习笔记 | 安装 Git 及环境配置
  • 原文地址:https://blog.csdn.net/qq_44036439/article/details/127027505