示例#1
0
    def export_to_mf4(self):
        print("exporting to mf4")
        timestamps = np.array(self.data['t'])
        voltages = Signal(samples=np.array(self.data['v'], dtype=np.float32),
                          timestamps=timestamps,
                          name='Voltage',
                          unit='V')
        currents = Signal(samples=np.array(self.data['c'], dtype=np.float32),
                          timestamps=timestamps,
                          name='Current',
                          unit='A')
        powers = Signal(samples=np.array(self.data['p'], dtype=np.float32),
                        timestamps=timestamps,
                        name='Power',
                        unit='W')
        capacities = Signal(samples=np.array(self.data['cap'],
                                             dtype=np.float32),
                            timestamps=timestamps,
                            name='Capacity',
                            unit='AH')

        mdf4 = MDF(version='4.10')
        signals = [voltages, currents, powers, capacities]
        mdf4.start_time = self.start_time
        mdf4.append(signals, comment='Battery test: {}'.format(self.cell_id))
        mdf4.save("test.mf4", overwrite=True)
        return mdf4
示例#2
0
    def test_mixed(self):

        t = np.arange(15, dtype="<f8")

        s1 = Signal(
            np.frombuffer(b"\x00\x00\x00\x02" * 15, dtype=">u4"), t, name="Motorola"
        )

        s2 = Signal(
            np.frombuffer(b"\x04\x00\x00\x00" * 15, dtype="<u4"), t, name="Intel"
        )

        for version in ("3.30", "4.10"):
            mdf = MDF(version=version)
            mdf.append([s1, s2], common_timebase=True)
            outfile = mdf.save(
                Path(TestEndianess.tempdir.name) / f"out", overwrite=True
            )
            mdf.close()

            with MDF(outfile) as mdf:
                self.assertTrue(np.array_equal(mdf.get("Motorola").samples, [2] * 15))
                self.assertTrue(np.array_equal(mdf.get("Intel").samples, [4] * 15))

        for version in ("3.30", "4.10"):
            mdf = MDF(version=version)
            mdf.append([s2, s1], common_timebase=True)
            outfile = mdf.save(
                Path(TestEndianess.tempdir.name) / f"out", overwrite=True
            )
            mdf.close()

            with MDF(outfile) as mdf:
                self.assertTrue(np.array_equal(mdf.get("Motorola").samples, [2] * 15))
                self.assertTrue(np.array_equal(mdf.get("Intel").samples, [4] * 15))
示例#3
0
文件: bench.py 项目: suertang/asammdf
def save_mdf4(path, output, fmt):
    os.chdir(path)
    x = MDF(r'test.mf4')
    with Timer('Save file',
               'asammdf {} mdfv4'.format(asammdf_version),
               fmt) as timer:
        x.save(r'x.mf4', overwrite=True)
    output.send([timer.output, timer.error])
示例#4
0
文件: bench.py 项目: yahym/asammdf
def save_mdf3(path, output, fmt, memory):
    os.chdir(path)
    x = MDF(r'test.mdf', memory=memory)
    with Timer('Save file',
               'asammdf {} {} mdfv3'.format(asammdf_version,
                                            memory), fmt) as timer:
        x.save(r'x.mdf', overwrite=True)
    output.send([timer.output, timer.error])
示例#5
0
文件: bench.py 项目: suertang/asammdf
def save_mdf4_nodata(path, output, fmt):
    os.chdir(path)
    x = MDF(r'test.mf4', load_measured_data=False)
    with Timer('Save file',
               'asammdf {} nodata mdfv4'.format(asammdf_version),
               fmt) as timer:
        x.save(r'x.mf4', overwrite=True)
    output.send([timer.output, timer.error])
示例#6
0
def all_mdf3_nodata():
    os.chdir(path)
    with Timer('asammdf {} mdfv3 nodata'.format(asammdf_version)):
        x = MDF(r'test.mdf', load_measured_data=False)
        for i, gp in enumerate(x.groups):
            for j in range(len(gp['channels'])):
                y = x.get(group=i, index=j, samples_only=True)
        x.save(r'x.mdf', overwrite=True)
示例#7
0
def all_mdf4():
    os.chdir(path)
    with Timer('asammdf {} mdfv4'.format(asammdf_version)):
        x = MDF(r'test.mf4')
        for i, gp in enumerate(x.groups):
            for j in range(len(gp['channels'])):
                y = x.get(group=i, index=j, samples_only=True)
        x.save(r'x.mf4', overwrite=True)
示例#8
0
    def test_mixed(self):

        t = np.arange(15, dtype='<f8')

        s1 = Signal(
            np.frombuffer(b'\x00\x00\x00\x02' * 15, dtype='>u4'),
            t,
            name='Motorola'
        )

        s2 = Signal(
            np.frombuffer(b'\x04\x00\x00\x00' * 15, dtype='<u4'),
            t,
            name='Intel'
        )

        for version in ('3.30', '4.10'):
            mdf = MDF(version=version)
            mdf.append([s1, s2], common_timebase=True)
            outfile = mdf.save(
                Path(TestEndianess.tempdir.name) / f"out",
                overwrite=True,
            )
            mdf.close()

            with MDF(outfile) as mdf:
                self.assertTrue(
                    np.array_equal(
                        mdf.get('Motorola').samples, [2,] * 15
                    )
                )
                self.assertTrue(
                    np.array_equal(
                        mdf.get('Intel').samples, [4,] * 15
                    )
                )

        for version in ('3.30', '4.10'):
            mdf = MDF(version=version)
            mdf.append([s2, s1], common_timebase=True)
            outfile = mdf.save(
                Path(TestEndianess.tempdir.name) / f"out",
                overwrite=True,
            )
            mdf.close()

            with MDF(outfile) as mdf:
                self.assertTrue(
                    np.array_equal(
                        mdf.get('Motorola').samples, [2,] * 15
                    )
                )
                self.assertTrue(
                    np.array_equal(
                        mdf.get('Intel').samples, [4,] * 15
                    )
                )
示例#9
0
    def test_attachment_blocks_wo_filename(self):
        original_data = b"Testing attachemnt block\nTest line 1"
        mdf = MDF()
        mdf.attach(
            original_data,
            file_name=None,
            comment=None,
            compression=True,
            mime=r"text/plain",
            embedded=True,
        )
        outfile = mdf.save(
            Path(TestMDF4.tempdir.name) / "attachment.mf4", overwrite=True,
        )

        with MDF(outfile) as attachment_mdf:
            data, filename, md5_sum = attachment_mdf.extract_attachment(index=0)
            self.assertEqual(data, original_data)
            self.assertEqual(filename, Path("bin.bin"))

        mdf.close()
示例#10
0
文件: bench.py 项目: sgd218/asammdf
def generate_test_files(version='4.10'):
    cycles = 3000
    channels_count = 2000
    mdf = MDF(version=version)

    if version <= '3.30':
        filename = r'test.mdf'
    else:
        filename = r'test.mf4'

    if os.path.exists(filename):
        return filename

    t = np.arange(cycles, dtype=np.float64)

    cls = v4b.ChannelConversion if version >= '4.00' else v3b.ChannelConversion

    # no conversion
    sigs = []
    for i in range(channels_count):
        sig = Signal(
            np.ones(cycles, dtype=np.uint64) * i,
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            conversion=None,
            comment='Unsigned int 16bit channel {}'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # linear
    sigs = []
    for i in range(channels_count):
        conversion = {
            'conversion_type':
            v4c.CONVERSION_TYPE_LIN
            if version >= '4.00' else v3c.CONVERSION_TYPE_LINEAR,
            'a':
            float(i),
            'b':
            -0.5,
        }
        sig = Signal(
            np.ones(cycles, dtype=np.int64),
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            conversion=cls(**conversion),
            comment='Signed 16bit channel {} with linear conversion'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # algebraic
    sigs = []
    for i in range(channels_count):
        conversion = {
            'conversion_type':
            v4c.CONVERSION_TYPE_ALG
            if version >= '4.00' else v3c.CONVERSION_TYPE_FORMULA,
            'formula':
            '{} * sin(X)'.format(i),
        }
        sig = Signal(
            np.arange(cycles, dtype=np.int32) / 100.0,
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            conversion=cls(**conversion),
            comment='Sinus channel {} with algebraic conversion'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # rational
    sigs = []
    for i in range(channels_count):
        conversion = {
            'conversion_type':
            v4c.CONVERSION_TYPE_RAT
            if version >= '4.00' else v3c.CONVERSION_TYPE_RAT,
            'P1':
            0,
            'P2':
            i,
            'P3':
            -0.5,
            'P4':
            0,
            'P5':
            0,
            'P6':
            1,
        }
        sig = Signal(
            np.ones(cycles, dtype=np.int64),
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            conversion=cls(**conversion),
            comment='Channel {} with rational conversion'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # string
    sigs = []
    for i in range(channels_count):
        sig = [
            'Channel {} sample {}'.format(i, j).encode('ascii')
            for j in range(cycles)
        ]
        sig = Signal(
            np.array(sig),
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            comment='String channel {}'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # byte array
    sigs = []
    ones = np.ones(cycles, dtype=np.dtype('(8,)u1'))
    for i in range(channels_count):
        sig = Signal(
            ones * (i % 255),
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            comment='Byte array channel {}'.format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # value to text
    sigs = []
    ones = np.ones(cycles, dtype=np.uint64)
    conversion = {
        'raw':
        np.arange(255, dtype=np.float64),
        'phys':
        np.array(['Value {}'.format(i).encode('ascii') for i in range(255)]),
        'conversion_type':
        v4c.CONVERSION_TYPE_TABX
        if version >= '4.00' else v3c.CONVERSION_TYPE_TABX,
        'links_nr':
        260,
        'ref_param_nr':
        255,
    }

    for i in range(255):
        conversion['val_{}'.format(i)] = conversion['param_val_{}'.format(
            i)] = conversion['raw'][i]
        conversion['text_{}'.format(i)] = conversion['phys'][i]
    conversion['text_{}'.format(255)] = 'Default'

    for i in range(channels_count):
        sig = Signal(
            ones * i,
            t,
            name='Channel_{}'.format(i),
            unit='unit_{}'.format(i),
            comment='Value to text channel {}'.format(i),
            conversion=cls(**conversion),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    mdf.save(filename, overwrite=True)
示例#11
0
文件: bench.py 项目: GeCr1988/asammdf
def save_mdf3_compressed():
    os.chdir(path)
    x = MDF(r'test.mdf', compression=True)
    with Timer('asammdf {} compression mdfv3'.format(asammdf_version)):
        x.save(r'x.mdf')
示例#12
0
文件: bench.py 项目: GeCr1988/asammdf
def save_mdf3():
    os.chdir(path)
    x = MDF(r'test.mdf')
    with Timer('asammdf {} mdfv3'.format(asammdf_version)):
        x.save(r'x.mdf')
示例#13
0
# float64
s_float64 = Signal(samples=np.array([-20, -10, 0, 10, 20], dtype=np.float64),
                   timestamps=timestamps,
                   name='Float64_Signal',
                   unit='f8')

# create empty MDf version 4.00 file
mdf4 = MDF(version='4.10')

# append the 3 signals to the new file
signals = [s_uint8, s_int32, s_float64]
mdf4.append(signals, 'Created by Python')

# save new file
mdf4.save('my_new_file.mf4', overwrite=True)

# convert new file to mdf version 3.10 with lowest possible RAM usage
mdf3 = mdf4.convert('3.10', memory='minimum')
print(mdf3.version)

# get the float signal
sig = mdf3.get('Float64_Signal')
print(sig)

# cut measurement from 0.3s to end of measurement
mdf4_cut = mdf4.cut(start=0.3)
mdf4_cut.get('Float64_Signal').plot()

# cut measurement from start of measurement to 0.4s
mdf4_cut = mdf4.cut(stop=0.45)
示例#14
0
def generate_arrays_test_file(tmpdir):
    version = "4.10"
    mdf = MDF(version=version)
    filename = Path(tmpdir) / f"arrays_test_{version}.mf4"

    if filename.exists():
        return filename

    t = np.arange(cycles, dtype=np.float64)

    # lookup tabel with axis
    sigs = []
    for i in range(array_channels_count):
        samples = [
            np.ones((cycles, 2, 3), dtype=np.uint64) * i,
            np.ones((cycles, 2), dtype=np.uint64) * i,
            np.ones((cycles, 3), dtype=np.uint64) * i,
        ]

        types = [
            ("Channel_{}".format(i), "(2, 3)<u8"),
            ("channel_{}_axis_1".format(i), "(2, )<u8"),
            ("channel_{}_axis_2".format(i), "(3, )<u8"),
        ]

        sig = Signal(
            np.core.records.fromarrays(samples, dtype=np.dtype(types)),
            t,
            name="Channel_{}".format(i),
            unit="unit_{}".format(i),
            conversion=None,
            comment="Array channel {}".format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # lookup tabel with default axis
    sigs = []
    for i in range(array_channels_count):
        samples = [np.ones((cycles, 2, 3), dtype=np.uint64) * i]

        types = [("Channel_{}".format(i), "(2, 3)<u8")]

        sig = Signal(
            np.core.records.fromarrays(samples, dtype=np.dtype(types)),
            t,
            name="Channel_{}".format(i),
            unit="unit_{}".format(i),
            conversion=None,
            comment="Array channel {} with default axis".format(i),
            raw=True,
        )
        sigs.append(sig)
    mdf.append(sigs, common_timebase=True)

    # structure channel composition
    sigs = []
    for i in range(array_channels_count):
        samples = [
            np.ones(cycles, dtype=np.uint8) * i,
            np.ones(cycles, dtype=np.uint16) * i,
            np.ones(cycles, dtype=np.uint32) * i,
            np.ones(cycles, dtype=np.uint64) * i,
            np.ones(cycles, dtype=np.int8) * i,
            np.ones(cycles, dtype=np.int16) * i,
            np.ones(cycles, dtype=np.int32) * i,
            np.ones(cycles, dtype=np.int64) * i,
        ]

        types = [
            ("struct_{}_channel_0".format(i), np.uint8),
            ("struct_{}_channel_1".format(i), np.uint16),
            ("struct_{}_channel_2".format(i), np.uint32),
            ("struct_{}_channel_3".format(i), np.uint64),
            ("struct_{}_channel_4".format(i), np.int8),
            ("struct_{}_channel_5".format(i), np.int16),
            ("struct_{}_channel_6".format(i), np.int32),
            ("struct_{}_channel_7".format(i), np.int64),
        ]

        sig = Signal(
            np.core.records.fromarrays(samples, dtype=np.dtype(types)),
            t,
            name="Channel_{}".format(i),
            unit="unit_{}".format(i),
            conversion=None,
            comment="Structure channel composition {}".format(i),
            raw=True,
        )
        sigs.append(sig)

    mdf.append(sigs, common_timebase=True)

    name = mdf.save(filename, overwrite=True)
示例#15
0
    l3_arr,
    l3_arr,
]

types = [
    ("level21", l3_arr.dtype),
    ("level22", l3_arr.dtype),
]

l2_arr = np.core.records.fromarrays(l2_arr, dtype=types)

l1_arr = [
    l2_arr,
]

types = [
    ("level11", l2_arr.dtype),
]

l1_arr = np.core.records.fromarrays(l1_arr, dtype=types)

sigs.append(Signal(
    l1_arr,
    t,
    name="Nested_structures",
))

mdf.append(sigs, "arrays", common_timebase=True)

mdf.save("demo.mf4", overwrite=True)
示例#16
0
def save_mdf4_nodata():
    os.chdir(path)
    x = MDF(r'test.mf4', load_measured_data=False)
    with Timer('asammdf {} nodata mdfv4'.format(asammdf_version)):
        x.save(r'x.mf4', overwrite=True)
示例#17
0
def save_mdf4():
    os.chdir(path)
    x = MDF(r'test.mf4')
    with Timer('asammdf {} mdfv4'.format(asammdf_version)):
        x.save(r'x.mf4', overwrite=True)
示例#18
0
s_int32 = Signal(samples=np.array([-20, -10, 0, 10, 20], dtype=np.int32),
                 timestamps=timestamps,
                 name='Int32_Signal',
                 unit='i4')

# float64
s_float64 = Signal(samples=np.array([-20, -10, 0, 10, 20], dtype=np.int32),
                   timestamps=timestamps,
                   name='Float64_Signal',
                   unit='f8')

# create empty MDf version 4.00 file
mdf4 = MDF(version='4.00')

# append the 3 signals to the new file
signals = [s_uint8, s_int32, s_float64]
mdf4.append(signals, 'Created by Python')

# save new file
mdf4.save('my_new_file.mf4')

# convert new file to mdf version 3.10 with compression of raw channel data
mdf3 = mdf4.convert(to='3.10', compression=True)
print(mdf3.version)
# prints >>> 3.10

# get the float signal
sig = mdf3.get('Float64_Signal')
print(sig)
# prints >>> Signal { name="Float64_Signal":	s=[-20 -10   0  10  20]	t=[ 0.1         0.2         0.30000001  0.40000001  0.5       ]	unit="f8"	conversion=None }