Remote SSB Transmitter

QO-100 Transmitter

Remote SDR – Transmission module

Here is the presentation of a SSB transmitter based on SDR (Software Defined Radio) remotely controllable on your local network, by an internet browser (Chrome). It is the counterpart of the remote SSB receiver described in this post.

It is an interesting solution when the transmitting antenna must be installed far from your radio room. Remember that remote operation of an amateur radio station via QO-100 is only permitted if the station belongs to the operator himself and is operated at his own location. He must always have full control over the station and in particular be able to switch it off immediately if, for example, interference occurs.


For the hardware, the set mainly includes:

  • an SDR, the HackRF One, capable of transmitting
  • a nanocomputer like the Orange Pi PC2 H5 or the Orange PI One Plus with ARMBIAN

As part of an adaptation to emissions to the QO-100 / Es’hail-2 satellite, we have the configuration below. However, it can be used for other amateur bands provided that the filtering and amplification chain is adapted. For debuging , you can transmit at low level without the output amplifiers on 2M and listen to yourself with another transceiver.

QO-100 Transmitter

We add at the SDR output a 2.4 GHz band filter, 2 low level linear amplifiers (SPF5189Z) and an amplifier normally intended for WIFI (EP-AB003) which deliver around 3 to 4W.

The nano computer is a model from the Orange PI family. It looks like the Raspberry PI. I tested the proposed treatment with an Orange PI PC2 H5 and an Orange PI One Plus H6. It is the latter that I use daily, it is found for less than € 30 in China (Ebay or Aliexpress). These 2 processors are 4 64-bit cores. They are loaded at 50% with the transmission chain proposed below. These are the same ones I use on the remote SSB receiver.


For the software part we have:

  • signal processing with GNU-Radio in python2
  • a simple web server in python3
  • 2 small modules in python3 interface between GNU-Radio and websockets for data exchange to the web browser of the PC or remote tablet
  • The software for viewing and generating audio “Remote SDR” written in HTML and Javascript to control the unit remotely from a web browser like Chrome.
Functional transmission chain


All of the processing is carried out using “GNU Radio” software. It has a graphical editor “Gnuradio-companion” which facilitates the task because it provides all the processing blocks to make a transmitter without writing a line of code. It’s almost a breeze …. The source file of the processing graph is available on Github F1ATB / Remote-SDR.

Functional blocks of the emission chain on Gnuradio-companion


The audio signal from the PC or tablet microphone is first filtered by Javascript processing at the web client to lower the sampling frequency in order to reduce the bit rate to be transmitted. The audio signals in SSB being less than 4 kHz, the sampling frequency chosen towards the Orange PI is 10 kHz which is sufficient to respect Shannon’s Theorem. Each sample is defined on 16 bits by 2 bytes transmitted by the websocket network protocol on port 8005. To access the GNU-RADIO processing module, a small module in python3 takes the samples on port 8005 and passes them in UDP to port 9005.


Microphone audio processing

The whole samples on 16 bits are converted into floats then a Hilbert transform allows the generation of a real signal and an imaginary signal in phase quadrature (phase shift of 90 °). We separate the real part and the imaginary part in order to rotate the phase of 180 ° or not of a channel by multiplying by -1 or 1. This allows to prepare the generation of a signal in LSB or USB. At the output, the 2 channels are recombined to find a complex signal.


The complex audio signal is then filtered to eliminate the unwanted band:

  • LSB: -2800 Hz à -200 Hz
  • USB: +200 Hz à +2800 Hz

To have a clean emission spectrum, it is mandatory to operate the HackRF One with an input sampling frequency of more than 2 MHz. Here I chose 2.4MHz as on the receiver described elsewhere.

Since the audio is sampled at 10kHz, we have an interpolator filter with a ratio of 240 to reach 2.4 MHz. The Osmocom Sink block allows you to pass the audio stream and parameters to SDR, HackRF One.

HF signal generator


To control SDR and signal processing in GNU Radio you must receive a certain number of parameters from the remote web client. The connection is made by a websocket on port 8004 of Orange PI. Again a small module in Python3 converts websocket messages to an XMLRPC interface on port 9004 which allows to pass them to GNU Radio. This module is identical to that used on the receiver with other port numbers.


It is imperative to set up a device to avoid unwanted transmissions in the event of a network crash, orange pi etc … which would not allow transmit orders to be placed.

Transmission security
2 Relays to switch On/Off the 5v and 12v for the amplifiers

The module in Python3 which receives audio samples in 512-byte packets causes the pin 26 of the GPIO to change state for an Opi One Plus (see detail here), pin 26 also for a Raspberry Pi 4and Opi Zero 2 (since Remote SDR V3), each time a frame is received. This creates a square alternating signal (0v, 3.3v) which is passed through a capacitor of 4.7uF to a diode rectifier and switching transistor device like a 2n2222. At each half-wave, the relays on the collectorare activated and maintained by the 47uF to 470uF capacitor until the next half-wave. These relays switch the 12 V and 5v supplies to the pre-amplifiers and WIFI amplifier output from the transmitter. Thus, if the audio frames are received, the amplifier supply is established. If the frames no longer arrive or the system is crashed, pin 26 in the high or low position, the 12v and 5v are switch off.

Wiring details

Be careful, a source of digital crashes that can do damage if we do not put this type of switches, it is the HF of the amplifiers placed next to the Orange / Raspberry PI and the SDR.


As already mentioned the piloting of the whole is done remotely in a web page (chrome) provided by the mini web server in python3 on the Orange Pi on the port 8000 (Remote SDR V1 only).


Remote SDR

This part in HTML and Javascript called “Remote SDR” will be the subject of another post.


Without having made any precise measurements on the signal quality, I could observe:

  • if a sampling frequency at the input of the SDR greater than 2 MHz is respected, the signal at the output is clean. Otherwise, there is aliasing. This can be checked using the receiver described here.
  • the waterfall observed on QO-100 is very clean. The edges on either side of the 2.6kHz band are sharp and burr-free.
  • quality of modulation reported are good
  • The TCXO of HackRF One provides a frequency that is very stable over time

Remote Transceiver

This transmitter is part of a complete remote controllable transceiver as presented in these posts:

Note that the source code and image for an Orange Pi One Plus are available on Github:

F1ATB André

Ham Radio - Home automation - Photovoltaic

You may also like...

2 Responses

  1. Dietrich Bardens says:

    Three wishes:
    – It doesn’t work with Linux. I cannot activate transmitting then – even not with win10 in a virtualbox.
    – I’d like to use two different SDR (like HackRF and RTL-SDR) simultaneously.
    – Please reduce the size of the .img-file. It works even with less than 7GB (like here without any loss of functionality. You become more flexible with the sd-cards and the copying of the image works much faster.
    Thank you very much for your efforts!
    73! DF6IK

    • F1ATB André says:

      It works perfectly with hack-RF as TX and RTL-SDR as RX on Orange PI. On Linux I didn’t test to see where the system blocks.
      For the image, I will see if I can use the procedure you propose to reduce the size of the next release.

      Regards, 73

      André F1ATB