Change Logs

PyRF 2.10.0

  • sweep_device: Added function to disable spectral flattening.
  • devices/ Correctly sets the level trigger type.
  • devices/ Strip n from scpiresponse when doing a compare.
  • Support setting time out on connect.
  • connectiors/blocking: Add a try-catch around socket read.
  • Added timeout on SCPI receive.
  • Added timeout to SCPI/VRT connect.
  • sweep_device: Comment and handle errors in _vrt_receive.
  • sweep_device: Clean up and error handle SweepDevice init.
  • sweep_device: Comment and add error handling in correction_vector_aquire.
  • connectors/twisted_async: Clean up code and change raised error.
  • sweep_device: Change how the interpolation is done on the correction vector.
  • device/thinkrf: Rename size and data to correction_size and correction_data.
  • connectors/twisted_async: Added time out error handling.
  • sweep_device: Support error handling.
  • connectors/twisted_async Support reading the full buffer.
  • sweep_device: Add support for spectral flattening for signals and noise floor.
  • devices/thinkrf: Add size and data commands.
  • connectors/ Fix bug where data transfer would transfer everything but the newline.
  • connectors/twisted_async Add timeout to SCPI transfers.
  • connectors/twisted_asyc: Support async SCPI block data.
  • Block responses have a trailing NL on them, but we don’t want to return that as part of the data.
  • Adding block data response handling to the blocking connector.
  • Removing model name dependencies from PyRF code and moving it all into the properties file.
  • Add support for all R55xx and R57xx models.
  • Fixed occupied bandwidth calculation.
  • Fixed channel power & occupied bandwidth calculation.
  • Found a couple more instances of R5500 specific behaviour that wasn’t being applied to R5700s.
  • Adjusted inheritance for R5500-427 so it properly inherits SWEEP_SETTINGS from 418 instead of 408. This fix reflects the additional control of the psfm_gain available on these units. Also corrected attenuation value.
  • Due to R5700, GNSS is now a valid value for pll_reference().
  • Attenuation still depends on model in some cases.
  • Avoid situations where we fail if the requested capture is too small.
  • Fixed some edge cases where, after stitching together the IBWs, there would be a 0 entry in the result where data wasn’t copied. This usually occurred at the end of the sweep.
  • Removed references to the long-ago-removed rtsa-gui from
  • Added callback function to sweepdevice which gets called when geolocation fields are changed during a sweep operation.
  • Improved support for R5700. Check for invalid values in geolocation fields, create R5700 properties object with GPS_AVAILABLE property.

PyRF 2.9.1

  • Fixed proper plot mapping of bandwidth & frequencies in some examples
  • Updated this PyRF Manual/Documentation
  • Added more examples

PyRF 2.9.0


  • Added GNSS support for R5700 RTSA products including VRT GNSS context packet
  • Added support for R5500 products
  • Added flush and reset to capture setup
  • Added calibrate_time_domain() function for a given time-domain data point
  • Added calculate_occupied_bw() function for a given spectrum and occupied percentage
  • Refactored sweep_device functions
  • Restructured ThinkRF device properties and removed deprecated ones
  • Improved IQ offset algorithm
  • Enabled “100 kHz span” (HDR mode) for R5500 products
  • Enabled trigger feature
  • Changed Baseband (DD mode)’s MIN_TUNABLE to 32.25 MHz
  • Changed R5500’s minimum frequency to 10 kHz
  • Changed WSA5000’s minimum frequency to 100 kHz
  • Changed minimum sample size for sweep to be 32
  • Fixed zero-span setting
  • Fixed bugs related to RBW setup
  • Fixed bugs related sweep setup
  • Fixed lock-up issue due to unexpected data packet received
  • Fixed attenuation setting for R5500
  • Fixed sample sizes being off by 32 samples
  • Fixed capture_device bug related to number of data points
  • Fixed bugs related to CSV file and settings

PyRF 2.8.0


  • Removed RTSA Instructions from the web page
  • Fixed windows installation instructions
  • Added capture spectrum function
  • Added find peak function
  • Added Measure noisefloor function
  • Changed default span settings
  • Added saturation level value for each device

PyRF 2.7.2


  • Added capture control widget
  • Changed default save file names to represent date and time of capture
  • Fixed baseband mode frequency axis issue
  • Netifaces library is no longer a hard requirement
  • Improved overall marker controls
  • Added ‘Enable mouse tune’ option to frequency widget
  • Default HDR gain is now 25

PyRF 2.7.1


  • Discovery widget now queries for new WSA’s on the network every 10 seconds
  • Fixed issue where switching from sweep to non-sweep wrongly changed center frequency
  • Fixed issue where Minimum control not behaving as designed
  • Fixed issue where trigger controls were not disabled for non-trigger modes
  • Fixed frequency axis texts
  • Y-axis in the persistence plot now corresponds with spectral plot’s y-axis

PyRF 2.7.0


  • All control widgets are now dockable
  • Enabled mouse control of spectral plot’s y-axis
  • Added lower RBW values in non-sweep modes

PyRF 2.6.2


  • HDR gain control in GUI now allows values up to +20 dB
  • Sweep ZIF (100 MHz steps) now only shown in GUI when developer menu is enabled
  • GUI PLL Reference control now works in Sweep mode
  • Darkened trace color in GUI for attenuated edges and dc offset now matches trace color
  • Alternate sweep step color in GUI now matches trace color
  • DC offset region now limited to middle three bins in GUI (was expanding when decimation was applied)
  • Correction to usable region in ZIF and SH modes with decimation applied
  • Fixed HDR center offset value
  • Added device information dialog to GUI

PyRF 2.6.1


  • Upload corrected version with changelog

PyRF 2.6.0


  • Added channel power measurement feature to GUI
  • Added Export to CSV feature to GUI for saving streams of processed power spectrum data
  • Added a power level cursor (adjustable horizontal line) to GUI
  • Added reference level offset adjustment box to GUI
  • Trigger region in GUI is now a rectangle to make it visibly different than channel power measurement controls
  • Update mode drop-down in GUI to include information about each mode instead of showing internal mode names
  • Use netifaces for address detection to fix discover issue on non-English windows machines

PyRF 2.5.0


  • Added Persistence plot
  • Made markers drag-able in the plot
  • Added version number to title bar
  • Moved DSP options to developer menu, developer menu now hidden unless GUI run with -d option
  • Rounded center to nearest tuning resolution step in GUI
  • Fixed a number of GUI control and label issues
  • Moved changelog into docs and updated

PyRF 2.4.1


  • Added missing requirement
  • Fixed use with CONNECTOR IQ path

PyRF 2.4.0


  • Improved trigger controls
  • Fixed modes available with some WSA versions

PyRF 2.3.0


  • Added full playback support (including sweep) in GUI
  • Added hdr_gain control to WSA class
  • Added average mode and clear button for traces
  • Added handling for different REFLEVEL_ERROR on early firmware versions
  • Disable triggers for unsupported WSA firmware versions
  • Added free plot adjustment developer option
  • Fixed a number of GUI interface issues

PyRF 2.2.0


  • Added waterfall display for GUI and example program
  • Added automatic re-tuning when plot dragged of zoomed
  • Added recording speca state in recorded VRT files, Start/Stop recording menu
  • Added GUI non-sweep playback support and command line ‘-p’ option
  • Added marker controls: peak left, right, center to marker
  • Redesigned frequency controls, device controls and trace controls
  • Default to Sweep SH mode in GUI
  • Added developer options menu for attenuated edges etc.
  • Refactored shared GUI code and panels
  • SweepDevice now returns numpy arrays of dBm values
  • Fixed device discovery with multiple interfaces
  • Replaced reflevel adjustment properties with REFLEVEL_ERROR value
  • Renamed GUI launcher to rtsa-gui

PyRF 2.1.0


  • Refactored GUI code to separate out device control and state
  • Added SPECA defaults to device properties
  • Restored trigger controls in GUI
  • Added DSP panel to control fft calculations in GUI
  • Fixed a number of GUI plot issues

PyRF 2.0.3


  • Added simple QT GUI example with frequency, attenuation and rbw controls
  • Added support for more hardware versions
  • Fixed plotting issues in a number of modes in GUI

PyRF 2.0.2


  • Removed Sweep ZIF mode from GUI
  • Fixed RFE input mode GUI issues

PyRF 2.0.1


  • Added Sweep SH mode support to SweepDevice
  • Added IQ in, DD, SHN RFE modes to GUI
  • Added IQ output path and PLL reference controls to GUI
  • Added discovery widget to GUI for finding devices
  • Fixed a number of issues

PyRF 2.0.0

  • Added multiple traces and trace controls to GUI
  • Added constellation and IQ plots
  • Added raw VRT capture-to-file support
  • Updated SweepDevice sweep plan calculation
  • Created separate GUI for single capture modes
  • Updated device properties for WSA5000 RFE modes
  • Show attenuated edges in gray, sweep steps in different colors in GUI
  • Added decimation and frequency shift controls to single capture GUI
  • Fixed many issues with WSA5000 different RFE mode support
  • Removed trigger controls, waiting for hardware support
  • Switched to using pyinstaller for better windows build support

PyRF 1.2.0

  • Added WSA5000 support
  • Added WSA discovery example scripts
  • Renamed WSA4000 class to WSA (supports WSA5000 as well)
  • Separated device properties from WSA class

PyRF 1.1.0

  • Fixed some py2exe issues
  • Show the GUI even when not connected

PyRF 1.0.0


  • Switched to pyqtgraph for spectrum plot
  • Added trigger controls
  • Added markers
  • Added hotkeys for control
  • Added bandwidth control
  • Renamed GUI launcher speca-gui
  • Created SweepDevice to generalize spectrum analyzer-type function
  • Created CaptureDevice to collect single captures and related context

PyRF 0.4.0


  • pyrf.connectors.twisted_async.TwistedConnector now has a vrt_callback attribute for setting a function to call when VRT packets are received.

    This new callback takes a single parameter: a pyrf.vrt.DataPacket or pyrf.vrt.ContextPacket instance.

    The old method of emulating a synchronous read() interface from a pyrf.devices.thinkrf.WSA4000 instance is no longer supported, and will now raise a pyrf.connectors.twisted_async.TwistedConnectorError exception.

  • New methods added to pyrf.devices.thinkrf.WSA4000: abort(), spp(), ppb(), stream_start(), stream_stop(), stream_status()

  • Added support for stream ID context packets and provide a value for sweep ID context packet not converted to a hex string

  • wsa4000gui updated to use vrt callback

  • “wsa4000gui -v” enables verbose mode which currently shows SCPI commands sent and responses received on stdout

  • Added examples/ example for testing stream data rate

  • Updated examples/ for new vrt_callback

  • Removed pyrf.twisted_util module which implemented old synchronous read() interface

  • Removed now unused pyrf.connectors.twisted_async.VRTTooMuchData exception

  • Removed wsa4000gui-blocking script

  • Fix for power spectrum calculation in pyrf.numpy_util

PyRF 0.3.0


  • API now allows asynchronous use with TwistedConnector
  • GUI now uses asynchronous mode, but synchronous version may still be built as wsa4000gui-blocking
  • GUI moved from examples to inside the package at pyrf.gui and built from the same
  • add Twisted version of example
  • documentation: installation instructions, requirements, py2exe instructions, user manual and many other changes
  • fix support for reading WSA4000 very low frequency range
  • pyrf.util.read_data_and_reflevel() was renamed to read_data_and_context()
  • pyrf.util.socketread() was moved to pyrf.connectors.blocking.socketread()
  • added requirements.txt for building dependencies from source

PyRF 0.2.5


  • fix for compute_fft calculations

PyRF 0.2.4


  • fix for missing devices file in

PyRF 0.2.3


  • add planned features to docs

PyRF 0.2.2


  • rename package from python-thinkrf to PyRF

python-thinkrf 0.2.1


  • update for WSA4000 firmware 2.5.3 decimation change

python-thinkrf 0.2.0


  • GUI: add BPF toggle, Antenna switching, –reset option, “Open Device” dialog, IF Gain control, Span control, RBW control, update freq on finished editing
  • create basic documentation and reference and improve docstrings
  • bug fixes for GUI, py2exe
  • GUI perfomance improvements

python-thinkrf 0.1.0


  • initial release