从 mdf 读取时时间戳未对齐(python,asammdf)

timestamps not aligned when reading from mdf (python, asammdf)

当我使用 asammdf (Python 3.7) 从 mdf (.mf4) 文件中读取时,只要样本计数越过障碍,时间戳就会再次从接近 0 开始计数,就像溢出:对于 3 个文件正好在 29045 行,一个文件由于某种原因在 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()

可在此处访问示例文件:

example file on Dropbox

情节示例:

感谢您提供示例文件,我会看一下。您可以随时在 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])

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

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

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