The primary motivator for providing support for the RX-888 MK II in Spectre is its capability to record wideband spectrograms from 0 to 64 MHz, useful in particular for solar radio astronomy. At this extreme sample rate, the DSP is compute-intensive. We want to ensure that Spectre is performant enough to carry this out on low-cost devices like a Raspberry Pi 5.
The ExtIO_sddc driver we use to interface with the RX-888 MK II performs an internal software conversion from raw 16-bit real ADC samples to complex I/Q before delivering data to the caller. I have a gut feeling this adds unnecessary overhead at runtime. We want to measurably confirm this, then add SOAPY_SDR_S16 as an additional stream format to the SoapySDDC module, bypassing the internal conversion and delivering raw real samples directly to the caller - following a similar approach taken by cozycactus/SoapyRX888. The existing behaviour using the stream format SOAPY_SDR_CF32 should be preserved.
Then, we can modify the existing fixed_center_frequency mode for the RX-888 MK II in Spectre to make the stream format configurable. The current event handler at fixed center frequencies only supports complex valued DFTs, so we should extend this to accommodate real-valued input and take advantage of conjugate symmetries. Reading the FFTW manual, we can achieve a factor of two improvement in both speed and memory usage in that case, we'd expect the same functionality to be exposed through pyFFTW.
The resulting spectrograms produced by the RX-888 MK II operating in the mode fixed_center_frequency should be identical regardless of the stream format used.
Note: It may be more suitable to create a new mode and event handler.
The primary motivator for providing support for the RX-888 MK II in Spectre is its capability to record wideband spectrograms from 0 to 64 MHz, useful in particular for solar radio astronomy. At this extreme sample rate, the DSP is compute-intensive. We want to ensure that Spectre is performant enough to carry this out on low-cost devices like a Raspberry Pi 5.
The ExtIO_sddc driver we use to interface with the RX-888 MK II performs an internal software conversion from raw 16-bit real ADC samples to complex I/Q before delivering data to the caller. I have a gut feeling this adds unnecessary overhead at runtime. We want to measurably confirm this, then add
SOAPY_SDR_S16as an additional stream format to the SoapySDDC module, bypassing the internal conversion and delivering raw real samples directly to the caller - following a similar approach taken by cozycactus/SoapyRX888. The existing behaviour using the stream formatSOAPY_SDR_CF32should be preserved.Then, we can modify the existing
fixed_center_frequencymode for the RX-888 MK II in Spectre to make the stream format configurable. The current event handler at fixed center frequencies only supports complex valued DFTs, so we should extend this to accommodate real-valued input and take advantage of conjugate symmetries. Reading the FFTW manual, we can achieve a factor of two improvement in both speed and memory usage in that case, we'd expect the same functionality to be exposed through pyFFTW.The resulting spectrograms produced by the RX-888 MK II operating in the mode
fixed_center_frequencyshould be identical regardless of the stream format used.