I just pushed a rough draft gr-juliaffi 
<https://github.com/JayKickliter/gr-juliaffi> to GitHub. It is not a Julia 
package, but a GNU Radio module (C++/Python) that calls your Julia code to 
do the actual signal processing.

If you're not familiar with GNU Radio, it is a software defined radio (SDR) 
framework. SDR is really cool. Traditional radio hardware is dedicated  to 
certain kind of signal (like a satellite modem or FM receiver). SDR lets 
you use generic hardware that does little more than digitize the raw radio 
waves and send them to a computer. From there, all the signal processing is 
performed in software. There are real world applications 
<http://www.fsf.org/blogs/community/free-software-in-space-gnu-radio-and-the-isee-3-spacecraft>
 
of SDR. I use it almost every day.

The motivation for this block came recently when I needed something GNU 
Radio didn't have yet. At my job, we're developing new 802.15.4 hardware. 
There is an 802.15.4 <https://github.com/bastibl/gr-ieee802-15-4.git> 
out-of-tree module for GNU Radio, but it's not complete and doesn't have 
the capability of de-spreading 
<http://en.wikipedia.org/wiki/Direct-sequence_spread_spectrum> 802.15.4 900 
MHz BPSK signals. I wrote code to de-spread the signal in Julia, and piped 
from/to GNU Radio using ZeroMQ. That works fine, but it's cumbersome. Why 
not just have GNU Radio call the Julia code directly?

If you do want to use the module, please let me know what issues you run 
into when building/using it. I spent two solid days just trying to get 
cmake to find and properly set up linking to libjulia. I'm using OS X, and 
@rpath was causing the biggest problem for me. It only built when I finally 
stopped trying to tell cmake where to find libjulia and switched to 
find_library. Also I had to do an actual `make install release` in the 
Julia repo for all the headers and libraries to be in predictable 
locations. That's because the FindJulia cmake  module I added calls julia 
on the command line to figure out where stuff is. The code still crashes if 
I try to run it with `jl_init(NULL) 
<https://github.com/JayKickliter/gr-juliaffi/blob/master/lib/juliablock_ff_impl.cc#L47>
'.

 There's still more c++ work to be done, and I don't know c++. I just 
infinite monkey it 'till it works. I just hope I or someone else can figure 
out how to make the c++ configure itself dynamically, so it isn't necessary 
to define blocks for every combo of input/output type. Most of the repo was 
automatically created with gr_modtool. This file 
<https://github.com/JayKickliter/gr-juliaffi/blob/master/lib/juliablock_ff_impl.cc>
 
is pretty much the whole project. It's definitely possible to change the 
number of inputs/outputs to block at runtime. Looking at the code, I think 
it may be possible to change the type as well.

I was hoping have this done with some good examples in time to give a 
JuliaCon talk. Maybe next year. I'll be there anyway, if anyone's 
interested I'll give an informal demo.

Reply via email to