同时插入多个样本的时间序列数据

时间:2016-04-15 18:44:58

标签: matlab linear-interpolation

我正在尝试插入我的时间序列数据,以便它在均匀间隔的时间线上,并且我使用以下代码

% interpolate the series
t = 0 : 3 : 400;  
Series 1 = interp1(series 1(:,1),series 1(:,2),t,'linear');

但是这个错误信息不断出现,我不确定为什么

  

使用griddedInterpolant时出错   网格向量不是严格单调递增的。

     

interp1错误(第183行)
          F = griddedInterpolant(X,V,方法);

这是时间序列的一部分

series = [  3.585,  0.21
            5.135,  0.08    
            7.4,    0.19
            11.125, -0.15
            13.175, -0.27
            16.045, -0.26   
            20.37,  -0.12
            25.24,  0.02
            27.58,  0.05
            30.38,  0.02
            33.515  0.1];

1 个答案:

答案 0 :(得分:0)

您收到此错误是因为您的输入数据显然有重复的次数。您需要以某种方式处理这些重复项。一种方法是,每次只使用重复值的 first 。您可以使用unique轻松完成此操作。

[uniqueTimes, ind] = unique(series(:,1));
vals = series(ind, 2);

%// Values at which we want to interpolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);

%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');

如果您希望将同一采样时间的所有值一起平均,则可以使用uniqueaccumarray结合使用来为您执行此操作。

%// Average all values that have the same time
[uniqueTimes, ~, inds] = unique(series(:,1));
vals = accumarray(inds, series(:,2), [], @mean);

%// Values at which we want to inteprolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);

%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');