Below is a screen shot of the full application. On the left, top to bottom, are buttons to control the IP address to connect to, the sweep center and span, the vertical scale, and some useful processing features like an envelope history and automatic peak picking and assignment to markers. On the right, top to bottom, are buttons to control the scan resolution, tracking generator control and sweep/step rate, analog processing (IF amplifier, RF amplifier, and attenuation), and display memories. Only the IF gain is functional as the others require another board (to be completed). The memories have been expanded to four (the filter response scans have taught me the value of having multiple on-screen comparisons).
Below is a PNG export of a 108MHz signal. A C board aux output was used to generate a 36MHz square wave. 36MHz was chosen to avoid any of the harmonics surrounding any of the TCXO clocks at 20MHz and 25MHz. The 108MHz is the 3rd harmonic of the C aux. A 20dB attenuator is placed in-line between the C board and the B board input to bring all harmonic levels down enough so the amplifiers are never saturated. The scale is centered a bit off from 108MHz to clearly see the signal over the reticule. Unlike previous captures, this is indeed calibrated in dBm (finally). The signal was verified on a 7L12 at -39dBm (+/- 1dBm). The header lines contain all of the parameters in-use including a measured sweep rate, in this case almost 3 seconds. Ignore the secondary responses - more about them later.
The next export modifies the resolution rate to obtain a faster sweep. The original sweep at 8k FFT with a 63kHz measurement bandwidth is captured in the first memory (gold line). In this case a small FFT size has been used (512) resulting in a lower resolution bandwidth (2kHz rather than 122Hz) and a slightly higher noise floor but a much faster sweep rate of 342mS.
Finally, for scanning large bandwidths and when you aren't too worried about the details in the noise, the power can be integrated at every frequency step (i.e. all of the FFT bins summed to produce a single point estimate at the given frequency). This has the effect of raising the noise floor (its all integrated) and allowing a much smaller FFT size (and number of samples) to be used. This then translates into the sweep rate being roughly equivalent to the scanning rate of the synthesizer used as the LO. Don't take the scan rate of 121mS literally, once the rates drop below 200mS there is a lot of fluctuation on both the BBB side and the PC side as none of the processing is done on a real-time basis (so there's lots of fluctuations based on the processor scheduler and state of socket io buffers). Basically, its smooth enough but just above the eye's refresh rate detection to know it is not continuous.
Wider sweeps across 30Mhz and 50MHz can be similarly configured. Unfortunately, this setup is a single IF and has no image rejection filter (the images were verified to come out at the right spots and the same amplitude) so wide sweeps end up looking like a picket fence (there is a second harmonic present at a low level so when you add a response every 36MHz and an image of this every 21.4MHz you get lost in the forest...).
Once the calibration for the mixer, amplifier, and board are added wider scans can be taken at higher frequencies. The following is a sample of a 500Mhz sweep about a 1500MHz signal at -40dBm. The lowest resolution parameters have been used (MBW=450kHz, FFT=256) to yield a sweep period of about 2 seconds. Here the image is clearly visible 21.4MHz prior to the signal in the scan. You can also see the results of the RF level calibration in the waviness of the baseline.
I have not had time to fully investigate the spurious responses. It is a bit difficult to see where everything is coming from since the higher order harmonics get in with the mixer LO harmonics and wind up in the image band. I also haven't been able to convince myself if the non-uniform duty cycle sampling clock is coming into play at low levels with one or more of the harmonics on the input when the B board is co-mounted with the A board on a single BBB. Prior to doing any of this I want to complete an attenuator board and get back to the cavity filters to support a two stage conversion.