sa=585;ss=438; %ÕâÊÇ?µµ?µÄ
w=512;
wov=w-ss;kmax=500;
x=wavread('v017');
%*********** time scaling **************
xst=1;yout=[];
xbuff=x(sa:sa+w-1);
st=sa:sa:length(x); %?ªÊ?Ê?ÓïÒô?Î?ÓSa???ªÊ?ÊäÈë,ÒÔºóÃ??ÎÏòºóÒÆ??Sa?öµã
r=mod(length(x),sa);
num=(length(x)-r)/sa; %?Ü??Òª?øÐÐnumÂÖ?Ù??
x=[x; zeros(w+kmax,1)];%ÓïÒôÎ??ÎÐèÒª??0??ÒòΪ?ÖÎö???ÚW?áÒÆ????ÇÒ?î?óÒÆ??kmax?öµã
for j=1:(num)
y=x(xst:1:xst+w-1); %?ªÊ?Ê?ÓïÒô?Î?ÓSa??
start=st(j):st(j)+kmax-1; %?ÖÎö???ÚµÄÆðµã???î?àÒÆ??kmax?öµã
cy=y(end:-1:end-wov+1); %È??öÊä?öÐòÁÐyµÄºówov?öµã
cy=cy(end:-1:1);
km_buf=zeros(1,kmax); %ÓÃÀ??ÇÂ?kmax?ö??Ïà?ØϵÊý
for i=1:kmax
xbuff=x(start(i):start(i)+w-1); %?ÖÎö???ÚËù?ØÈ?µÄw?öµã
cx=xbuff(1:wov); %È??öÇ?wov?öµã
rxx_k=sum(cx.^2);
rxy_k=sum(cx.*cy);
if ( rxx_k==0) %ÈôΪÁã???íÊ?Òѵ?ÓïÒôÎ??Î?Õ?Å??0µÄ???Ö??ÔòÍ?Ö?
kmbuf(i)=0;
break;
else
km_buf(i)=(rxy_k.^2)./rxx_k;
end
end
km=find(km_buf==max(km_buf)); %ÕÒ?ö?î?óµÄ??Ïà?ØϵÊýÔÚkm_bufµÄÎ?ÖÃ
yout=[yout; x(start(km)+wov:start(km)+w+1)]; %?ÑÒ?ÖÂÐÔ?îºÃµÄÐòÁеÄSs?öµã??Ϊ?îºóÊä?ö
xst=xst+sa;
end
%************?ä?ÉÑùÂÊ************************
L=sa;M=ss;
data=[];
data_out=[];
y_end=length(yout);
y_st=0;
for j=1:L;
for i=1:M;
y_st=y_st+1;
if y_st<y_end
invert=linspace(yout(y_st),yout(y_st+1),L+1);%ÔÚÃ?Á??öµãÖ??äÏßÐÎ?åÈëL-1?öµã
elseif y_st==y_end
invert=linspace(yout(y_st),0,L+1); %ÈôÊÇ?îºóÒ??öµã??ÔòËüÓëÁãÖ??ä?åÈëL-1?öµã
else
break;
end
data=[data invert(1:end-1)]; %Ã??Î?ÑL?öµãÊä?öµ?data
end
data_out=[data_out data(1:M:end)]; %ÔÚdataÖÐÃ??ôM?öµãÈ??öÒ??öµã????Êä?öµ?data_out
data=[]; %?ÑdataµÄÄÚÈÝÇå?ý
end
No comments:
Post a Comment