ASAM MDF measurement data file parser

8.8.1 · active · verified Sun Apr 12

asammdf is a Python library for parsing and manipulating ASAM MDF (Measurement Data Format) files. It supports MDF versions 3 and 4, providing robust tools for reading, writing, and modifying measurement data. The library is currently at version 8.8.1 and maintains a frequent release cadence, often pushing several bug fix releases per month.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to create an MDF file with sample data, save it, and then load it to retrieve signal information. It uses `MDF` as a context manager for proper file handling and showcases basic signal creation and access by name.

import numpy as np
from asammdf import MDF, Signal
import os

# Create a dummy MDF file for demonstration
file_name = "example.mdf"

# Ensure clean slate for quickstart run
if os.path.exists(file_name):
    os.remove(file_name)

# 1. Create some dummy signals
time_stamps = np.arange(0, 10, 0.1)
signal1_data = np.sin(time_stamps)
signal2_data = np.cos(time_stamps)

s1 = Signal(samples=signal1_data, timestamps=time_stamps, name='Engine_Speed', unit='rpm')
s2 = Signal(samples=signal2_data, timestamps=time_stamps, name='Vehicle_Speed', unit='km/h')

# 2. Write signals to a new MDF file (using context manager)
with MDF(version='4.10') as mdf_writer:
    mdf_writer.append([s1, s2], comment='Basic measurement data')
    mdf_writer.save(file_name, overwrite=True)

print(f"Dummy MDF file '{file_name}' created successfully.\n")

# 3. Read the MDF file back
with MDF(file_name) as mdf_reader:
    print(f"File version: {mdf_reader.version}")
    print(f"Available channels: {mdf_reader.channels}")

    # 4. Access a specific signal by name
    engine_speed_signal = mdf_reader.get('Engine_Speed')

    if engine_speed_signal:
        print(f"\nSignal 'Engine_Speed' unit: {engine_speed_signal.unit}")
        print(f"Signal 'Engine_Speed' samples (first 5): {engine_speed_signal.samples[:5]}")
        print(f"Signal 'Engine_Speed' timestamps (first 5): {engine_speed_signal.timestamps[:5]}")

    # 5. Select multiple signals
    selected_signals = mdf_reader.select(channels=['Engine_Speed', 'Vehicle_Speed'])
    print(f"\nSelected signals count: {len(selected_signals)}")

# Clean up the dummy file
if os.path.exists(file_name):
    os.remove(file_name)
print(f"\nDummy MDF file '{file_name}' cleaned up.")

view raw JSON →