输入语音信号 设定一个门限delta x(j)+x(j+1)<0&abs(x(j)-x(j+1))>delta? j=j+1 否 是 zcr(i)=zcr(i)+1 图3.4 短时过零率流程图
在计算流程中,可以设置门限delta=0.02。这个门限可以进行细微的调整,通过该流程并编写相应的代码可以得到图3.5波形。
与原始语音信号波形一起可以看到,语音信号声母部分的幅度虽然比较低,但是其过零率的数值却很高,峰值将近50,而在其后面的韵母部分过零率则比较低,在20左右。
16
图3.5 过零率波形图
因此,在实际应用中,一般都是利用过零率来监测清音,利用短时能量来监测浊音,两者配合起来则实现可靠的端点检测。用得比较多的是一种双门限的算法。在过零率的程序中,为了后面处理方便,通常将读取的语音信号进行归一化,即:
x=x./max(abs(x));
然后再计算语音信号的短时能量和过零率,而该程序用了两重循环,影响了运算速度,为了提高算法的效率,通常采用一种矢量化的计算方法,如下: tmp1= enframe(x(1:end-1), FrameLen, FrameInc); tmp2= enframe(x(2:end), FrameLen, FrameInc); signs = (tmp1.*tmp2)<0; diffs = (tmp1 -tmp2)>0.02; zcr = sum(signs.*diffs, 2);
以上代码中,tmp1和tmp2都是由x得到,但是相互之间相差一个采样点,signs为符号数组,用于存储相邻两个采样点的符号是否相同,也就是说是否穿越零电平。diffs用来度量相邻两个采样点之间的距离,如果距离大于所设置的门限即0.02,则为1,否则为0。最后将两个矩阵点相乘就可以得到满足两个条件的采样点矩阵。然后将其按帧求和,就可以得到过零率。 3.2.3 端点检测的流程
前两小节均介绍了语音端点检测两点主要算法,其检测流程如图3.6所示。
进入状态status开始检测 17
调整能量门限 设置短时能量高、低门限 设置短时过零率高、低门限 语音信号 输入 归一化 计算短时能量 计算过零率
图3.6 端点检测算法流程图
检测之前,先为短时能量和过零率分别确定两个门限。一个是比较低的门限,其数值比较小,对信号的变化能够敏感,很容易就会被超过;而另一个是比较高的门限,数值要求比较大,信号要达到一定的强度,该门限才可能被超过。不过,低门限被超过未必就是语音的开始,有可能是时间很短的噪声引起的。高门限被超过的话则可以基本确定是由于语音信号引起的。
然后计算短时能量及过零率,并调整好能量门限,接下里进入到最关键的一步,即变量status分析,status可以分为四种状态,如图3.7所示。
{0,1} 2 3 status 图3.7 status分析
(1)在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。即status {0,1}状态;(2)在过渡段,由于参数的数值小,不能确定是否处于真正的语音段,所以只要当两个参数的数值都回落到低门限以下,就要将当前状态恢复到静音状态,但是如果在过渡段中两个参数中的任何一个超过了高门限,那么就可以确定进入语音段了。即status 2状态;(3)结束段,即status 3状态。
注意:一些突发性的噪声也会引起短时能量或过零率的数值变高,但是往往不能维持足够长的时间,比如门窗的开关、物体的碰撞等引起的噪声。这些都可以通过设置最短时间门限来判定。即当前状态如果处于语音段时,若两个参数的数值降低到最低门限以下,而且总的记时长度小于最短时间门限,那么认为这一段为噪声,然后继续扫描接下来的语音数据,否则就标记好结束端点并且返回。
4 语音信号非线性预测分析
4.1 概述
随着语音识别技术在各个国家的科学界受到重视,寻找一种与人耳相近的参数是每个科学家的目标,而近年来,一种能够比较充分利用人耳这种特殊的感知特性的参数得到
18
广泛应用,这种参数就是Mel尺度倒谱参数(Mel-scaled Cepstrum Coefficients),或称Mel频率倒谱参数,简称MFCC。同时,有一种与MFCC系数类似也是基于发音模型的LPCC系数,不过,LPCC参数没有充分利用到人耳的听觉特性,是一种线性系统。所以MFCC参数比LPCC参数更好地提高系统的识别性能。
本章主要介绍语音信号非线性预测分析(MFCC参数)的基本原理,算法流程及所涉及的参数。 4.2 MFCC的基本原理
在语音识别处理信号过程中,MFCC参数是按照帧计算的。其特征提取及计算过程如图4.1所示。
x(n) 预加重、分帧、加窗 端点 检测 DFT/FFT Mel频率 滤波器组 log 对数能量 DCT 求倒谱 图4.1 MFCC特征提取及计算流程
(1)预加重、分帧及加窗
在语音参数计算之前,一般要将其通过一个预加重滤波器,预加重目的是为了对语音的高频部分进行加重增加其高频分辨率,其函数为:
x=filter([1 -0.9375],1,x);
分帧操作主要是提取语音短时特性便于建模,一般取帧长30ms,帧移10ms;对于语音信号时域分析来说,窗函数的选择很重要,虽说矩形窗平滑比较好,但是容易丢失波形细节,并有可能造成泄漏现象。而Hamming窗可以有效的客服泄漏现象。所以在加窗方面常以Hamming窗为主,即:
(2)端点检测
端点检测是语音识别中的一个重要环节,有效的端点检测方法不仅可以减少数据的存储量和处理时间,还可以排除无声段的噪声干扰。而在第三章就详细介绍了基于短时能量和短时过零率的端点检测算法过程。可以参考下第三章的端点检测算法。
(3)FFT算法计算:在序列后补零以构成N=512点在进行离散FFT变换,第i帧语言的频谱为:错误!未找到引用源。。
19
(4)将上述线性频谱X(k,i)通过在频率范围内设置的若干个具有三角滤波特性的带同滤波器错误!未找到引用源。的Mel滤波器组得到Mel频谱。总传递函数为: 错误!未找到引用源。
(5)将对数能量谱S(k,i)经过离散余弦变换(DTC)即可得到Mel倒谱系数错误!未找到引用源。,M为滤波器的个数:错误!未找到引用源。。 4.3 实验结果
经过MFCC的基本原理分析编写相应的代码,然后通过MATLAB R011B运行附录中的代码。可以得到每一组数据的时域图、短时能量图及MFCC分析图,如图4.2所示。
从图中可以看出,在计算数字“1”的MFCC系数时,经过预处理,加窗,FFT算法及倒谱系数计算过后,其波形基本稳定在同一条线上。
图4.2 数字“1”的MFCC图
5 特定人语音识别算法-DTW算法
5.1 DTW算法原理
在孤立词语音识别中,最为简单有效的方法是采用DTW算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配为题,是语音识别中出现较早、较为经典的一种算法。用于孤立词识别,DTW算法与HMM算法在相同的环境条件下,识别效果相差不大,但HMM算法要复杂的多,这主要体现在HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需
20