Proof of concept: using ZMQ VRT instead of soapy

In the Dwingeloo telescope, we sometimes like to record raw, uncorrected IQ data for satellite passes, next to observing with SatNOGS. Also, it is sometimes useful to plug into raw IQ from another computer than the one with the USRP connected.
For this, we could use a custom Gnuradio ZeroMQ sink in the Satnogs flowgraphs. These streams have the disadvantage that they do not contain any metadata. I decided to use VRT over ZeroMQ, which we also use for other tools in the telescope. VRT is very much like a IQ stream that Gnuradio produces (and accepts), except that it has some metadata packets which send for example frequency, data rate and data type. Also, the variant of VRT that we use supports two polarizations.
To get this VRT into GnuRadio, we have a tool vrt_to_gnuradio which strips away the metadata (which arrives at gnuradio through SatNOGS mechanisms).
Other clients can now connect to the VRT stream on a given port of the satnogs-client container. For example just to record the raw 1Msps dual polarization data in a SigMF. We could also stream the second polarization to a different container running as another satnogs station.
All I had to do was install usrp_to_vrt and vrt_to_gnuradio in the satnogs-client docker, manage starting and stopping usrp_to_vrt with preobs and postobs scripts, and patching all flowgraphs to use a ZMQ sub instead of a soapy source.
Another use case of this VRT abstraction could be to use the VRT stream (which has no Doppler correction) for recording rffft data for TLE fitting.


These two observations were taken at the same time with one usrp (without tracking the satellite, so it’s not surprising there’s no signal): SatNOGS Network - Observation 8204522 (horizontal polarization) and SatNOGS Network - Observation 8204523 (vertical polarization). There’s still one issue with getting both containers to share one rigctl, this should be easy to solve. Next up is a test with a working satellite and tracking telescope.

1 Like

This proof of concept now fully works. Observations 8239309 and 8239310 were taken with a single SDR. Station 384 (horizontal polarization) starts usrp_to_vrt --usrp-channels 0,1 and vrt_to_gnuradio --channel 0 while station 2338 (vertical polarization) starts only vrt_to_gnuradio --channel 1.
These observations also show why it is useful to record in two polarizations: due to tumbling of the satellite, the signal sometimes disappears on one polarization while reappearing on the other.


That is a wonderful picture illustrating polarization fading!