马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本人在论坛上搜到了一个互信息法求时延的代码,可是结果却与‘tau_max’的取值相同,即tau_max的取值就是最后的时延值,这明显是不对的。估计是代码出了问题,可能代码不全,请好心人帮忙看下代码能否补全或者传个完整的代码给我,谢了。代码如下:- data=load('11yue(2880x1).txt');
- tau_max=5;
- n=128;
- I_sq=zeros(tau_max,1);
- N=length(data); %时间序列的长度
- for tau=1:tau_max
- s=data(1:N-tau);q=data(tau+1:N); %把单变量时间序列扩充到二维相空间(s,q)上
- as=min(s);bq=min(q); %在重构的相图上取框,均匀划分成n*n个小格子
- delts=(max(s)-as)/n;deltq=(max(q)-bq)/n;
- N_sq=zeros(n);
-
- for ii=1:n %计算位于格子(ii,jj)内的相点个数
- for jj=1:n
- for k=1:N-tau
- as_k=(s(k)-as)/delts; bq_k=(q(k)-bq)/deltq;
- if as_k>=ii-1&as_k<ii&bq_k>=jj-1&bq_k<jj
- N_sq(ii,jj)=N_sq(ii,jj)+1;
- end
- end
- end
- end
- Ntotal=sum(sum(N_sq));
- Ps=sum(N_sq)/Ntotal; %计算位于一维s格子内的概率
- Pq=sum(N_sq')/Ntotal; %计算位于一维q格子内的概率
- Psq=N_sq/Ntotal; %计算位于二维格子(ii,jj)内概率
-
- H_s=0; %计算s的熵
- H_q=0; %计算q的熵
- for i=1:n
- if Ps(i)~=0
- H_s=H_s-Ps(i)*log(Ps(i));
- elseif Pq(i)~=0
- H_q=H_q-Pq(i)*log(Pq(i));
- end
- end
-
- H_sq=0; %计算(s,q)的联合熵
- for i=1:n
- for j=1:n
- if Psq(i,j)~=0
- H_sq=H_sq-Psq(i,j)*log(Psq(i,j));
- end
- end
- end
-
- I_sq(tau)=H_s+H_q-H_sq; %计算tau下的互信息函数
- clear s q; %清空变量s和q
- end
复制代码
|