MATLAB 中的线性插值

Linear Interpolation in MATLAB

我有两个数组,第一个代表时间轴,时间戳为 1 分钟

time=[0,60,60,120,180,240,300,360,420,480,540]

第二个数组代表一个数据值如下

data=[18,12,12,0,7,9,6,8,12,18,0]

我想做的是两件事:

1-我想将时间轴固定为1秒时间戳

2-执行线性插值如下:

比如我有

enter image description here

我想要这样的东西:

enter image description here

如果重复 60 秒这样的时间重复,则应删除重复项

函数 interp1 完成工作:

time=[0,60,120,180,240,300,360,420,480,540];
data=[18,15,0,7,9,6,8,12,18,0];
time_1s = 0:540;
data_interpd = interp1(time, data, time_1s);

注意:我在第60次手动删除了第一个重复值。如果只有一个值要删除(总是在同一个地方),我认为最好是使用掩码删除它,因为unique 删除第二次出现的重复项而不是第一个。

您可以使用

删除重复项(保留第一个值)
time = [0,60,60,120,180,240,300,360,420,480,540];
data = [18,12,12,0,7,9,6,8,12,18,0];
[time_u unique_indeces] = unique(time);
data_u = data(unique_indeces);
clear unique_indeces;

并用

插值
time_i = linspace(min(time), max(time), max(time) - min(time) + 1);
data_i = interp1(time_u, data_u, time_i);

我更喜欢linspace因为我通常想设置数据点的数量而不是点之间的space但你也可以使用min(time):max(time)time(1):time(end)代替.

此代码还将按时间对您的数据点进行排序。