Matlab 不规则时间序列数据插值

Matlab 不规则时间序列数据插值,matlab,time,interpolation,Matlab,Time,Interpolation,我是Matlab的新手。在使用一个特定的应用程序后,我得到一个文件,其中包含每160毫秒记录一次的数据加速度 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之间变化,它不是固

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

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列设计了“数据时间序列”,其余的设计了数据加速

这里的采样率不是恒定的。所以我的目标是如何每160毫秒获得一次数据加速。 我在考虑通过插值对数据进行重新采样。 首先,我将数据转换为秒

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,数据(:,1),数据(:,2),s))*86400)

对吗


提前感谢

我不确定您是否已经在使用所有的
diff
/
cumsum
东西,我想让
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)
等于结束时间减去开始时间。

那么你是说我的第一个方法由我的第二个方法起作用,不是吗?什么不起作用?谢谢你的回答。但是下面的代码不起作用。我们应该计算读数之间的时差。你说得对,t应该从0开始。t=[0;总和(差异(日期数(2014,06,09,数据(:,1),数据(:,2),s))*86400);我的代码给了我一个结果,但问题是我现在如何计算采样率?它是1/160?我尝试了两次,但它给了我一条错误消息抱歉,我不明白你在说什么。但是,我在代码中发现了错误,它应该以0.16的步长进行,因为
t
是以秒而不是毫秒来测量的。我不知道I don’我不同意你的观点,你不需要这样做。我很确定我的第二段代码现在可以满足你的要求。我感谢你的帮助。非常感谢。我会详细解释我的搜索内容。正如我们所知,通常速率采样(频率采样)应该是一个常量,但正如我们在这里看到的,它是不同的(当您看到间隔之间的值在159160161-第4列之间变化时)…所以我的挑战是让这个速率的值保持不变,因为这个原因,我认为对于插值函数,另一方面,你的代码工作得很好,但是当我看到结果时,0,16 031999 0,48 063899 0,8 095899 1119 1,28 1,44 1,6 1,76 1,92 2,08 2,24 2399 2559 2719 2879 3,04 3199,我仍然看到区间变量之间的差异ies介于159160161之间。不可能将间隔固定为160毫秒(0.16秒)。
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));