Hey People,
This is an unashamed internet approval solicitation post. I must as my brain is melting.
I made a thing. It is not done yet, but I'm ~2000 lines of Python code deep in it and my determination is waning.
Some folks on the HP/Agilent/Keysight-Equipment groups.io list (or at least that's where I found them) reverse engineered the control interface and Flash memory format of old HP/Agilent VNA ECal modules. Normally there's either a separate rack mount controller, a closed source hard to find PC interface box or built in functionality in newer VNAs to control these modules.
Based on said prior work, I started writing an extensible Python library, that performs calibration, controlling the VNA and the ECal modules.
Cal math (currently one port 3-term overdetermined and full two port 12-term overdetermined) and touchstone file functions are from the Scikit-rf library.
The ECal modules are controlled over easily DIY hardware. I have examples and code for an Arduino and an FTDI thingy based version, but new ones can be added relatively easily. (I fancy a custom PCB for this, but maybe in the future.)
Currently the only supported VNA is the HP 8720C over GPIB as that's what I have, but it'd be relatively easy to add support for basically anything that is capable of transmitting sweep data and receiving error coefficient over a digital interface.
(The code might work without any modification or minimal touch up with 8xxx series analyzers.)
All of the lower level implementation is done and working. I however somewhat underestimated the complexity of high level functions.
It's mindbogglingly difficult to come up with a fair implementation to automatically split the frequency range between two ECal modules for example. I'm adding support for using pre-charaterized adapters and the possibility to perform adapter characterization on insertable port ECal modules.
During first use the software pulls the standard definition S-Parameters from the modules. In subsequent runs it can load these files automatically, thus saving some time. Moreover it'd be possible to re-characterize the ECal modules, by just measuring them on a well calibrated VNA (e.g. if you have access to one at work, or have a good mechanical cal kit) and use those files instead, without needing to mess with the Flash contents.
There is a callback mechanism for operator prompts. Currently I have implementations that either do it via a simple terminal on the PC or in case of the HP 8720C on the analyzer screen, with the soft buttons.
If you're interested check out the current WIP version here.:
https://github.com/OwlvilleWol/VnaCalWizardThere's a bit more detailed although still to be finished readme, with the hardware interface schematics, supported ECal list, etc.