The QO-100 High Speed Modem is a very exciting development from Amsat-DL and DJ0ABR. The modem itself allows for sending all kinds of different data including files, images and even experimental voice. The QO-100 Narrowband Transponder has a multimedia beacon currently running where you can receive and decode lots of interesting information using the High Speed Modem. The modem itself is currently still experimental and a work in progress, but its also all open source so we can help improving it and adding features. There has also been some great work done by EA4GPZ and DF2ET on decoding and retrieving the data from the beacon using GnuRadio and Gqrx.

I personally feel there is lots of exciting projects that can be done using the high speed modem and the beacon so this page is a document for various resources regarding the High Speed Modem as well as my own experiments and developments as well as some trouble shooting information. With everything being open source I invite all radio amateur active on the QO-100 to come and play and help improve the highspeed modem.
Official Resources
Articles/Projects/Experiments from others
- DF2ET – QO-100 HSmodem GNU Radio Decoder
- EA4GPZ – Decoding the QO-100 multimedia beacon with GNU Radio
Please send me any links/photos of projects you have done with either the High Speed Modem or the Experimental Multimedia Beacon.
Current Issues (Updated 2022/08/01)
(1) recvfrom error: 10040
This error sometimes occur and its due to the received buffer size. I have increased the buffer size and compiled a windows test version for testing. Seems to be better on my side. Please test it and let me know. This reception issue has caused another issue where sometimes it misses the “alive” ping from the browser over the web socket and then tries to close the connection.
Download a test version here. Replace your installed hsmodem.exe with the one from the archive.
(2) Handling of Websocket ‘alive’ connections
When the modem no longer receives the alive command from the web browser within a certain period then it sees it as an inactive connection and then removes the socket from the list of clients it maintains (remove_socket(int fd)), but it doesn’t actually close the file descriptor (most likely because its being called from another thread). The problem is that the file descriptor stays open but the modem is no longer keeping track of it. I’ve also had the rare occasion where it removes the socket via the alive timer, but then also attempts to remove and close the socket file descriptor due to a disconnect issue. The side effect is that the browser thinks its still connected, but the modem is no longer sending data. (A possible quick fix would be the change the qo100info.html file to reconnect if it hasn’t received data for a certain period). Most likely the timer needs to send a signal to the web socket thread to remove and close the socket properly. More investigation needed.
Functions involved:void remove_socket(int fd) - websocketserver.cpp
void void ws_alive() - websocketserver.cpp
void onclose(int fd) - ws_callbacks.cpp
Tips/Tricks for successful reception
Updated: 2022/08/01
This is information based on my own experiences. Your mileage might vary. Be sure to read all the information on the wiki regarding settings, etc.

Missed/Failed Blocks – My current setup consists of an Adalm Pluto connected to the network using a USB network adapter. I’m getting various random missed/failed blocks when receiving once in a while. It looks like this might be linked to the USB adapter I’m using so I have ordered the recommended UGREEN USB adapter for testing. I do seem to get better results when using SDR++ for receiving the narrowband over the network in comparison to SDR Console. I get no missed blocks when connecting directly via USB to the Adalm Pluto. More feedback once I receive the new USB adapter.
Let me know if you find issues, have fixes, or tips and tricks for using either the modem or playing with the highspeed multimedia beacon 🙂
73, ZR6TG