插值函数
这个问题可能看起来很简单,但我找到的关于在Matlab中插值的资料都是在讲如何关联两个值。我想要解决的是,如果我有一段8小时内收集的数据,但数据点之间的时间间隔不一样,我该怎么调整这些数据,让时间间隔变得一致,同时数据也能保持一致呢?
或者换个说法,我一直在尝试的方式是:我有这些点的GPS经纬度和Unix时间;我想做的是拿时间1和时间3的经纬度,如果我不知道时间2的值,就用时间1的数据来填充它——有没有什么有效的方法可以做到这一点?(我知道在像Python Pandas这样的工具中可以用fill来实现)但我不太确定在Matlab中该怎么做。
5 个回答
2
你可以在MATLAB中查看拟合方法。比如说,你可以看看 polyfit
或者 splines
。
我们先来看看 polyfit
,使用的方法是:
P = polyfit(X,Y,N);
这里的X是你的时间数据,Y是你在这些时间点上测量的GPS数据。N是多项式的阶数。当你计算出P后,就可以使用 polyval
函数,方法如下:
Y1 = polyval(P,X1);
这里的X1是均匀的时间样本,比如说X1=[1 2 3 4 5 6 7 8],而Y1就是在这些时间点上估算出来的数据,P就是你用 polyfit
计算出来的结果。
2
你可以试试下面这样的代码:
resampledTime = min(unixTime):resampleInterval:max(unixTime);
resampledLat = interp1(time,lat,resampledTime);
resampledLon = interp1(time,lon,resampledTime);
默认情况下,这个代码会返回一维的线性插值。如果想了解更多信息,可以查看 help interp1
。
2
你可以使用interp1这个函数。这个函数可以用不同的方式来为新的X系列填充数字。比如说,如果你有:
x=[1 3 5 6 10 12]
y=[15 20 17 33 56 89]
这就意味着,如果你想要为x1=[1 2 3 4 5 6 7 ... 12]填充数据,你只需要输入:
y1=interp1(x,y,x1)