华南理工大学
《语音信号处理》实验报告
实验名称:DTW算法实现及语音模板匹配
姓名:
学号:
班级:10级电信5班
日期:2013年6 月17日
一、实验目的
运用课堂上所学知识以及matlab工具,利用DTW(Dynamic Time Warping,动态时间规整)算法,进行说话者的语音识别。
二、实验原理
1、语音识别系统概述
一个完整特定人语音识别系统的方案框图如图1所示。输入的模拟语音信号首先要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等,然后是参数特征量的提取。提取的特征参数满足如下要求:
(1)特征参数能有效地代表语音特征,具有很好的区分性;
(2)参数间有良好的独立性;
(3)特征参数要计算方便,要考虑到语音识别的实时实现。
图1 语音识别系统方案框图
语音识别的过程可以被看作模式匹配的过程,模式匹配是指根据一定的准则,使未知模式与模型库中的某一个模型获得最佳匹配的过程。模式匹配中需要用到的参考模板通过模板训练获得。在训练阶段,将特征参数进行一定的处理后,为每个词条建立一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音特征参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。
2、语音信号的处理
1、语音识别的DTW算法
本设计中,采用DTW算法,该算法基于动态规划(DP)的思想解决了发音长短不一的模板匹配问题,在训练和建立模板以及识别阶段,都先采用端点检测算法确定语音的起点和终点。
在本设计当中,我们建立的参考模板,m为训练语音帧的时序标号,M为该模板所包含的语音帧总数,R(m)为第m帧的语音特征矢量。所要识别的输入词条语音称为测试模板,短时傅里叶变换matlab程序n为测试语音帧的时序标号,N为该模板所包含的语音帧总数,T(n)为第n帧的语音特征矢量。参考模板和测试模板一般都采用相同类型的特征矢量(如LPCC系数)、相同的帧长、相同的窗函数和相同的帧移。
考虑到语音中各段在不同的情况下持续时间会产生或长或短的变化,因而更多地是采用动态规划DP的方法。把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些形成网格,网格的每一个交叉点(n,m)即表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法即可以归结为寻一条通过此网格中若干个点的路径。路径通过的格点即为此时与参考模板中进行距离计算的帧号。应当注意,路径不是随意选择的,选取的路径必定是从左下角出发,在右上角结束。
通常,规整函数被限制在一个平行四边形的网格内,如图2所示。它的一条边斜率为2,另一条边斜率为1/2。规整函数的起点是(1, 1),终点为(N,M)。DTW算法的目的是在此平行四边形内由起点到终点寻一个规整函数,使其具有最小的代价函数,保证了测试模板与参考模板之间具有最大的声学相似特性。
图2 匹配路径约束示意图
由于在模板匹配过程中限定了弯折的斜率,因此平行四边形之外的格点对应的帧匹配距离是不需要计算的。另外,因为每一列各格点上的匹配计算只用到了前一列的3个网格,所以没有必要保存所有的帧匹配距离矩阵和累积距离矩阵。充分利用这两个特点可以减少计算量和存储空间的需求,形成一种高效的DTW算法。图2中,把实际的动态弯折分为三段,(1,xa),(xa+1,xb),(xb+1,N),其中:
xa= (2M-N)/3, xb=2(2N-M)/3
xa和xb都取最相近的整数,由此可得出对M和N长度的限制条件:
2M-N≥3, 2N-M≥2
当不满足以上条件时,认为两者差别太大,则无法进行动态弯折匹配。在x轴上的每一帧不再需要与y轴上的每一帧进行比较,而只是与y轴上[ymin,ymax]间的帧进行比较,ymin和ymax的计算公式为:
ymin=x/2,0≤x≤xb,
2x+(M-2N),xb< x≤N
ymax=2x,0≤x≤xa,
x/2+(M-N/2),xa< x≤N
如果出现xa> xb的情况,则弯折匹配的三段为(1,xb),(xb+1,xa),(xa+1,N)。
对于x轴上每前进一帧,虽然所要比较的y轴上的帧数不同,但弯折特性是一样的,累积距离的更新都是用下式实现的:
D(x,y) = d(x,y)+min[D(x-1,y),D(x-1,y-1),D(x-1,y-2)]
号的短时能量或短时平均幅度就能够把语音段和噪声背景区分开。这是仅基于短时能量的端点检测方法。
信号{x(n)}的短时能量定义为:
语音信号的短时平均幅度定义为:
其中w(n)为窗函数。
2、短时平均过零率
短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。过零分析是语音时域分析中最简单的一种。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号称为过零。过零率就是样本改变符号次数。
信号{x(n)}的短时平均过零率定义为:
式中,sgn为符号函数,即:
过零率有两类重要的应用:第一,用于粗略地描述信号的频谱特性;第二,用于判别清音和浊音、有话和无话。从上面提到的定义出发计算过零率容易受低频干扰,特别是50Hz交流干扰的影响。解决这个问题的办法,一个是做高通滤波器或带通滤波,减小随机噪声的影响;另一个有效方法是对上述定义做一点修改,设一个门限T,将过零率的含义修改为跨过正负门限。
于是,有定义:
3、检测方法
利用过零率检测清音,用短时能量检测浊音,两者配合。首先为短时能量和过零率分别确定两个门限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音超过低门限,意味着信号开始。
此时整个端点检测可分为四段:静音段、过渡段、语音段、结束。实验时使用一个变量表示当前状态。静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。处于语音段时,如果两参数降低到门限以下,而且总的计时长度小于最短时间门限,则认为是一段噪音,继续扫描以后的语音数据,否则标一记结束端点。
三、实验数据及平台
本实验所采用的数据是录制的语音文件,平台是MATLAB。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论