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.
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
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.
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.
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 orders to be placed.
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) or pin 10 for an Opi Zero 2, 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.
REMOTE TRANSMISSION CONTROL
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.
QUALITY OF THE SIGNAL TRANSMITTED
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
This transmitter is part of a complete remote controllable transceiver as presented in these posts:
- Remote SDR – Purchase
- Remote SDR – Setup
- HackRF – RTL-SDR – GNURADIO Setup
- Remote SDR – Man Machine Interface
- Remote SDR – Signal Processing
- Remote SDR
- Web Client to GNU Radio
- GNU Radio to Web client
- Remote SSB Transmitter
- Remote SSB Receiver
- GPIO on Orange PI One Plus H6
- TCXO installation on HackRF
- Q0-100 Transceiver with 2 SDR
Note that the source code and image for an Orange Pi One Plus are available on Github: https://github.com/F1ATB/Remote-SDR