gusucode.com > matlab编程倒谱法来进行基音周期检测源码程序 > gusucode/CEP/CEPFRAME.m
clear all; load vowels; x=vowels.a_1; len=length(x); fs=zeros(1,len); fss=enframe(x,256,128); k=33;当前正在检测基音周期的帧的编号 f1=zeros(1,256);%用来存储当前正在检测基音周期的帧 for n=1:256 f1(1,n)=fss(k,n); end A1=lpc(f1,18); E1=abs(filter(A1,1,f1)); figure,plot(E1);title('逆滤波后余量信号'); % LPC系数 逆滤波 e1=abs(fftshift(fft(E1))); figure,plot(e1);title('FFT'); % FFT if e1~=0 e1=log(e1); end figure,plot(e1);title('ln|*|'); % 绝对值取对数 for n=1:128 e1(n)=0; end for n=139:256 e1(n)=0; end figure,plot(e1);title('高频分量置零后的ln|*|'); %高频分量置零 500/5000*128+128=140 EE1=abs(ifft(e1)); % IDFT for n=1:79 EE1(n)=0; end for n=181:256 EE1(n)=0; end figure,plot(EE1),axis([80 180 0 0.5]);title('IDFT后'); %噪音尖峰置零 N=max(EE1); for n=1:128 if abs(EE1(n)-N)<0.0001 n1=n; end end T=n1 %根据峰值,检出基音周期