求个互信息法求时延的matlab代码
本人需用互信息法求一混沌时间序列的时延,在论坛上找了找,没找到代码,希望好心人分享一个能用的互信息法求时延的代码,谢谢了。楼主找到互信息法的代码了吗 lc36978 发表于 2014-2-25 21:02
楼主找到互信息法的代码了吗
手上有一个,你试试,我有些参数设置不好。function =mutual_information(data,tau_max,n)
%本函数是利用互信息法求时间序列的时间延迟Tau
%data:待计算的时间序列
%tau_max:最大时间延迟
%n:等间隔小格子划分数
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
原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。
除了陆振波就没有别人有写类似的程序了吗? 陆振波只开源了自相关法和平均位移法求时延的代码,其它求嵌入维和lyapunov指数的都是封装的。。。。 lc36978 发表于 2014-2-26 10:54
除了陆振波就没有别人有写类似的程序了吗?
那就没了。你也是做时间序列的吗 原来是小飞 发表于 2014-2-26 11:02
那就没了。你也是做时间序列的吗
是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的? 原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。
看了这个程序,有哪些参数设置有问题吗?好像运行速度挺慢的,还有点错误啊。。 lc36978 发表于 2014-2-26 11:25
是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的?
至今tau和m都求解不合适,特困惑。 原来是小飞 发表于 2014-2-26 15:34
至今tau和m都求解不合适,特困惑。
求qq交流啊楼主 lc36978 发表于 2014-2-26 15:39
求qq交流啊楼主
企鹅:1051480255 我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的是两个代码都没有公开核心代码的源程序
gghhjj 发表于 2014-3-5 09:03
我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的 ...
感谢您,我试试看。 你好,请问一下 用互信息法求tau时,最大延迟升级max-tau是如何确定的呢 eartha2013 发表于 2014-4-12 11:44
你好,请问一下 用互信息法求tau时,最大延迟升级max-tau是如何确定的呢
参考
http://forum.vibunion.com/thread-51237-1-1.html
http://forum.vibunion.com/thread-130472-1-1.html