QO-100 HSmodem GNU Radio Decoder

A few days ago Dani, EA4GPZ published sources for some experiments decoding the hsmodem / multimedia beacon on QO-100 (see [1] and [2]) which is currently running in an experimental mode on 10,489.995 MHz. He was using a UDP source as input which seemed to be very convenient. As I could not get the original software QO-100-Modem ([3]) by Kurt, DJ0ABR to run on my linux box (for some reason missing the audio devices of my IC-9700) I wanted to try this though not being an expert in GNU Radio and gr-satellites.

Setting up gqrx

First thing was to setup gqrx to send the UDP stream to the GNU Radio UDP source. That is rather simple. Just configure localhost as target and a port (e.g. 7355). Then just activate the UDP stream by hitting the button. My receiver has a filter width of 3.4kHz and is set to 10,489.992.900 (center of the beacon signal is 10,489.995 MHz). Make sure that features like NB is off and AGC is set to “Fast”.

gqrx receiving the QO-100 hsmodem beacon
gqrx receiving the QO-100 hsmodem beacon

Setting up the GNU Radio flowchart

After gqrx is running and receiving the beacon my main work started with adapting the flowchart by Dani, EA4GPZ to my needs. I had to adjust the sample rate to 48k as gqrx is streaming it this format. Additionally the output type is float and the conversation in the input chain has to be adjusted accordingly. Also the decimation factors had to be lowered to match the sample rate. After several tries (and errors) and with support from Dani, EA4GPZ I was able to get the decoder basically running. The PR with my flowchart has been merged an the GNU radio flowchart is now part of gr-satellites. See the examples/qo100-multimedia-beacon folder).

The modified GNU Radio flowchart for gqrx input
The modified GNU Radio flowchart for gqrx input

The spectrum shoud show the ~ 3kHz wide signal. It has a small pilot tone at 100 Hz which can be used for fine tuning the signal. To achieve that I added a fixed signal source as third input to the QT GUI Frequency Sink with green color. The Tune frequency parameter below can be used to fine tune. If that worked you should see the constellations in the upper right window and some debug output saying that it decoded some stuff.

The GNU Radio decoder running
The GNU Radio decoder running

The decoded data (of bulletins) and the status webpage qo100info.html are sent out in addition to the raw data to display the spectrum of NB and WB tpx. After some time you should find some files in /tmp:

-rw-rw-r--  1 df2et  df2et    593 Jun 13 09:30  TC100QO.blt.zip
-rw-rw-r--  1 df2et  df2et    719 Jun 13 09:30  TC100QO.blt
-rw-rw-r--  1 df2et  df2et  17795 Jun 13 10:12  ANS-142.blt
-rw-rw-r--  1 df2et  df2et  14832 Jun 13 10:21  qo100info.html.zip
-rw-rw-r--  1 df2et  df2et  36321 Jun 13 10:21  qo100info.html
-rw-rw-r--  1 df2et  df2et    646 Jun 13 10:24 'AMSAT-UK Colloquium 2022.blt.zip'
-rw-rw-r--  1 df2et  df2et    784 Jun 13 10:24 'AMSAT-UK Colloquium 2022.blt'
-rw-rw-r--  1 df2et  df2et    762 Jun 13 10:28  QO100Meeting.blt.zip
-rw-rw-r--  1 df2et  df2et   1019 Jun 13 10:28  QO100Meeting.blt
-rw-rw-r--  1 df2et  df2et   7563 Jun 13 10:32  ANS-142.blt.zip

The .blt files contain content for the bulletins being shown on the dasboard. The qo100info.html can be openend in a browser to display the dashboard. It needs a websocket backend that reads the raw data off the GNU radio decoder.

QO-100 hsmodem Dashboard

After the decoder received and extracted the qo100info.html file you can open it in a Browser. This page fetches some raw data via websockets. This can be supplied using the python script qo100_websocket_server.py from examples/qo100-multimedia-beacon in gr-satellites repository. On my machine I had to remove python3-websockets from the repositories because that is a buggy version that does not work. Instead I installed it using pip3 on the command line. If the browser manages to connect to the websocket it should show the NB and WB waterfalls refreshing every second or so. Also CW skimmer messages should appear if there is activity. The DX cluster seems to be offline every now and then and the bulletins did not load in my case. Still some parts to debug here.

QO-100 dashboard receiving via hsmodem beacon
QO-100 dashboard receiving via hsmodem beacon

For the current state I created a Youtube video showing the activity (see [4]). Apparently my screen is relatively large (i.e. wide) to show all windows simultaneously. Sri ;-)


[1] https://destevez.net/2022/05/decoding-the-qo-100-multimedia-beacon-with-gnu-radio/
[2] https://destevez.net/2022/06/decoding-the-qo-100-multimedia-beacon-with-gnu-radio-part-ii/
[3] https://github.com/amsat-dl/QO-100-Modem
[4] https://www.youtube.com/watch?v=LBQewxL1kk4