将时间序列转成图像——相对位置矩阵方法 Matlab实现

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

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=(x_t,t=1,2,\ldots,N)可以通过以下步骤得到RPM图

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

    z_{t}=\frac{x_{t}-\mu}{\sigma}, t=1,2, \ldots, N

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

    \begin{aligned} &\tilde x_{i}=\left\{\begin{array}{l} \frac{1}{k} \sum_{j=k *(i-1)+1}^{k * i} z_{j}, i=1,2, \ldots, m,\left\lceil\frac{N}{k}\right\rceil-\left\lfloor\frac{N}{k}\right\rfloor=0 \\ {\left\{\begin{array}{l} \frac{1}{k} \sum_{j=k *(i-1)+1}^{k * i} z_{j}, i=1,2, \ldots, m-1 \\ \frac{1}{N-k *(m-1)} \sum_{j=k *(m-1)+1}^{N} z_{j}, i=m \end{array},\left\lceil\frac{N}{k}\right\rceil-\left\lfloor\frac{N}{k}\right\rfloor>0\right.} \end{array}\right.\\ &m=\left\lceil\frac{N}{k}\right\rceil \end{aligned}

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

    M=\left[\begin{array}{cccc} \tilde x_{1}-\tilde x_{1} & \tilde x_{2}-\tilde x_{1} & \cdots & \tilde x_{m}-\tilde x_{1} \\ \tilde x_{1}-\tilde x_{2} & \tilde x_{2}-\tilde x_{2} & \cdots & \tilde x_{m}-\tilde x_{2} \\ \vdots & \vdots & \ddots & \vdots \\ \tilde x_{1}-\tilde x_{m} & \tilde x_{2}-\tilde x_{m} & \cdots & \tilde x_{m}-\tilde x_{m} \end{array}\right]

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

    F=\frac{M-\min (M)}{\max (M)-\min (M)} \times 255

2 Matlab代码实现

clc
clear
close all

% %%
% % 閫熷害
% speed_original = round(rand(1,111)*40+40);
% 
% m = length(speed_original);
% 
% % 浣庨熷尯
% low_xu = round((rand()+0.1)*(m - 10));
% low_num = round((rand()+0.2)*15);
% 
% % 鏁版嵁
% speed = speed_original;
% speed(low_xu:low_xu+low_num-1) = round(rand(1,low_num)*20);
% 
% % X = speed;
% 
% % 璁烘枃閲岀殑鏁版嵁
% X = [0 1 2 1 2 3 4 3 2 3 2 1];
% 
% N = length(X);

%% 鐢熸垚鏁版嵁
speed = xlsread('3_1_link6_28_5_30min.csv');
% speed = xlsread('3_1_link1_1_5_30min.csv');

%% z-鍒嗗兼爣鍑嗗寲
X = speed';
mu = mean(X);
sigma = sqrt(var(X));

Z = (X-mu)/sigma;

%% PAA
k = 2;
N = length(X);
m = ceil(N/k);

if ceil(N/k)-floor(N/k) == 0
    for i = 1:m
        X2(i) = 1/k * sum(Z(k*(i-1)+1:k*i));
    end
else
    for i = 1:m-1
        X2(i) = 1/k * sum(Z(k*(i-1)+1:k*i));
    end
    X2(m) = 1/(N-k*(m-1)) * sum(Z(k*(m-1)+1:N));
end

%% 鐢熸垚RPM鍥
M = repmat(X2,m,1) - repmat(X2',1,m);

F = (M - min(M(:))) / (max(M(:))) - min(M(:)) * 255;

h = figure(2);
set(gcf,'position',[800 300 500 420])
imagesc(F)
title('鐩稿浣嶇Щ鐭╅樀(RPM)')
saveas(h,'RPM_11.bmp')

3.结果

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6