Skip to content

Latest commit

 

History

History
67 lines (45 loc) · 2.43 KB

readme.md

File metadata and controls

67 lines (45 loc) · 2.43 KB

HackRF Node Stream Spectrum Painter

Folks were playing around with Hellschreiber encoding in the #hackrf channel on Freenode last week using hackrf_transfer

HackRF's tx/rx'ing images in waterfall plots using http://t.co/Lyijkr63QP http://t.co/JwLsO29dqC #SDR #HackRF pic.twitter.com/aAKk4eLBgV

— ☞ Gareth (@gyaresu) August 21, 2015
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

Which then made me remember a tweet from @maxogden playing around with a hackrf node module at the CCC 2015 camp last week.

And using a hackrf via node is something I've wanted since before it was even a thing.

Spectrum Painter

Use Spectrum Painter to create an IQ stream:
python spectrum_painter/img2iqstream.py examples/gareth.png --samplerate 8000000 --format hackrf > gareth.raw
Then test with hackrf_transfer:
hackrf_transfer -f 915000000 -s 3700000 -t gareth.raw -x 20 -a 1
Show the transmission on a second machine with gqrx:

GQRX is a multi-platform software reciever with waterfall plot.

You might need to tweak some of the sample rate / fft settings in both hackrf_transfer & gqrx to get the correct aspect ratio but it's not difficult.

FFT: 8192
Rate: 50fps
Filter Width: Normal
Filter Shape: Normal
Mode: Narrow/FM
AGC: Fast

HackRF for Node

So I wrote something straight from my brain using hackrf-stream...
var devices = require('hackrf-stream')
var fs = require('fs')

var radio = devices(0).open(0)

radio.setFrequency(9.15e8)

radio.setSampleRate(3.7e6)

var tx = radio.createWriteStream()

fs.readFile('./gareth.raw', function (err, data) {
  if (err) {
    throw err
  }
  tx.write(data)
})
... and it worked.

First test I managed to capture the very first code test. While in utter shock it actually worked!