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
Practical Experiments
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.
Development Notes (Updated 2022/08/06)
Windows
Both the modem and its gui can be easily compiled using Visual Studio 2019. It seems that the original was developed in Visual Studio 2015 so when you try to compile it in VS 2019 you need to do the following changes in the hsmodem project properties:
You should now be able to clean and rebuild both the modem project and the gui project.
Current Issues (Updated 2022/10/24)
(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. The forked work in progress code is available here.
Update (2022/08/06): HS Modem has been running for a week without any crashes. It doesn’t close the fd properly though so the beacon html thinks its still connected. As an added change the beaconhtml can maybe also attempt to reconnect if it hasn’t received any data for a while.
Update (2022/10/24): A pull request for the changes have been made against the Amsat-DL official repo of the HSModem. I’ve already spoken to the development team and they are happy to merge it into the main repo.
(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/10/24
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:
2022/10/24: I have had good success replacing the usb-ethernet adapter with a raspberry pi instead.
2022/08/06: 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
Hi Tom,
I tried your HSModem build, and observe the same problem whereby the RX signal is picked up if there are too many VAC’s configured on my PC.
Below is a console output — sorry if this is a bit long. A funny error is -9998 for the playback device followed by a “started successfully”.
Good luck with the development and I am willing to give it some pilot testing!
73’s Erik
ON4PB
user home path:
init tune tones to samprate: 44100
libkmaudio_close
Distributor running
libkmaudio_init
PortAudio version: 0x00130600
Windows Devices found:
Portaudio ID: 0
Name: Line 11 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 1
Name: Line 1 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 2
Name: Line 8 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 3
Name: DAX RESERVED AUDIO RX 1 (FlexRadio Systems DAX Audio)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 4
Name: Line 5 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 5
Name: Line 12 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 6
Name: DAX RESERVED AUDIO RX 4 (FlexRadio Systems DAX Audio)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 7
Name: DAX RESERVED AUDIO RX 3 (FlexRadio Systems DAX Audio)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 8
Name: Line 14 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 9
Name: Line 2 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 10
Name: White Speakers (4- USB Audio Device)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 11
Name: DAX RESERVED MIC AUDIO (FlexRadio Systems DAX MIC Audio)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 12
Name: Line 4 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 13
Name: Line 10 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 14
Name: DAX RESERVED AUDIO RX 2 (FlexRadio Systems DAX Audio)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 15
Name: Line 13 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 16
Name: DAX Audio TX (FlexRadio Systems DAX TX)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 17
Name: Line 16 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 18
Name: Headset Earphone (EPOS BTD 800)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 19
Name: Line 7 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 20
Name: Line 3 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 21
Name: Line 6 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 22
Name: Line 9 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 23
Name: Line 15 (Virtual Audio Cable)
Cap/PB: 1
Channels: i:0 o:2
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 24
Name: DAX Audio RX 4 (FlexRadio Systems DAX Audio)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 25
Name: DAX RESERVED AUDIO TX (FlexRadio Systems DAX TX)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 26
Name: Line 15 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 27
Name: Line 14 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 28
Name: Line 3 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 29
Name: Line 1 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 30
Name: Line 13 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 31
Name: Line 7 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 32
Name: Line 4 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 33
Name: Line 11 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 34
Name: Line 9 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 35
Name: Line 8 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 36
Name: Line 5 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 37
Name: DAX Audio RX 1 (FlexRadio Systems DAX Audio)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 38
Name: DAX Audio RX 3 (FlexRadio Systems DAX Audio)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 39
Name: Headset Microphone (EPOS BTD 800)
Cap/PB: 0
Channels: i:1 o:0
SR 44100: 0
SR 48000: 0
is active: yes
Portaudio ID: 40
Name: Line 6 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 41
Name: Line 10 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 42
Name: Line 2 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 43
Name: DAX MIC Audio (FlexRadio Systems DAX MIC Audio)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 44
Name: Line 12 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 45
Name: Line 16 (Virtual Audio Cable)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
Portaudio ID: 46
Name: DAX Audio RX 2 (FlexRadio Systems DAX Audio)
Cap/PB: 0
Channels: i:2 o:0
SR 44100: 0
SR 48000: 1
is active: yes
starting websocket server
websocket server running
Websocket Server: listen to port:40134
port 40131 sucessfully bound
Waiting for incoming connections…
port 40132 sucessfully bound
port 40135 sucessfully bound
QO100modem initialised and running
set speedmode:9
restart modem requested
startModem. Speedmode:9
Close RTTY
close DSP
init DSP
init TX modulator
DSP created
init RX demodulator
init DSP FIN
Start request for CAP stream:Line 1 (Virtual Audio Cable)
Starting CAP stream:Line 1 (Virtual Audio Cable) [29]
err:0 device:29 PAdev:78 samprate: 48000.000000
Capture started sucessfully
Start request for PB stream:Line 2 (Virtual Audio Cable)
Starting PB stream:Line 2 (Virtual Audio Cable) [9]
Playback : err:-9998 device:9 PAdev:58 samprate: 48000.000000 chans:2
Playback started sucessfully
init tune tones to samprate: 48000
Hi Erik, thanks for the feedback. I’m looking into this and will revert. Apologies for late reply, I’ve been away for work. 73, T
Hi Tom,
a small typo in my previous topic : … is NOT picked up …
73’s Erik.
Hi Tom
Thank you for the rich information you ( among others) deliver at DATV WW-NET on Sundays, I have followed the transmissions for nearly a year now.
The HSmodem you pointed out is a great exercise and a good award when getting it up and running.
I do have a problem though on the unhooked computer, still have to dummy connect to a WiFi net to get the oscardata GUI to stay up on my monitor, else it closes down at start ( just commando window remains) and hence no reception.
Will compare the setup parameters with the internet connected laptop that always is alert but slow. SM6PQL/Timo
Hi Timo, glad you came right. I’ll see if I can reproduce this on my side. It makes sense though that it would require some kind of network adapter as it communicates over udp network interface. I’ll let you know what I find 🙂
Hi Tom
Now working QO-100 on raspberry pi4 at media beacon frequency with Gqrx sw and RTLSDR, the same situation with dummy connected to Wi-Fi net else Oscar modem will not start. I will have the option to connect to internet handle by me hence I have computers that can connect and those who “don’t want to” be a part.
Now I think it’s time to look at the transmission side working QO-100, I thought have a power output limitation due to regulations in this country.
Thank you for sharing your work, that’s an inspiration.
73
de
SM6PQL. /. Timo