绘制长度不同的矢量

时间:2017-03-01 17:44:20

标签: matlab plot time-series interpolation

我试图绘制两个不相同长度的时间序列矢量:

  • E_Real(1x1)双时间序列,1481409个元素"采样率= 0,001"。
  • E_Guess(1x1)双时间序列,384426个元素"采样率= 0,0059"。

MATLAB不会抱怨绘制这两个向量并显示下图:

enter image description here

我的问题是蓝线在红色线之前结束并且它看起来不好(因为矢量的长度不同)。我尝试使用interp1解决此问题:

x = 0:0.0059:1481409; % this will make x a Array of Point from 0 to 1481409    
y = interp1(E_Guess.Time,E_Guess.Data,x);

应根据y创建一个新的向量E_Guess,其长度与E_Real相同。但是,我总是得到y=0而没有任何错误消息。

这种方法有什么问题?

1 个答案:

答案 0 :(得分:1)

我感觉你没有正确使用数据的“x轴”。 看看下面的代码:

function q42538517

y = @(x)0.9/1000*x;
x_Real = linspace(0,1481409*0.001,1481409);
E_Real = y(x_Real);

x_Guess = linspace(0,384426*0.0059,384426);
E_Guess = movmean(y(x_Guess) + 0.1*sin(x_Guess/100) + 0.05*randn(1,384426), ...
                  10, 'Endpoints', 'shrink');

% What you're probably doing:
figure();
plot(E_Guess,'b','LineWidth',3); hold on; plot(E_Real,'r','LineWidth',3); 
ylim([0,2.5]);

% What you probably should be doing:
figure();
plot(x_Guess,E_Guess,'b','LineWidth',3); hold on; plot(x_Real,E_Real,'r','LineWidth',3); 
xlim([0 1500]); ylim([0,1.5]);

分别导致:

enter image description here

enter image description here

由于E_Real时间范围E_Guess1481409*0.001 < 384426*0.0059)更短,因此无需插入较长的以使其适合短片,如上所示,只需切割x轴(通过xlim)。