4

在下图的顶部,我们可以看到一些值(y 轴)随时间(x 轴)而变化。

发生这种情况时,我们在不同且不可预测的时间对值进行采样,并且我们在两个数据集之间交替采样,用红色和蓝色表示。

在任何时候计算值时,我们预计红色和蓝色数据集都会返回相似的值。然而,如三个较小的方框所示,情况并非如此。随着时间的推移,来自每个数据集(红色和蓝色)的值将出现分歧,然后收敛于原始值。

显示插值误差的图表

最初我使用线性插值来获得一个值,接下来我尝试使用 Catmull-Rom 插值。前者导致一个值靠近在一起,然后在每个数据点之间漂移;后者导致值保持更接近,但平均误差更大。

任何人都可以提出另一种策略或插值方法来提供更大的平滑度(也许通过使用来自每个数据集的更多样本点)?

4

5 回答 5

2

我相信你问的是一个没有直接答案的问题,如果没有对底层抽样过程的进一步了解。就其本质而言,样本之间的函数值可以仅仅是任何东西,所以我认为没有办法保证两个样本数组的插值的收敛性。

也就是说,如果您对底层过程有先验知识,那么您可以在几种插值方法中进行选择,以最大限度地减少错误。例如,如果你测量阻力作为机翼速度的函数,你知道关系是平方的 (a*V^2)。然后你可以选择二阶多项式拟合,并且在两个系列的插值之间有很好的匹配。

于 2010-11-29T22:13:30.360 回答
1

我想引用Catmull-Rom Splines 简介来建议不要将 Catmull-Rom 用于此插值任务。

Catmull-Rom 样条的特点之一是指定的曲线将通过所有控制点 - 这并非适用于所有类型的样条。

根据定义,您的红色插值曲线将通过所有红色数据点,而您的蓝色插值曲线将通过所有蓝色点。因此,您不会得到两个数据集的最佳拟合。

您可以更改边界条件并使用两个数据集中的数据点进行分段近似,如这些幻灯片中所示。

于 2010-11-29T22:42:53.597 回答
1

尝试B 样条:Catmull-Rom 插值(遍历数据点),B 样条进行平滑处理。
例如,对于均匀间隔的数据(不是你的情况)

Bspline(t) = (data(t-1) + 4*data(t) + data(t+1)) / 6

当然插值的红/蓝曲线取决于红/蓝数据点的间距,所以不能完美匹配。

于 2010-11-30T10:34:58.130 回答
1

我同意 ysap 的观点,即无法像您期望的那样回答这个问题。可能有更好的插值方法,具体取决于您的模型动态 - 与 ysap 一样,如果已知,我推荐使用底层动态的方法。

关于红色/蓝色样本,我认为您已经对采样和插值数据集进行了很好的观察,我会挑战您最初的期望:

在任何时候计算值时,我们预计红色和蓝色数据集都会返回相似的值。

我不希望这样。如果您假设您不能完美地插值 - 特别是如果插值误差与样本中的误差相比很大 - 那么您肯定会有一个连续误差函数,该函数从您的样本点中表现出最长(时间)的最大误差。因此,具有不同样本点的两个数据集应该表现出您看到的行为,因为远离红色样本点(及时)的点可能靠近(及时)蓝色样本点,反之亦然 - 如果您的点交错,这肯定是真的。因此,我希望您展示的内容是:

随着时间的推移,来自每个数据集(红色和蓝色)的值将出现分歧,然后收敛于原始值。

(如果您没有有关基本动态的信息(频率内容除外),那么 Giacomo 关于采样的观点是关键 - 但是,如果查看 Nyquist 下方的信息,则无需进行插值。)

于 2010-12-30T01:51:17.577 回答
0

在对原始连续函数进行采样时,采样频率应符合Nyquist-Shannon 采样定理,否则采样过程会引入误差(也称为混叠)。两个数据集中的错误不同,因此在您进行插值时会产生不同的值。

因此,您需要知道原始函数的最高频率B,然后收集频率至少为2B的样本。如果您的函数具有非常高的频率并且您无法快速采样,那么您至少应该在采样之前尝试将它们过滤掉。

于 2010-12-02T09:26:36.367 回答