Software Defined Radio Code Snippets

I've been doing a bunch of SDR-related coding lately, and I wanted a place to publish my little demo/proof-of-concept snippets. This is that place.


Some quick work on heuristics for finding channels of activity in a data stream, extracting just the (much smaller) bandwidth of interest, and then a trivial FM decoder. Most of the channel extraction work was cribbed from GNURadio's translating FIR filter, and the FM decoder was taken from their code as well.


The GNU Radio blocks have a lot of promise, but I also want to write my own code. Since IPython is one of my favorite ways to program lately, it seemed like a good idea to figure out how to work within it.


This is a really quick hack to try and get GRC flowgraphs to be natively loadable in HTML pages. You can see a quick demo of a javascript GRC renderer over here.


One thing that annoys me is having to look at GRC files inside of GRC itself. I use it on a cheap-ish linux laptop, which has not the greatest screen resolution. So, when it comes down to big flow graphs, I can't really see everything at once.

The results here are mostly proof-of-concept: the next natural step is to redo a lot of this work in javascript with D3. I've done a bit of D3 stuff before (I'm particularly proud of my astrolabe in javascript). But, for now, I'm out of hacking time for the day. But it seems pretty straightforward to do the same DOM work here, and use XMLHTTPRequests for actual XML, which is mind-boggling.


One of the first things I wanted to do with my SDR setup was to monitor all of the 900MHz ISM band at the same time. I finally learned enough to do that, and then spent a lot of time figuring out how to get the signals out. It turns out that it's kind of busy there.

In about just over 10 seconds of capture, an analysis finds a few thousand packets at various bitrates and bandwidths. There are probably more, but some of these are also probably noise, due to the way our packet identification works. ISM_900_Sniffing is the packet capture and extraction routine, while Packet Analysis contains the actual decode of some of those packets.


Unnamed repository; edit this file 'description' to name the repository.

This is an undertaker project. You can check out your own copy of it by doing a git clone of this URL (right-click and "Copy URL"). It contains everything needed to extend this project, including this webpage and all the scripts used to generate it.

Undertaker is a tool for managing the open source development/publishing/release process, which pulls your source code, documentation, blog posts, etc, all into a single static "gitball" for release. It can also generate static websites from locally-dynamic files, allowing you to have a project blog that looks dynamic but is actually statically published. This makes your content very friendly to archiving by tools like the wayback machine, and also to indexing by web crawlers. You can also publish all your content via trivial static webservers, including CDNs or just local files.

To republish this code as intended, please check out undertaker, at or )

Copyright © 2014-2015 Josh Myer
The author's homepage.