cp.m

来自「DSK6713 Speech.rar語音訊號處理應用範例程序」· M 代码 · 共 57 行

M
57
字号
% ================================================================
%   Filename : CP.M 
% ----------------------------------------------------------------
%   Speech Feature Extractor ( Using Cepstrum parameter )
% ----------------------------------------------------------------
%   sp : speech wave ( using PCM coding )
% ================================================================
function CP=cp(sp);
global fft_point CBF fr_sz win_sz std_fr_num order
% ----------------------------------------------------------------
%   Magnitude Normalize ( using maximum peak for normalize )
% ----------------------------------------------------------------
a=max(sp);
sp=(sp./a)*100;
% ----------------------------------------------------------------
hamming_win=hamming(win_sz);
sp_l=length(sp);
fr_num=fix(sp_l/fr_sz);
sp(sp_l+1:fr_sz*(fr_num-1)+win_sz)=zeros(fr_sz*(fr_num-1)+win_sz-sp_l,1);
ltw_rate=fr_num/std_fr_num;
cp_p=zeros(fr_num,order);
% ----------------------------------------------------------------
for fr_no=1:fr_num
   fr_begin=fr_sz*(fr_no-1)+1;
   fr_end=fr_sz*(fr_no-1)+win_sz;
   fr_sp=sp(fr_begin:fr_end).*hamming_win;
   fft_fr=fft(fr_sp,fft_point);
   csw=log10(abs(fft_fr(1:fft_point/2-1)));
   for ch=1:20
      Yt(fr_no,ch)=sum(csw'.*CBF(ch,:));
   end
   for n=1:order
       cp_p(fr_no,n)=sum(Yt(fr_no,:).*cos(n*((1:20)-.5)*pi/20));
   end
end
% --------------------------------------------------------
%   Linear Time Normalize
% --------------------------------------------------------
for m=1:std_fr_num
   x=ltw_rate*m;
   x1=fix(x);
   if x1==0,
      A1=0;
   else
      A1=cp_p(x1,:);
   end;
   if (x1+1)>fr_num,
      A2=0;
   else
      A2=cp_p(x1+1,:);
   end;
   std_cp_p(m,:)=A1+(x-x1)*(A2-A1);
end
% ========================================================
CP=std_cp_p;
% ========================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?