【问题标题】:Remesh jagged test data重新网格化锯齿状测试数据
【发布时间】:2017-11-28 03:29:51
【问题描述】:

背景

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

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

但是,每个数据集都有:

  • 第一个和最后一个数据对的 x 值略有不同(每个数据集之间的 T_0 和 T_N 不匹配)
  • 每个数据点之间的间距不同(所有数据集的 dT 都不相同)
  • 不同的大小(“T vs w”比“T vs Pin”有更多的数据对)

问题

这些差异使我无法在数据集之间进行处理。例如,我无法将单个实验的 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

但是,这仍然给我带来不一致的结果,因为每个重新划分网格的数据集的“时间步长”仍然因数据集而异。


假设

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


更新/解决方案

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

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

【问题讨论】:

    标签: python interpolation data-processing


    【解决方案1】:

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

    【讨论】:

    • 我的数据点实际上都是 PDF 中的数字化图,图中的线条都是线性的,所以我可以摆脱 interp1d!
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2020-04-02
    相关资源
    最近更新 更多