Sunday, 22 April 2012

SOLA.M MATHLAB


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