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.