用Matlab编程实现语音信号的短时分析.doc

用Matlab编程实现语音信号的短时分析.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用Matlab编程实现语音信号的短时分析

目录 一、目的 2 二、原理及方法 2 三、实验步骤 2 四、实验结论与分析 2 五、心得体会 4 六、附录 4 用Matlab编程实现语音信号的短时分析 一、目的 1.在理论学习的基础上,进一步地理解和掌握语音信号短时分析的意义,短时时域分析的基 本方法。 2.进一步理解和掌握语音信号短时平均能量函数及短时平均过零数的计算方法和重要意义。 二、原理及方法 一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为主要成份的语音段),其能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。 三、实验步骤 (1)从网上找了一段录音,采样率为8KHZ,量化精度为16比特线性码。 (2)利用设计方案中给定的公式分别编程计算这段语音信号的短时能量、短时平均幅度、短时过零率,然后分别画出它们的曲线; (3)然后画出短时零能比曲线。 (4)根据上述结果判断找出其中的一帧浊音信号和一帧清音信号。判断依据是, 浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。浊音,取13270--13510个点,清音,取12120--12360个点。分别计算他们的短时自相关函数和平均幅度差函数; (5)根据图形,分析浊音段语音的基音周期。 四、实验结论与分析 (1)从图中明显可以看出,浊音信号的具有明显的周期性,其自相关函数和平均幅度差函数也表现出周期性。清音信号稍微差一点,但不是很明显,主要是由于清音信号的位置找的不是很好。 (2)浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。 (3)基音提取-消除共振峰的影响。从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。但是加一个60~500Hz的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。 (4)画出的波形如下所示: 图1为没有加窗nowindow.wav,,无滤波,图2为加窗后的语音信号为 havewindow.wav,有滤波。 图1没有滤波的第一列的图形从上到下分别表示:短时能量、短时平均幅度、短时过零 率和零能比曲线,第二列从上到下分别为浊音的短时自相关函数、短时平均幅度差函数和轻清音的短时自相关函数、短时平均幅度差函数。 图1 图2 五、心得体会 在本次的课程设计中,通过自己查找资料,修改程序,最后得出了基音频率。这种以实验方式学习的过程,加深了我对语音信号理论知识的理解,在设计中,也使我获得了很多新的知识,熟练对matlab的使用,对MATLAB的应用也更加熟练了。总的说来,这个实验在周老师的指导下完成,感谢周老师在这个课程教会了我们很多关于语音处理的知识。 六、附录 源程序: % 没有加窗nowindow.wav N=240 Y=WAVREAD(nowindow,[1 18000]); L=length(Y)%30秒,每秒8000个点,一共240000个点 LL=length(Y)/N %一共 1000帧 figure(1) set(1,Position,[10,35,350,650]) %短时能量 Em=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240); Em(ii)=sum(temp.*temp); end subplot(4,1,1) jj=[1:(LL-1)*240]; plot(jj, Em,b); grid % axis([12000,16000,0.15,0.4]) %短时平均幅度Mn=sum(abs(Y))/N Mn=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240); Mn(ii)=sum(abs(temp))/N; end figure(1) subplot(4,1,2) jj=[1:(LL-1)*240]; plot(jj, Mn,b); grid % axis([12000

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档