从 mdf 读取时时间戳未对齐(python,asammdf)
timestamps not aligned when reading from mdf (python, asammdf)
当我使用 asammdf (Python 3.7) 从 mdf (.mf4) 文件中读取时,只要样本计数越过障碍,时间戳就会再次从接近 0 开始计数,就像溢出:对于 3 个文件正好在 29045 行,一个文件由于某种原因在 27234 行。这意味着当我使用像 resample
或 to_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()
可在此处访问示例文件:
情节示例:
感谢您提供示例文件,我会看一下。您可以随时在 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 软件),但我不确定。我现在正在使用一种解决方法,我将一个新的全局时间戳拼接在一起,然后沿此插入所有通道。它比库函数慢,但至少它消除了错误。
当我使用 asammdf (Python 3.7) 从 mdf (.mf4) 文件中读取时,只要样本计数越过障碍,时间戳就会再次从接近 0 开始计数,就像溢出:对于 3 个文件正好在 29045 行,一个文件由于某种原因在 27234 行。这意味着当我使用像 resample
或 to_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()
可在此处访问示例文件:
情节示例:
感谢您提供示例文件,我会看一下。您可以随时在 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 软件),但我不确定。我现在正在使用一种解决方法,我将一个新的全局时间戳拼接在一起,然后沿此插入所有通道。它比库函数慢,但至少它消除了错误。