不规则时间序列数据插值

时间:2014-06-10 12:48:47

标签: matlab time interpolation

我是Matlab的新手。在使用特定应用程序后,我得到一个文件,其中包含每160ms记录一次的数据加速。

16  25  50  32  234 199 6

16  25  50  192 240 196 3

16  25  50  352 236 199 8

16  25  50  512 238 198 7

16  25  50  671 242 195 11

16  25  50  832 237 198 9

正如我们在这里看到的那样,间隔值在+/- 160ms之间变化,它不是固定的。 第4列设计了'数据时间序列',其余设计了数据加速。

此处采样率不是恒定的。所以我的目标是如何每160ms获得一次数据加速。 我想通过插值重新采样数据加速。 首先,我将我的数据转换为秒

s=data(:,3)+data(:,4)/1000; % convert to seconds+fractions
dt=diff(datenum(2013,1,1,data(:,1),data(:,2),s))*86400;
  

t = cumsum(diff(datenum(2014,06,09,data(:,1),data(:,2),s))* 86400);

sample = interp1(t,data(:,5:end),[0:160:t(end)]);

是正确的吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

我不确定这是否与您diff / cumsum所有内容相关,我认为make t从0开始:

t = datenum(2013,1,1,data(:,1),data(:,2),s)*(24*60*60);
t = t-t(1);
sample = interp1(t,data(:,5:end), 0:0.16:t(end));

这里的想法是我们知道我们想要每0.16秒采样一次,但只相对于开始时间。因此,如果我们将开始时间重置为0,那么我们可以使用0:0.16 :(结束时间 - 开始时间)作为我们的采样向量。使开始时间为0的最简单方法是简单地从整个时间向量中减去开始时间,因此t = t - t(1)。这也使得t(end)的奖励效果等于结束时间减去开始时间。

相关问题