I've managed to spend more time looking at it and have made some progress, though have once again run into issues.

After much investigation I've created a processing flow that takes the raw samples and can extract valid weather packets -  but only from recorded files. When trying with live data it always returns invalid packets :-(

The flow is this

  • parse the samples into complex numbers
  • down mix these initial complex numbers using an appropriate frequency offset
  • pass the downmixed data through a FIR filter
  • use a frequency demodulator on the filtered data to get a float value
  • process the float value as being a 1 or a 0 based on positive/negative frequency

I'm using liquid-dsp for the heavy DSP lifting. I didn't find a Go module to interface so wrote one for the functionality I needed myself. I'm finding myself more and more at home with Go.

Generating a file with rtl_sdr and then parsing it works well and I end up with packets containing data and valid checksums.

Trying to open the SDR directly in the app and reading directly from it results in packets being seen, but the data is corrupt and the checksums are never correct. Hmm. Odd.

I'm going to do a bit more checking and write some additional tests to confirm the data coming from the device directly, but any suggestions or hints are most welcome! It's frustrating to be so close and yet so far...