Your own Numbers Station at Home with a Raspberry Pi and Pi-FM-RDS

Numbers Stations are mysterious radio broadcasts that typically consist of a voice speaking a seemingly random string of numbers. It is mostly accepted that these stations are a way for spy agencies to communicate to intelligence operators stationed overseas.

However, recently Simon Roses wrote in and wanted to share his project where he created his own numbers station at home. The idea is to use a Raspberry Pi and the Pi-FM-RDS software to transmit a simulated numbers station. If you didn't already know, a Raspberry Pi can be used as a somewhat useful RF transmitter by using software like Pi-FM-RDS which manipulates a GPIO pin connected to a piece of wire acting as an antenna.

In his write up, Simon notes that he uses a program called PiNumberStation which is a text to speech program that passes the generated voice to Pi-FM-RDS. Pi-FM-RDS then transmits the signal, allowing a nearby FM radio to pick up and play the audio.

If you wanted to try this as a prank or joke, please remember that transmitting in the FM bands over a certain power level may be illegal in some countries, and the Raspberry Pi TX capabilities are known to require filtering to prevent interference occurring on other frequencies. Transmitting incorrectly could have dire consequences, so please make sure you do your research first. 

Number Station with a Raspberry PI

GQRX Updated to 2.13: Several Bug Fixes and Performance Improvements

GQRX is one of the most popular open source software choices to use with various SDRs on Linux and MacOS. Recently it was updated to version 2.13, bringing in a few new features and several bug fixes and performance improvements. From the GQRX news file, the changes include the following.

2.13.1: Released October 17, 2020

FIXED: Crash when invalid sample rate is specified.
FIXED: Decrease minimum size of FFT Settings panel.
FIXED: Typos.
IMPROVED: More Airspy HF+ sample rates added.

2.13: Released October 16, 2020

NEW: Stereo option for UDP streaming.
NEW: Script to generate AppImage.
NEW: Allow scroll wheel direction to be inverted.
FIXED: FM de-emphasis causing audio to be 20 dB quieter than it should be.
FIXED: FM de-emphasis applied incorrectly in WFM stereo receiver.
FIXED: Update waterfall time resolution when FFT settings are changed.
FIXED: Update waterfall time resolution when window is resized.
FIXED: Restore waterfall time span between sessions.
FIXED: FFT buffer overlap calculation.
FIXED: Crash when launching without device connected.
FIXED: Crash when setting invalid RF gains.
FIXED: Audio panadapter / waterfall slider direction.
FIXED: Clear FFT averages when changing FFT size.
FIXED: Crash when source block doesn't support IQ balancing.
FIXED: Bookmark labels in FFT draw over each other.
IMPROVED: DSP and FFT performance.
IMPROVED: Panadapter & waterfall performance.
IMPROVED: Smooth panadapter & waterfall redrawing.
IMPROVED: Better default values for various settings.
IMPROVED: Audio waterfall colormap matches I/Q waterfall.
IMPROVED: Use all available display space for panadapter & waterfall.
IMPROVED: Updated RDS decoder.
IMPROVED: More Airspy HF+ sample rates added.

The GQRX GUI (Older Version)

SDR# Updates: RTL-SDR Enhanced Mode, AM Co-Channel Canceller for MW DX

Over the past few days SDR# has been updated again adding several new great features. The first is an "RTL-SDR Enhanced" front end driver, which is actually Vasili's front end driver that was released a few years ago. This front end enhances the capabilities of the RTL-SDR as it exposes features like decimation and individual gain control. We note that the current version appears to have a bug preventing enhanced mode from starting, but we expect that it will be fixed again soon. Vasili's File Player has also been added, and this allows for easy playback of RTL-SDR IQ files.

The second feature added recently is an AM Co-Channel Canceller which is could be quite a big feature for medium wave (MW)/broadcast AM DXers. When DXing MW a problem is that you'll often encounter is two stations that are on or almost on the same frequency. This is either due to neighbouring countries not agreeing on frequencies, long range DX antennas picking up further than the intended broadcast range, or from malicious jamming as with the Chinese Firedrake. With a standard radio or demodulation algorithm such a situation makes either both stations impossible to listen to, or only the strongest station will be heard. However, the new AM Co-Channel Canceller plugin in SDR# uses clever DSP algorithms to allow one of those channels to be effectively removed, allowing you to listen to the other station clearly.

Over on the SWLing blog Guy Atkins has written up a comprehensive review and tutorial of the Co-Channel canceller plugin. We've also seen a few examples up on YouTube already, and the video posted below shows user "SDR-radio" in Japan experiencing a South Korean station blocking out a weak local Japanese station. Enabling the plugin allows the weaker station to be heard.

SDR# (SDRSharp): AM Co-Channel Canceller plugin

Easy-SDR: Open Source Designs for SDR Accessories

Back in 2018 we posted about Igor Yatsevich's Easy-SDR project which consisted of open source designs for a Mini-Whip antenna and upconverter. Igor has now added several new open source designs to the project including a bias tee, LNA, LNA with filtering, attenuator and SPDT antenna switch. On his Reddit post he notes:

The most interesting thing I've added so far:

  1. Most of the devices are now prepared for installation in a metal case measuring 80 x 50 x 20 millimeters.
  2. Completely redesigned LNA design. Now, Bias Tee powered amplifiers are housed in a 50 x 25 x 25mm metal case and have N-type connectors.
  3. Added an amplifier based on the PGA-103 microcircuit.
  4. Added the ability to install filters in final amplifiers (a separate printed circuit board, depending on the filter used).
  5. Added a new device - SPDT antenna switch for receiving antennas.
  6. The UP converter has been redesigned. Added intermediate buffer stage between crystal generator and mixer.
  7. RF lines in all devices were recalculated to correspond to the characteristic wave impedance of 50 Ohm.
  8. Reduced size of PI attenuator PCB.

In this project, I focused on the simplicity of self-assembly devices, which you can make at home. In the repository, you can find detailed assembly instructions, a list of necessary components for assembly, and GERBER files.

SPDT Antenna Switch from the Open Source Easy-SDR Project

Dictator Alert Fundraising

In the past we've posted about the Dictator Alert project a few times, as it makes use of ADS-B data contributed to ADS-B Exchange via volunteers who typically run an RTL-SDR as part of their ADS-B reception hardware. The project aims to track the movements of Dictators around the world via their use of private jets that can be tracked via ADS-B logging.

Over on Reddit the leader of the project Emmanuel has posted asking for donations. If you think this is a worthy project, please consider donating.

I'm raising some funds for our www.dictatoralert.org project which tracks aircrafts used by dictatorships all over the world (using SDR!). You can see all of the tracking for free on the website and several twitter bots (LondonParisGenevaEuroAirport).

The hosting costs me around $80 per month, which probably isn't a lot, unless you're a freelance journalist. I also hope to raise a bit more to make the project grow further with investigations (like this one on surveillance planes in Somalia or another on rich Frenchmen who used their jet to avoid COVID restrictions on travel.

You can give one-off donations or sign up to the Patreon, then I'll set you up with email alerts for your "favorite" dictators, airports, or any plane you like.

Patreon: https://www.patreon.com/dictatoralert

One-off donations: https://dictatoralert.org/donation/

Please don't hesitate to ask questions and let me know what you think!

Dictator Alert. A Twitter bot reporting on dictator movements via ADS-B data. dictatoralert.org
Dictator Alert. A Twitter bot reporting on dictator movements via ADS-B data. dictatoralert.org

Notes on Observing Pulsars with an SDR from CCERA

A pulsar is a rotating neutron star that emits a beam of electromagnetic radiation. If this beam points towards the earth, it can then be observed with a large dish or directional antenna and a software defined radio. In the past we've posted a few times about Pulsars, and how the HawkRAO amateur radio telescope run by Steve Olney in Australia has observed Pulsar "Glitches" with his RTL-SDR based radio telescope.

Over in Canada, Marcus Leech has also set up a Pulsar radio telescope at the Canadian Centre for Experimental Radio Astronomy (CCERA). Marcus has been featured several times on this blog for his various amateur radio experiments involving SDRs like the RTL-SDR. In one of his latest memos Marcus documents his Pulsar observing capabilities at CCERA (pdf). His memo describes what Pulsars are and how observations are performed, explaining important concepts for observation like de-dispersion and epoch folding.

The rest of the memo shows the antenna dish and feed, the SDR hardware which is a USRP B210 SDR, the reference clock which is a laboratory 0.01PPB rubidium atomic clock and the GNU Radio software created called "stupid_simple_pulsar". The software DSP process is then explained in greater detail. If you're thinking about getting involved in more advanced amateur radio astronomy this document is a good starting point.

Dish Antenna + Feed used for receiving Pulsars

PySDR: A (Free) Guide to SDR and DSP using Python

Dr. Marc Lichtman has recently released his free online PySDR guide to Digital Signal Processing (DSP) explained with the help of software defined radio and Python code. Over the years we've seen numerous SDR & DSP courses come out, some requiring payment and some free. We note that this guide is completely free, and appears to be one of the better if not the best guide in terms of explaining DSP fundamental concepts in an easy to understand way. A lot of visualizations and animations are used which really help anyone new to the subject.

While the explanations are very good, please note that this is still a technical University level guide intended for Computer Science or Engineering students, so prerequisite knowledge is required. Dr. Marc recommends it for someone who is:

  1. Interested in using SDRs to do cool stuff
  2. Good with Python
  3. Relatively new to DSP, wireless communications, and SDR
  4. A visual learner, preferring animations over equations
  5. Better at understanding equations after learning the concepts
  6. Looking for concise explanations, not a 1000 page textbook

The SDR hardware used in the book examples is the PlutoSDR which is a fairly low cost SDR intended for use by students. However, the PlutoSDR isn't required as most of the code examples use generated data.

Converting an Old Cable Modem into an SDR

Over on his github blog, user stdw has uploaded a comprehensive post explaining how he investigated and turned an old Motorola MB7220 cable modem that was sitting in his closet into a fully functional software defined radio.

To begin the investigation stdw first opened the case and looked for a serial UART port. After finding one he connected the UART up to a Raspberry Pi and was almost immediately able to connect to the device's terminal. From the information displayed during the boot process, stdw was able to determine that the modem was running the eCos operating system on a Broadcom BCM3383 SoC. Unfortunately after receiving that information the UART connection is dropped, preventing any further terminal investigation.

To get around this issue, stdw decided to dump the flash memory via an SPI memory chip he saw on the board. Again using the Raspberry Pi he was able to connect via SPI and use the flashrom tool to read the memory. Next using a tool called bcm2-utils, stdw was able to parse and actually modify the configuration information stored in the flash memory. With this he was able to modify the configuration so that the serial connection did not drop after boot. 

With terminal access gained, stdw was now able to reverse engineer the firmware, and after a lot of searching eventually find a console command which would perform a bandpower measurement for a given frequency range. He found that IQ data for this scan was stored in a buffer which he could then stream out via a TCP connection. With the IQ data finally available on another PC he was then able to use Python libraries to compute an FFT and actually visualize the scanned spectrum. Some further investigation yielded actually demodulated FM audio, and the realization that the usable bandwidth is 7.5 MHz.

Unfortunately there were some limitations. There is only enough RAM to store less than a second of data at a time at max bandwidth and precision, which meant that a lot of data needed to be dropped in between captures. Further investigation yielded methods to reduce the sample rate down to 464 kHz which meant that only 12% of data was ever dropped - enough to stream a wideband FM radio signal.

If you wanted to try investigating the modem yourself, the Motorola MB7220 is available second hand on eBay for prices ranging between US$15 - US$40, and new on Amazon for $46.99. Although the usability of the modem for any real SDR applications may not be great, further investigation may yield better results. And if not, following along with the process stdw took looks to be a great reverse engineering learning experience. Other modems that use similar Broadcom chips may also be worth investigating.

The Motorola MB7220 connected to a Raspberry Pi for reverse engineering