This is a simple libraray for reading and processing binary files generated by Rhode and Schwarz oscilloscopes. This library is based on guessing what the content of .bin and Wfm.bin files might mean. It works well for my needs but might fail for many other use cases.
In the most simple case, you have a .bin file with a single acquisition with a limited number of samples. In this case, processing the data is easy.
from rs_file_reader import RS_File
rs_file=RS_File('my_file.bin')
file_content=rs_file.getAsDf()
file_content
now contains a pandas DataFrame which you can easily process.
You migth have used the oscilloscope's history function, e.g. in fast segmentation mode of because you were requesting averaging. In this case, the file might contain multiple acquisitions. If you call getAsDf without parameters you will get all acquistions, one after another. To separate acquisitions, you need to provide an acquisition parameter. E.g. in the following we iterate over all acquistitions:
rs_file=RS_File('my_file.bin')
acquisitions=rs_file.no_acquisitions
for acq in acquisitions:
content_one_acq=rs_file.getAsDf(acquisition=acq)
print(content_one_acq)
One of the great features of R&S oscilloscopes is their large memory depth. However, this poses some challenges to processing the generated data. One way to deal with large amounts of data is to process the raw ADC data.
For this purpose RS_File
provides the method getRaw
which will return the data in the format saved by the oscilloscope without further processing.
Note that the oscilloscope will only save raw adc data, if you enabled that feature. If saving raw adc data is disabled, getRaw
will return floating point numbers as the were saved by the oscilloscope.
Note, that again you can access single acquisitions via the acquisition parameter:
rs_file=RS_File('my_file.bin')
for acq in acquisitions:
content_one_acq=rs_file.getRaw(acquisition=acq)
print(content_one_acq)
If you have very large files, inspecting them is an issue. RS_analysis
provides some functions for inspection. E.g. a 2D histogram can be useful:
from rs_file_reader import RS_File, RS_analysis
from matplotlib import pyplot as plt
rs_file=RS_File('my_file.bin')
rs_analysis=RS_analysis(rs_file)
histogram, extent=rs_analysis.get_2d_histo(source)
dx=extent[1]-extent[0]
dy=extent[3]-extent[2]
aspect=dx/dy*0.5
plt.imshow(np.flip(histogram,1).transpose(), aspect=aspect, cmap='gist_stern', extent=extent)
plt.tight_layout()
plt.show()
There is also a small gui for inspection.
from rs_file_reader import plot_gui
plot_gui()
If you have rs_file_reader installed as a package you can also open the gui from the terminal via:
python3 -m rs_file_reader
RS_File
and RS_analysis
contain some more functionality. For now documention is availbale in the source code only. Hopefully, I'll soon be able to post a link to sphinx generated documentation.
Unit tests are contained in the tests folder. If you make changes, make sure they pass.