基于基音周期模型的语音识别_毕业设计论文(编辑修改稿)内容摘要:
考虑的问题是窗的问题,使用一个窗函数,令窗不动,而语音信号移动,这就是经典的短时自相关函数法。 一般认为窗长至少应大于两个基音周期。 窗长应该选的更长一些,避免第一最大峰值点与基音周期不一致,窗长长了就可以更清楚的了解自相关函数的波形,更有利于检测。 计算起来不 方便,近年来高速数字信号处理器 (DSP)的使用,使让这一算法简单有效。 N 越小,误差越大,好处是运算时较简便。 所以要选择适当的 N 值。 用短时平均能量进行清 /浊音的判断 在基音检测的同时,应进行清 /浊音判断,因为可将浊音 /清音特征看作与周期 /非周期相同的特征,所以可以简化问题,浊 /清音往往按自相关函数和预测误差的自相关函数的峰值来决定。 但是在无周期性的有声区内,这种方法不能起作用,所以就经常采用其他的参数来提高精确度。 辅助参数主要有 :语音信号能量;过零数;自 相关函数;线性预测系数。 下面采用语音信号能量法: 语音信号 { x ( n) } 的某帧信号的短时平均能量 En 的定义为 : 攀枝花学院本科毕业设计(论文) 2 基音检测常用的算法 7 nNnm mnwmxEn 12)]()([ () 式中 ,w ( n) 为窗函数。 N 为窗长。 令 h( n) = w2 ( n) ,则有 )(*)()( 212 nhnxmnhmxE Nnmn ) 窗口加权短时平均能量 En, 冲激相应 h(n)的选取 直接影响着短时能量的计算。 通常 N的选择与语音的基音周期相关联系,一般要求窗长为几个基音周期的数量级。 由于语音基音频率范围为 50Hz到 500Hz,因此折中选择帧长为 10到 20ms。 通过En的高低来判定浊音向清音的转化。 语音信号的分帧是采用可移动的有限长度的窗口进行加权来实现。 选择的原则是:使得短时能量既能及时跟踪语音能量的缓变规律,同时又对语音振幅一个基音周期内的瞬时变化有显著平滑的作用。 本算法中窗口选择矩形窗: 1, 0nN1 W(n)= ( ) 0, 其他 图 (a)原信号 (b)自相关函数攀枝花学院本科毕业设计(论文) 2 基音检测常用的算法 8 图 (a)原信号 (b)自相关函数 短时自相关函数的算法是基音周期估计常用的方法,特别适用于噪声环境下的基音提取。 语音的浊音信号具有准周期性,所以在自相关函数基音周期的整数倍的地方取最大值,计算相邻两个最大峰值之间的距离,就可以估计出基音周期。 观察浊音信号的自相关函数图,实际上,真正反映基音周期的只是少数几个峰,其它的多数峰都是由于声道的共振特性引起的。 由于丰富的谐波成分使得语音信号波形变得复杂。 常常会出现检测的结果是实际结果的 2 倍或者 1/2,就使得基音检测相当困难。 如图 (a)是一帧的原始语音信号, (b)是经过自相关函数的语音信号,可以看出峰值是自相关函数在基音周期处,峰值点之间的间隔的平均值就是基音周期,如图 (b)所示可以看出自相关函数检测出的基音周期是原始信号基音周期的一半,因为谐波峰值点 (箭头所示 )的影响,就会出现上述缺点中所说的倍频现象。 平均幅度差函数法 短时平均幅度差函数的介绍,如果信号 x(n)是标准的周期信号,则相距为周期的整数倍的样点上的幅度值是相等的,二者差值为零。 对于浊音信号,在周期整数倍上,这个差值不为零,但也小,就 可以采用计算短时平均幅度差函数中两相邻谷值间的距离进行基音周期估值。 这里使用修正的短时平均幅度差函数加矩形窗,定义为: ,1,0,)()()( 10 Nn nxnxFn ..., N1 ( ) 攀枝花学院本科毕业设计(论文) 2 基音检测常用的算法 9 如果 x(n)具有周期 = P, 2P, ...时, Fn( )具有最小值。 因 为 ()nF只需加、减法和取绝对值等的计算,比较简单。 很容易在硬件上实现,所以使得短时平均幅度差函数法在基音检测中使用得相对比较普遍。 实验证明:静音环境环境下或是噪声较小时, AMDF 法的检测结果比较好;语音环境恶劣或信噪比较低情况下,检测的效果就比较差,准确度不高。 如图 (a)是一帧原始语音信号, (b)是这帧语音信号 的 AMDF 函数,从图中能看出 AMDF 法在基音周期处表现为谷低,通过计算这些谷低之间的间隔的平均值就可以得到基音周期。 如图 (a)是在这帧语音信号中加入信噪比是 2dB 噪声后所得到的波形,由图 (b)看出来了它的平均幅度差函数中有很多谐波分量,基音峰值点受到这些谐波分量的很大影响,在基音周期的判断时就有出入。 图 ( a)原信号 (b)平均幅度差函数 攀枝花学院本科毕业设计(论文) 2 基音检测常用的算法 10 图 (a)加噪信号 (b) 平均幅度差函数 本章小结 对于语音信号在检测之前先进行预处理即利用中心削波处理,然后详细讲解了 ACF,AMDF 的基音检测算法。 自相关函数先进行基音周期估计时先分清浊音和清音,再去寻找的是最大峰值点的位置,而 AMDF 寻找的是它的最小谷值点的位置;自相关函数法具有很好的抗噪性,但易受半频、倍频错误影响,而平均幅度差函数法只需加法、减法和取绝对值等计算,算法简单,运算量相比自相关函数法大为减少,易于硬件实现。 两种算法对纯净的语音 信号都能取得较好的检测精度但是由于语音信号的复杂多变,以及噪声等因素的影响,这些方法都有一定的局限性。 基于语音信号短时平稳性,它们的优点 是比较简单,主要应用于只需要平均基音周期作为参数的语音识别。 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 11 3 基于 Matlab 基音周期的检测 语音文件的录制与读入 1. 利用 windows 附件中的录音机功能录制 23 秒的 .wav 语音文件,并以 a 为文件名保存到 Matlab/work 的文件夹中。 : 开始 /程序 /附件 /娱乐 /录音机。 “我 到北京去” 录音(按 键),然后到 23 秒时停止(按键); C:/Matlab/work 中,文件名为 , ,采样频率选 11KHz, 16 位,单声道; 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 12 2. 打开 Matlab 并新建一 .m文件; .m文件中用 y=wavread(‘’)命令读入语音文件。 语音信号的采样和分帧 语音在 Matlab上的实现:以 ,在 Matlab上进行语音的采样与分帧。 打开 Matlab并新建一 .m文件,运行: x=wavread(39。 39。 )。 %读取声音文件 figure(1)。 stem(x,39。 .39。 )。 %显示声音信号的波形 得到的波形如下: “采样”是指从语音信号中选取一段样本,一般取样点数为帧长的整数倍。 短时分析是将语音信号分为一段一段的来处理,每一段就称为一“帧”。 分帧时需要对语音信号进行加窗操作,窗口长度的选择非常重要,窗口长度过短 会使得分析窗内没有包含足够的数据点来进行周期判断,且短时能量变化剧烈;窗口长度过长,短时能量是一段长时间的平均,不但不能反映出语音信号基频的细节变化部分,而且使得计算量增大。 窗口长度至少要大于基音周期的两倍。 一般窗长选为 120240点,分帧模块主要完成将取样模块中获得的语音样值点分为若干个语音帧。 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 13 图 a1原始语音波形 对语音信号采样,通过 matlab对语音文件“ ”计算得知其语音长度为,若采样频率为 11KHz,共计 27500个采样点。 采样模块从采样频率为 11KHz的语音信号中截取 1秒到 2秒这一时间段, 取了 11000个样点进行分析,取帧长为20ms,即每帧为 220个样点值,共分为 50帧。 打开 Matlab,运行: x=wavread(39。 39。 )。 %读取声音文件 x=x(11001:220xx)。 figure(1)。 stem(x,39。 .39。 )。 %显示声音信号的波形 得到波形如下: 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 14 图 a1采样信号波形 中心削波法的程序及其波形图: a=wavread(39。 39。 ); L=length(x)。 m=max(a)。 for i=1:L a(i)=a(i)/m。 end m=max(a)。 n=min(a)。 ht=(m+n)/2。 for i=1:L。 a(i)=a(i)ht。 end figure(1)。 subplot(2,1,1)。 plot(a,39。 k39。 )。 axis([0,1711,1,1])。 title(39。 中心削波前语音波形 39。 )。 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 15 xlabel(39。 样点数 39。 )。 ylabel(39。 幅度 39。 )。 coeff=。 th0=max(a)*coeff。 for k=1:L。 if a(k)=th0 a(k)=a(k)th0。 elseif a(k)=(th0)。 a(k)=a(k)+th0。 else a(k)=0。 end end m=max(a)。 for i=1:L。 a(i)=a(i)/m。 end subplot(2,1,2)。 plot(a,39。 k39。 )。 axis([0,1711,1,1])。 title(39。 中心削波后语音波形’); xlabel(39。 样点数 39。 )。 ylabel(39。 幅度 39。 )。 得到的结果如下: 攀枝花学院本科毕业设计(论文 ) 3 基于 Matlab 基音周期的检测 16 图 中心削波前和中心削波后的波形 语音信号基音周期的检测 短时自相关函数法检测基音周期 对每一帧信号进行自相关运算程序如下: x=wavread(39。 39。 )。 n=220。 %取 20ms的声音片段,即 220个样点 for m=1:length(x)/n。 %对每一帧求短时自相关函数 for k=1:n。 Rm(k)=0。 for i=(k+1):n。 Rm(k)=Rm(k)+x(i+(m1)*n)。基于基音周期模型的语音识别_毕业设计论文(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。