在c#中缩放/插值测量数据

本文关键字:插值 测量 数据 缩放 | 更新日期: 2023-09-27 18:15:00

首先,如果这个问题已经有人问过了,我很抱歉,但是在我对谷歌提供的每个短语的每个链接进行了大约10个小时的深入研究后,我没能找到任何可以帮助我解决问题的东西。

我想做的是:

  1. 我检索了两个excel表格,其中包含来自两个不同科学测量的数据。每页包含的信息可以很容易地与另一页进行比较。这两个表格之间的唯一区别是它们包含的数据点的数量。例如:第一个工作表包含200秒时间跨度的数据,一个点代表1秒。第二张表也包含相同时间跨度的数据,但是有一个点代表0.5秒。

  2. 我要解决的问题是,用更少的数据点来"缩放"表格,这样它们就可以很容易地在单个图表中进行比较,这样图表中的每条线在X轴上使用相同的空间。

我在这个任务中遇到的问题是我缺乏足够的数学背景来创建算法。

我已经用GUI创建了整个应用程序,导入excel表格并使用移动平均线平滑(只有当数据集长度相等时才有用)。

任何可以解释这一点的想法或链接都是欢迎的。

我还想说,我目前拥有的任何代码都与这个问题完全无关,它只是关于一个具有上述功能的额外方法。

提前感谢,marfuc

在c#中缩放/插值测量数据

如果两组数据点之间存在直接相关性-即时间匹配-那么在较小的集合上进行线性插值以生成缺失点可能就足够了。

例如,假设你的第一组数据是:
Time        Value
12:00:00.0  100.0
12:00:01.0  120.0
12:00:02.0  117.5

…第二组是:

Time        Value
12:00:00.0  2.5
12:00:00.5  3.0
12:00:01.0  2.6
12:00:01.5  2.9
12:00:02.0  2.8

我们可以用几种方法来填补第一个列表中的空白,这取决于你之后要对数据做什么。

最简单的方法是对值进行线性插值。如果你的点与你正在寻找的值的距离相等(即:你正在寻找中间点的值),那么只需在缺失点处将它们平均起来:

Time        Value   Lerp
12:00:00.0  100.0
12:00:00.5          110.0
12:00:01.0  120.0
12:00:01.5          118.75
12:00:02.0  117.5

如果采样率相对于输入变化的速率足够高,这是可以的。我见过很多音频处理算法使用这种计算来加倍采样率。当你有高频数据,采样率太低,无法很好地捕捉过渡时,效果就不那么好了。

第二种选择是使用样条函数对一系列点拟合曲线,然后综合缺失点作为曲线上的偏移量。这将为您提供更平滑和更自然的插值,数据中的驼峰看起来更加逼真。如果数据集之间的时间没有很好地对齐,这也将为您提供一种相当好的方法来抵消数据-计算每个点作为沿曲线的偏移量,其距离等于计时偏移量。有很多样条实现可以用来做这个。我建议用Catmull-Rom作为开始算法。

警告:如果你正在对输出进行某种统计分析,那么无论你怎么做,你都不会得到好的结果。如果您的目标是分析,则将较大的组拆分,而不是将数据虚构到较小的组中。