• 将时间序列转成图像——相对位置矩阵方法 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 方法

    相对位置矩阵(Relative Position Matrix, RPM)包含了原始时间序列的冗余特征,使转换后的图像中,类间和类内的相似度信息更容易被捕捉。 对于一个时间序列X=(xt,t=1,2,,N)" role="presentation">X=(xt,t=1,2,,N),可以通过以下步骤得到RPM图:

    1. 针对原始时间序列,通过以下z-分值标准化的方法得到一个标准正态分布Z" role="presentation">Z

      zt=xtμσ,t=1,2,,N" role="presentation">zt=xtμσ,t=1,2,,N

      其中μ" role="presentation">μ表示X" role="presentation">X的平均值,σ" role="presentation">σ表示X" role="presentation">X的标准差。
    2. 采用分段聚合近似(PAA)方法,选择一个合适的缩减因子k" role="presentation">k,生成一个新的平滑时间序列X~" role="presentation">X~,将维度N" role="presentation">N减少到m" role="presentation">m

      x~i={1kj=k(i1)+1kizj,i=1,2,,m,NkNk=0{1kj=k(i1)+1kizj,i=1,2,,m11Nk(m1)j=k(m1)+1Nzj,i=m,NkNk>0m=Nk" role="presentation">x~i={1kj=k(i1)+1kizj,i=1,2,,m,NkNk=0{1kj=k(i1)+1kizj,i=1,2,,m11Nk(m1)j=k(m1)+1Nzj,i=m,NkNk>0m=Nk

      通过计算分段常数的平均值进行降维,可以保持原始时间序列的近似趋势,最终新的平滑时间序列X~" role="presentation" style="position: relative;">X~的长度为m" role="presentation" style="position: relative;">m
    3. 计算两个时间戳之间的相对位置,将预处理后的时间序列X转换为二维矩阵M" role="presentation" style="position: relative;">M

      M=[x~1x~1x~2x~1x~mx~1x~1x~2x~2x~2x~mx~2x~1x~mx~2x~mx~mx~m]" role="presentation" style="position: relative;">M=[x~1x~1x~2x~1x~mx~1x~1x~2x~2x~2x~mx~2x~1x~mx~2x~mx~mx~m]

      如上所示,该矩阵表征了时间序列中每两个时间戳之间的相对位置关系。其每一行和每一列都以某一个时间戳为参考,进一步表征整个序列的信息;
    4. 最后利用最小-最大归一化将M" role="presentation" style="position: relative;">M转换为灰度值矩阵,最终得到相对位移矩阵F" role="presentation" style="position: relative;">F

      F=Mmin(M)max(M)min(M)×255" role="presentation" style="position: relative;">F=Mmin(M)max(M)min(M)×255

    2 Matlab代码实现

    1. clc
    2. clear
    3. close all
    4. % %%
    5. % % 閫熷害
    6. % speed_original = round(rand(1,111)*40+40);
    7. %
    8. % m = length(speed_original);
    9. %
    10. % % 浣庨�熷尯
    11. % low_xu = round((rand()+0.1)*(m - 10));
    12. % low_num = round((rand()+0.2)*15);
    13. %
    14. % % 鏁版嵁
    15. % speed = speed_original;
    16. % speed(low_xu:low_xu+low_num-1) = round(rand(1,low_num)*20);
    17. %
    18. % % X = speed;
    19. %
    20. % % 璁烘枃閲岀殑鏁版嵁
    21. % X = [0 1 2 1 2 3 4 3 2 3 2 1];
    22. %
    23. % N = length(X);
    24. %% 鐢熸垚鏁版嵁
    25. speed = xlsread('3_1_link6_28_5_30min.csv');
    26. % speed = xlsread('3_1_link1_1_5_30min.csv');
    27. %% z-鍒嗗�兼爣鍑嗗寲
    28. X = speed';
    29. mu = mean(X);
    30. sigma = sqrt(var(X));
    31. Z = (X-mu)/sigma;
    32. %% PAA
    33. k = 2;
    34. N = length(X);
    35. m = ceil(N/k);
    36. if ceil(N/k)-floor(N/k) == 0
    37. for i = 1:m
    38. X2(i) = 1/k * sum(Z(k*(i-1)+1:k*i));
    39. end
    40. else
    41. for i = 1:m-1
    42. X2(i) = 1/k * sum(Z(k*(i-1)+1:k*i));
    43. end
    44. X2(m) = 1/(N-k*(m-1)) * sum(Z(k*(m-1)+1:N));
    45. end
    46. %% 鐢熸垚RPM鍥�
    47. M = repmat(X2,m,1) - repmat(X2',1,m);
    48. F = (M - min(M(:))) / (max(M(:))) - min(M(:)) * 255;
    49. h = figure(2);
    50. set(gcf,'position',[800 300 500 420])
    51. imagesc(F)
    52. title('鐩稿浣嶇Щ鐭╅樀(RPM)')
    53. saveas(h,'RPM_11.bmp')

    3.结果

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

  • 相关阅读:
    QT 连接SQLServer数据库
    小白学习Cobalt Strike4.5(一)
    【HTML5】弹性盒子实现导航栏和留言框
    【Qt】桌面应用开发教程——布局|按钮组|容器|常用控件|消息事件机制
    异硫氰酸荧光素,CAS号: 3012-71-3
    两利好因素携手而至 美元指数或逼近年内高点?
    动态代理解决方案
    java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw
    浅谈微信小程序的功能定位和使用场景
    Linux cp 命令使用介绍
  • 原文地址:https://blog.csdn.net/weixin_41406486/article/details/127815538