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)
代替.
此代码还将按时间对您的数据点进行排序。
我有两个数组,第一个代表时间轴,时间戳为 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)
代替.
此代码还将按时间对您的数据点进行排序。