利用平均幅度差函数法进行基音周期估计_第1页
利用平均幅度差函数法进行基音周期估计_第2页
利用平均幅度差函数法进行基音周期估计_第3页
利用平均幅度差函数法进行基音周期估计_第4页
利用平均幅度差函数法进行基音周期估计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE6SpeechPitchPeriodEstimationBasedonAMDFAbstract:Pitchperiodisakeyparameterinspeechcompression,synthesisandrecognition.Thewell-knownAMDFisoftenusedtodeterminethisparameter.Butitiseasytomaketheestimatedpitchdoubled.Accordingtotheconventionalspeech-generatingmodeAMDF,thepaperreferstoanewspeechpitchdeterminationalgor-ithmwhichbasesonAMDF.Thenewmethodcanresolveboththeerrorbysearching"thefirsttrough"andthereduplicationbysearching"theminimaltrough".Itcanwinmoreaccurateresultsbyforecastingtherangeoftheroughvalue,makingandlinear-transformation.Thealgorithmnotonlysimplifiesthepitchdetection,butalsoefficie-ntlydecreasestheestimationerrorsandimprovestheprecisionofestimatedvalues.Keywords:averagemagnitudedifferencefunction(AMDF);pitchperiodestimation1引言基音是指发浊音时声带振动起的周期性,而基音周期是指声带振动频率的倒数。基音周期检测是语音信号处理中的重要工作之一。然而基音周期的精确检测实际上是比较困难的。这是因为声门激励信号并不是一个完全的周期序列,在语音开头和结尾部分不具有声带振动那样的周期性,清音和有些浊音的过渡帧很难判断有没有周期性;同时语音的共振峰会严重影响激励信号的谐波结构,因为语音信号本身是有音调变化的;另外人的基音周期变化范围比较大,从50Hz到500Hz。(a)简化的语音生成数学模型 与自相关法相比,AMDF方法具有运算量小、精度高等优点,在军用语音编码中得到广泛应用。但是在AMDF方法中,经常发生基音估计结果为实际基音周期的2倍,这不仅与语音信号波形复杂有关,还与短时AMDF函数的特性有关.短时AMDF函数随着滞后时间的增加,峰值幅度逐渐下降,这使得谷值点检测以及谷值点的清晰度检查比较困难,针对该问题,相关文献提出了不少改进方法。本文提出了一种改进的AMDF方法,它通过简单的预设谷值范围、线性变换等步骤实现了较精确的基音检测。2传统的AMDF函数与加权AMDF函数比较传统的平均幅度差函数(AverageMagnitudeDifferenceFunction,AMDF)是Ross等人于1974年提出的,其定义为:(1)其中s(n)为离散化的语音采样序列,当采用短时处理技术加方窗时,式(1)变为:(2)从式(2)可以看出计算的差值项是不同的,,随着k的增加,求和的差值项数将逐渐减少,结果导致峰值幅度随着滞后时间k的增加而逐渐下降,为了有效地改正这一缺点提出了加权的平均幅度差函数(W-AMDF):(3)(b)时域波形和及对应的传统AMDF(c)时域波形和及对应的加权AMDF3实验设计1)首先对装载后的原始语音信号进行分帧,在参数选择上使得帧长等于帧移,而且帧长控制在比较小的范围内。编写一个判断每帧语音信号短时能量的函数,统计分帧后的语音信号每帧的平均能量,由于静音帧和清音帧的能量较浊音帧的能量小,那么可以根据实验结果选择合适的平均能量阈值,当某帧的能量小于该阈值时可以认为这帧不含有基音周期信息,把该帧的帧号记录在一个数组中。(d)原始语音信号与去清音和静音后信号的比较2)对每帧信号经过短时能量判断后,根据数组记录的帧号对对应帧的内容作置零处理,然后把非零内容的帧组成一个新的语音,这时候可以认为新的语音信号中含有丰富的基音周期信息。(e)重新组成的语音信号3)然后对新生成的语音信号进行分帧,然后编写一个平均幅度差函数,语音信号的短时线性加权平均幅度差函法定义为:4)根据平均幅度差函数法原理,判断每帧信号的中的局部极小值,由于人的语音频率为50~500Hz,那么对应的极小值局部搜索范围为Fs/500~Fs/50(Fs是语音信号的取样频率)个取样点,那么三倍以及三倍以上周期的情况都已经被排除,如果是二倍周期,可以使当前帧的基音频率所对应的取样点与前一帧真确的基音频率所对应的取样点相减,得到当前帧的基音频率所对应的取样点,从而对野点进行了第一次剔除(X(n)为局部极小值对应的取样点数,NUM为X(n)不为零的总个数)0 (X(n)>Fs/50orX(n)<Fs/500)X(n)=|X(n)-X(n-1)| (round(X(n)/X(n-1))=2orround(X(n-1)/X(n))=2)X(n) elseAVE=/NUM然后对经过第一次剔除后统计出来的基音频率对应的取样点数进行平均值计算。以平均值为阈值对已经统计出来的各帧取样点数进行第二次去野点,即:如果某帧的基音频率对应的取样点数大于阈值的动态范围就认为该帧统计出来的数据是不合理的,并且把其基音周期置零处理。阈值a(0<a<1)、b(b>1)的动态范围可以根据实验结果择优选择。0X(n)>AVE*borX(n)<AVE*aX(n)= X(n)else第一次去野点时在Fs/500~Fs/50个取样点的局部范围内寻找极小值,三倍以及三倍以上周期的情况都已被排除,如果没有基音周期但是在第一次处理时得到了不合理的数据,可以通过第二次去野点把数据排除掉,从而统计出每一帧的基音频率所对应的取样点数,然后把取样点数转换为相应的基音频率,同时取样点数为零的数据仍然置零处理,并再次统计这个语音信号的平均频率。(f)第k+1帧的极小值对应二倍基音周期,其基因周期等于该值减去k帧的基音周期5)最后,经以上方法统计出来的基音频率总的来说是在平均频率上下范围波动,为了使得实验数据分布的更光滑,可以对实验结果进行线性滤波,使得基因频率在平均频率的正负5%的范围内波动。(g)基音统计结果4结束语 传统的基于短时AMDF函数随着滞后时间的增加,峰值幅度逐渐下降,这使得谷值点检测以及谷值点的清晰度检查比较困难,针对该问题相关文献提出了不少改进方法,在此基础上,本文里利用基于W-AMDF的基音检测算法,并在该算法中采用了新的清浊判别和基音判别准则,提高了基音估计精度,而且算法的复杂度低。参考文献1、《语音信号处理》,赵力,机械工业出版社,2003。2《语音信号处理》,易克初,田斌,付强,国防工业出版社,北京,2000。3、《数字信号处理的MATLAB实现》,万永革,科学出版社,北京,2007。实验小结基音周期是语音信号中的重要参数之一,它在语音识别、语音合成和语音编码中有着广泛的应用,因此研究如何准确判断语音信号的基音频率是非常有实际意义的,同时从不同角度出发来研究语音信号的基音频率又具有重要的理论价值。本次实验作者采用的是在时域里利用线性加权平均幅度差函数法进行基音周期估计,根据信息论的有关知识可知对原始语音信号作直接的处理可以使得原始语音所含有的基音频率信息丢失的最少,因此可以说恰当地运用此方法可以取得比较科学可靠的结果。设计的创新点:1.原始语音信号分帧(帧长等于帧移)后进行短时能量判断,小于某一阈值则置零处理,然后用非零帧组成新的富含基音周期信息的新语音信号,接着对这个新语音进行基因周期估计。2.人的语音频率为50~500Hz,那么在局部范围第Fs/500~Fs/50(Fs是语音信号的取样频率)个取样点内搜索每帧信号的中的局部极小值,三倍以及三倍以上周期的情况都已经被排除,其原理为(NUM为X(n))>0的总个数):0 (X(n)>Fs/50orX(n)<Fs/500)X(n)=|X(n)-X(n-1)| (round(X(n)/X(n-1))=2orround(X(n-1)/X(n))=2)X(n) elseAVE=/NUM经过第一次去野点,在进行第二次去野点操作,其原理为:0X(n)>AVE*borX(n)<AVE*aX(n)= X(n)else阈值a(0<a<1)、b(b>1)的动态范围可根据实验结果择优选择需要改进的地方:本算法仍然存在一些基音周期估计错误,主要是发生在清音浊音过渡段,即清音误判为浊音,需要进一步研究.通过本次软件设计促进自己对所学知识的融会贯通,同时也使自己在研究问题方面有了更深的认识,拓宽了知识面,锻炼了能力,综合素质得到较大提高,尤其是观察、分析和解决问题的能力。作为整个学习体系的有机组成部分,软件设计虽然安排在课外时间进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于解决实际问题;检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。软件设计达到了专业学习的预期目的,感到不仅实际动手能力有所提高,更重要的是进一步激发了对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。附录(源代码):clearall;Fs=8000;loadma1_4,soundsc(ma1_4);len=50;Voice=ma1_4'/max(abs(ma1_4'));%对语音进行归一化figure,subplot(2,1,1),plot(Voice),title('原始语音ma1-4'),axis([0length(Voice)-0.81.1]),gridon;f=enframe(Voice,len,len);[row,col]=size(f);Energy=zeros(1,row);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%短时平均幅度函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fori=1:row%Ave_Fudu(1,i)=sum(abs(f(i,:)),2);%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%短时能量函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fori=1:rowEnergy(1,i)=sum(abs(f(i,:).*f(i,:)),2);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%MAX=max(Energy);Ave_Energy=sum(Energy)/row;Delete=zeros(1,row);%%%%%%%%%%%%%%%%%%%%%%%%%%Delete(i)=1表示第i帧为清音帧%%%%%%%%%%%%%%%%%%%%%%%%%fori=1:rowifEnergy(1,i)<Ave_Energy*0.25Delete(i)=1;endend%figure,plot(Delete);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%New=zeros(1,(row-sum(Delete))*len);%清音帧数据全部置零fori=1:rowifDelete(i)==1Voice(1,(i-1)*len+1:i*len)=0;endendsubplot(2,1,2),plot(Voice),title('去掉静音和部分清音后的语音信号'),axis([0length(Voice)-0.81.1]),gridon;figure,plot(ma1_4),holdon,plot(Voice,'r'),,title('处理前后的语音直观比较');legend('去掉的静音和清音部分');axis([0length(Voice)-0.81.2]),gridon;%figure,plot(Energy),title('短时能量'),axis([0length(Energy)0MAX+1]),line([0length(Energy)],[Ave_EnergyAve_Energy],'color','r'),gridon;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%短时过零函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%signs=(Voice(1,1:(length(Voice)-1)).*Voice(1,2:length(Voice)))<0;%figure,plot(signs),title('短时过零'),axis([0length(Voice)-13]),gridon;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f2=enframe(signs,len,len);begin=1;%去掉清音后的语音存放在New数组中fori=1:rowifDelete(i)==0New(1,(begin-1)*len+1:begin*len)=Voice(1,(i-1)*len+1:i*len);begin=begin+1;endendfigure,plot(New),title('去掉静音和部分清音后重新组成的语音信号'),axis([0length(New)-0.61.1]),gridon;len=256;inc=round(len*0.4);f=enframe(New,len,inc);[row,col]=size(f);F=zeros(row,col);fork=1:colF(:,k)=sum(abs(f(:,1:len+1-k)-f(:,k:len)),2)/(len-k+1);endMin=zeros(1,row);Xlable=zeros(1,row);fori=1:rowMin(i)=min(F(i,16:round(0.6*col)));endfori=2:row%找出谷值点的横坐标,存储于Xlable中forj=round(Fs/500):round(Fs/40)%假设人语音的基音频率为40hz~450hzifMin(i)==F(i,j)Xlable(i)=j;ifround((Xlable(i)+1)/(Xlable(i-1)+1))==2|round((Xlable(i-1)+1)/(Xlable(i)+1))==2Xlable(i)=abs(Xlable(i)-Xlable(i-1));%对野点进行类中指处理处理endendendendnum=0;fori=1:rowifXlable(i)>0num=num+1;endendAVE=sum(Xlable)/num;fori=1:rowifXlable(i)>AVE*1.1|Xlable(i)<AVE*0.9Xlable(i)=0;endendnum=0;fori=1:rowifXlable(i)>0num=num+1;endend%%%%%%%%%%%%%%%%%%%把存储于Xlable中的平均基因取样点数目转为基因频率%%%%%%%%%%%%%%%%%%%fori=1:rowifXlable(i)~=0Xlable(i)=Fs/Xlable(i);endendfigure,subplot(2,1,1),plot(Xlable,'.'),title('帧的基因频率原始分布'),gridon;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%begin=1;fori=1:rowifXlable(i)~=0Fra_Vow_Distr(begin)=Xlable(i);begin=begin+1;endendAVE=sum(Fra_Vow_Distr)/num%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对实验结果进行线性滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fori=1:5Fra_Vow_Distr=smooth(Fra_Vow_Distr);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论