pcp.m

来自「自己定义了一种有关声音的特征」· M 代码 · 共 58 行

M
58
字号
function [pcpdata,lodd,leven]=pcp(A,flag,fs)
%
%	Chen Tingliang
%   tingliangchen@163.com
%   splab hit China
%   2006.5

NFFT=size(A,1);%the num of fft points
n=size(A,2);%the num of frame
Y=abs(fft(A,NFFT)).^2/NFFT;
pcpdata=zeros(24,n);
if nargin<=2
 fs=8000*2;
end
fc1=261/2;
for j=1:n
    for i=1:NFFT-1
       t=round(24*log2(fs/NFFT*i/fc1));
       if t<0
        continue;    
       end
       k=mod(t,24);    
       if k==0
           k=24;
       end
       pcpdata(k,j)=pcpdata(k,j)+Y(i,j);
    end
end
pcp=pcpdata;
if nargin>=2 %convert the pcp to a 0,1 matrics
     for j=1:n
         a=zeros(24,1);
         if pcpdata(1,j)>=pcpdata(24,j)&pcpdata(1,j)>=pcpdata(2,j)
             a(1)=1;
         end
         if pcpdata(24,j)>=pcpdata(1,j)&pcpdata(24,j)>=pcpdata(23,j)
             a(24)=1; 
         end
         for i=2:23
             if pcpdata(i,j)>=pcpdata(i-1,j)&pcpdata(i,j)>=pcpdata(i+1,j)
               a(i)=1;
             end 
         end
         pcpdata(:,j)=a;
     end
 if flag==1%compute lodd and leven
     lodd=0;
     leven=0;
     a=sum(pcpdata,2);
     for i=1:2:23
       lodd=lodd+a(i);   
     end
     for i=2:2:24
       leven=leven+a(i);   
     end
 end
end
save('pcp.mat');

⌨️ 快捷键说明

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