原来是小飞 发表于 2013-11-28 15:21

求个互信息法求时延的matlab代码

本人需用互信息法求一混沌时间序列的时延,在论坛上找了找,没找到代码,希望好心人分享一个能用的互信息法求时延的代码,谢谢了。

lc36978 发表于 2014-2-25 21:02

楼主找到互信息法的代码了吗

原来是小飞 发表于 2014-2-26 09:00

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

lc36978 发表于 2014-2-26 10:54

原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。

除了陆振波就没有别人有写类似的程序了吗?

lc36978 发表于 2014-2-26 11:00

陆振波只开源了自相关法和平均位移法求时延的代码,其它求嵌入维和lyapunov指数的都是封装的。。。。

原来是小飞 发表于 2014-2-26 11:02

lc36978 发表于 2014-2-26 10:54
除了陆振波就没有别人有写类似的程序了吗?

那就没了。你也是做时间序列的吗

lc36978 发表于 2014-2-26 11:25

原来是小飞 发表于 2014-2-26 11:02
那就没了。你也是做时间序列的吗

是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的?

lc36978 发表于 2014-2-26 12:04

原来是小飞 发表于 2014-2-26 09:00
手上有一个,你试试,我有些参数设置不好。

看了这个程序,有哪些参数设置有问题吗?好像运行速度挺慢的,还有点错误啊。。

原来是小飞 发表于 2014-2-26 15:34

lc36978 发表于 2014-2-26 11:25
是啊,头都大了,你相空间重构的时候,tau和m分别用什么程序求的?

至今tau和m都求解不合适,特困惑。

lc36978 发表于 2014-2-26 15:39

原来是小飞 发表于 2014-2-26 15:34
至今tau和m都求解不合适,特困惑。

求qq交流啊楼主

原来是小飞 发表于 2014-2-26 15:48

lc36978 发表于 2014-2-26 15:39
求qq交流啊楼主

企鹅:1051480255

gghhjj 发表于 2014-3-5 09:03

我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的是两个代码都没有公开核心代码的源程序

原来是小飞 发表于 2014-3-5 16:25

gghhjj 发表于 2014-3-5 09:03
我这儿有两个互信息法求时延的程序
一个是武汉大学Adu的,另一个是陆振波的
希望对大家有所帮助,遗憾的 ...

感谢您,我试试看。

eartha2013 发表于 2014-4-12 11:44

你好,请问一下 用互信息法求tau时,最大延迟升级max-tau是如何确定的呢

gghhjj 发表于 2014-4-16 09:18

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
页: [1] 2 3 4
查看完整版本: 求个互信息法求时延的matlab代码