VHF and UHF NBFM Transceiver

RTL-SDR is a low-cost receiver solution, covering VHF / UHF and using SDR (software radio) technology. SA818 is also a low-cost NBFM transceiver solution in VHF and UHF. Why not combine the 2 to create a transmitter / receiver similar to an SDR managed by a nanocomputer or SBC (Single Board Computer). Viewing and listening is done remotely via a web browser on PC, tablet or smartphone using the “Remote SDR” application.

SA818 / RTL-SDR NBFM transceiver


  • Hardware: RTL-SDR (example: NESDR SMArt from Nooelec)
  • Frequency: 30 MHz to 1.7 GHz
  • Spectral band processed: 2 MHz
  • Audio: 1 channel
  • Demodulation: NBFM, WBFM, AM and SSB
  • Hardware: SA818 from G-NiceRF (Aliexpress)
  • Frequency: VHF amateur band of 2 m and UHF band of 70 cm
  • Power: 1W
  • Audio: 1 channel
  • Modulation: NBFM

Hardware: Orange Pi Zero 2
Software: Remote SDR (version v3 minimum)
Connection: wired Ethernet or WIFI
Display and Audio: WEB page on PC, tablet or smartphone


Reception diagram

The antenna signal passes through a pin diode switching, to reach the RTL-SDR receiver. Different models exist on the market, that of Nooelec is more accurate on the quartz side, with a TCXO allowing to have a good precision and stability in frequency. It remains a simple SDR encoding the signals on 8 bits, which limits the dynamics of the processed signals. But it is sufficient for a simple transceiver. The output is done by the USB directly connected to the Orange Pi Zero 2 which takes care of the signal processing and allows to digitize a band 2 MHz wide, which is perfect for covering the entire 2 m band with one eye and monitor the various OMs or relays. In addition, WBFM and AM detections allow listening to music or aviation channels.

Transmission diagram

For this project, only the transmitting part of two SA818 modules from G-NiceRF is used. The SA818-V to cover VHFs and the SA818-U to cover UHFs. For less than 20 €, you can buy a minimum of 2 from Aliexpress.

The SA818s are connected to the Orange Pi Zero 2 which provides them with the desired working frequency via a serial bus. The ‘Line-Out’ analog output of the Orange Pi Zero is connected to the microphone input of the SA818. The antenna output of each SA818 is connected to the pin diode antenna switching relay to select the transmit module.


In a previous article, a simple configuration with a single transmitter in VHF or UHF was discussed. Here the transmission channel is doubled to handle VHF and UHF. The use of 2 SA818 modules requires the switching of some signals by diodes, because they cannot simply be put in parallel when one is working and the other is on standby.

TX-RX et traitements
The receiver

The RTL-SDR key receives the signals from the antenna, digitizes them in the chosen band and passes the samples to the processing processor, the Orange Pi Zero 2. It is a Chinese-made processor, running on Linux / Armbian and similar to the well-known Raspberry PI, but for a lower QSJ. The key is plugged into the USB port of the Orange Pi Zero-2. The 30 MHz to 1.7 GHz coverage allows listening to many broadcasts using the Remote SDR software. The audio signal at the demodulation output and the spectrum of the entire listening band are sent to the web browser (Chrome or Edge) for display and control.

The transmitters

The audio signal to drive the microphone inputs of the transmitters is available on the Line-Out output of the Orange Pi zero. 640 kΩ resistors are used to adjust the input level. The transmission frequency is provided by a UART5_TX and UART5_RX serial link. A diode circuit makes it possible to exchange information with the active SA818 module and to isolate itself from the inactive one. It is not possible to change the frequency during the transmission phase. It is the Orange Pi, with the outputs on pins 16 and 18, which activates and deactivates the SA818s using their ‘Power Down’ input. The HF output is on pin 12 of SA818.


The command to switch to transmission is not done by a simple change of state of an output of the GPIO of the Orange Pi for security reasons. In the event of a processor crash, the state of the output is not known and the transmitter risks being blocked in transmission.

The web client sends an audio signal from the microphone sampled at 10 kHz and encoded in 2 bytes. These 2 * 10,000 samples, per second, are sent in packets of 512. This makes about 40 packets per second sent only in the transmission phase. Each time a package arrives, pin 26 changes state. This will generate us a square wave of 20Hz or a period of 50ms. This signal attacks a monostable (CD4538) which will be active as long as audio samples arrive from the browser. It attacks the PTT entry of SA818. In the event of stop or crash of the processor, the monostable falls again and the emission stops.


An Orange Pi Zero 2 is responsible for processing the signal on reception and transmission. It is a 64-bit 4-core processor with analog audio inputs / outputs and an Ethernet connection by cable or Wifi. It runs the Remote SDR application (minimum version V3), common to other SDRs. A web server provides the viewing page, audio output to headphones or loudspeakers and microphone input to a PC, tablet or smartphone.

The reception of I and Q data from the RTL-SDR sampled at 2.4 MHz is done through the USB port of the Orange Pi.

GPIO / Pins / Functions of the Orange Pi Zero 2

To isolate the system from the electrical noise, generated by the Orange Pi, remember to decouple the power supply with capacitors of more than 100 μF and capacitors of 10 nF to absorb the HF and voltage peaks. Bad decoupling is found in background noise on the audio of the transmitter.

If the Orange Pi Zero 2 overheats, a small fan powered by 5V starts up if the temperature exceeds 65 ° C. GPIO pin 7 goes to 1 and attacks a 2n2222 serving as a switch.

SA818 Pinout

The 2 models, the VHF or the UHF have the same pinout.

Pins du SA818

The SA818 tends to heat up, especially if supplied with 5V. It accepts lower voltages as proposed here with a 1n4007 diode which lowers the voltage (VDC) around 4.5v. On the golden part of the SA818, near the antenna, we can add a heat sink.

HF filtering and switching

The SA818s directly output a signal at the desired frequency, around 1w. A spectral analysis shows some residuals of harmonics 2 and 3. In order to have a cleaner signal, each module is followed by a low pass filter with 2 inductors and 3 adjustable capacitors.

  • 144 MHz
    • Adjustable capacitors: 30pF
    • Inductances : 3 turns on diameter 6 mm in electrician’s copper wire 1.3mm in diameter
  • 432 MHz
    • Adjustable capacitors: 10pF
    • Inductances : 1 turn on diameter 6 mm in electrician’s copper wire 1.3mm in diameter
Filtrage et commutation HF

Three pin diodes are used to connect the antenna to the receiver or to one of the two transmitters. PNP switching transistors (BC327 or other), establish the logic to send the current to the pin diode which must let the passage of the HF. The maximum current is set by the resistor of 120 Ω which passes through LED diodes which make it possible to check the correct operation in RX, TX VHF or TX UHF. Ferrite chokes, type ‘VK200’, make it possible to separate the direct current and the HF. The switching orders come from the monostable CD4538 and the Orange Pi Zero 2. It is a negative logic, with 0v which opens the transistors.

NBFM Transceiver 144 MHz and 432 MHz

Remote SDR Application for SA818

The “Remote SDR” application processes various SDRs in transmission, such as HackRF or Adalm Pluto. In the case of the SA818, there are some specificities to adapt to its interfaces.

Programming transmission frequency

It is a serial link at 9600 baud, connected to the Uart5 port of the Orange Pi Zero 2. A python program receives the frequency order from the web client using websocket technology. This order is adapted to the format required for the SA818. The python application uses the pyserial-asyncio library installable by the commands:

apt install python3-pip
pip3 install pyserial-asyncio

The serial ports available on the card are given by:

dmesg | grep tty

found in / dev / ttys5 …

CTCSS code

The CTCSS code, useful for opening certain relays, is generated by the SA818 which receives, through the serial port, a channel number between 1 and 38 which corresponds to the frequency entered in the configuration table TX.js. This CTCSS code is not generated directly in the audio signal at the web client level as for other SDRs, because the SA818 cuts all signals below 300Hz.

Modulation by microphone audio signal

The microphone signal is digitized at the PC level by the web browser, then sent to the Orange Pi which outputs it in analog form on the 2 Line Out outputs. A python program built with the Gnu Radio Companion application performs the digital to analog conversion. The analog output level is set by the system audio mixer. Its level is defined each time the application is launched in the asound.state file in the PY folder. If you want to modify the modulation level, you must open the audio mixer in a terminal window with:


Use the arrows to adjust the ‘Line Out’ output level to adjust the modulation rate in NBFM. Once the correct setting has been found, saved it in the asound.state file with the command:

alsactl --file /var/www/html/PY/asound.state store

If you want to test the audio output with a wav file:

aplay -D hw:0,0 test.wav

Remote SDR

Remote SDR, installs on the Orange Pi Zero 2. The application includes signal processing and the web server that provides the page to the transceiver control web browser. The easiest installation is to download on Github, the Remote SDR image (at least version 3) for Orange Pi Zero 2 which includes the Armbian Bullseye OS and all the necessary libraries.

Remote SDR

Please note that the ability to drive an SA818 is only available for Orange Pi Zero 2. Not to be confused with the Orange Pi Zero which is a 32-bit processor. Raspberry PI 4s, used with other SDRs, which do not have an analog output directly, cannot interface with the SA818.

GPIO programming

To activate the GPIO pin 16 and 18 outputs, you must enter parameters in the configurationTX.js file of Remote SDR.

TX_GPIO.push([150000001,500000000,79,0,true,true]); //VHF Off
TX_GPIO.push([0,430000000,78,0,true,true]);         //UHF Off 
TX_GPIO.push([0,150000000,79,1,true,true]);         //VHF On 
TX_GPIO.push([430000001,500000000,78,1,true,true]); //UHF On

Pin 16 corresponds to GPIO 79, pin 18 to GPIO 78 for an Orange Pi Zero 2.

TX amplifier

The output of the SA818 provides approximately 1W of signal. If you want more power, there are amplifiers on the market. Do not forget a band pass filtering to get rid of any parasitic signal that could be at the output of the SA818.

Post on the Orange Pi Zéro 2

F1ATB André

Ham Radio - Home automation - Photovoltaic

You may also like...

1 Response

  1. There is an error in the schematic diagram. To get the monostable CD4538 to work correct, the C14 minus pin should be connected to 4538 Pin 1 and not to ground. I have not tried, perhaps it workes with ground connection too.. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *