实验三语音信号的特征提取一、实验目的1、熟练运用MATLAB软件进行语音信号实验。2、熟悉短时分析原理、MFCC、LPC的原理。3、学习运用MATLAB编程进行MFCC、LPC的提取。4、学会利用短时分析原理提取MFCC、LPC特征序列。二、实验仪器设备及软件HPD538、MATLAB三、实验原理1、MFCC语音识别和说话人识别中,常用的语音特征是基于Mel频率的倒谱系数(即MFCC)。MFCC参数是将人耳的听觉感知特性和语音的产生机制相结合。Mel频率可以用如下公式表示:)700/1log(2595ffMel在实际应用中,MFCC倒谱系数计算过程如下;①将信号进行分帧,预加重和加汉明窗处理,然后进行短时傅里叶变换并得到其频谱。②求出频谱平方,即能量谱,并用M个Mel带通滤波器进行滤波;由于每一个频带中分量的作用在人耳中是叠加的。因此将每个滤波器频带内的能量进行叠加,这时第k个滤波器输出功率谱)('kx。③将每个滤波器的输出取对数,得到相应频带的对数功率谱;并进行反离散余弦变换,得到L个MFCC系数,一般L取12~16个左右。MFCC系数为MkMnkkxCn1']/)5.0(cos[)(log,n=1,2,...,L④将这种直接得到的MFCC特征作为静态特征,再将这种静态特征做一阶和二阶差分,得到相应的动态特征。2、LPC由于频率响应)(jweH反映声道的频率响应和被分析信号的谱包络,因此用|)(|logjweH做反傅里叶变换求出的LPC倒谱系数。通过线性预测分析得到的合成滤波器的系统函数为)1/(1)(1piiizazH,其冲激响应为h(n)。h(n)的倒谱为)(^nh,1^^)()(nnznhzH就是说)(^zH的逆变换)(^nh是存在的。设0)0(^h,将式1^^)()(nnznhzH两边同时对1z求导,得1^1111)(]11log[nnpiiznhzzaz得到11111^1)(npiiipiiinzaziaznhn,于是有1111^11)()1(nniinpiiziaznhnza令其左右两边z的各次幂前系数分别相等,得到)(^nh和ia间的递推关系piiniinpnnhaninhpnknhanianhah1^^11^^1^),1()1()(1),()1()()1(,按其可直接从预测系数{ia}求得倒谱)(^nh。这个倒谱是根据线性预测模型得到的,又称为LPC倒谱。LPC倒谱由于利用线性预测中声道系统函数H(z)的最小相位特性,因此避免了一般同态处理中求复对数的麻烦。四、实验步骤及程序1、MFCC(1)、实验步骤①输入样本音频②给样本音频预加重、分帧、加窗③将处理好的样本音频做傅里叶变换④进行Mel频率滤波⑤进行Log对数能量⑥对样本求倒谱⑦输出MFCC图像(2)、MFCC提取程序流程图s(n)s(n)X(k)X(k)图3.1MFCC特征提取(3)、MFCC特征提取实验源程序closeallclearclc[x]=wavread('1.wav');bank=melbankm(24,256,8000,0,0.5,'m');bank=full(bank);bank=bank/max(bank(:));fork=1:12n=0:23;dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw=1+6*sin(pi*[1:12]./12);w=w/max(w);%预加重滤波器xx=double(x);xx=filter([1-0.9375],1,xx);%语音信号分帧xx=enframe(xx,256,80);%计算每帧的MFCC参数fori=1:size(xx,1)y=xx(i,:);s=y'.*hamming(256);t=abs(fft(s));t=t.^2;预加重、分帧、加窗DFT/FFTMel频率滤波组Log对数能量DCT求倒谱c1=dctcoef*log(bank*t(1:129));c2=c1.*w';m(i,:)=c2';endfigureplot(m);xlabel('帧数');ylabel('幅度');title('MFCC');2、LPC(1)、实验步骤1、输入原始语音2、对样本语音进行加窗处理3、计算LPC系数4、建立语音正则方程5、输出原始样本语音、预测语音波形和预测误差6、输出LPC谱7、求出预测误差的倒谱8、输出原始语音和预测语音的语谱图(2)实验流程输入原始语音图3.2LPC系数实验流程图(3)、LPC系数实验源代码I=wavread('1.wav');%读入原始语音%subplot(3,1,1),plot(I);title('原始语音波形')%对指定帧位置进行加窗处理Q=I';N=256;%窗长Hamm=hamming(N);%加窗frame=60;%需要处理的帧位置M=Q(((frame-1)*(N/2)+1):((frame-1)*(N/2)+N));Frame=M.*Hamm';%加窗后的语音帧[B,F,T]=specgram(I,N,N/2,N);[m,n]=size(B);加窗处理输出图像计算LPC系数建立语音正则方程fori=1:mFTframe1(i)=B(i,frame);endP=input('请输入预测器阶数=');ai=lpc(Frame,P);%计算lpc系数LP=filter([0-ai(2:end)],1,Frame);%建立语音帧的正则方程FFTlp=fft(LP);E=Frame-LP;%预测误差subplot(2,1,1),plot(1:N,Frame,1:N,LP,'-r');grid;title('原始语音和预测语音波形')subplot(2,1,2),plot(E);grid;title('预测误差');pausefLength(1:2*N)=[M,zeros(1,N)];Xm=fft(fLength,2*N);X=Xm.*conj(Xm);Y=fft(X,2*N);Rk=Y(1:N);PART=sum(ai(2:P+1).*Rk(1:P));G=sqrt(sum(Frame.^2)-PART);A=(FTframe1-FFTlp(1:length(F')))./FTframe1;subplot(2,1,1),plot(F',20*log(abs(FTframe1)),F',(20*log(abs(1./A))),'-r');grid;xlabel('频率/dB');ylabel('幅度');title('短时谱');subplot(2,1,2),plot(F',(20*log(abs(G./A))));grid;xlabel('频率/dB');ylabel('幅度');title('LPC谱');pause%求出预测误差的倒谱pitch=fftshift(rceps(E));M_pitch=fftshift(rceps(Frame));subplot(2,1,1),plot(M_pitch);grid;xlabel('语音帧');ylabel('/dB');title('原始语音帧倒谱');subplot(2,1,2),plot(pitch);grid;xlabel('语音帧');ylabel('/dB');title('预测误差倒谱');pause%画出语谱图ai1=lpc(I,P);%计算原始语音lpc系数LP1=filter([0-ai(2:end)],1,I);%建立原始语音的正则方程subplot(2,1,1);specgram(I,N,N/2,N);title('原始语音语谱图');subplot(2,1,2);specgram(LP1,N,N/2,N);title('预测语音语谱图');五、实验结果与分析1、MFCC图3.3MFCC特征提取图像通过计算MFCC参数,获得了声纹识别的特征参数。由于MFCC参数是对人耳听觉特征的描述,因此,可以认为,不同声纹的MFCC参数距离,能够代表人耳对两个语音听觉上的差异,可以为声纹的识别提供可靠的依据。2、LPC图3.4原始语音波形请输入预测器阶数=12图3.5原始语音和预测语音波形及预测误差波形图3.6短时谱和LPC谱波形图3.7原始语音帧倒谱和预测误差倒谱波形图3.8原始语音和预测语音语谱图LPC系数ai=Columns1through81.0000-1.09140.5025-0.74850.15570.28630.07440.2411Columns9through13-0.28150.1132-0.24640.3990-0.1947通过计算LPC系数可以很好的利用先行预测中声道系统函数的最小相位特性来提取特征函数六、实验体会通过本次实验是我更加熟练运用MATLAB软件进行编程,对MFCC和LPC两种特征序列的提取原理有了更深的理解,能够更好地运用课堂上所学的基础知识运用到实验当中,对于以后的学习有了很大的帮助。