Usage

import RsWaveform

Load waveform files

import RsWaveform

filename = "tests/data/dummy.wv"
wv = RsWaveform.RsWaveform(file=filename)
# default loader + saver will be used which is currently a ".wv" type
# This is the same as wv = RsWaveform.RsWaveform(load=RsWaveform.wv.Load, save=RsWaveform.wv.Save, file=filename)
wv.data[0]
>> array([0.2 + 0.4j, 0.6 + 0.8j])
wv.meta[0]
>> {
    'type': 'SMU-WV',
    'copyright': 'Rohde & Schwarz',
    'comment': 'Test waveform file',
    'clock': 100000000.0,
    'marker': {'marker list 1': [[0, 1], [32, 0], [63, 0]],},
    'control_length': None,
    'control_list': {},
    'level offs': (2.220459, 0.0),
    'date': datetime.datetime(2023, 1, 5, 10, 3, 52),
    'control length': 2,
    'encryption_flag': False,
    'center_frequency': 1000000000.0,
    'scalingfactor': 1
}

Save waveform files

import RsWaveform
import numpy as np
import datetime

wv = RsWaveform.RsWaveform()  # default loader + saver will be used which is currently a ".wv" type
# This is the same as wv = RsWaveform.RsWaveform(load=RsWaveform.wv.Load, save=RsWaveform.wv.Save)
wv.data[0] = np.ones((2,)) + 1j * np.zeros((1,))
# Set values as dict
wv.meta[0].update({
    'type': 'SMU-WV',
    'copyright': 'Rohde & Schwarz',
    'level offs': (2.220459, 0.0),
    'date': datetime.datetime.now(),
    'clock': 100000000.0,
    'control length': 2,

})
# or use the meta data properties
wv.meta[0].comment = 'Test waveform file'
wv.meta[0].marker.update({'marker list 1': [[0, 1], [32, 0], [63, 0]]})
# save to file
wv.save(r"someFileName.wv")

Load iqw files

import RsWaveform

filename = "tests/data/dummy.iqw"
iqw = RsWaveform.Iqw(
    file=filename)  # default loader + saver will be used which is
# currently a ".iqw" type
# This is the same as iqw = RsWaveform.Iqw(load=RsWaveform.iqw.Load,
# save=RsWaveform.iqw.Save, file=filename)
iqw.data[0]
>> array([0.2 + 0.4j, 0.6 + 0.8j])

Save iqw files

import RsWaveform
import numpy as np

iqw = RsWaveform.Iqw()  # default loader + saver will be used which is
# currently a ".iqw" type
# This is the same as iqw = RsWaveform.Iqw(load=RsWaveform.iqw.Load,
# save=RsWaveform.iqw.Save)
iqw.data[0] = np.ones((2,)) + 1j * np.zeros((1,))
iqw.save(r"someFileName.iqw")  # save to file

Load iqtar files

import RsWaveform
import datetime

filename = "tests/data/dummy.iq.tar"
iqtar = RsWaveform.IqTar(file=filename)
# default loader + saver will be used which is
# currently a ".iqw" type
# This is the same as iqtar = RsWaveform.IqTar(load=RsWaveform.iqtar.Load,
# save=RsWaveform.iqtar.Save, file=filename)
iqtar.data[0]
>> array([0.2 + 0.4j, 0.6 + 0.8j])
iqtar.meta[0]
>> {
    'clock': 10000.0,
    'scalingfactor': 1.0,
    'datatype': 'float32',
    'format': 'complex',
    'name': 'Python iq.tar Writer (iqdata.py)',
    'comment': 'RS WaveForm, TheAE-RA',
    "datetime": datetime.datetime(2023, 3, 1, 10, 19, 37, 43312),
}

Save iqtar files

import RsWaveform
import datetime

iqtar = RsWaveform.IqTar()
# default loader + saver will be used which is
# currently a ".iqw" type
# This is the same as iqtar = RsWaveform.IqTar(load=RsWaveform.iqtar.Load,
# save=RsWaveform.iqtar.Save, file=filename)
iqtar.data[0] = np.ones((2,)) + 1j * np.zeros((1,))
# Set values as dict
iqtar.meta[0] = {
    'clock': 10000.0,
    'scalingfactor': 1.0,
    'datatype': 'float32',
    'format': 'complex',
    'name': 'Python iq.tar Writer (iqdata.py)',
    "datetime": datetime.datetime.now(),
}
# or use the meta data properties
iqtar.meta[0].comment = 'RS WaveForm, TheAE-RA'
# save to file
iqtar.save("somefilename.iq.tar")

Digital signal processing utilites

The RsWaveform package provides also these convenience functions for digital signal processing

  • normalize

  • calculate_peak - output as dB

  • calculate_rms - output as dB

  • calculate_par - output as dB

  • convert_to_db - amplitude based

You can use them as following

import RsWaveform
import numpy as np

data = RsWaveform.normalize(np.ones((2,)) + 1j * np.zeros((1,)))

RsWaveform.calculate_peak(data)
>> 0.0
RsWaveform.calculate_rms(data)
>> 0.0
RsWaveform.calculate_par(data)
>> 0.0

Running the tests

To run the tests, run the following command:

$ pip install tox
$ tox -e pytest

This will run all the tests for the package and report any issues or failures. Make sure that you have installed the necessary dependencies before running the tests.