华南理工大学《语音信号处理》实验报告实验名称:基音周期估计姓名:学号:班级:11级电信6班日期:2014年3月1.实验目的本次试验的目的是通过matlab编程,验证课本中基音周期估计的方法,本实验采用的方法是自相关法。2.实验原理1、基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容易。③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。2、自相关函数对于离散的语音信号x(n),它的自相关函数定义为:R(k)=Σx(n)x(n-k),如果信号x(n))具有周期性,那么它的自相关函数也具有周期性,而且周期与信号x(n)的周期性相同。自相关函数提供了一种获取周期信号周期的方法。在周期信号周期的整数倍上,它的自相关函数可以达到最大值,因此可以不考虑起始时间,而从自相关函数的第一个最大值的位置估计出信号的基音周期,这使自相关函数成为信号基音周期估计的一种工具。3、短时自相关函数语音信号是非平稳的信号,所以对信号的处理都使用短时自相关函数。短时自相关函数是在信号的第N个样本点附近用短时窗截取一段信号,做自相关计算所得的结果Rm(k)=Σx(n)x(n-k)式中,n表示窗函数是从第n点开始加入。3.实验数据及平台本实验所采用的数据语音文件isolatedword.WAV,平台是MATLAB2010。4.实验过程(步骤)1、读取wav文件;2、利用自相关法进行基音周期估计;3、去除野点。5.实验结果及讨论1、读取wav文件functionpitchx=wavread('E:\yuuyin\isolatedword.WAV');%读取声音文件figure(1);stem(x,'.');%显示声音信号的波形得到的波形如下:2、利用自相关法进行基音周期估计n=160;%取20ms的声音片段,即160个点form=1:length(x)/n;%对每一帧求短时自相关数fork=1:n;Rm(k)=0;fori=(k+1):n;Rm(k)=Rm(k)+x(i+(m-1)*n)*x(i-k+(m-1)*n);endendp=Rm(10:n);%防止误判,去掉前边10个数值较大的点[Rmax,N(m)]=max(p);%读取第一个自相关函数的最点end%补回前边去掉的10个点N=N+10;T=N/8;%算出对应的周期figure(2);stem(T,'.');axis([0length(T)011]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');结果如下图:由图中可以看出基音周期大约为10ms,但是图中存在太多的野点,为此,需要对此进行进一步的处理,即去除野点。3、去除野点T1=medfilt1(T,5);%去除野点figure(3);stem(T1,'.');axis([0length(T1)011]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');得到的结果如下:6.实验总结短时自相关函数法基音检测的主要原理是通过比较原始信号和它移位后的信号之间的类似性来确定基音周期,如果移位距离等于基音周期,那么两个信号具有最大类似性。基于自相关函数的算法是基音周期估计的常用方法,特别适用于噪声环境下的基音提取。自相关函数在基音周期处表现为峰值,相邻两个峰值之间的间隔即为一个基音周期。但是计算自相关函数的运算量是很大的,其原因是计算机进行乘法运算非常费时。为此可以对中心削波函数进行修正,采用三电平中心削波的方法。三电平削波的自相关函数的计算很简单,因为削波后的信号的取值只有-1、0、1三种情况,因而不需作乘法运算而只需要简单的组合逻辑便可以。7.实验代码functionpitchx=wavread('E:\yuuyin\isolatedword.WAV');%读取声音文件figure(1);stem(x,'.');%显示声音信号的波形n=160;%取20ms的声音片段,即160个样点form=1:length(x)/n;%对每一帧求短时自相关数fork=1:n;Rm(k)=0;fori=(k+1):n;Rm(k)=Rm(k)+x(i+(m-1)*n)*x(i-k+(m-1)*n);endendp=Rm(10:n);%防止误判,去掉前边10个数值较大的点[Rmax,N(m)]=max(p);%读取第一个自相关函数的最大点end%补回前边去掉的10个点N=N+10;T=N/8;%算出对应的周期figure(2);stem(T,'.');axis([0length(T)011]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');T1=medfilt1(T,5);%去除野点figure(3);stem(T1,'.');axis([0length(T1)011]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');