Thursday, February 17, 2022

Command line WSPR receive with weakmon

Work to reduce noise here at Drummond has been going well and,  yesterday during a voice contact with WSPR reception leader, Phil VK7JJ, he alerted me to the fact that I was on top of the leaderboard by distance. By a fair margin too.

My iOS app, WSPR Watch, displays WSPR spots pulled from WSPRnet.org and features a very simple transmit capability. People often ask if I could make it receive WSPR as well.

The obvious approach would be to port the decoding code from wsjtx but that source base is pretty daunting and includes several languages including Fortran. 

I went looking for other implementations and stumbled across rtmrtmrtmrtm's weakmon which is an almost pure python implementation (there's a few bits of c). The project hasn't been updated for some time and I ran in to a few issues running under python 3 on Ubuntu linux.

Weakmon directly reads audio from an input (including things like the IC-7300 I'm using) and can use serial CAT control to hop bands so it's very functional.

I found the most recent fork by kholia and forked that to create my version here.

My focus is on WSPR and running under python3. Other modes may not be working.

Changes I've made

  • Updated the README.md to explain what my fork is about
  • Running under Python 3.9.7 I struck a number of exceptions during decode all complaining about things that should be integers but instead were floats. I've fixed these as I've seen them but there may be more. (All in wspr.py)
  • Phil, VK7JJ, pointed out that transmit maidenhead locators were incorrect. I've included a fix by Ross, EX0AA.
Since moving out of the city and receiving WSPR I've had some wonderful emails from people astonished that I was able to pick up their 200mW beacons from 16,000km away. They ask what magic I'm using - the answer is a quiet location and hunting down every bit of noise.

No comments: