我正在尝试插入我的时间序列数据,以便它在均匀间隔的时间线上,并且我使用以下代码
% 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];
答案 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');
如果您希望将同一采样时间的所有值一起平均,则可以使用unique
与accumarray
结合使用来为您执行此操作。
%// 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');