插值函数

2 投票
5 回答
757 浏览
提问于 2025-04-17 15:03

这个问题可能看起来很简单,但我找到的关于在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)

撰写回答