对特征参数的要求:

1)提取的特征参数能有效地代表语音特征,具有很好的区分性;

2)各阶参数之间有良好的独立性;

3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。

声带可以有周期振动也可以不震动,分别对应浊音和清音,而每段声管对应一个LPC模型的极点。

一般情况下,极点的个数在12~16个之间,就可以足够清晰地描述语音信号的特征了。

LPC参数是模拟人的发音器官的,是一种基于语音合成的参数模型。

实际上在MATLAB中已经提供了计算LPC系数的函数,该函数的名字是lpc,它的语法为:

a = lpc(x, n);

其中,x为一帧语音信号,n为计算LPC参数的阶数。通常x为240点或256点的数据,n取10~12,对语音识别来说就已经足够了。

在语音识别系统中,很少直接使用LPC系数,而是由LPC系数推导出另一种参数:线性预测倒谱系数(LPCC)。

倒谱实际上是一种同态信号处理方法,标准的倒谱系数计算流程需要进行FFT变换、对数操作和相位校正等步骤,运算比较复杂。

LPCC参数是一种非常重要的参数,它不是由原始信号x(n)得到,而是由LPC系数得到的。

LPC模型是基于发音模型建立的,LPCC系数也是一种基于合成的参数,这种参数没有充分利用人耳的听觉特性。

实际上,人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数关系。

近年来,一种能够比较充分利用人耳这种特殊的感知特性的参数得到了广泛的应用,这就是Mel尺度频谱参数(Mel-scaled Cepstrum Coefficients)。或称Mel频率倒谱参数,简称MFCC。

大量研究表明,MFCC参数能够比LPCC参数更好地提高系统的识别性能。

MFCC参数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:

MFCC参数也是按帧计算的。首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。这需要在计算之前现在语音的频谱范围内设置若干个带通滤波器:

M为滤波器的个数,通常取24;N为一帧语音信号的点数,为了计算FFT的方便,通常取N为256.滤波器在频域上为简单的三角形,其中心频率为fm,它们在Mel频率轴上是均匀分布的,在线性频率上,当m较小时,相邻的fm间隔很小,随着m的增加,相邻fm间隔逐渐拉开,另外在频率较低的区域,fm和f之间有一段是线性的。带通滤波器的参数事先计算好,在计算MFCC参数时直接使用。

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。

voicebox工具箱中提供了计算mfcc参数的函数:melcepst.m,其中调用了函数melbankm.m,用来计算M个滤波器的系数。

melbankm.m的语法为:h=melbankm(m, n, fs);

其中,m为滤波器的个数,n为语音帧长度,fs为采样频率。例如,设计一个滤波器组,包含24个滤波器,语音信号的帧长度为256,信号的采样频率为8000,所用命令为:

**********************

h = melbankm(24, 256, 8000);

**********************

利用函数melcepst.m可以得到直接计算语音信号s的MFCC参数:

c = melcepst(s, fs);

这一命令默认地以256点为帧长计算12阶MFCC参数,如果s比较长,将会按照128点的间隔将s分为若干帧,再分别计算。

melcepst.m在计算FFT之前,将自动把一帧数据(256点)乘以一个hamming窗,以克服Gibbs现象。

吉布斯现象Gibbs phenomenon(又叫吉布斯效应): 将具有不连续点的周期函数(如矩形脉冲)进行Fourierseries (傅立叶级数)展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%。这种现象称为吉布斯现象。

完整的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,:); ************************************

在孤立词语音识别中,最为简单有效的方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题。

用于孤立词识别,DTW算法与HMM算法在相同的环境条件下,识别效果相差不大,但HMM算法要复杂很多,这主要体现在HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算,所以在孤立词语音识别中,DTW算法仍得到广泛的应用。

参考模板与测试模板一般采用相同类型的特征矢量(如MFCC参数)、相同的帧长、相同的窗函数和相同的帧移。

假设测试和参考模板分别用T和R表示,为了比较它们之间的相似度,可以计算它们之间的距离D[T, R],距离越小则相似度越高。

为了计算这一失真距离,应从T和R中各个对应帧支架的距离算起,设n和m分别是T和R中任意选择的帧号,d[T(n), R(m)]表示这两帧特征矢量之间的距离,距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧式距离。

若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果N

如果把测试模板的各帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(n, m)表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点记为测试和参考模板中进行举例计算的帧号,路径不是随意选择的,首先任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角触发,在右上角结束,DTW算法搜索路径如下图所示:

matlab参数是差分的,第13章 基于MATLAB的语音识别系统相关推荐

  1. 基于matlab的talbot效应光栅的计算机模拟[1],基于matlab的talbot效应光栅的计算机模拟.doc...

    基于matlab的talbot效应光栅的计算机模拟.doc 30D0618F8C4DC3CCF74DBDD562A550D5PDF1基于MATLAB的TALBOT效应光栅的计算机模拟四川省通江县陈河小 ...

  2. matlab端到端仿真中基站功率,基于matlab的cdma通信系统分析及仿真

    基于matlab的cdma通信系统分析及仿真 毕业设计 I 摘 要 利用 MATLAB 平台的 SIMULINK 可视化仿真功能,结合 CDMA 的实际通 信情况,利用 MATLAB 组建出完整的 C ...

  3. 用matlab画单位冲激序列,实验一 基于Matlab的数字信号处理基本操作.doc

    实验一 基于Matlab的数字信号处理基本操作 信号来表示,自变量必须是整数. 离散时间信号的波形绘制在MATLAB中一般用stem函数.stem函数的基本用法和plot函数一样,它绘制的波形图的每个 ...

  4. 基于matlab的talbot效应光栅的计算机模拟[1],基于MATLAB的Talbot效应光栅的计算机模拟[1]...

    错误!未指定书签. 基于MATLAB的Talbot效应光栅的计算机模拟 四川省通江县陈河小学 张洪 摘要 计算机模拟技术广泛应用在教学和科研中,在Talbot效应实验中引入计算机能更深动和深入揭示光学 ...

  5. 基于matlab的模糊控制器的设计与仿真,基于MATLAB的模糊控制洗衣机的设与仿真详解.doc...

    基于MATLAB的模糊控制洗衣机的设计与 仿真 卫瑶瑶,王胜红 (南京农业大学工学院,210031) 摘要:根据模糊控制的原理对传统洗衣机进行改造,设计了模糊控制系统.通过MATLAB仿真,采用取最大 ...

  6. matlab 压缩感知矩阵_【精读】基于MATLAB的钢筋下料优化算法

    基于MATLAB的钢筋下料优化算法 摘要:运用MATLAB软件求解实际工程中一维钢筋下料优化的问题,提出了首先列举出单根原料分割的所有可行解,其次采用线性规划的方法求出理想条件下最优方案,最后通过整数 ...

  7. 基于MATLAB的声信号的采集与分析,基于Matlab的声音信号采集与分析处理

    2005年第6期 文章编号:100622475(2005)0620091202 计算机与现代化 JISUANJI YU XIANDAIHUA 总第118期 基于Matlab的声音信号采集与分析处理 陈 ...

  8. 基于matlab的三相电路短路,终稿毕业论文设计基于MATLAB的电力系统短路故障分析与仿真.doc最终版(备份存档)...

    <[毕业论文]基于MATLAB的电力系统短路故障分析与仿真.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)[毕业论文设计]基于MATLAB的电力系统短路故障分析与仿真.do ...

  9. matlab怎么绘制李萨如图形_基于MATLAB图形界面研究李萨如图形及其讨论

    龙源期刊网 http://www.qikan.com.cn 基于 MATLAB 图形界面研究李萨如图形及 其讨论 作者:刘斯禹 韩雪 郭天超 来源:<科技资讯> 2016 年第 06 期 ...

最新文章

  1. linux下常用命令之nc
  2. php一点通,编程一点通app-编程一点通官方版下载v1.0.1-七度网
  3. DEDECMS最新5.7版在Windows下的Memcache安装
  4. python操作docx学习资料
  5. 线程面试:生产者 消费者问题
  6. python中面向对象的ui_python中面向对象
  7. NSString的几种常用方法
  8. Ubuntu 开发者工具中心 Ubuntu Make
  9. 抽象类实现接口,子类继承抽象类,这三个之间的关系?
  10. Oracle P6 配置SQLServer数据库报FileStream错误
  11. 软件工程——题目及原型设计
  12. 基于javaee的社区医院远程挂号系统
  13. 三大运营商的网上流量卡数据对比,看看你会选哪一个?
  14. Mysql的主键和索引
  15. Axure 设计原型图 使用总结
  16. 对网页 ‘’为所欲为‘’ 之手动实现深色模式?
  17. virsh的详细命令解析
  18. ecshop 数据库调试技巧 【强烈推荐】
  19. 场景化组件开源,融云持续回馈开源生态
  20. kettle java环境变量,kettle环境变量配置

热门文章

  1. ES6之与Symbol.match
  2. 新药韦立得(TAF),乙肝抗病毒药是通过作用于病毒繁殖复制时期以杀死病毒
  3. 开源开放,共建开发者新生态 | 2022 开发者生态汇
  4. python中的继承冲突及继承顺序
  5. 线性代数学习笔记——行列式的性质及拉普拉斯定理——11. 拉普拉斯定理
  6. 工厂计算机管理需要会什么,工厂生产管理系统应该具备哪些功能?- 智造家
  7. 廖雪峰 JavaScript 学习笔记
  8. 2012年公司组织旅游西安线个人记录(repost)
  9. 28、JAVA进阶——网络和IP地址
  10. 阿里技术实战:数十万云服务器如何高效运维?