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-执行如下线性插值:

例如,我有

在此处输入图像描述

我想要这样的东西:

在此处输入图像描述

在时间重复的情况下,如重复60秒,应删除重复

您可以使用删除重复项(保留第一个值(

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,因为我通常想设置数据点的数量,而不是点之间的空间,但也可以使用min(time):max(time)time(1):time(end)

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

函数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会删除第二个重复项,而不是第一个。

最新更新