0

当我使用 asammdf (Python 3.7) 从 mdf (.mf4) 文件中读取时,一旦样本计数越过障碍,时间戳就会再次从接近 0 开始计数,就像溢出一样:对于 29045 行的 3 个文件,由于某种原因,一个文件位于 27234 行。这意味着当我使用类似的方法resampleto_dataframe在这些方法期间发生的插值时,我会得到错误的数据。

我在文档中没有找到任何类似的东西,除了文档之外几乎没有任何资源。我认为这可能与块大小或内存分配有关,但我不知道该怎么做或为什么会发生这种情况。

现在我通过标准方法阅读它

mdf = MDF(file)

我编写了一个小脚本来读取文件并绘制转换(插值)数据和原始数据点之间的差异,以展示我的意思:

import tkinter as tk
from tkinter import filedialog as fd
from asammdf import MDF
from matplotlib import pyplot as plt

typeStr = '*.mf4'
root = tk.Tk()
root.wm_attributes('-topmost', 1)
root.withdraw()
files = fd.askopenfilenames(parent=root,filetypes=[("Measurement MF4 file",typeStr)])

for file in files:
    mdf = MDF(file)

    # conversion to pandas
    data = mdf.to_dataframe()
    data['Time [s]'] = list(data.index)
    columns = data.columns.tolist()
    columns.remove('Time [s]')
    columns.insert(0,'Time [s]')
    data = data[columns]
    plt.plot(data['Time [s]'], data[columns[1]],label="converted")

    # original data
    chData = mdf.get(columns[1])
    plt.plot(chData.timestamps, chData.samples, label="original")

    plt.legend()
    plt.show()

可以在此处访问示例文件:

Dropbox 上的示例文件

一个情节的例子:

绘制比较

4

2 回答 2

0

我发现问题实际上是由asammdf图书馆引起的(不知何故)。我无法真正指出是哪个版本导致了问题,因为我更新了所有库 - 之后它就起作用了。目前我正在运行版本5.13.13,正确读取时间戳不再有问题。

编辑:不幸的是,事实证明这不是真的。我怀疑录制程序(来自 AVL 的 PUMA Testbench 软件),但我不确定。我现在正在使用一种解决方法,我将一个新的全局时间戳拼接在一起,然后沿此插入所有通道。它比库函数慢,但至少它摆脱了错误。

于 2019-12-04T15:10:19.850 回答
0

感谢您提供示例文件,我将查看它。您可以随时在 github 存储库中提出问题

编辑:文件已损坏,因为时间通道不是单调增加的,在样本索引 29045 处它被重置

>>> ch.timestamps[29040:29050]
array([290.47998, 290.48998, 290.49998, 290.50998, 290.51998, 290.52998,
         0.87998,   0.88998,   0.89998,   0.90998])

最初记录此文件的应用程序是什么?

于 2019-11-20T15:23:59.640 回答