重新划分锯齿状测试数据

Remesh jagged test data

背景

我有 4 组有刷直流电机的数据都是从同一个实验中收集的

  1. 扭矩与速度(T 与 w)
  2. 扭矩与效率(T 与 n)
  3. 扭矩与输入功率(T 与 Pin)
  4. 扭矩与输出功率(T 与 Pout)

然而,每个数据集有:


问题

这些差异使我无法在数据集之间进行处理。例如,我无法将单个实验的 T 数组用于我的所有计算,也无法将测量的 Pout 与不同 T 下的计算 Pout (T*w) 进行比较。

对我的数据重新采样以生成大小均匀的 均匀间隔集的最佳方法是什么?


尝试的解决方案

For each data set:
    find domain shared with all sets (max x_0 and min x_N between all x)
    extract indices corresponding to shared domain 
    #(idx = np.where(np.logical_and(x>=xMin,x<=xMax)))
    if set x_0 != shared x_0:
        linearly interpolate for new y_0 based on old x & y, shared x_0, and shared y_0
    Piecewise linear interpolation (my own custom function) of M data points in the set

但是,这仍然给我不一致的结果,因为每个重新划分网格的数据集的 "timestep" 仍然 与数据集不同。


假设

使用scipy的内置插值库为每个数据集生成线性插值函数并简单地填充新数据table相同的开始和停止索引和时间步长。


UPDATE/solution

写出这个问题让我很快意识到 scipy 的 interp1d 函数对我来说是最好的解决方案,尤其是因为我所有的数据点都是线性的。我按如下方式解决了我的问题:

  1. 遍历每个数据集以找到共享域(最小值 T_N、最大值 T_0)
  2. 再次循环(第二个循环必要)并为每个数据集创建interp1d函数
  3. 使用每个插值计算相同的均匀间隔域
  4. 将结果保存到文本文件

如您所说,一种替代方法是为每个数据集计算分段线性插值函数。我会在同一个范围内包括二次和三次样条 class。相反,您可以使用曲线拟合为每个数据集拟合合理的函数。然后,您可以选择 max(T-0) 作为所有拟合函数的起点,同样选择 min(T-N) 作为所有拟合函数的终点。