|
我的算法代码如下,希望能对大家有帮助
function [St,S_t,dS_m_t,dS_t,S_cor]=CC(x)
%% C-C方法提取延迟时间和延迟时间窗口
% by Yu Feiqun
% 2007-12-09
N=length(x);
% 计算给定序列的标准差 deta
deta=std(x);
tmax=200;
t=1:tmax;
m=2:5;
r=1:4;
St=zeros(length(t),length(m),length(r));
%dSt=zeros(length(t),length(m),length(r));
for tt=1:length(t)
% 计算时间序列分为t个不相交的时间序列时每一时间序列的长度
L=floor(N/t(tt));
for mm=1:length(m)
for rr=1:length(r)
rjj=deta*r(rr)/2;
smrt=0;
for ss=1:t(tt)
% 提取第ss个子序列
xsub=x([ss:t(tt):N]);
xsub=xsub([1:L]);
c1=getCValue(xsub,m(mm),rjj,t(tt));
c2=getCValue(xsub,1,rjj,t(tt));
smrt=smrt+c1-c2.^m(mm);
end
[tt,mm,rr]
St(tt,mm,rr)=smrt/t(tt);
end
end
end
S_t=sum(sum(St,3),2)/16;
dS_m_t=max(St,[],3)-min(St,[],3);
dS_t=sum(dS_m_t,2)/4;
S_cor=abs(S_t)+dS_t;
function y=getCValue(x,m,r,t)
% 计算时间序列x的关联积分
% m为嵌入维数 t为时间延迟 N为序列长度 r为半径
% 由于序列x已经经过划分,其相邻两个数据已具有时间延迟t
N=length(x);
M=N-(m-1);
% 重构相空间 嵌入维数为m 时间延迟为t
xv=zeros(m,M);
for ii=1:m
xv(ii,:)=x([((ii-1)+1):1:((ii-1)+M)]);
end
y=0;
xt=xv;
for ii=2:M
xt=circshift(xt,[0,-1]);
y=y+sum(Heaviside(r-max(abs(xv-xt),[],1)));
end
y=y/M/(M-1);
function y=Heaviside(x)
y=zeros(size(x));
y(find(x>=0))=1; |
|