You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用asammdf生成MDF文件时时间索引错误的技术求助

解决asammdf生成MDF文件时长错误问题

问题说明

使用Python的pandas DataFrame结合asammdf生成MDF文件,数据采样间隔为0.015秒,但生成的MDF文件显示总时长约11小时,而DataFrame实际时长仅约9分钟。推测asammdf默认将每个数据点视为1秒间隔,导致时间被放大了约66.6倍(1/0.015)。DataFrame包含datetime或Unix时间格式的时间列,但不清楚如何利用这些列让MDF文件显示正确时间,官方文档未找到对应方案。

解决方案

核心问题是mdf_obj.append(df)默认会把DataFrame的行索引当作秒级时间戳,而非使用自定义的TIME列。解决方法是手动将TIME列转换为asammdf要求的微秒级时间基准,作为信号的时间戳参数传入:

步骤说明

  1. 将datetime格式的TIME列转换为微秒级Unix时间戳(asammdf默认时间基准为微秒)
  2. 为每个数据信号创建Signal对象,明确指定对应的时间戳
  3. 将Signal对象添加到MDF实例中

修改后的代码示例

import pandas as pd 
import numpy as np 
from asammdf import MDF, Signal

data = {
    "TIME": pd.date_range(start='2024-01-01', periods=200, freq='15ms'),
    "FLOAT_SIGNAL": np.random.rand(200),
}
df = pd.DataFrame(data)

# 将datetime转换为微秒级Unix时间戳
# pandas datetime64转int64为纳秒,除以1000转为微秒
timestamps = df["TIME"].astype(np.int64) // 1000  

# 创建带时间戳的Signal对象
float_signal = Signal(
    samples=df["FLOAT_SIGNAL"].values,
    timestamps=timestamps,
    name="FLOAT_SIGNAL",
    unit="",  # 可根据实际需求填写信号单位
    comment="Generated from pandas DataFrame"
)

# 初始化MDF并添加信号
mdf_obj = MDF()
mdf_obj.append([float_signal])

mdf_obj.save(f"C:\\Users\\user\\Desktop\\output.mdf", compression=2)

补充说明

  • 若TIME列是秒级Unix时间戳,需乘以1e6转换为微秒级后再传入timestamps参数
  • 手动指定时间戳后,MDF文件会基于真实时间间隔计算总时长,不再默认按1秒/数据点处理

内容的提问来源于stack exchange,提问作者jB777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 17:12:27