KiwiSDR: BeagleBone web-accessible shortwave receiver and software-defined GPS
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
arch/sitara make extensions work with clang compiler May 1, 2018
e_cpu all GPS channels support all satellite types Aug 6, 2018
extensions add filter output graph with threshold indicator Sep 20, 2018
gps update Galileo sat list Aug 22, 2018
init try again Aug 4, 2018
net fix Google timezone lookups Sep 19, 2018
pkgs Christoph's web socket close fix Aug 29, 2018
platform/beaglebone_black add spi_set_buf_noduplex() Aug 6, 2018
pru switch compilers from gcc to clang Apr 30, 2018
rx empirical CIC filter compensation Sep 12, 2018
support add flags to print max/min streaming routines Sep 19, 2018
tools all GPS channels support all satellite types Aug 6, 2018
ui rename FW_* => CFG_* Jul 29, 2018
unix_env add "ip" and "mac" aliases Aug 7, 2018
verilog.Vivado.2014.4.ip update ip configuration for Vivado 2017.4 Apr 5, 2018
verilog.Vivado.2017.4.ip first cut at RX8WF2 mode: more receiver channels Jul 30, 2018
verilog all GPS channels support all satellite types Aug 6, 2018
web add filter output graph with threshold indicator Sep 20, 2018
CHANGE_LOG v1.230: CW decoder graph and timezone lookup fix Sep 20, 2018
KiwiSDR.bit all GPS channels support all satellite types Aug 6, 2018
KiwiSDR.rx4.wf4.bit all GPS channels support all satellite types Aug 6, 2018
KiwiSDR.rx8.wf2.bit all GPS channels support all satellite types Aug 6, 2018
Makefile v1.230: CW decoder graph and timezone lookup fix Sep 20, 2018 updates to readme file May 27, 2018
_COPYRIGHT start of STANAG 4285 decoder extension Aug 10, 2016
_LICENSE hoist contents of code subdirectory up one level Apr 19, 2016
config.h increase number of allowed extensions Aug 29, 2018
d "d" debug run alias (no gps, no leds) May 22, 2018
g fix symlinks May 13, 2017
k "d" debug run alias (no gps, no leds) May 22, 2018
kiwi fix symlinks May 13, 2017
kiwi.config empirical CIC filter compensation Sep 12, 2018
kiwi.h make RX_CHANS, WF_CHANS variable Jul 28, 2018
main.cpp add admin page no waterfall/spectrum option Aug 29, 2018
n fix symlinks May 13, 2017
ng fix symlinks May 13, 2017
types.h add funcPI_t typedef Aug 19, 2018
up typo Feb 22, 2018
valgrind.h disable valgrind May 12, 2018

[updated 28 May 2018]


Click image for full size.



Software-defined Radio (SDR) and GPS for the BeagleBone Black

An add-on board ("cape") that turns your Beagle into a web-accessible shortwave receiver.

Note: the KiwiSDR PCB design has moved to a separate repository called KiwiSDR_PCB.


KiwiSDR had a successful Kickstarter.



This SDR is a bit different. It has a web interface that can be used by up to four separate listeners. Each one listening and tuning an independent frequency simultaneously. See the screenshots below.


  • SDR covering the 10 kHz to 30 MHz (VLF-HF) spectrum.
  • Web interface based on OpenWebRX from András Retzler, HA7ILM.
  • Integrated software-defined GPS receiver from Andrew Holme's Homemade GPS Receiver.
  • LTC 14-bit 65 MHz ADC.
  • Xilinx Artix-7 A35 FPGA.
  • Skyworks SE4150L GPS front-end.


  • 100% Open Source / Open Hardware.
  • Browser-based interface allowing multiple simultaneous user web connections (currently 4).
  • Each connection tunes an independent receiver channel over the entire spectrum.
  • Waterfall tunes independently of audio and includes zooming and panning.
  • Multi-channel, parallel DDC design using bit-width optimized CIC filters.
  • Good performance at VLF/LF since we personally spend time monitoring those frequencies.
  • Automatic frequency calibration via received GPS timing.
  • Easy hardware and software setup. Browser-based configuration interface.


Give the live receivers a try at the links above. You'll need a recent version of a modern web browser that supports HTML5. The web interface works, with some problems, on mobile devices. But there is no mobile version of the interface yet.

The files of a KiCAD PCB layout of the cape are available. This PCB has been fabricated in production quantities and shipped to thousands of customers worldwide. Please email us any comments you have after reviewing the design document above. The active antenna and injector PCBs have been fabricated and are undergoing development.


We wanted to design an SDR that provides certain features, at a low price point, that we felt weren't covered by current devices. The SDR must be web-accessible and simple to setup and use. We also wanted to provide a self-contained platform for experimentation with SDR and GPS techniques.

Most importantly, We'd really like to see a significant number of web-enabled, wide-band SDRs deployed in diverse locations world-wide because that makes possible some really interesting applications and experiments.


Users can purchase just the KiwiSDR board or a complete "kit" consisting of the board, BeagleBone Green (software pre-installed), enclosure (assembly required), and GPS antenna (see here). The software will try to automatically open up an incoming port through whatever Internet firewall/router may exist on the local network, but the user may have to perform this step manually. An antenna solution must be provided. An adequate power supply to the Beagle (e.g. 5V @ 2A) will also be required.

Four channels of audio and waterfall streamed over the Internet 24/7 requires about 30 GB per month. This is a common cap for many residential broadband plans. An automatic dynamic-DNS system is already part of the software so a web link to the SDR is immediately available with no configuration. Of course the system can be configured to only allow connections from the local network and ignore Internet connection requests.

Web interface screenshots

Click images for full size.

View of entire 0-30 MHz range:

Moderate zoom of medium-wave broadcast band with spectrum display on top enabled:

Over-the-horizon-radar (OTHR) from Cyprus showing short-term ionospheric fluctuations:

VLF/LF reception in New Zealand

kHz Station Location Signal
12.88 Alpha Khabarovsk & Novosibirsk Russia Navigation system
17.0 VTX2 India MSK comms
19.8 NWC Australia MSK comms
21.4 NPM Hawaii MSK comms
22.2 NDT/JJI Japan MSK comms
24.1 (UNID) Korea, per David L Wilson FSK comms
40.0 JJY Japan Time signal
45.9 NSY Italy MSK comms
54.0 NDI Japan MSK comms
60.0 JJY/WWVB Japan, USA Time signals
68.5 BPC China Time signal

Many others heard during different times and conditions.