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

Interpolation of time series data with multiple samples at the same time

我正在尝试对我的时间序列数据进行插值,使其位于均匀间隔的时间线上,我正在使用以下代码

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

但此错误消息不断出现,我不确定为什么

Error using griddedInterpolant
The grid vectors are not strictly monotonic increasing.

Error in interp1 (line 183)
F = griddedInterpolant(X,V,method);

这是部分时间序列的样子

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];

您收到此错误是因为您的输入数据中显然有重复的时间。您将需要以某种方式处理这些重复项。一种方法是每次仅使用重复值的 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');