第13章 基于MATLAB的语音识别系统

  1. 对特征参数的要求:
    1)提取的特征参数能有效地代表语音特征,具有很好的区分性;
    2)各阶参数之间有良好的独立性;
    3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。
  2. 声带可以有周期振动也可以不震动,分别对应浊音和清音,而每段声管对应一个LPC模型的极点。
  3. 一般情况下,极点的个数在12~16个之间,就可以足够清晰地描述语音信号的特征了。
  4. LPC参数是模拟人的发音器官的,是一种基于语音合成的参数模型。
  5. 实际上在MATLAB中已经提供了计算LPC系数的函数,该函数的名字是lpc,它的语法为:
    a = lpc(x, n);
    其中,x为一帧语音信号,n为计算LPC参数的阶数。通常x为240点或256点的数据,n取10~12,对语音识别来说就已经足够了。
  6. 在语音识别系统中,很少直接使用LPC系数,而是由LPC系数推导出另一种参数:线性预测倒谱系数(LPCC)。
  7. 倒谱实际上是一种同态信号处理方法,标准的倒谱系数计算流程需要进行FFT变换、对数操作和相位校正等步骤,运算比较复杂。
  8. LPCC参数是一种非常重要的参数,它不是由原始信号x(n)得到,而是由LPC系数得到的。
  9. LPC模型是基于发音模型建立的,LPCC系数也是一种基于合成的参数,这种参数没有充分利用人耳的听觉特性。
  10. 实际上,人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数关系。
  11. 近年来,一种能够比较充分利用人耳这种特殊的感知特性的参数得到了广泛的应用,这就是Mel尺度频谱参数(Mel-scaled Cepstrum Coefficients)。或称Mel频率倒谱参数,简称MFCC。
  12. 大量研究表明,MFCC参数能够比LPCC参数更好地提高系统的识别性能。
  13. MFCC参数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:
  14. MFCC参数也是按帧计算的。首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。这需要在计算之前现在语音的频谱范围内设置若干个带通滤波器:
    M为滤波器的个数,通常取24;N为一帧语音信号的点数,为了计算FFT的方便,通常取N为256.滤波器在频域上为简单的三角形,其中心频率为fm,它们在Mel频率轴上是均匀分布的,在线性频率上,当m较小时,相邻的fm间隔很小,随着m的增加,相邻fm间隔逐渐拉开,另外在频率较低的区域,fm和f之间有一段是线性的。带通滤波器的参数事先计算好,在计算MFCC参数时直接使用。
  15. MFCC参数的计算通常采用如下的流程:
    1)首先确定每一帧语音采样序列的点数,本系统取N=256点。对每帧序列s(n)进行预加重处理后再经过离散FFT变换,取模的平方得到离散功率谱S(n);
    2)计算S(n)通过M个Hm(n)后所得的功率值,即计算S(n)和Hm(n)在各离散频率点上乘积之和,得到M个参数Pm,m=0,1,...,M-1;
    3)计算Pm的自然对数,得到Lm,m=0,1,...,M-1;
    4)对L0,L1,...,Lm-1计算其其离散余弦变换,得到Dm,m=0,1,...,M-1;
    5)舍去代表直流成分的D0,取D1,D2,...,DK作为MFCC参数。此处K=12。
  16. voicebox工具箱中提供了计算mfcc参数的函数:melcepst.m,其中调用了函数melbankm.m,用来计算M个滤波器的系数。
  17. melbankm.m的语法为:h=melbankm(m, n, fs);
    其中,m为滤波器的个数,n为语音帧长度,fs为采样频率。例如,设计一个滤波器组,包含24个滤波器,语音信号的帧长度为256,信号的采样频率为8000,所用命令为:
    **********************
    h = melbankm(24, 256, 8000);
    **********************
  18. 利用函数melcepst.m可以得到直接计算语音信号s的MFCC参数:
    c = melcepst(s, fs);
    这一命令默认地以256点为帧长计算12阶MFCC参数,如果s比较长,将会按照128点的间隔将s分为若干帧,再分别计算。
  19. melcepst.m在计算FFT之前,将自动把一帧数据(256点)乘以一个hamming窗,以克服Gibbs现象。
  20. 吉布斯现象Gibbs phenomenon(又叫吉布斯效应): 将具有不连续点的周期函数(如矩形脉冲)进行Fourier series (傅立叶级数)展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%。这种现象称为吉布斯现象。
  21. 完整的MFCC参数的计算流程如下:
    1)预加重滤波器
    在语音参数计算之前,一般要将其通过一个预加重滤波器,即:
    ********************
    x = filter([1 -0.9375], 1, x);
    ********************
    然后再计算MFCC参数,如:
    *****************
    y = melcepst(x, 8000);
    *****************
    如果x长度为14519个采样,这样得到的y为225*12,即x首先被分为225帧,然后为每帧计算12阶的MFCC参数。
    2)倒谱提升窗口
    在为每帧数据计算出K阶MFCC参数后,通常还要为这K个系数分别乘以不同的权系数,实际上是一个短的窗口。
    3)差分倒谱参数
    标准的MFCC参数只反映了语音参数的静态特性,而人耳对语音的动态特征更为敏感,通常用差分倒谱参数来描述这种动态特性。
    差分参数的计算采用下面的公式:

    这里c和d都表示一帧语音参数,k为常数,通常取2,这时差分参数就称为当前帧的前两帧和后两帧参数的线性组合。
    由此式计算得到的差分参数为一阶MFCC差分参数,用同样的公式对一阶差参数进行计算,可以得到二阶差分MFCC参数,实际使用中,将MFCC参数和各阶差分参数合并为一个矢量,作为一帧语音信号的参数。
    4)完整的MFCC参数算法
    综合上面的前处理和后处理,将MFCC参数的计算写在一个函数mfcc.m中,该函数只计算MFCC参数和一阶差分参数。下面是mfcc.m的代码:
    ************************************
    function ccc = mfcc(x)
    % 归一化mel滤波器组系数
    bank=melbankm(24,660,22000,0,0.5,'m');
    bank=full(bank);
    bank=bank/max(bank(:));
     
    % DCT系数,12*24
    for k=1:12
      n=0:23;
      dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));
    end
     
    % 归一化倒谱提升窗口
    w = 1 + 6 * sin(pi * [1:12] ./ 12);
    w = w/max(w);
     
    % 预加重滤波器
    xx=double(x);
    xx=filter([1 -0.9375],1,xx);
     
    % 语音信号分帧
    xx=enframe(xx,660,220);
     
    %计算每帧的MFCC参数
    for i=1:size(xx,1)
      y = xx(i,:);
      s = y' .* hamming(660);
      t = abs(fft(s));
      t = t.^2;
      c1=dctcoef * log(bank * t(1:129));
      c2 = c1.*w';
      m(i,:)=c2';
    end
     
    %差分参数
    dtm = zeros(size(m));
    for i=3:size(m,1)-2
      dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);
    end
    dtm = dtm / 3;
     
    %合并mfcc参数和一阶差分mfcc
    ccc = [m dtm];
    %去除首尾两帧,因为这两帧的一阶差分参数为0
    ccc = ccc(3:size(m,1)-2,:);
    ************************************
  22. 在孤立词语音识别中,最为简单有效的方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题。
  23. 用于孤立词识别,DTW算法与HMM算法在相同的环境条件下,识别效果相差不大,但HMM算法要复杂很多,这主要体现在HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算,所以在孤立词语音识别中,DTW算法仍得到广泛的应用。
  24. 参考模板与测试模板一般采用相同类型的特征矢量(如MFCC参数)、相同的帧长、相同的窗函数和相同的帧移。
  25. 假设测试和参考模板分别用T和R表示,为了比较它们之间的相似度,可以计算它们之间的距离D[T, R],距离越小则相似度越高。
  26. 为了计算这一失真距离,应从T和R中各个对应帧支架的距离算起,设n和m分别是T和R中任意选择的帧号,d[T(n), R(m)]表示这两帧特征矢量之间的距离,距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧式距离。
  27. 若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果N<M可以将T线性映射为一个M帧的序列,再计算与{R(1), R(2), ..., R(M)}之间的距离。但是这样的计算没有考虑到语音中各个段在不同情况下的持续时间会产生或长或短的变化,因此识别效果不可能最佳,因而更多地是采用动态规划(DP)的方法。
  28. 如果把测试模板的各帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(n, m)表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点记为测试和参考模板中进行举例计算的帧号,路径不是随意选择的,首先任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角触发,在右上角结束,DTW算法搜索路径如下图所示:
  • 17
    点赞
  • 204
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值