• 将时间序列转成图像——图形差分场方法 Matlab实现


    目录

    1 方法

    2 Matlab代码实现

    3 结果


    【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

    其他:

    1. 时间序列转二维图像方法及其应用研究综述_vm-1215的博客-CSDN博客

    2.将时间序列转成图像——格拉姆角场方法 Matlab实现_vm-1215的博客-CSDN博客

    3.将时间序列转成图像——马尔可夫转移场方法 Matlab实现_vm-1215的博客-CSDN博客

    4.将时间序列转成图像——递归图方法 Matlab实现_vm-1215的博客-CSDN博客

    5.将时间序列转成图像——相对位置矩阵方法 Matlab实现_vm-1215的博客-CSDN博客

    1 方法

    时间序列图形表达了时间序列的时间结构信息,基于时间序列图形的序列熵则可以用于时间序列的复杂性测量、动态系统表征等。因此,作者提出了基于不同图形长度的图形差分场,实现时间序列到图像的转换。

    图形差分场(Motif Difference Field, MDF)的基本思想是:给定一个时间序列X=(xt,t=1,2,...,N)X=(xt,t=1,2,...,N),设定需要得到的图像数量n(1<n<N)n(1<n<N),再设定不同步长d(1ddmax,dmax=[(N1)/(n1)]),不同长度s(s=1,2,3,...,N(n1)d)的时间窗口,以此多次提取时间序列原始图形的某一段,然后经过组合变换获得n个图像。具体的流程如下:

    1. 根据时间序列X,得到图形集:
          

      Mnd={Mnd,s,s=1,2,3,,T(n1)d}

      其中Mnd,s=(xt,t=s,s+d,s+2d,,s+(n1)d)s相当于一个时间窗口,d相当于步长(时移),t相当于移动窗口(有n个时刻点),t相当于移动窗口(有n个时刻点),共有n×dmax个图形;
    2. 得到图形差分集:

      dMnd={dMnd,s,s=1,2,3,,T(n1)d}

      其中dMnd,s=(xs+dxs,xs+2dxs+d,,xs+(n1)dxs+(n2)d),共有(n1)×dmax个图形;
    3. 定义新序列Ind,s,通过补零操作使得序列长度一致:

      Ind,s={dMnd,s,1sN(n1)d0,N(n1)d<sN(n1)

    4. 定义图形差分场:

      MDFn={In1,In2,,Indmax}

      Ind代表步长d对应的(n1)个序列集,这样图形差分场可以生成对应的n1个通道图像。

    5. 针对第i个通道,定义图像数组为:

      Gni=[In1(i),In2(i),,Ind(i),Indmax(i)]N

      其中Ind(i)=[Ind,1(i),Ind,2(i),,Ind,Tn+1(i)]N,1in1
    6. 针对第i个通道,定义图像数组为:

      Gni=[In1(i),In2(i),,Ind(i),Indmax(i)]N

      其中Ind(i)=[Ind,1(i),Ind,2(i),,Ind,Tn+1(i)]N,1in1
    7. 填补Gni中的零元素,定义MDF图像的每一个通道:

      IMGni=Gni+KnGni

      其中Knd,s={0,1sN(n1)d1,N(n1)d<sN(n1)Gni是由Gni旋转而来,为哈达玛积[15]。

     最终实现时间序列到图像的转换。

    2 Matlab代码实现

    1. function MDF(n)
    2. %% 生成数据
    3. speed = xlsread('3_1_link6_28_5_30min.csv');
    4. % speed = xlsread('3_1_link1_1_5_30min.csv');
    5. X = speed;
    6. X = (X - min(X)) / (max(X) - min(X));
    7. m = length(X);
    8. %% 生成图
    9. %%%%%%%%%%% MDF %%%%%%%%%%%%%%
    10. % 参数
    11. % n = 4; % 图数量
    12. % 根据设置的图数量,循环生成
    13. % 根据图数量,生成窗口步长序列 1: dMax
    14. dMax = floor((m-1)/(n-1));
    15. % 循环生成图集和差分图集
    16. for d = 1 : dMax
    17. s = 1:m - (n-1)*d;
    18. for j = 1:n
    19. M(:,d,j) = zeros(m-n+1,1);
    20. M(1:length(s),d,j) = X(s+(j-1)*d);
    21. if j > 1
    22. % 生成差分图集
    23. dM(:,d,j-1) = M(:,d,j) - M(:,d,j-1);
    24. K(:,d,j-1) = ones(m-n+1,1);
    25. K(1:length(s),d,j-1) = 0;
    26. end
    27. end
    28. end
    29. % 生成图形差分场
    30. MDF = dM;
    31. G = MDF;
    32. IMG = G + K.*rot90(rot90(G));
    33. %% 显示图(热力图)
    34. for i = 1:n-1
    35. im(i) = figure(i);
    36. imagesc(IMG(:,:,i))
    37. title(['第',num2str(i),'幅图']);
    38. % saveas(im(i),['MDF_1(n=',num2str(n),')第',num2str(i),'张图.bmp']);
    39. end
    40. figure(n)
    41. plot(speed)
    42. title('time data')
    43. xlabel('t')
    44. ylabel('speed')

    3 结果

    【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

  • 相关阅读:
    高并发下的数据一致性保障(图文全面总结)
    工程师如何对待开源
    LabVIEW程序框图进行缩放
    docker部署最新版nacos(2.2.3)设置登录密码
    java中的栈、堆、方法区
    fpga图像处理------常用算法(二)
    MySQL企业级参数调优实践分享
    网络入门基础
    50道SQL面试题
    看完 2022 雷军年度演讲,我总结了我的故事
  • 原文地址:https://blog.csdn.net/weixin_41406486/article/details/127815565